diff options
37 files changed, 909 insertions, 254 deletions
diff --git a/README.arch b/README.arch new file mode 100644 index 000000000..92870d614 --- /dev/null +++ b/README.arch @@ -0,0 +1,12 @@ + +You can build apt from arch, but this needs the following additional +packages (in addtion to the usual build-depends): +xmlto perlsgml sgml2x sgmlspl docbook + +then run: + +$ debian/rules arch-build + +that will build packages in the "debian/arch-build" directory. It will +honor "DEB_BUILD_PROG_OPTS" as options that are passed to debuild (e.g. -S +may be usefull). diff --git a/README.progress-reporting b/README.progress-reporting index 73fbd8c08..b575e7879 100644 --- a/README.progress-reporting +++ b/README.progress-reporting @@ -5,7 +5,7 @@ If the apt options: "APT::Status-Fd" is set, apt will send status reports to that fd. The status information is seperated with a ':', there are the following status conditions: -status = {"pmstatus", "dlstatus", "conffile-prompt", "error" } +status = {"pmstatus", "dlstatus", "conffile-prompt", "error", "media-change" } The reason for using a fd instead of a OpProgress class is that many apt frontend fork a (vte) terminal for the actual installation. @@ -47,6 +47,13 @@ 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 -------- diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index b2f896627..dea68f3ee 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -142,20 +142,21 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, { Decompression = false; Erase = false; - + DestFile = _config->FindDir("Dir::State::lists") + "partial/"; DestFile += URItoFileName(URI); if(comprExt.empty()) { - // autoselect - if(FileExists("/usr/bin/bzip2")) - Desc.URI = URI + ".bz2"; - else - Desc.URI = URI + ".gz"; + // autoselect the compression method + if(FileExists("/usr/bin/bzip2")) + CompressionExtension = ".bz2"; + else + CompressionExtension = ".gz"; } else { - Desc.URI = URI + comprExt; + CompressionExtension = comprExt; } + Desc.URI = URI + CompressionExtension; Desc.Description = URIDesc; Desc.Owner = this; @@ -400,6 +401,13 @@ void pkgAcqMetaSig::Failed(string Message,pkgAcquire::MethodConfig *Cnf) string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI); unlink(Final.c_str()); + // if we get a timeout if fail + if(LookupTag(Message,"FailReason") == "Timeout" || + LookupTag(Message,"FailReason") == "TmpResolveFailure") { + Item::Failed(Message,Cnf); + return; + } + // queue a pkgAcqMetaIndex with no sigfile new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc, "", IndexTargets, MetaIndexParser); @@ -898,7 +906,8 @@ void pkgAcqArchive::Done(string Message,unsigned long Size,string Md5Hash, { Status = StatError; ErrorText = _("MD5Sum mismatch"); - Rename(DestFile,DestFile + ".FAILED"); + if(FileExists(DestFile)) + Rename(DestFile,DestFile + ".FAILED"); return; } } diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h index ea71153d5..90f80368b 100644 --- a/apt-pkg/acquire-item.h +++ b/apt-pkg/acquire-item.h @@ -92,7 +92,8 @@ class pkgAcqIndex : public pkgAcquire::Item pkgAcquire::ItemDesc Desc; string RealURI; string ExpectedMD5; - + string CompressionExtension; + public: // Specialized action members @@ -100,7 +101,7 @@ class pkgAcqIndex : public pkgAcquire::Item virtual void Done(string Message,unsigned long Size,string Md5Hash, pkgAcquire::MethodConfig *Cnf); virtual string Custom600Headers(); - virtual string DescURI() {return RealURI + ".gz";}; + virtual string DescURI() {return RealURI + CompressionExtension;}; pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesct, string ExpectedMD5, string compressExt=""); diff --git a/apt-pkg/acquire-method.cc b/apt-pkg/acquire-method.cc index 04c62eaaa..41b832f3b 100644 --- a/apt-pkg/acquire-method.cc +++ b/apt-pkg/acquire-method.cc @@ -277,7 +277,7 @@ bool pkgAcqMethod::MediaFail(string Required,string Drive) MyMessages.erase(MyMessages.begin()); } - return !StringToBool(LookupTag(Message,"Fail"),false); + return !StringToBool(LookupTag(Message,"Failed"),false); } Messages.push_back(Message); diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 5cd7d6f1e..d06024178 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -25,6 +25,7 @@ #include <apti18n.h> #include <iostream> +#include <sstream> #include <fstream> #include <sys/stat.h> @@ -367,6 +368,24 @@ bool pkgAcquire::Worker::Capabilities(string Message) /* */ 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; + write(status_fd, status.str().c_str(), status.str().size()); + } + if (Log == 0 || Log->MediaChange(LookupTag(Message,"Media"), LookupTag(Message,"Drive")) == false) { diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h index 174a7f58d..b95218061 100644 --- a/apt-pkg/algorithms.h +++ b/apt-pkg/algorithms.h @@ -118,7 +118,8 @@ class pkgProblemResolver // Try to resolve problems only by using keep bool ResolveByKeep(); - + + // Install all protected packages void InstallProtect(); pkgProblemResolver(pkgDepCache *Cache); diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 62d2695dd..c3a0d0a5a 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -222,7 +222,7 @@ class pkgCache::PrvIterator void operator ++(int) {if (Prv != Owner->ProvideP) Prv = Owner->ProvideP + (Type == PrvVer?Prv->NextPkgProv:Prv->NextProvides);}; inline void operator ++() {operator ++(0);}; - inline bool end() const {return Prv == Owner->ProvideP?true:false;}; + inline bool end() const {return Owner == 0 || Prv == Owner->ProvideP?true:false;}; // Comparison inline bool operator ==(const PrvIterator &B) const {return Prv == B.Prv;}; @@ -244,6 +244,8 @@ class pkgCache::PrvIterator inline PkgIterator OwnerPkg() {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[Prv->Version].ParentPkg);}; inline unsigned long Index() const {return Prv - Owner->ProvideP;}; + inline PrvIterator() : Prv(0), Type(PrvVer), Owner(0) {}; + inline PrvIterator(pkgCache &Owner,Provides *Trg,Version *) : Prv(Trg), Type(PrvVer), Owner(&Owner) { diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index ca74aa685..ce1beb39b 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -422,6 +422,9 @@ bool pkgCdrom::WriteSourceList(string Name,vector<string> &List,bool Source) { 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); @@ -564,7 +567,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log) string DFile = _config->FindFile("Dir::State::cdroms"); if (FileExists(DFile) == true) { - if (ReadConfigFile(Database,DFile) == false) + if (ReadConfigFile(Database,DFile) == false) return _error->Error("Unable to read the cdrom database %s", DFile.c_str()); } @@ -647,8 +650,11 @@ bool pkgCdrom::Add(pkgCdromStatus *log) log->Update(msg.str(), STEP_SCAN); } - if (List.size() == 0 && SourceList.size() == 0) + if (List.size() == 0 && SourceList.size() == 0) + { + UnmountCdrom(CDROM); return _error->Error("Unable to locate any package files, perhaps this is not a Debian Disc"); + } // Check if the CD is in the database string Name; @@ -684,7 +690,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log) Name.empty() == true) { if(!log) + { + UnmountCdrom(CDROM); return _error->Error("No disc name found and no way to ask for it"); + } while(true) { if(!log->AskCdromName(Name)) { @@ -757,7 +766,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log) { string::size_type Space = (*I).find(' '); if (Space == string::npos) + { + UnmountCdrom(CDROM); return _error->Error("Internal error"); + } if(log) { msg.str(""); @@ -771,7 +783,10 @@ bool pkgCdrom::Add(pkgCdromStatus *log) { string::size_type Space = (*I).find(' '); if (Space == string::npos) + { + UnmountCdrom(CDROM); return _error->Error("Internal error"); + } if(log) { msg.str(""); diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index 0b3a4f742..2d805ea6f 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -164,7 +164,12 @@ bool debSystem::Initialize(Configuration &Cnf) Cnf.CndSet("Dir::State::userstatus","status.user"); // Defunct Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status"); Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg"); - + + if (StatusFile) { + delete StatusFile; + StatusFile = 0; + } + return true; } /*}}}*/ diff --git a/apt-pkg/pkgrecords.cc b/apt-pkg/pkgrecords.cc index 9c2655d6a..1d71d3e2f 100644 --- a/apt-pkg/pkgrecords.cc +++ b/apt-pkg/pkgrecords.cc @@ -42,6 +42,9 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0) if (Files[I->ID] == 0) return; } + // We store that to make sure that the destructor won't segfault, + // even if the Cache object was destructed before this instance. + PackageFileCount = Cache.HeaderP->PackageFileCount; } /*}}}*/ // Records::~pkgRecords - Destructor /*{{{*/ @@ -49,7 +52,7 @@ pkgRecords::pkgRecords(pkgCache &Cache) : Cache(Cache), Files(0) /* */ pkgRecords::~pkgRecords() { - for (unsigned I = 0; I != Cache.HeaderP->PackageFileCount; I++) + for (unsigned I = 0; I != PackageFileCount; I++) delete Files[I]; delete [] Files; } diff --git a/apt-pkg/pkgrecords.h b/apt-pkg/pkgrecords.h index 08f004414..f31e83afe 100644 --- a/apt-pkg/pkgrecords.h +++ b/apt-pkg/pkgrecords.h @@ -33,6 +33,7 @@ class pkgRecords pkgCache &Cache; Parser **Files; + int PackageFileCount; public: diff --git a/apt-pkg/policy.h b/apt-pkg/policy.h index 15f204798..40ebd3f70 100644 --- a/apt-pkg/policy.h +++ b/apt-pkg/policy.h @@ -45,6 +45,8 @@ using std::vector; class pkgPolicy : public pkgDepCache::Policy { + protected: + struct Pin { pkgVersionMatch::MatchType Type; @@ -58,8 +60,6 @@ class pkgPolicy : public pkgDepCache::Policy string Pkg; }; - protected: - Pin *Pins; signed short *PFPriority; vector<Pin> Defaults; diff --git a/cmdline/acqprogress.cc b/cmdline/acqprogress.cc index 8b30b324b..a5fee1db5 100644 --- a/cmdline/acqprogress.cc +++ b/cmdline/acqprogress.cc @@ -274,10 +274,16 @@ bool AcqTextStatus::MediaChange(string Media,string Drive) Media.c_str(),Drive.c_str()); char C = 0; + bool bStatus = true; while (C != '\n' && C != '\r') - read(STDIN_FILENO,&C,1); - - Update = true; - return true; + { + int len = read(STDIN_FILENO,&C,1); + if(C == 'c' || len <= 0) + bStatus = false; + } + + if(bStatus) + Update = true; + return bStatus; } /*}}}*/ diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index e673e0f5b..a22d881b6 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1659,7 +1659,7 @@ bool DoInstall(CommandLine &CmdL) // See if we need to prompt if (Cache->InstCount() == ExpectedInst && Cache->DelCount() == 0) return InstallPackages(Cache,false,false); - + return InstallPackages(Cache,false); } /*}}}*/ @@ -2013,6 +2013,7 @@ bool DoSource(CommandLine &CmdL) if (system(S) != 0) { fprintf(stderr,_("Unpack command '%s' failed.\n"),S); + fprintf(stderr,_("Check if the 'dpkg-dev' package is installed.\n")); _exit(1); } } diff --git a/configure.in b/configure.in index 1ee7e168b..87dac8e47 100644 --- a/configure.in +++ b/configure.in @@ -18,7 +18,7 @@ AC_CONFIG_AUX_DIR(buildlib) AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in) dnl -- SET THIS TO THE RELEASE VERSION -- -AC_DEFINE_UNQUOTED(VERSION,"0.6.40.2") +AC_DEFINE_UNQUOTED(VERSION,"0.6.41.1") PACKAGE="apt" AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE") AC_SUBST(PACKAGE) @@ -181,9 +181,6 @@ AC_PATH_PROG(DOCBOOK2MAN,docbook2man) dnl Check for the XML tools needed to build man pages AC_PATH_PROG(XMLTO,xmlto) -dnl Check for the XML tools needed to build man pages -AC_PATH_PROG(XMLTO,xmlto) - dnl Check for YODL dnl AC_CHECK_PROG(YODL_MAN,yodl2man,"yes","") diff --git a/debian/apt-utils.examples b/debian/apt-utils.examples new file mode 100644 index 000000000..25aadf996 --- /dev/null +++ b/debian/apt-utils.examples @@ -0,0 +1 @@ +doc/examples/apt-ftparchive.conf
\ No newline at end of file diff --git a/debian/apt.cron.daily b/debian/apt.cron.daily index 2d93a5ba4..26dfa2530 100644 --- a/debian/apt.cron.daily +++ b/debian/apt.cron.daily @@ -95,9 +95,9 @@ check_size_constraints() # check age if [ ! $MaxAge -eq 0 ] && [ ! $MinAge -eq 0 ]; then - find $Cache -name "*.deb" -mtime +$MaxAge -and -not -mtime -$MinAge -print0 | xargs -r -0 rm -f + find $Cache -name "*.deb" \( -mtime +$MaxAge -and -ctime +$MaxAge \) -and -not \( -mtime -$MinAge -or -ctime -$MinAge \) -print0 | xargs -r -0 rm -f elif [ ! $MaxAge -eq 0 ]; then - find $Cache -name "*.deb" -mtime +$MaxAge -print0 | xargs -r -0 rm -f + find $Cache -name "*.deb" -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f fi # check size @@ -120,8 +120,14 @@ check_size_constraints() # check for MinAge of the file if [ ! $MinAge -eq 0 ]; then - mtime=$(date --date=$(date -r $file --iso-8601) +%s) - delta=$(($now-$mtime)) + # check both ctime and mtime + mtime=$(stat -c %Y $file) + ctime=$(stat -c %Z $file) + if [ $mtime -gt $ctime ]; then + delta=$(($now-$mtime)) + else + delta=$(($now-$ctime)) + fi #echo "$file ($delta), $MinAge" if [ $delta -le $MinAge ]; then #echo "Skiping $file (delta=$delta)" diff --git a/debian/apt.manpages b/debian/apt.manpages index e621e1c49..b52ea3d3d 100644 --- a/debian/apt.manpages +++ b/debian/apt.manpages @@ -3,6 +3,7 @@ doc/apt-cdrom.8 doc/apt-config.8 doc/apt-get.8 doc/apt-key.8 +doc/apt-secure.8 doc/apt.8 doc/apt.conf.5 doc/apt_preferences.5 diff --git a/debian/changelog b/debian/changelog index 614041acf..9194b8a13 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,43 @@ -apt (0.6.40.2) unstable; urgency=low +apt (0.6.41.1) unstable; urgency=low + + * apt-pkg/cdrom.cc: + - unmount the cdrom when apt failed to locate any package files + * allow cdrom failures and fallback to other sources in that case + (closes: #44135) + * better error text when dpkg-source fails + + -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 12 Sep 2005 13:45:53 +0200 + +apt (0.6.41) unstable; urgency=low * improved the support for "error" and "conffile" reporting from dpkg, added the format to README.progress-reporting * added README.progress-reporting to the apt-doc package - - -- + * improved the network timeout handling, if a index file from a + sources.list times out or EAI_AGAIN is returned from getaddrinfo, + don't try to get the other files from that entry + * Support architecture-specific extra overrides + (closes: #225947). Thanks to Anthony Towns for idea and + the patch, thanks to Colin Watson for testing it. + * Javier Fernandez-Sanguino Pen~a: + - Added a first version of an apt-secure.8 manpage, and modified + apt-key and apt.end accordingly. Also added the 'update' + argument to apt-key which was previously not documented + (Closes: #322120) + * Andreas Pakulat: + - added example apt-ftparchive.conf file to doc/examples + (closes: #322483) + * Fix a incorrect example in the man-page (closes: #282918) + * Fix a bug for very long lines in the apt-cdrom code (closes: #280356) + * Fix a manual page bug (closes: #316314) + * Do md5sum checking for file and cdrom method (closes: #319142) + * Change pkgPolicy::Pin from private to protected to let subclasses + access it too (closes: #321799) + * add default constructor for PrvIterator (closes: #322267) + * Reread status configuration on debSystem::Initialize() + (needed for apt-proxy, thanks to Otavio for this patch) + + -- Michael Vogt <mvo@debian.org> Mon, 5 Sep 2005 22:59:03 +0200 apt (0.6.40.1) unstable; urgency=low diff --git a/debian/rules b/debian/rules index b3f72bb7f..cd026b4a4 100755 --- a/debian/rules +++ b/debian/rules @@ -269,6 +269,7 @@ apt-utils: build debian/shlibs.local cp $(addprefix $(BLD)/bin/apt-,$(APT_UTILS)) debian/$@/usr/bin/ dh_installdocs -p$@ + dh_installexamples -p$@ # Install the man pages.. dh_installman -p$@ diff --git a/doc/apt-key.8.xml b/doc/apt-key.8.xml index 62686618a..eac61307d 100644 --- a/doc/apt-key.8.xml +++ b/doc/apt-key.8.xml @@ -68,17 +68,56 @@ <para> List trusted keys. + </para> </listitem> </varlistentry> + + <varlistentry><term>update</term> + <listitem> + <para> + + Update the local keyring with the keyring of Debian archive + keys and removes from the keyring the archive keys which are no + longer valid. + + </para> + + </listitem> + </varlistentry> + </variablelist> +</refsect1> + + <refsect1><title>Files</title> + <variablelist> + <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term> + <listitem><para>Keyring of local trusted keys, new keys will be added here.</para></listitem> + </varlistentry> + + <varlistentry><term><filename>/etc/apt/trustdb.gpg</filename></term> + <listitem><para>Local trust database of archive keys.</para></listitem> + </varlistentry> + + <varlistentry><term><filename>/usr/share/keyrings/debian-archive-keyring.gpg</filename></term> + <listitem><para>Keyring of Debian archive trusted keys.</para></listitem> + </varlistentry> + + <varlistentry><term><filename>/usr/share/keyrings/debian-archive-removed-keys.gpg</filename></term> + <listitem><para>Keyring of Debian archive removed trusted keys.</para></listitem> + </varlistentry> + + + </variablelist> + </refsect1> -<!-- <refsect1><title>See Also</title> --> -<!-- <para> --> -<!-- &apt-conf;, &apt-get;, &sources-list; --> -<!-- </refsect1> --> +<refsect1><title>See Also</title> +<para> +&apt-get;, &apt-secure; +</para> +</refsect1> &manbugs; &manauthor; diff --git a/doc/apt-secure.8.xml b/doc/apt-secure.8.xml new file mode 100644 index 000000000..e22446030 --- /dev/null +++ b/doc/apt-secure.8.xml @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8" standalone="no"?> +<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" + "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [ + +<!ENTITY % aptent SYSTEM "apt.ent"> +%aptent; + +]> + +<refentry> + &apt-docinfo; + + <refmeta> + <refentrytitle>apt-secure</refentrytitle> + <manvolnum>8</manvolnum> + </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 + archives. This ensures that packages in the archive can't be + modified by people who have no access to the Release file signing + key. + </para> + + <para> + 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. + </para> + + <para> + The package frontends &apt-get;, &aptitude; and &synaptic; support this new + authentication feature. + </para> +</refsect1> + + <refsect1><title>Trusted archives</title> + + <para> + The chain of trust from an apt archive to the end user is made up of + different steps. <command>apt-secure</command> is the last step in + this chain, trusting an archive does not mean that the packages + that you trust it do not contain malicious code but means that you + trust the archive maintainer. Its the archive maintainer + responsibility to ensure that the archive integrity is correct. + </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 when a maintainer uploads a new + package or a new version of a package to the Debian archive. This + upload in order to become effective needs to be signed by a key of + a maintainer within the Debian maintainer's keyring (available in + the debian-keyring package). Maintainer's keys are signed by + other maintainers following pre-established procedures to + ensure the identity of the key holder. + </para> + + <para> + Once the uploaded package is verified and included in the archive, + the maintainer signature is stripped off, an MD5 sum of the package + is computed and put in the Packages file. The MD5 sum 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 (which is created + once a year and distributed through the FTP server. This key is + also on the Debian keyring. + </para> + + <para> + Any end user can check the signature of the Release file, extract the MD5 + sum of a package from it and compare it with the MD5 sum of the + package he downloaded. Prior to version 0.6 only the MD5 sum of the + downloaded Debian package was checked. Now both the MD5 sum and the + signature of the Release file are checked. + </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, a malicious + agent can introduce himself in 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 propage malicious + software to all users downloading packages from that + host.</para></listitem> + </itemizedlist> + + <para>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.</para> +</refsect1> + + <refsect1><title>User configuration</title> + <para> + <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 provide the + default Debian archive signing keys used in the Debian package + repositories. + </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>Release.gpg</filename> files from the archives you + have configured. + </para> +</refsect1> + +<refsect1><title>Archive configuration</title> + <para> + If you want to provide archive signatures in an archive under your + maintenance you have to: + </para> + + <itemizedlist> + <listitem><para><literal>Create a toplevel Release + file</literal>. if it does not exist already. You can do this + by running <command>apt-ftparchive release</command> + (provided inftp apt-utils).</para></listitem> + + <listitem><para><literal>Sign it</literal>. You can do this by running + <command>gpg -abs -o Release.gpg Release</command>.</para></listitem> + + <listitem><para><literal>Publish the key fingerprint</literal>, + that way your users will know what key they need to import in + order to authenticate the files in the + archive.</para></listitem> + + </itemizedlist> + + <para>Whenever the contents of the archive changes (new packages + are added or removed) the archive maintainer has to follow the + first two steps previously outlined.</para> + +</refsect1> + +<refsect1><title>See Also</title> +<para> +&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-archive;, +&debsign; &debsig-verify;, &gpg; +</para> + +<para>For more backgound information you might want to review the +<ulink +url="http://www.debian.org/doc/manuals/securing-debian-howto/ch7.en.html">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. </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.conf.5.xml b/doc/apt.conf.5.xml index 69e212243..43f33681f 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -284,7 +284,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; <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> + <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 diff --git a/doc/apt.ent b/doc/apt.ent index 8054a25f6..cf22df6d2 100644 --- a/doc/apt.ent +++ b/doc/apt.ent @@ -44,6 +44,25 @@ </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-archive "<citerefentry> + <refentrytitle><filename>apt-archive</filename></refentrytitle> + <manvolnum>1</manvolnum> + </citerefentry>" +> + + <!ENTITY sources-list "<citerefentry> <refentrytitle><filename>sources.list</filename></refentrytitle> <manvolnum>5</manvolnum> @@ -91,6 +110,36 @@ <manvolnum>8</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 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>" +> <!-- Boiler plate docinfo section --> <!ENTITY apt-docinfo " diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml index 3e50bef8c..12b03196a 100644 --- a/doc/apt_preferences.5.xml +++ b/doc/apt_preferences.5.xml @@ -183,7 +183,7 @@ belonging to any distribution whose Archive name is "<literal>unstable</literal> <programlisting> Package: * Pin: release a=unstable -Pin-Priority: 50 +Pin-Priority: 500 </programlisting> <simpara>The following record assigns a high priority to all package versions diff --git a/doc/examples/apt-ftparchive.conf b/doc/examples/apt-ftparchive.conf new file mode 100644 index 000000000..657ec5440 --- /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.bz2, remove what you don't need +Default { + Packages::Compress ". gzip bzip2"; + Sources::Compress ". gzip bzip2"; + Contents::Compress ". gzip bzip2"; +}; + +// 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"; + SrcPackages "dists/sid/main/source/Sources"; + Contents "dists/sid/Contents-i386"; +} + +// This is the same for the contrib section +BinDirectory "pool/contrib" { + Packages "dists/sid/contrib/binary-i386/Packages"; + SrcPackages "dists/sid/contrib/source/Sources"; + Contents "dists/sid/Contents-i386"; +} + +// This is the same for the non-free section +BinDirectory "pool/non-free" { + Packages "dists/sid/non-free/binary-i386/Packages"; + SrcPackages "dists/sid/non-free/source/Sources"; + Contents "dists/sid/Contents-i386"; +}; + +// By default all Packages should have the extension ".deb" +Default { + Packages { + Extensions ".deb"; + }; +}; diff --git a/doc/makefile b/doc/makefile index f34b3f6e5..31ee061fb 100644 --- a/doc/makefile +++ b/doc/makefile @@ -14,7 +14,8 @@ include $(DEBIANDOC_H) # XML man pages SOURCE = apt-cache.8 apt-get.8 apt-cdrom.8 apt.conf.5 sources.list.5 \ apt-config.8 apt_preferences.5 \ - apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 apt-key.8 + apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 \ + apt-key.8 apt-secure.8 INCLUDES = apt.ent include $(XML_MANPAGE_H) diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index 31ff8d600..0e2be8a00 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -56,6 +56,9 @@ struct PackageMap string BinCacheDB; string BinOverride; string ExtraOverride; + + // We generate for this given arch + string Arch; // Stuff for the Source File string SrcFile; @@ -158,7 +161,8 @@ bool PackageMap::GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats) // Create a package writer object. PackagesWriter Packages(flCombine(CacheDir,BinCacheDB), flCombine(OverrideDir,BinOverride), - flCombine(OverrideDir,ExtraOverride)); + flCombine(OverrideDir,ExtraOverride), + Arch); if (PkgExt.empty() == false && Packages.SetExts(PkgExt) == false) return _error->Error(_("Package extension list is too long")); if (_error->PendingError() == true) @@ -489,6 +493,7 @@ void LoadTree(vector<PackageMap> &PkgList,Configuration &Setup) 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.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); diff --git a/ftparchive/override.cc b/ftparchive/override.cc index 669ce25bf..b8b94843f 100644 --- a/ftparchive/override.cc +++ b/ftparchive/override.cc @@ -207,6 +207,44 @@ bool Override::ReadExtraOverride(string File,bool Source) 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 Package, string Architecture) +{ + map<string,Item>::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>::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 diff --git a/ftparchive/override.h b/ftparchive/override.h index 2d6a4e27c..e64641776 100644 --- a/ftparchive/override.h +++ b/ftparchive/override.h @@ -34,17 +34,16 @@ class Override map<string,string> FieldOverride; string SwapMaint(string Orig,bool &Failed); + ~Item() {}; }; map<string,Item> Mapping; inline Item *GetItem(string Package) { - map<string,Item>::iterator I = Mapping.find(Package); - if (I == Mapping.end()) - return 0; - return &I->second; - }; + return GetItem(Package, ""); + } + Item *GetItem(string Package, string Architecture); bool ReadOverride(string File,bool Source = false); bool ReadExtraOverride(string File,bool Source = false); diff --git a/ftparchive/writer.cc b/ftparchive/writer.cc index 35a23a3d7..0b68d0bbf 100644 --- a/ftparchive/writer.cc +++ b/ftparchive/writer.cc @@ -36,7 +36,6 @@ #include "apt-ftparchive.h" #include "multicompress.h" /*}}}*/ - using namespace std; FTWScanner *FTWScanner::Owner; @@ -285,8 +284,9 @@ bool FTWScanner::Delink(string &FileName,const char *OriginalPath, // PackagesWriter::PackagesWriter - Constructor /*{{{*/ // --------------------------------------------------------------------- /* */ -PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides) : - Db(DB),Stats(Db.Stats) +PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides, + string aArch) : + Db(DB),Stats(Db.Stats), Arch(aArch) { Output = stdout; SetExts(".deb .udeb .foo .bar .baz"); @@ -371,14 +371,22 @@ bool PackagesWriter::DoPackage(string FileName) // Lookup the overide information pkgTagSection &Tags = Db.Control.Section; string Package = Tags.FindS("Package"); - Override::Item Tmp; - Override::Item *OverItem = Over.GetItem(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 + // "Architecures" variable in the config we use the architecure value + // from the deb file + if(Arch != "") + Architecture = Arch; + else + Architecture = Tags.FindS("Architecture"); + auto_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 == 0) + if (OverItem.get() == 0) { if (NoOverride == false) { @@ -386,9 +394,9 @@ bool PackagesWriter::DoPackage(string FileName) ioprintf(c1out, _(" %s has no override entry\n"), Package.c_str()); } - OverItem = &Tmp; - Tmp.FieldOverride["Section"] = Tags.FindS("Section"); - Tmp.Priority = Tags.FindS("Priority"); + OverItem = auto_ptr<Override::Item>(new Override::Item); + OverItem->FieldOverride["Section"] = Tags.FindS("Section"); + OverItem->Priority = Tags.FindS("Priority"); } char Size[40]; @@ -557,7 +565,7 @@ bool SourcesWriter::DoPackage(string FileName) string BestPrio; string Bins = Tags.FindS("Binary"); char Buffer[Bins.length() + 1]; - Override::Item *OverItem = 0; + auto_ptr<Override::Item> OverItem(0); if (Bins.empty() == false) { strcpy(Buffer,Bins.c_str()); @@ -570,10 +578,10 @@ bool SourcesWriter::DoPackage(string FileName) unsigned char BestPrioV = pkgCache::State::Extra; for (unsigned I = 0; BinList[I] != 0; I++) { - Override::Item *Itm = BOver.GetItem(BinList[I]); - if (Itm == 0) + auto_ptr<Override::Item> Itm(BOver.GetItem(BinList[I])); + if (Itm.get() == 0) continue; - if (OverItem == 0) + if (OverItem.get() == 0) OverItem = Itm; unsigned char NewPrioV = debListParser::GetPrio(Itm->Priority); @@ -586,8 +594,7 @@ bool SourcesWriter::DoPackage(string FileName) } // If we need to do any rewriting of the header do it now.. - Override::Item Tmp; - if (OverItem == 0) + if (OverItem.get() == 0) { if (NoOverride == false) { @@ -595,15 +602,19 @@ bool SourcesWriter::DoPackage(string FileName) ioprintf(c1out, _(" %s has no override entry\n"), Tags.FindS("Source").c_str()); } - OverItem = &Tmp; + OverItem = auto_ptr<Override::Item>(new Override::Item); } - Override::Item *SOverItem = SOver.GetItem(Tags.FindS("Source")); - if (SOverItem == 0) + auto_ptr<Override::Item> SOverItem(SOver.GetItem(Tags.FindS("Source"))); + const auto_ptr<Override::Item> autoSOverItem(SOverItem); + if (SOverItem.get() == 0) { - SOverItem = BOver.GetItem(Tags.FindS("Source")); - if (SOverItem == 0) - SOverItem = OverItem; + SOverItem = auto_ptr<Override::Item>(BOver.GetItem(Tags.FindS("Source"))); + if (SOverItem.get() == 0) + { + SOverItem = auto_ptr<Override::Item>(new Override::Item); + *SOverItem = *OverItem; + } } // Add the dsc to the files hash list diff --git a/ftparchive/writer.h b/ftparchive/writer.h index ce4c947a9..16d014ef8 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -92,13 +92,15 @@ class PackagesWriter : public FTWScanner string DirStrip; FILE *Output; struct CacheDB::Stats &Stats; - + string Arch; + inline bool ReadOverride(string File) {return Over.ReadOverride(File);}; inline bool ReadExtraOverride(string File) {return Over.ReadExtraOverride(File);}; virtual bool DoPackage(string FileName); - PackagesWriter(string DB,string Overrides,string ExtOverrides=string()); + PackagesWriter(string DB,string Overrides,string ExtOverrides=string(), + string Arch=string()); virtual ~PackagesWriter() {}; }; @@ -170,6 +172,7 @@ protected: string SHA1; // Limited by FileFd::Size() unsigned long size; + ~CheckSum() {}; }; map<string,struct CheckSum> CheckSums; }; diff --git a/methods/cdrom.cc b/methods/cdrom.cc index 7cc036814..d6b8eae75 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -13,6 +13,7 @@ #include <apt-pkg/error.h> #include <apt-pkg/configuration.h> #include <apt-pkg/fileutl.h> +#include <apt-pkg/hashes.h> #include <sys/stat.h> #include <unistd.h> @@ -165,8 +166,7 @@ bool CDROMMethod::Fetch(FetchItem *Itm) if (MediaFail(Get.Host,CDROM) == false) { CurrentID = "FAIL"; - Fail(_("Wrong CD-ROM"),true); - return true; + return _error->Error(_("Disk not found.")); } } @@ -180,6 +180,12 @@ bool CDROMMethod::Fetch(FetchItem *Itm) CurrentID = NewID; Res.LastModified = Buf.st_mtime; Res.Size = Buf.st_size; + + Hashes Hash; + FileFd Fd(Res.Filename, FileFd::ReadOnly); + Hash.AddFD(Fd.Fd(), Fd.Size()); + Res.TakeHashes(Hash); + URIDone(Res); return true; } diff --git a/methods/connect.cc b/methods/connect.cc index 981ac1371..4e48927ed 100644 --- a/methods/connect.cc +++ b/methods/connect.cc @@ -88,9 +88,11 @@ static bool DoConnect(struct addrinfo *Addr,string Host, /* This implements a timeout for connect by opening the connection nonblocking */ - if (WaitFd(Fd,true,TimeOut) == false) + if (WaitFd(Fd,true,TimeOut) == false) { + Owner->SetFailExtraMsg("\nFailReason: Timeout"); return _error->Error(_("Could not connect to %s:%s (%s), " "connection timed out"),Host.c_str(),Service,Name); + } // Check the socket for an error condition unsigned int Err; @@ -164,8 +166,11 @@ bool Connect(string Host,int Port,const char *Service,int DefPort,int &Fd, } if (Res == EAI_AGAIN) + { + Owner->SetFailExtraMsg("\nFailReason: TmpResolveFailure"); return _error->Error(_("Temporary failure resolving '%s'"), Host.c_str()); + } return _error->Error(_("Something wicked happened resolving '%s:%s' (%i)"), Host.c_str(),ServStr,Res); } diff --git a/methods/file.cc b/methods/file.cc index 3500de9f5..9cdd5bc2d 100644 --- a/methods/file.cc +++ b/methods/file.cc @@ -15,6 +15,8 @@ // Include Files /*{{{*/ #include <apt-pkg/acquire-method.h> #include <apt-pkg/error.h> +#include <apt-pkg/hashes.h> +#include <apt-pkg/fileutl.h> #include <sys/stat.h> #include <unistd.h> @@ -75,7 +77,11 @@ bool FileMethod::Fetch(FetchItem *Itm) if (Res.Filename.empty() == true) return _error->Error(_("File not found")); - + + Hashes Hash; + FileFd Fd(Res.Filename, FileFd::ReadOnly); + Hash.AddFD(Fd.Fd(), Fd.Size()); + Res.TakeHashes(Hash); URIDone(Res); return true; } diff --git a/po/apt-all.pot b/po/apt-all.pot index d06c14ce1..c34299d26 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-06-06 14:00+0200\n" +"POT-Creation-Date: 2005-08-23 09:45+0200\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" @@ -147,8 +147,8 @@ msgid " %4i %s\n" msgstr "" #: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 -#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545 -#: cmdline/apt-get.cc:2322 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550 +#: cmdline/apt-get.cc:2324 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s %s compiled on %s %s\n" msgstr "" @@ -240,31 +240,31 @@ msgstr "" msgid "Cannot get debconf version. Is debconf installed?" msgstr "" -#: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337 +#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341 msgid "Package extension list is too long" msgstr "" -#: ftparchive/apt-ftparchive.cc:165 ftparchive/apt-ftparchive.cc:179 -#: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:252 -#: ftparchive/apt-ftparchive.cc:266 ftparchive/apt-ftparchive.cc:288 +#: ftparchive/apt-ftparchive.cc:169 ftparchive/apt-ftparchive.cc:183 +#: ftparchive/apt-ftparchive.cc:206 ftparchive/apt-ftparchive.cc:256 +#: ftparchive/apt-ftparchive.cc:270 ftparchive/apt-ftparchive.cc:292 #, c-format msgid "Error processing directory %s" msgstr "" -#: ftparchive/apt-ftparchive.cc:250 +#: ftparchive/apt-ftparchive.cc:254 msgid "Source extension list is too long" msgstr "" -#: ftparchive/apt-ftparchive.cc:367 +#: ftparchive/apt-ftparchive.cc:371 msgid "Error writing header to contents file" msgstr "" -#: ftparchive/apt-ftparchive.cc:397 +#: ftparchive/apt-ftparchive.cc:401 #, c-format msgid "Error processing contents %s" msgstr "" -#: ftparchive/apt-ftparchive.cc:551 +#: ftparchive/apt-ftparchive.cc:556 msgid "" "Usage: apt-ftparchive [options] command\n" "Commands: packages binarypath [overridefile [pathprefix]]\n" @@ -306,11 +306,11 @@ msgid "" " -o=? Set an arbitrary configuration option" msgstr "" -#: ftparchive/apt-ftparchive.cc:757 +#: ftparchive/apt-ftparchive.cc:762 msgid "No selections matched" msgstr "" -#: ftparchive/apt-ftparchive.cc:830 +#: ftparchive/apt-ftparchive.cc:835 #, c-format msgid "Some files are missing in the package file group `%s'" msgstr "" @@ -343,83 +343,83 @@ msgstr "" msgid "Unable to get a cursor" msgstr "" -#: ftparchive/writer.cc:79 +#: ftparchive/writer.cc:78 #, c-format msgid "W: Unable to read directory %s\n" msgstr "" -#: ftparchive/writer.cc:84 +#: ftparchive/writer.cc:83 #, c-format msgid "W: Unable to stat %s\n" msgstr "" -#: ftparchive/writer.cc:126 +#: ftparchive/writer.cc:125 msgid "E: " msgstr "" -#: ftparchive/writer.cc:128 +#: ftparchive/writer.cc:127 msgid "W: " msgstr "" -#: ftparchive/writer.cc:135 +#: ftparchive/writer.cc:134 msgid "E: Errors apply to file " msgstr "" -#: ftparchive/writer.cc:152 ftparchive/writer.cc:182 +#: ftparchive/writer.cc:151 ftparchive/writer.cc:181 #, c-format msgid "Failed to resolve %s" msgstr "" -#: ftparchive/writer.cc:164 +#: ftparchive/writer.cc:163 msgid "Tree walking failed" msgstr "" -#: ftparchive/writer.cc:189 +#: ftparchive/writer.cc:188 #, c-format msgid "Failed to open %s" msgstr "" -#: ftparchive/writer.cc:246 +#: ftparchive/writer.cc:245 #, c-format msgid " DeLink %s [%s]\n" msgstr "" -#: ftparchive/writer.cc:254 +#: ftparchive/writer.cc:253 #, c-format msgid "Failed to readlink %s" msgstr "" -#: ftparchive/writer.cc:258 +#: ftparchive/writer.cc:257 #, c-format msgid "Failed to unlink %s" msgstr "" -#: ftparchive/writer.cc:265 +#: ftparchive/writer.cc:264 #, c-format msgid "*** Failed to link %s to %s" msgstr "" -#: ftparchive/writer.cc:275 +#: ftparchive/writer.cc:274 #, c-format msgid " DeLink limit of %sB hit.\n" msgstr "" #: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193 -#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 +#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:256 #, c-format msgid "Failed to stat %s" msgstr "" -#: ftparchive/writer.cc:378 +#: ftparchive/writer.cc:386 msgid "Archive had no package field" msgstr "" -#: ftparchive/writer.cc:386 ftparchive/writer.cc:595 +#: ftparchive/writer.cc:394 ftparchive/writer.cc:602 #, c-format msgid " %s has no override entry\n" msgstr "" -#: ftparchive/writer.cc:429 ftparchive/writer.cc:677 +#: ftparchive/writer.cc:437 ftparchive/writer.cc:688 #, c-format msgid " %s maintainer is %s not %s\n" msgstr "" @@ -523,7 +523,7 @@ msgstr "" msgid "Y" msgstr "" -#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1484 +#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486 #, c-format msgid "Regex compilation error - %s" msgstr "" @@ -654,6 +654,10 @@ msgstr "" msgid "WARNING: The following packages cannot be authenticated!" msgstr "" +#: cmdline/apt-get.cc:691 +msgid "Authentication warning overridden.\n" +msgstr "" + #: cmdline/apt-get.cc:698 msgid "Install these packages without verification [y/N]? " msgstr "" @@ -662,57 +666,74 @@ msgstr "" msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:855 +#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856 msgid "There are problems and -y was used without --force-yes" msgstr "" +#: cmdline/apt-get.cc:753 +msgid "Internal error, InstallPackages was called with broken packages!" +msgstr "" + #: cmdline/apt-get.cc:762 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1778 cmdline/apt-get.cc:1811 +#: cmdline/apt-get.cc:773 +msgid "Internal error, Ordering didn't finish" +msgstr "" + +#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1859 cmdline/apt-get.cc:2070 +#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2072 #: apt-pkg/cachefile.cc:67 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:818 +#: cmdline/apt-get.cc:814 +msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" +msgstr "" + +#: cmdline/apt-get.cc:819 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:821 +#: cmdline/apt-get.cc:822 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:826 +#: cmdline/apt-get.cc:827 #, c-format msgid "After unpacking %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:829 +#: cmdline/apt-get.cc:830 #, c-format msgid "After unpacking %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:846 +#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927 +#, c-format +msgid "Couldn't determine free space in %s" +msgstr "" + +#: cmdline/apt-get.cc:847 #, c-format msgid "You don't have enough free space in %s." msgstr "" -#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:881 +#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:863 +#: cmdline/apt-get.cc:864 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:865 +#: cmdline/apt-get.cc:866 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -720,74 +741,74 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:871 cmdline/apt-get.cc:890 +#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:886 +#: cmdline/apt-get.cc:887 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1968 +#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:976 +#: cmdline/apt-get.cc:977 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1977 +#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:983 +#: cmdline/apt-get.cc:984 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" msgstr "" -#: cmdline/apt-get.cc:987 +#: cmdline/apt-get.cc:988 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:992 +#: cmdline/apt-get.cc:993 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:993 +#: cmdline/apt-get.cc:994 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1026 +#: cmdline/apt-get.cc:1028 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1036 +#: cmdline/apt-get.cc:1038 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" -#: cmdline/apt-get.cc:1054 +#: cmdline/apt-get.cc:1056 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1065 +#: cmdline/apt-get.cc:1067 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1077 +#: cmdline/apt-get.cc:1079 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:1082 +#: cmdline/apt-get.cc:1084 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1087 +#: cmdline/apt-get.cc:1089 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -795,79 +816,79 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1106 +#: cmdline/apt-get.cc:1108 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:1109 +#: cmdline/apt-get.cc:1111 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1129 +#: cmdline/apt-get.cc:1131 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1137 +#: cmdline/apt-get.cc:1139 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1164 +#: cmdline/apt-get.cc:1166 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1166 +#: cmdline/apt-get.cc:1168 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1172 +#: cmdline/apt-get.cc:1174 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1282 +#: cmdline/apt-get.cc:1284 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1295 cmdline/apt-get.cc:1389 +#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1353 +#: cmdline/apt-get.cc:1355 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." msgstr "" -#: cmdline/apt-get.cc:1372 +#: cmdline/apt-get.cc:1374 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1471 cmdline/apt-get.cc:1507 +#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1494 +#: cmdline/apt-get.cc:1496 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1524 +#: cmdline/apt-get.cc:1526 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1527 +#: cmdline/apt-get.cc:1529 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1539 +#: cmdline/apt-get.cc:1541 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" @@ -875,149 +896,153 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1547 +#: cmdline/apt-get.cc:1549 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 "" -#: cmdline/apt-get.cc:1552 +#: cmdline/apt-get.cc:1554 msgid "The following information may help to resolve the situation:" msgstr "" -#: cmdline/apt-get.cc:1555 +#: cmdline/apt-get.cc:1557 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1581 +#: cmdline/apt-get.cc:1583 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1652 +#: cmdline/apt-get.cc:1654 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1653 +#: cmdline/apt-get.cc:1655 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1673 +#: cmdline/apt-get.cc:1675 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1676 methods/ftp.cc:702 methods/connect.cc:99 +#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1681 +#: cmdline/apt-get.cc:1683 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1854 +#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756 +msgid "Internal error, problem resolver broke stuff" +msgstr "" + +#: cmdline/apt-get.cc:1856 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2088 +#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2090 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:1928 +#: cmdline/apt-get.cc:1930 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:1933 +#: cmdline/apt-get.cc:1935 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1936 +#: cmdline/apt-get.cc:1938 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:1942 +#: cmdline/apt-get.cc:1944 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:1973 +#: cmdline/apt-get.cc:1975 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2001 +#: cmdline/apt-get.cc:2003 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2013 +#: cmdline/apt-get.cc:2015 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2030 +#: cmdline/apt-get.cc:2032 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2049 +#: cmdline/apt-get.cc:2051 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2065 +#: cmdline/apt-get.cc:2067 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2093 +#: cmdline/apt-get.cc:2095 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2113 +#: cmdline/apt-get.cc:2115 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2165 +#: cmdline/apt-get.cc:2167 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2217 +#: cmdline/apt-get.cc:2219 #, 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:2252 +#: cmdline/apt-get.cc:2254 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2277 +#: cmdline/apt-get.cc:2279 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2291 +#: cmdline/apt-get.cc:2293 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2295 +#: cmdline/apt-get.cc:2297 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2327 +#: cmdline/apt-get.cc:2329 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2368 +#: cmdline/apt-get.cc:2370 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1270,8 +1295,8 @@ msgstr "" msgid "File %s/%s overwrites the one in the package %s" msgstr "" -#: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:709 -#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:416 apt-pkg/clean.cc:38 +#: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750 +#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38 #, c-format msgid "Unable to read %s" msgstr "" @@ -1407,39 +1432,40 @@ msgstr "" msgid "Unparsable control file" msgstr "" -#: methods/cdrom.cc:113 +#: methods/cdrom.cc:114 #, c-format msgid "Unable to read the cdrom database %s" msgstr "" -#: methods/cdrom.cc:122 +#: methods/cdrom.cc:123 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:130 methods/cdrom.cc:168 +#: methods/cdrom.cc:131 methods/cdrom.cc:169 msgid "Wrong CD-ROM" msgstr "" -#: methods/cdrom.cc:163 +#: methods/cdrom.cc:164 #, c-format msgid "Unable to unmount the CD-ROM in %s, it may still be in use." msgstr "" -#: methods/cdrom.cc:177 methods/file.cc:77 methods/rsh.cc:264 +#: methods/cdrom.cc:178 methods/file.cc:79 methods/rsh.cc:264 msgid "File not found" msgstr "" -#: methods/copy.cc:42 methods/gzip.cc:133 methods/gzip.cc:142 +#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133 +#: methods/gzip.cc:142 msgid "Failed to stat" msgstr "" -#: methods/copy.cc:79 methods/gzip.cc:139 +#: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139 msgid "Failed to set modification time" msgstr "" -#: methods/file.cc:42 +#: methods/file.cc:44 msgid "Invalid URI, local URIS must not start with //" msgstr "" @@ -1495,7 +1521,7 @@ msgstr "" msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:338 methods/rsh.cc:190 apt-pkg/contrib/fileutl.cc:453 +#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:471 methods/rsh.cc:190 msgid "Read error" msgstr "" @@ -1507,7 +1533,7 @@ msgstr "" msgid "Protocol corruption" msgstr "" -#: methods/ftp.cc:446 methods/rsh.cc:232 apt-pkg/contrib/fileutl.cc:492 +#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:510 methods/rsh.cc:232 msgid "Write error" msgstr "" @@ -1608,43 +1634,79 @@ msgstr "" msgid "Cannot initiate the connection to %s:%s (%s)." msgstr "" -#: methods/connect.cc:92 +#: methods/connect.cc:93 #, c-format msgid "Could not connect to %s:%s (%s), connection timed out" msgstr "" -#: methods/connect.cc:104 +#: methods/connect.cc:106 #, 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:132 methods/rsh.cc:425 +#: methods/connect.cc:134 methods/rsh.cc:425 #, c-format msgid "Connecting to %s" msgstr "" -#: methods/connect.cc:163 +#: methods/connect.cc:165 #, c-format msgid "Could not resolve '%s'" msgstr "" -#: methods/connect.cc:167 +#: methods/connect.cc:171 #, c-format msgid "Temporary failure resolving '%s'" msgstr "" -#: methods/connect.cc:169 +#: methods/connect.cc:174 #, c-format msgid "Something wicked happened resolving '%s:%s' (%i)" msgstr "" -#: methods/connect.cc:216 +#: methods/connect.cc:221 #, c-format msgid "Unable to connect to %s %s:" msgstr "" +#: methods/gpgv.cc:92 +msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting." +msgstr "" + +#: methods/gpgv.cc:191 +msgid "" +"Internal error: Good signature, but could not determine key fingerprint?!" +msgstr "" + +#: methods/gpgv.cc:196 +msgid "At least one invalid signature was encountered." +msgstr "" + +#. FIXME String concatenation considered harmful. +#: methods/gpgv.cc:201 +msgid "Could not execute " +msgstr "" + +#: methods/gpgv.cc:202 +msgid " to verify signature (is gnupg installed?)" +msgstr "" + +#: methods/gpgv.cc:206 +msgid "Unknown error executing gpgv" +msgstr "" + +#: methods/gpgv.cc:237 +msgid "The following signatures were invalid:\n" +msgstr "" + +#: methods/gpgv.cc:244 +msgid "" +"The following signatures couldn't be verified because the public key is not " +"available:\n" +msgstr "" + #: methods/gzip.cc:57 #, c-format msgid "Couldn't open pipe for %s" @@ -1728,10 +1790,6 @@ msgstr "" msgid "Internal error" msgstr "" -#: methods/rsh.cc:330 -msgid "Connection closed prematurely" -msgstr "" - #: apt-pkg/contrib/mmap.cc:82 msgid "Can't mmap an empty file" msgstr "" @@ -1746,57 +1804,57 @@ msgstr "" msgid "Selection %s not found" msgstr "" -#: apt-pkg/contrib/configuration.cc:395 +#: apt-pkg/contrib/configuration.cc:436 #, c-format msgid "Unrecognized type abbreviation: '%c'" msgstr "" -#: apt-pkg/contrib/configuration.cc:453 +#: apt-pkg/contrib/configuration.cc:494 #, c-format msgid "Opening configuration file %s" msgstr "" -#: apt-pkg/contrib/configuration.cc:471 +#: apt-pkg/contrib/configuration.cc:512 #, c-format msgid "Line %d too long (max %d)" msgstr "" -#: apt-pkg/contrib/configuration.cc:567 +#: apt-pkg/contrib/configuration.cc:608 #, c-format msgid "Syntax error %s:%u: Block starts with no name." msgstr "" -#: apt-pkg/contrib/configuration.cc:586 +#: apt-pkg/contrib/configuration.cc:627 #, c-format msgid "Syntax error %s:%u: Malformed tag" msgstr "" -#: apt-pkg/contrib/configuration.cc:603 +#: apt-pkg/contrib/configuration.cc:644 #, c-format msgid "Syntax error %s:%u: Extra junk after value" msgstr "" -#: apt-pkg/contrib/configuration.cc:643 +#: apt-pkg/contrib/configuration.cc:684 #, c-format msgid "Syntax error %s:%u: Directives can only be done at the top level" msgstr "" -#: apt-pkg/contrib/configuration.cc:650 +#: apt-pkg/contrib/configuration.cc:691 #, c-format msgid "Syntax error %s:%u: Too many nested includes" msgstr "" -#: apt-pkg/contrib/configuration.cc:654 apt-pkg/contrib/configuration.cc:659 +#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700 #, c-format msgid "Syntax error %s:%u: Included from here" msgstr "" -#: apt-pkg/contrib/configuration.cc:663 +#: apt-pkg/contrib/configuration.cc:704 #, c-format msgid "Syntax error %s:%u: Unsupported directive '%s'" msgstr "" -#: apt-pkg/contrib/configuration.cc:697 +#: apt-pkg/contrib/configuration.cc:738 #, c-format msgid "Syntax error %s:%u: Extra junk at end of file" msgstr "" @@ -1862,7 +1920,7 @@ msgstr "" msgid "Unable to stat the mount point %s" msgstr "" -#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:422 apt-pkg/clean.cc:44 +#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44 #, c-format msgid "Unable to change to %s" msgstr "" @@ -1871,70 +1929,70 @@ msgstr "" msgid "Failed to stat the cdrom" msgstr "" -#: apt-pkg/contrib/fileutl.cc:80 +#: apt-pkg/contrib/fileutl.cc:82 #, c-format msgid "Not using locking for read only lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:85 +#: apt-pkg/contrib/fileutl.cc:87 #, c-format msgid "Could not open lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:103 +#: apt-pkg/contrib/fileutl.cc:105 #, c-format msgid "Not using locking for nfs mounted lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:107 +#: apt-pkg/contrib/fileutl.cc:109 #, c-format msgid "Could not get lock %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:359 +#: apt-pkg/contrib/fileutl.cc:377 #, c-format msgid "Waited for %s but it wasn't there" msgstr "" -#: apt-pkg/contrib/fileutl.cc:369 +#: apt-pkg/contrib/fileutl.cc:387 #, c-format msgid "Sub-process %s received a segmentation fault." msgstr "" -#: apt-pkg/contrib/fileutl.cc:372 +#: apt-pkg/contrib/fileutl.cc:390 #, c-format msgid "Sub-process %s returned an error code (%u)" msgstr "" -#: apt-pkg/contrib/fileutl.cc:374 +#: apt-pkg/contrib/fileutl.cc:392 #, c-format msgid "Sub-process %s exited unexpectedly" msgstr "" -#: apt-pkg/contrib/fileutl.cc:418 +#: apt-pkg/contrib/fileutl.cc:436 #, c-format msgid "Could not open file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:474 +#: apt-pkg/contrib/fileutl.cc:492 #, c-format msgid "read, still have %lu to read but none left" msgstr "" -#: apt-pkg/contrib/fileutl.cc:504 +#: apt-pkg/contrib/fileutl.cc:522 #, c-format msgid "write, still have %lu to write but couldn't" msgstr "" -#: apt-pkg/contrib/fileutl.cc:579 +#: apt-pkg/contrib/fileutl.cc:597 msgid "Problem closing the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:585 +#: apt-pkg/contrib/fileutl.cc:603 msgid "Problem unlinking the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:596 +#: apt-pkg/contrib/fileutl.cc:614 msgid "Problem syncing the file" msgstr "" @@ -2059,7 +2117,7 @@ msgstr "" msgid "Opening %s" msgstr "" -#: apt-pkg/sourcelist.cc:170 +#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:426 #, c-format msgid "Line %u too long in source list %s." msgstr "" @@ -2108,16 +2166,21 @@ msgstr "" msgid "Unable to correct problems, you have held broken packages." msgstr "" -#: apt-pkg/acquire.cc:61 +#: apt-pkg/acquire.cc:62 #, c-format msgid "Lists directory %spartial is missing." msgstr "" -#: apt-pkg/acquire.cc:65 +#: apt-pkg/acquire.cc:66 #, c-format msgid "Archive directory %spartial is missing." msgstr "" +#: apt-pkg/acquire.cc:817 +#, c-format +msgid "Downloading file %li of %li (%s remaining)" +msgstr "" + #: apt-pkg/acquire-worker.cc:112 #, c-format msgid "The method driver %s could not be found." @@ -2251,31 +2314,31 @@ msgstr "" msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:900 +#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:908 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:714 +#: apt-pkg/acquire-item.cc:722 #, 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:767 +#: apt-pkg/acquire-item.cc:775 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:803 +#: apt-pkg/acquire-item.cc:811 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:890 +#: apt-pkg/acquire-item.cc:898 msgid "Size mismatch" msgstr "" @@ -2284,73 +2347,73 @@ msgstr "" msgid "Vendor block %s contains no fingerprint" msgstr "" -#: apt-pkg/cdrom.cc:504 +#: apt-pkg/cdrom.cc:507 #, c-format msgid "" "Using CD-ROM mount point %s\n" "Mounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:513 apt-pkg/cdrom.cc:595 +#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598 msgid "Identifying.. " msgstr "" -#: apt-pkg/cdrom.cc:538 +#: apt-pkg/cdrom.cc:541 #, c-format msgid "Stored label: %s \n" msgstr "" -#: apt-pkg/cdrom.cc:558 +#: apt-pkg/cdrom.cc:561 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:576 +#: apt-pkg/cdrom.cc:579 msgid "Unmounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:580 +#: apt-pkg/cdrom.cc:583 msgid "Waiting for disc...\n" msgstr "" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:588 +#: apt-pkg/cdrom.cc:591 msgid "Mounting CD-ROM...\n" msgstr "" -#: apt-pkg/cdrom.cc:606 +#: apt-pkg/cdrom.cc:609 msgid "Scanning disc for index files..\n" msgstr "" -#: apt-pkg/cdrom.cc:644 +#: apt-pkg/cdrom.cc:647 #, c-format msgid "Found %i package indexes, %i source indexes and %i signatures\n" msgstr "" -#: apt-pkg/cdrom.cc:701 +#: apt-pkg/cdrom.cc:704 msgid "That is not a valid name, try again.\n" msgstr "" -#: apt-pkg/cdrom.cc:717 +#: apt-pkg/cdrom.cc:720 #, c-format msgid "" "This disc is called: \n" "'%s'\n" msgstr "" -#: apt-pkg/cdrom.cc:721 +#: apt-pkg/cdrom.cc:724 msgid "Copying package lists..." msgstr "" -#: apt-pkg/cdrom.cc:745 +#: apt-pkg/cdrom.cc:748 msgid "Writing new source list\n" msgstr "" -#: apt-pkg/cdrom.cc:754 +#: apt-pkg/cdrom.cc:757 msgid "Source list entries for this disc are:\n" msgstr "" -#: apt-pkg/cdrom.cc:788 +#: apt-pkg/cdrom.cc:791 msgid "Unmounting CD-ROM..." msgstr "" @@ -2373,3 +2436,57 @@ msgstr "" #, c-format msgid "Wrote %i records with %i missing files and %i mismatched files\n" msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:358 +#, c-format +msgid "Preparing %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:359 +#, c-format +msgid "Unpacking %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:364 +#, c-format +msgid "Preparing to configure %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:365 +#, c-format +msgid "Configuring %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:366 +#, c-format +msgid "Installed %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:371 +#, c-format +msgid "Preparing for removal of %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:372 +#, c-format +msgid "Removing %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:373 +#, c-format +msgid "Removed %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:378 +#, c-format +msgid "Preparing for remove with config %s" +msgstr "" + +#: apt-pkg/deb/dpkgpm.cc:379 +#, c-format +msgid "Removed with config %s" +msgstr "" + +#: methods/rsh.cc:330 +msgid "Connection closed prematurely" +msgstr "" |