]> git.saurik.com Git - apt.git/commitdiff
The 'not dead yet' release
authorMichael Vogt <michael.vogt@ubuntu.com>
Tue, 21 Jul 2009 16:31:36 +0000 (18:31 +0200)
committerMichael Vogt <michael.vogt@ubuntu.com>
Tue, 21 Jul 2009 16:31:36 +0000 (18:31 +0200)
* add hook for MarkInstall and MarkDelete (closes: #470035)
* add the various foldmarkers in apt-pkg & cmdline (no code change)
* versions with a pin of -1 shouldn't be a candidate (Closes: #355237)
* prefer mmap as memory allocator in MMap instead of a static char
  array which can (at least in theory) grow dynamic
* eliminate (hopefully all) segfaults in pkgcachegen.cc and mmap.cc
  which can arise if cache doesn't fit into the mmap (Closes: #535218)
* display warnings instead of errors if the parts dirs doesn't exist
* honor the dpkg hold state in new Marker hooks (closes: #64141)

31 files changed:
README.arch
apt-pkg/acquire-worker.cc
apt-pkg/acquire.cc
apt-pkg/algorithms.cc
apt-pkg/cacheiterators.h
apt-pkg/cdrom.cc
apt-pkg/contrib/fileutl.cc
apt-pkg/contrib/hashes.cc
apt-pkg/contrib/md5.cc
apt-pkg/contrib/mmap.cc
apt-pkg/contrib/sha256.h
apt-pkg/contrib/strutl.cc
apt-pkg/contrib/strutl.h
apt-pkg/deb/deblistparser.cc
apt-pkg/deb/debsystem.cc
apt-pkg/deb/dpkgpm.cc
apt-pkg/indexcopy.cc
apt-pkg/indexrecords.cc
apt-pkg/pkgcache.cc
cmdline/apt-cache.cc
cmdline/apt-mark
debian/apt.cron.daily
debian/changelog
doc/apt-cache.8.xml
doc/apt-get.8.xml
doc/examples/configure-index
doc/fr/apt.conf.fr.5.xml
ftparchive/writer.h
methods/gpgv.cc
methods/http.cc
po/apt-all.pot

index 364e940a4bbc789b26b0afb0fe01cbfcc1375825..58c40a497c177ef7b6ce07602c41308c61ef7781 100644 (file)
@@ -1,7 +1,7 @@
 
 You can build apt from arch, but this needs the following additional
 packages (in addtion to the usual build-depends):
-autoconf automake xmlto perlsgml sgml2x sgmlspl docbook
+autoconf automake xmlto perlsgml sgml2x sgmlspl docbook doxygen
 
 then run:
 
index 78c68737c32f4d3aef1a37de6314e6b4cfd4d3e8..4f0b52af9739e213d5ef55d578bcbf5250c8f74e 100644 (file)
@@ -527,10 +527,6 @@ bool pkgAcquire::Worker::OutFdReady()
    
    if (Res <= 0)
       return MethodFailure();
-
-   // Hmm.. this should never happen.
-   if (Res < 0)
-      return true;
    
    OutQueue.erase(0,Res);
    if (OutQueue.empty() == true)
@@ -558,7 +554,8 @@ bool pkgAcquire::Worker::MethodFailure()
 {
    _error->Error("Method %s has died unexpectedly!",Access.c_str());
    
-   ExecWait(Process,Access.c_str(),true);
+   // do not reap the child here to show meaningfull error to the user
+   ExecWait(Process,Access.c_str(),false);
    Process = -1;
    close(InFd);
    close(OutFd);
index 68ff393d05cb83d37492aa125aaaa571934aaef5..74510ae21aaaef46ff13aeb9578c8f4b295c99f7 100644 (file)
@@ -24,7 +24,8 @@
 
 #include <iostream>
 #include <sstream>
-    
+#include <stdio.h>
+
 #include <dirent.h>
 #include <sys/time.h>
 #include <errno.h>
@@ -618,7 +619,7 @@ bool pkgAcquire::Queue::Startup()
          added other source retry to have cycle maintain a pipeline depth
          on its own. */
       if (Cnf->Pipeline == true)
-        MaxPipeDepth = 1000;
+        MaxPipeDepth = _config->FindI("Acquire::Max-Pipeline-Depth",10);
       else
         MaxPipeDepth = 1;
    }
index a30a02edb86bf76d4a4bc4d9141cbfc8276a089d..34da745dea5ac67a2b25c1e83d7478e96f0a7a27 100644 (file)
@@ -500,6 +500,7 @@ void pkgProblemResolver::MakeScores()
    signed short PrioEssentials = _config->FindI("pkgProblemResolver::Scores::Essentials",100);
    signed short PrioInstalledAndNotObsolete = _config->FindI("pkgProblemResolver::Scores::NotObsolete",1);
    signed short PrioDepends = _config->FindI("pkgProblemResolver::Scores::Depends",1);
+   signed short PrioRecommends = _config->FindI("pkgProblemResolver::Scores::Recommends",1);
    signed short AddProtected = _config->FindI("pkgProblemResolver::Scores::AddProtected",10000);
    signed short AddEssential = _config->FindI("pkgProblemResolver::Scores::AddEssential",5000);
 
@@ -513,6 +514,7 @@ void pkgProblemResolver::MakeScores()
          << "  Essentials => " << PrioEssentials << endl
          << "  InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl
          << "  Depends => " << PrioDepends << endl
+         << "  Recommends => " << PrioRecommends << endl
          << "  AddProtected => " << AddProtected << endl
          << "  AddEssential => " << AddEssential << endl;
 
@@ -551,8 +553,11 @@ void pkgProblemResolver::MakeScores()
       
       for (pkgCache::DepIterator D = Cache[I].InstVerIter(Cache).DependsList(); D.end() == false; D++)
       {
-        if (D->Type == pkgCache::Dep::Depends || D->Type == pkgCache::Dep::PreDepends)
-           Scores[D.TargetPkg()->ID]+= PrioDepends;
+        if (D->Type == pkgCache::Dep::Depends || 
+            D->Type == pkgCache::Dep::PreDepends)
+           Scores[D.TargetPkg()->ID] += PrioDepends;
+        else if (D->Type == pkgCache::Dep::Recommends)
+           Scores[D.TargetPkg()->ID] += PrioRecommends;
       }
    }   
    
@@ -572,7 +577,9 @@ void pkgProblemResolver::MakeScores()
       {
         // 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::Depends && 
+             D->Type != pkgCache::Dep::PreDepends &&
+             D->Type != pkgCache::Dep::Recommends))
            continue;    
         
         Scores[I->ID] += abs(OldScores[D.ParentPkg()->ID]);
index 3d35e42982b99e98b728a328ff71aea528e417d2..28466cd406aae39c5c08eed2c735229a3fef40cd 100644 (file)
@@ -110,7 +110,7 @@ class pkgCache::VerIterator
    // Iteration
    void operator ++(int) {if (Ver != Owner->VerP) Ver = Owner->VerP + Ver->NextVer;};
    inline void operator ++() {operator ++(0);};
-   inline bool end() const {return Owner == NULL || (Ver == Owner->VerP?true:false);};
+   inline bool end() const {return Owner == 0 || (Ver == Owner->VerP?true:false);};
    inline void operator =(const VerIterator &B) {Ver = B.Ver; Owner = B.Owner;};
    
    // Comparison
@@ -169,7 +169,7 @@ class pkgCache::DescIterator
    // Iteration
    void operator ++(int) {if (Desc != Owner->DescP) Desc = Owner->DescP + Desc->NextDesc;};
    inline void operator ++() {operator ++(0);};
-   inline bool end() const {return Desc == Owner->DescP?true:false;};
+   inline bool end() const {return Owner == 0 || Desc == Owner->DescP?true:false;};
    inline void operator =(const DescIterator &B) {Desc = B.Desc; Owner = B.Owner;};
    
    // Comparison
@@ -323,7 +323,7 @@ class pkgCache::PkgFileIterator
    // Iteration
    void operator ++(int) {if (File!= Owner->PkgFileP) File = Owner->PkgFileP + File->NextFile;};
    inline void operator ++() {operator ++(0);};
-   inline bool end() const {return File == Owner->PkgFileP?true:false;};
+   inline bool end() const {return Owner == 0 || File == Owner->PkgFileP?true:false;};
 
    // Comparison
    inline bool operator ==(const PkgFileIterator &B) const {return File == B.File;};
@@ -370,7 +370,7 @@ class pkgCache::VerFileIterator
    // Iteration
    void operator ++(int) {if (FileP != Owner->VerFileP) FileP = Owner->VerFileP + FileP->NextFile;};
    inline void operator ++() {operator ++(0);};
-   inline bool end() const {return FileP == Owner->VerFileP?true:false;};
+   inline bool end() const {return Owner == 0 || FileP == Owner->VerFileP?true:false;};
 
    // Comparison
    inline bool operator ==(const VerFileIterator &B) const {return FileP == B.FileP;};
@@ -402,7 +402,7 @@ class pkgCache::DescFileIterator
    // Iteration
    void operator ++(int) {if (FileP != Owner->DescFileP) FileP = Owner->DescFileP + FileP->NextFile;};
    inline void operator ++() {operator ++(0);};
-   inline bool end() const {return FileP == Owner->DescFileP?true:false;};
+   inline bool end() const {return Owner == 0 ||  FileP == Owner->DescFileP?true:false;};
 
    // Comparison
    inline bool operator ==(const DescFileIterator &B) const {return FileP == B.FileP;};
index 891c59836b411dca16c44579f99e4b1297336153..8796805bbab301af77679a7c31aeaf5c7b021c04 100644 (file)
@@ -681,7 +681,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log)                                     /*{{{*/
    {
       if (_config->FindB("APT::CDROM::NoMount",false) == false) 
         UnmountCdrom(CDROM);
-      return _error->Error("Unable to locate any package files, perhaps this is not a Debian Disc");
+      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
index a5976cf3af811fb3abe6b3d0c966a6b2b6779b02..a7de09c44d6d99f1d779053fc5fef341a63cbb55 100644 (file)
@@ -450,8 +450,11 @@ bool ExecWait(pid_t Pid,const char *Name,bool Reap)
    {
       if (Reap == true)
         return false;
-      if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV)
-        return _error->Error(_("Sub-process %s received a segmentation fault."),Name);
+      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));
index 52b9bfbe6c78e18ce24d02119a56a610d93b21a2..b43771ea7aea338075eb13707be9568434cea309 100644 (file)
@@ -105,11 +105,16 @@ bool Hashes::AddFD(int Fd,unsigned long Size)
 {
    unsigned char Buf[64*64];
    int Res = 0;
-   while (Size != 0)
+   int ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF)
    {
-      Res = read(Fd,Buf,min(Size,(unsigned long)sizeof(Buf)));
-      if (Res < 0 || (unsigned)Res != min(Size,(unsigned long)sizeof(Buf)))
-        return false;
+      unsigned n = sizeof(Buf);
+      if (!ToEOF) n = min(Size,(unsigned long)n);
+      Res = read(Fd,Buf,n);
+      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
+         return false;
+      if (ToEOF && Res == 0) // EOF
+         break;
       Size -= Res;
       MD5.Add(Buf,Res);
       SHA1.Add(Buf,Res);
index a095f8f0fbebf2ba71da0d0d3c0380c9d755e1d6..2bfd70f1b88c97db1bcec38ced081c52742f357b 100644 (file)
@@ -294,11 +294,16 @@ bool MD5Summation::AddFD(int Fd,unsigned long Size)
 {
    unsigned char Buf[64*64];
    int Res = 0;
-   while (Size != 0)
+   int ToEOF = (Size == 0);
+   while (Size != 0 || ToEOF)
    {
-      Res = read(Fd,Buf,min(Size,(unsigned long)sizeof(Buf)));
-      if (Res < 0 || (unsigned)Res != min(Size,(unsigned long)sizeof(Buf)))
-        return false;
+      unsigned n = sizeof(Buf);
+      if (!ToEOF) n = min(Size,(unsigned long)n);
+      Res = read(Fd,Buf,n);
+      if (Res < 0 || (!ToEOF && (unsigned) Res != n)) // error, or short read
+         return false;
+      if (ToEOF && Res == 0) // EOF
+         break;
       Size -= Res;
       Add(Buf,Res);
    }
index ba4482131d4c1fd7b5ddc4388d3b16c9b93ed0a1..229b18037c149ef2353ec2d5e4476e5f5704e0d7 100644 (file)
@@ -175,13 +175,14 @@ DynamicMMap::DynamicMMap(unsigned long Flags,unsigned long WorkSpace) :
 #ifdef _POSIX_MAPPED_FILES
    // use anonymous mmap() to get the memory
    Base = (unsigned char*) mmap(0, WorkSpace, PROT_READ|PROT_WRITE,
-                       MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
-   if(Base != MAP_FAILED)
+                                MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
+   if(Base == MAP_FAILED)
       return;
-#endif
+#else
    // fallback to a static allocated space
    Base = new unsigned char[WorkSpace];
    memset(Base,0,WorkSpace);
+#endif
    iSize = 0;
 }
                                                                        /*}}}*/
@@ -193,7 +194,7 @@ DynamicMMap::~DynamicMMap()
    if (Fd == 0)
    {
 #ifdef _POSIX_MAPPED_FILES
-      munmap(Base, WorkSpace);
+      if(munmap(Base, WorkSpace) < 0)
 #else
       delete [] (unsigned char *)Base;
 #endif
index 1951f053bf1b15b8216dec13e4971fe45275f975..5934b5641dccba20c896252cc460f29f49d74091 100644 (file)
@@ -17,6 +17,7 @@
 #include <string>
 #include <cstring>
 #include <algorithm>
+#include <stdint.h>
 
 using std::string;
 using std::min;
index 61c582b85f0cc17567960aa1a3d509576f725867..a991b8988472a7c6c5afe370004b1fe8514e19f6 100644 (file)
@@ -1042,11 +1042,26 @@ void ioprintf(ostream &out,const char *format,...)
    va_start(args,format);
    
    // sprintf the description
-   char S[400];
+   char S[4096];
    vsnprintf(S,sizeof(S),format,args);
    out << S;
 }
                                                                        /*}}}*/
+// strprintf - C format string outputter to C++ strings                /*{{{*/
+// ---------------------------------------------------------------------
+/* This is used to make the internationalization strings easier to translate
+   and to allow reordering of parameters */
+void strprintf(string &out,const char *format,...) 
+{
+   va_list args;
+   va_start(args,format);
+   
+   // sprintf the description
+   char S[4096];
+   vsnprintf(S,sizeof(S),format,args);
+   out = string(S);
+}
+                                                                       /*}}}*/
 // safe_snprintf - Safer snprintf                                      /*{{{*/
 // ---------------------------------------------------------------------
 /* This is a snprintf that will never (ever) go past 'End' and returns a
@@ -1070,6 +1085,17 @@ char *safe_snprintf(char *Buffer,char *End,const char *Format,...)
 }
                                                                        /*}}}*/
 
+// tolower_ascii - tolower() function that ignores the locale          /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+int tolower_ascii(int c)
+{
+   if (c >= 'A' and c <= 'Z')
+      return c + 32;
+   return c;
+}
+                                                                       /*}}}*/
+
 // CheckDomainList - See if Host is in a , seperate list               /*{{{*/
 // ---------------------------------------------------------------------
 /* The domain list is a comma seperate list of domains that are suffix
index 2450bd421b899214f6ffe47a3ac9548ff157240f..e1f9e3a1f3fc3269425ed899b290552dc4fd9269 100644 (file)
@@ -60,8 +60,10 @@ bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length);
 bool TokSplitString(char Tok,char *Input,char **List,
                    unsigned long ListMax);
 void ioprintf(ostream &out,const char *format,...) APT_FORMAT2;
+void strprintf(string &out,const char *format,...) APT_FORMAT2;
 char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_FORMAT3;
 bool CheckDomainList(const string &Host, const string &List);
+int tolower_ascii(int c);
 
 #define APT_MKSTRCMP(name,func) \
 inline int name(const char *A,const char *AEnd,const char *B) {return func(A,AEnd,B,B+strlen(B));}; \
index b2b8b8fb664faf3847fe4cf8caafd68b18ff9f4a..517b771a5adb27db816073b07531834b33d429dd 100644 (file)
@@ -215,7 +215,7 @@ unsigned short debListParser::VersionHash()
       for (; Start != End; Start++)
       {
         if (isspace(*Start) == 0)
-           *I++ = tolower(*Start);
+           *I++ = tolower_ascii(*Start);
         if (*Start == '<' && Start[1] != '<' && Start[1] != '=')
            *I++ = '=';
         if (*Start == '>' && Start[1] != '>' && Start[1] != '=')
index ccd45d51bd9638acf8024527b2ad5301ba2db440..59f826d96ea2bdd722500798ee48d98d82f07bfa 100644 (file)
@@ -67,11 +67,11 @@ bool debSystem::Lock()
    if (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());
+        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 _error->Error(_("Unable to lock the administration directory (%s), "
+                               "are you root?"),AdminDir.c_str());
    }
    
    // See if we need to abort with a dirty journal
@@ -79,8 +79,8 @@ bool debSystem::Lock()
    {
       close(LockFD);
       LockFD = -1;
-      return _error->Error("dpkg was interrupted, you must manually "
-                          "run 'dpkg --configure -a' to correct the problem. ");
+      return _error->Error(_("dpkg was interrupted, you must manually "
+                             "run 'dpkg --configure -a' to correct the problem. "));
    }
 
         LockCount++;
index 85e54988e8beb104720d7204f7126c2793cd7ae3..f787f365e6ddb97a24fe99f1d8b83ae8d6f8dda6 100644 (file)
@@ -74,6 +74,31 @@ namespace
   };
 }
 
+/* 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");
+}
+
 // DPkgPM::pkgDPkgPM - Constructor                                     /*{{{*/
 // ---------------------------------------------------------------------
 /* */
@@ -587,6 +612,11 @@ static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds,
 */
 bool pkgDPkgPM::Go(int OutStatusFd)
 {
+   fd_set rfds;
+   struct timespec tv;
+   sigset_t sigmask;
+   sigset_t original_sigmask;
+
    unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024);   
    unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024);
    bool NoTriggers = _config->FindB("DPkg::NoTriggers",false);
@@ -610,20 +640,12 @@ bool pkgDPkgPM::Go(int OutStatusFd)
       { 
         {"unpacked",N_("Preparing to configure %s") },
         {"half-configured", N_("Configuring %s") },
-#if 0
-        {"triggers-awaited", N_("Processing triggers for %s") },
-        {"triggers-pending", N_("Processing triggers for %s") },
-#endif
         { "installed", N_("Installed %s")},
         {NULL, NULL}
       },
       // Remove operation
       { 
         {"half-configured", N_("Preparing for removal of %s")},
-#if 0
-        {"triggers-awaited", N_("Preparing for removal of %s")},
-        {"triggers-pending", N_("Preparing for removal of %s")},
-#endif
         {"half-installed", N_("Removing %s")},
         {"config-files",  N_("Removed %s")},
         {NULL, NULL}
@@ -660,10 +682,19 @@ bool pkgDPkgPM::Go(int OutStatusFd)
    for (vector<Item>::iterator I = List.begin(); I != List.end();)
    {
       vector<Item>::iterator J = I;
-      for (; J != List.end() && J->Op == I->Op; J++);
+      for (; J != List.end() && J->Op == I->Op; J++)
+        /* nothing */;
 
       // Generate the argument list
       const char *Args[MaxArgs + 50];
+      
+      // Now check if we are within the MaxArgs limit
+      //
+      // this code below is problematic, because it may happen that
+      // the argument list is split in a way that A depends on B
+      // and they are in the same "--configure A B" run
+      // - with the split they may now be configured in different
+      //   runs 
       if (J - I > (signed)MaxArgs)
         J = I + MaxArgs;
       
@@ -796,12 +827,28 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         rtt = tt;
         cfmakeraw(&rtt);
         rtt.c_lflag &= ~ECHO;
+        // 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(&sigmask);
+        sigaddset(&sigmask, SIGTTOU);
+        sigprocmask(SIG_BLOCK,&sigmask, &original_sigmask);
         tcsetattr(0, TCSAFLUSH, &rtt);
+        sigprocmask(SIG_SETMASK, &original_sigmask, 0);
       }
 
        // Fork dpkg
       pid_t Child;
       _config->Set("APT::Keep-Fds::",fd[1]);
+      // send status information that we are about to fork dpkg
+      if(OutStatusFd > 0) {
+        ostringstream status;
+        status << "pmstatus:dpkg-exec:" 
+               << (PackagesDone/float(PackagesTotal)*100.0) 
+               << ":" << _("Running dpkg")
+               << endl;
+        write(OutStatusFd, status.str().c_str(), status.str().size());
+      }
       Child = ExecFork();
             
       // This is the child
@@ -819,6 +866,15 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         }
         close(fd[0]); // close the read end of the pipe
 
+        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(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0)
            _exit(100);
         
@@ -838,7 +894,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
               _exit(100);
         }
 
-
         /* No Job Control Stop Env is a magic dpkg var that prevents it
            from using sigstop */
         putenv((char *)"DPKG_NO_TSTP=yes");
@@ -847,6 +902,10 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         _exit(100);
       }      
 
+      // apply ionice
+      if (_config->FindB("DPkg::UseIoNice", false) == true)
+        ionice(Child);
+
       // clear the Keep-Fd again
       _config->Clear("APT::Keep-Fds",fd[1]);
 
@@ -863,10 +922,6 @@ bool pkgDPkgPM::Go(int OutStatusFd)
         close(slave);
 
       // setups fds
-      fd_set rfds;
-      struct timespec tv;
-      sigset_t sigmask;
-      sigset_t original_sigmask;
       sigemptyset(&sigmask);
       sigprocmask(SIG_BLOCK,&sigmask,&original_sigmask);
 
index 22ee29697c88b9ded3a41c9eb5ec90116b1fc58c..15696585a513544adf04030d172527e2a197429a 100644 (file)
@@ -522,6 +522,15 @@ bool SigVerify::Verify(string prefix, string file, indexRecords *MetaIndex)
 {
    const indexRecords::checkSum *Record = MetaIndex->Lookup(file);
 
+   // we skip non-existing files in the verifcation to support a cdrom
+   // with no Packages file (just a Package.gz), see LP: #255545
+   // (non-existing files are not considered a error)
+   if(!FileExists(prefix+file))
+   {
+      _error->Warning("Skipping non-exisiting file %s", string(prefix+file).c_str());
+      return true;
+   }
+
    if (!Record) 
    {
       _error->Warning("Can't find authentication record for: %s",file.c_str());
@@ -651,6 +660,7 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList,
         if(!Verify(prefix,*I, MetaIndex)) {
            // something went wrong, don't copy the Release.gpg
            // FIXME: delete any existing gpg file?
+           _error->Discard();
            continue;    
         }
       }
index 77fe03d45b051c61bfcaca41bb546d78d2ceac00..1fc27b1a148b80215027a1658e665a0c376a1c29 100644 (file)
@@ -37,14 +37,14 @@ bool indexRecords::Load(const string Filename)                              /*{{{*/
    pkgTagFile TagFile(&Fd, Fd.Size() + 256); // XXX
    if (_error->PendingError() == true)
    {
-      ErrorText = _(("Unable to parse Release file " + Filename).c_str());
+      strprintf(ErrorText, _("Unable to parse Release file %s"),Filename.c_str());
       return false;
    }
 
    pkgTagSection Section;
    if (TagFile.Step(Section) == false)
    {
-      ErrorText = _(("No sections in Release file " + Filename).c_str());
+      strprintf(ErrorText, _("No sections in Release file %s"), Filename.c_str());
       return false;
    }
 
@@ -78,7 +78,7 @@ bool indexRecords::Load(const string Filename)                                /*{{{*/
 
    if(HashString::SupportedHashes()[i] == NULL)
    {
-      ErrorText = _(("No Hash entry in Release file " + Filename).c_str());
+      strprintf(ErrorText, _("No Hash entry in Release file %s"), Filename.c_str());
       return false;
    }  
 
index 4e10093a866ddb5c7e404d4d2753fe434c57f383..2a9756c453becc538fd89f444498873cf1cced2a 100644 (file)
@@ -164,7 +164,7 @@ unsigned long pkgCache::sHash(const string &Str) const
 {
    unsigned long Hash = 0;
    for (string::const_iterator I = Str.begin(); I != Str.end(); I++)
-      Hash = 5*Hash + tolower(*I);
+      Hash = 5*Hash + tolower_ascii(*I);
    return Hash % _count(HeaderP->HashTable);
 }
 
@@ -172,7 +172,7 @@ unsigned long pkgCache::sHash(const char *Str) const
 {
    unsigned long Hash = 0;
    for (const char *I = Str; *I != 0; I++)
-      Hash = 5*Hash + tolower(*I);
+      Hash = 5*Hash + tolower_ascii(*I);
    return Hash % _count(HeaderP->HashTable);
 }
 
index 57da9426f6f12b41ef0814655d0a4a7165afb82b..0e950310be80214cc0b5f40392e2884604b4d149 100644 (file)
@@ -102,15 +102,13 @@ bool UnMet(CommandLine &CmdL)
            if (End->Type != pkgCache::Dep::PreDepends &&
                End->Type != pkgCache::Dep::Depends && 
                End->Type != pkgCache::Dep::Suggests &&
-               End->Type != pkgCache::Dep::Recommends &&
-               End->Type != pkgCache::Dep::DpkgBreaks)
+               End->Type != pkgCache::Dep::Recommends)
               continue;
 
            // Important deps only
            if (Important == true)
               if (End->Type != pkgCache::Dep::PreDepends &&
-                  End->Type != pkgCache::Dep::Depends &&
-                  End->Type != pkgCache::Dep::DpkgBreaks)
+                  End->Type != pkgCache::Dep::Depends)
                  continue;
            
            // Verify the or group
@@ -557,6 +555,7 @@ bool Depends(CommandLine &CmdL)
    
    bool Recurse = _config->FindB("APT::Cache::RecurseDepends",false);
    bool Installed = _config->FindB("APT::Cache::Installed",false);
+   bool Important = _config->FindB("APT::Cache::Important",false);
    bool DidSomething;
    do
    {
@@ -579,7 +578,12 @@ bool Depends(CommandLine &CmdL)
         
         for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; D++)
         {
-
+           // Important deps only
+           if (Important == true)
+              if (D->Type != pkgCache::Dep::PreDepends &&
+                  D->Type != pkgCache::Dep::Depends)
+                 continue;
+                 
            pkgCache::PkgIterator Trg = D.TargetPkg();
 
            if((Installed && Trg->CurrentVer != 0) || !Installed)
@@ -1525,7 +1529,8 @@ bool Policy(CommandLine &CmdL)
         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"),
+        
+        printf("%4i %s\n",
                Plcy.GetPriority(F),Indx->Describe(true).c_str());
         
         // Print the reference information for the package
index f6e749eb561339175ab915bf99b5d74ec746d455..226d2079b6d6f0bb1603c6d12339cab08988bc43 100755 (executable)
@@ -14,34 +14,21 @@ actions = { "markauto" : 1,
             "unmarkauto": 0
           }
 
-if __name__ == "__main__":
-    apt_pkg.init()
-
-    # option parsing
-    parser = OptionParser()
-    parser.usage = "%prog [options] {markauto|unmarkauto} packages..."
-    parser.add_option("-f", "--file", action="store", type="string",
-                      dest="filename",
-                      help="read/write a different file")
-    parser.add_option("-v", "--verbose",
-                      action="store_true", dest="verbose", default=False,
-                      help="print verbose status messages to stdout")
-    (options, args) = parser.parse_args()
-    if len(args) < 2:
-        parser.error("not enough argument")
-
-    # get pkgs to change
-    if args[0] not in actions.keys():
-        parser.error("first argument must be 'markauto' or 'unmarkauto'")
-    pkgs = args[1:]
-    action = actions[args[0]]
-
-    # get the state-file
-    if not options.filename:
-        STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states"
-    else:
-        STATE_FILE=options.filename
+def show_automatic(filename):
+    if not os.path.exists(STATE_FILE):
+        return
+    auto = set()
+    tagfile = apt_pkg.ParseTagFile(open(STATE_FILE))
+    while tagfile.Step():
+        pkgname = tagfile.Section.get("Package")
+        autoInst = tagfile.Section.get("Auto-Installed")
+        if int(autoInst):
+            auto.add(pkgname)
+    print "\n".join(sorted(auto))
+    
 
+def mark_unmark_automatic(filename, action, pkgs):
+    " mark or unmark automatic flag"
     # open the statefile
     if os.path.exists(STATE_FILE):
         tagfile = apt_pkg.ParseTagFile(open(STATE_FILE))
@@ -63,3 +50,34 @@ if __name__ == "__main__":
         os.chmod(outfile.name, 0644)
         os.rename(outfile.name, STATE_FILE)
         os.chmod(STATE_FILE, 0644)
+
+
+if __name__ == "__main__":
+    apt_pkg.init()
+
+    # option parsing
+    parser = OptionParser()
+    parser.usage = "%prog [options] {markauto|unmarkauto} packages..."
+    parser.add_option("-f", "--file", action="store", type="string",
+                      dest="filename",
+                      help="read/write a different file")
+    parser.add_option("-v", "--verbose",
+                      action="store_true", dest="verbose", default=False,
+                      help="print verbose status messages to stdout")
+    (options, args) = parser.parse_args()
+
+    # get the state-file
+    if not options.filename:
+        STATE_FILE = apt_pkg.Config.FindDir("Dir::State") + "extended_states"
+    else:
+        STATE_FILE=options.filename
+
+    if args[0] == "showauto":
+        show_automatic(STATE_FILE)
+    else:
+        # get pkgs to change
+        if args[0] not in actions.keys():
+            parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'")
+        pkgs = args[1:]
+        action = actions[args[0]]
+        mark_unmark_automatic(STATE_FILE, action, pkgs)
index b40bb2c30613bc08f97c84417cef1b8d9397ed93..3cf1e28f1605584752bc2e958d0fcacd8f081939 100644 (file)
@@ -1,40 +1,67 @@
 #!/bin/sh
-#
-
 #set -e
 #
 # This file understands the following apt configuration variables:
+# Values here are the default.
+# Create /etc/apt/apt.conf.d/02periodic file to set your preference.
 #
-#  "APT::Periodic::Update-Package-Lists=1"
-#  - Do "apt-get update" automatically every n-days (0=disable)
-#    
-#  "APT::Periodic::Download-Upgradeable-Packages=0",
-#  - Do "apt-get upgrade --download-only" every n-days (0=disable)
-# 
-#  "APT::Periodic::AutocleanInterval"
-#  - Do "apt-get autoclean" every n-days (0=disable)
+#  Dir "/";
+#  - RootDir for all configuration files
 #
-#  "APT::Periodic::Unattended-Upgrade"
-#  - Run the "unattended-upgrade" security upgrade script 
-#    every n-days (0=disabled)
-#    Requires the package "unattended-upgrades" and will write
-#    a log in /var/log/unattended-upgrades
-# 
-#  "APT::Archives::MaxAge",
+#  Dir::Cache "var/apt/cache/";
+#  - Set apt package cache directory
+#
+#  Dir::Cache::Archive "archives/";
+#  - Set package archive directory
+#
+#  APT::Periodic::BackupArchiveInterval "0";
+#  - Backup after n-days if archive contents changed.(0=disable)
+#
+#  APT::Periodic::BackupLevel "3";
+#  - Backup level.(0=disable), 1 is invalid.
+#
+#  Dir::Cache::Backup "backup/";
+#  - Set periodic package backup directory
+#
+#  APT::Archives::MaxAge "0"; (old, deprecated)
+#  APT::Periodic::MaxAge "0"; (new)
 #  - Set maximum allowed age of a cache package file. If a cache 
 #    package file is older it is deleted (0=disable)
 #
-#  "APT::Archives::MaxSize",
+#  APT::Archives::MinAge "2"; (old, deprecated)
+#  APT::Periodic::MinAge "2"; (new)
+#  - Set minimum age of a package file. If a file is younger it
+#    will not be deleted (0=disable). Usefull to prevent races 
+#    and to keep backups of the packages for emergency.
+#
+#  APT::Archives::MaxSize "0"; (old, deprecated)
+#  APT::Periodic::MaxSize "0"; (new)
 #  - Set maximum size of the cache in MB (0=disable). If the cache
 #    is bigger, cached package files are deleted until the size
 #    requirement is met (the biggest packages will be deleted 
 #    first).
 #
-#  "APT::Archives::MinAge"
-#  - Set minimum age of a package file. If a file is younger it
-#    will not be deleted (0=disable). Usefull to prevent races 
-#    and to keep backups of the packages for emergency.
+#  APT::Periodic::Update-Package-Lists "0";
+#  - Do "apt-get update" automatically every n-days (0=disable)
+#    
+#  APT::Periodic::Download-Upgradeable-Packages "0";
+#  - Do "apt-get upgrade --download-only" every n-days (0=disable)
 # 
+#  APT::Periodic::Unattended-Upgrade "0";
+#  - Run the "unattended-upgrade" security upgrade script 
+#    every n-days (0=disabled)
+#    Requires the package "unattended-upgrades" and will write
+#    a log in /var/log/unattended-upgrades
+# 
+#  APT::Periodic::AutocleanInterval "0";
+#  - Do "apt-get autoclean" every n-days (0=disable)
+#
+#  APT::Periodic::Verbose "0";
+#  - Send report mail to root
+#      0:  no report             (or null string)
+#      1:  progress report       (actually any string)
+#      2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
+#      3:  + trace on            
 
 check_stamp()
 {
@@ -42,10 +69,14 @@ check_stamp()
     interval="$2"
 
     if [ $interval -eq 0 ]; then
+       debug_echo "check_stamp: interval=0"
+       # treat as no time has passed
         return 1
     fi
 
     if [ ! -f $stamp ]; then
+       debug_echo "check_stamp: missing time stamp file: $stamp."
+       # treat as enough time has passed
         return 0
     fi
 
@@ -71,10 +102,9 @@ check_stamp()
 
     delta=$(($now-$stamp))
 
-    # intervall is in days,
+    # intervall is in days, convert to sec.
     interval=$(($interval*60*60*24))
-    #echo "stampfile: $1"
-    #echo "interval=$interval, now=$now, stamp=$stamp, delta=$delta"
+    debug_echo "check_stamp: interval=$interval, now=$now, stamp=$stamp, delta=$delta (sec)"
 
     # remove timestamps a day (or more) in the future and force re-check
     if [ $stamp -gt $(($now+86400)) ]; then
@@ -93,27 +123,31 @@ check_stamp()
 update_stamp()
 {
     stamp="$1"
-
     touch $stamp
 }
 
-
-
 # we check here if autoclean was enough sizewise
 check_size_constraints()
 {
-    # min-age in days
     MaxAge=0
-    MinAge=2
-    MaxSize=0
-    CacheDir="var/cache/apt"
-    CacheArchive="archives/"
     eval $(apt-config shell MaxAge APT::Archives::MaxAge)
+    eval $(apt-config shell MaxAge APT::Periodic::MaxAge)
+
+    MinAge=2
     eval $(apt-config shell MinAge APT::Archives::MinAge)
+    eval $(apt-config shell MinAge APT::Periodic::MinAge)
+
+    MaxSize=0
     eval $(apt-config shell MaxSize APT::Archives::MaxSize)
-    eval $(apt-config shell Dir Dir)
+    eval $(apt-config shell MaxSize APT::Periodic::MaxSize)
+
+    CacheDir="var/cache/apt/"
     eval $(apt-config shell CacheDir Dir::Cache)
+    CacheDir=${CacheDir%/}
+
+    CacheArchive="archives/"
     eval $(apt-config shell CacheArchive Dir::Cache::archives)
+    CacheArchive=${CacheArchive%/}
 
     # sanity check
     if [ -z "$CacheDir" -o -z "$CacheArchive" ]; then
@@ -125,9 +159,13 @@ check_size_constraints()
 
     # check age
     if [ ! $MaxAge -eq 0 ] && [ ! $MinAge -eq 0 ]; then
+       debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge and ctime>$MinAge and mtime>$MinAge"
        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
+       debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge only"
        find $Cache -name "*.deb"  -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f
+    else
+       debug_echo "skip aging since MaxAge is 0"
     fi
     
     # check size
@@ -145,11 +183,12 @@ check_size_constraints()
            size=${du%%/*}
            # check if the cache is small enough
            if [ $size -lt $MaxSize ]; then
+               debug_echo "end remove by archive size:  size=$size < $MaxSize"
                break
            fi
 
            # check for MinAge of the file
-           if [ ! $MinAge -eq 0 ]; then 
+           if [ $MinAge -ne 0 ]; then 
                # check both ctime and mtime 
                mtime=$(stat -c %Y $file)
                ctime=$(stat -c %Z $file)
@@ -158,19 +197,94 @@ check_size_constraints()
                else
                    delta=$(($now-$ctime))
                fi
-               #echo "$file ($delta), $MinAge"
                if [ $delta -le $MinAge ]; then
-                   #echo "Skiping $file (delta=$delta)"
+                   debug_echo "skip remove by archive size:  $file, delta=$delta < $MinAgeSec"
                    break
+               else
+                   # delete oldest file
+                   debug_echo "remove by archive size: $file, delta=$delta >= $MinAgeSec (sec), size=$size >= $MaxSize"
+                   rm -f $file
                fi
            fi
-
-           # delete oldest file
-           rm -f $file
        done
     fi
 }
 
+# deal with the Apt::Periodic::BackupArchiveInterval
+do_cache_backup()
+{
+    BackupArchiveInterval="$1"
+    if [ $BackupArchiveInterval -eq 0 ]; then
+       return
+    fi
+
+    # Set default values and normalize
+    Dir="/"
+    eval $(apt-config shell Dir Dir)
+    Dir=${Dir%/}
+
+    CacheDir="var/cache/apt/"
+    eval $(apt-config shell CacheDir Dir::Cache)
+    CacheDir=${CacheDir%/}
+    if [ -z "$CacheDir" ]; then
+       debug_echo "practically empty Dir::Cache, exiting"
+       return 0
+    fi
+
+    CacheArchive="archives/"
+    eval $(apt-config shell CacheArchive Dir::Cache::Archives)
+    CacheArchive=${CacheArchive%/}
+    if [ -z "$CacheArchive" ]; then
+       debug_echo "practically empty Dir::Cache::archives, exiting"
+       return 0
+    fi
+
+    BackupLevel=3
+    eval $(apt-config shell BackupLevel APT::Periodic::BackupLevel)
+    if [ $BackupLevel -le 1 ]; then 
+       BackupLevel=2 ; 
+    fi
+    
+    CacheBackup="backup/"
+    eval $(apt-config shell CacheBackup Dir::Cache::Backup)
+    CacheBackup=${CacheBackup%/}
+    if [ -z "$CacheBackup" ]; then
+       echo "practically empty Dir::Cache::Backup, exiting" 1>&2
+       return
+    fi
+
+    Cache="${Dir}/${CacheDir}/${CacheArchive}/"
+    Back="${Dir}/${CacheDir}/${CacheBackup}/"
+    BackX="${Back}${CacheArchive}/"
+    for x in $(seq 0 1 $((${BackupLevel}-1))); do 
+       eval "Back${x}=${Back}${x}/"
+    done
+    
+    # backup after n-days if archive contents changed.
+    # (This uses hardlink to save disk space)
+    BACKUP_ARCHIVE_STAMP=/var/lib/apt/periodic/backup-archive-stamp
+    if check_stamp $BACKUP_ARCHIVE_STAMP $BackupArchiveInterval; then
+       if [ $({(cd $Cache 2>/dev/null; find . -name "*.deb"); (cd $Back0 2>/dev/null;find . -name "*.deb") ;}| sort|uniq -u|wc -l) -ne 0 ]; then
+           mkdir -p $Back
+           rm -rf $Back$((${BackupLevel}-1))
+           for y in $(seq $((${BackupLevel}-1)) -1 1); do 
+               eval BackY=${Back}$y
+               eval BackZ=${Back}$(($y-1))
+               if [ -e $BackZ ]; then 
+                   mv -f $BackZ $BackY ; 
+               fi
+           done
+           cp -la $Cache $Back ; mv -f $BackX $Back0
+           update_stamp $BACKUP_ARCHIVE_STAMP
+           debug_echo "backup with hardlinks. (success)"
+       else
+           debug_echo "skip backup since same content."
+       fi
+    else
+       debug_echo "skip backup since too new."
+    fi
+}
+
 # sleep for a random interval of time (default 30min)
 # (some code taken from cron-apt, thanks)
 random_sleep()
@@ -185,86 +299,174 @@ random_sleep()
        RANDOM=$(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -c"1-5")
     fi
     TIME=$(($RANDOM % $RandomSleep))
+    debug_echo "sleeping for $TIME seconds"
     sleep $TIME
 }
 
-# main
 
-if ! which apt-config >/dev/null; then
+debug_echo()
+{
+    # Display message if $VERBOSE >= 1
+    if [ "$VERBOSE" -ge 1 ]; then
+       echo $1 1>&2
+    fi
+}
+
+# ------------------------ main ----------------------------
+
+# check apt-config exstance
+if ! which apt-config >/dev/null ; then
        exit 0
 fi
 
+# Set VERBOSE mode from  apt-config (or inherit from environment)
+eval $(apt-config shell VERBOSE APT::Periodic::Verbose)
+debug_echo "verbose level $VERBOSE"
+if [ -z "$VERBOSE" ]; then
+    VERBOSE="0"
+fi
+if [ "$VERBOSE" -le 2 ]; then
+    # quiet for 0,1,2
+    XSTDOUT=">/dev/null"
+    XSTDERR="2>/dev/null"
+    XAPTOPT="-qq"
+    XUUPOPT=""
+else
+    XSTDOUT=""
+    XSTDERR=""
+    XAPTOPT=""
+    XUUPOPT="-d"
+fi
+if [ "$VERBOSE" -ge 3 ]; then
+    # trace output
+    set -x
+fi
+
+# laptop check, on_ac_power returns:
+#       0 (true)    System is on main power
+#       1 (false)   System is not on main power
+#       255 (false) Power status could not be determined
+# Desktop systems always return 255 it seems
+if which on_ac_power >/dev/null; then
+    on_ac_power
+    POWER=$?
+    if [ $POWER -eq 1 ]; then
+       debug_echo "exit: system NOT on main power"
+       exit 0
+    elif [ $POWER -ne 0 ]; then
+       debug_echo "power status ($POWER) undetermined, continuing"
+    fi
+    debug_echo "system is on main power."
+fi
+
+# check if we can lock the cache and if the cache is clean
+if which apt-get >/dev/null && ! apt-get check $XAPTOPT $XSTDERR ; then
+    debug_echo "error encountered in cron job with \"apt-get check\"."
+    exit 0
+fi
+
+# Global current time in seconds since 1970-01-01 00:00:00 UTC
+now=$(date +%s)
+
+# Support old Archive for compatibility.
+# Document only Periodic for all controling parameters of this script.
+
 UpdateInterval=0
+eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists)
+
 DownloadUpgradeableInterval=0
-eval $(apt-config shell UpdateInterval APT::Periodic::Update-Package-Lists DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
-AutocleanInterval=$DownloadUpgradeableInterval
-eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
+eval $(apt-config shell DownloadUpgradeableInterval APT::Periodic::Download-Upgradeable-Packages)
+
 UnattendedUpgradeInterval=0
 eval $(apt-config shell UnattendedUpgradeInterval APT::Periodic::Unattended-Upgrade)
 
+AutocleanInterval=0
+eval $(apt-config shell AutocleanInterval APT::Periodic::AutocleanInterval)
+
+BackupArchiveInterval=0
+eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval)
+
 # check if we actually have to do anything
 if [ $UpdateInterval -eq 0 ] &&
    [ $DownloadUpgradeableInterval -eq 0 ] &&
    [ $UnattendedUpgradeInterval -eq 0 ] &&
+   [ $BackupArchiveInterval -eq 0 ] &&
    [ $AutocleanInterval -eq 0 ]; then
     exit 0
 fi
 
-# laptop check, on_ac_power returns:
-#       0 (true)    System is on mains power
-#       1 (false)   System is not on mains power
-#       255 (false) Power status could not be determined
-# Desktop systems always return 255 it seems
-if which on_ac_power >/dev/null; then
-    on_ac_power
-    if [ $? -eq 1 ]; then
-       exit 0
-    fi
-fi
+# deal with BackupArchiveInterval
+do_cache_backup $BackupArchiveInterval
 
 # sleep random amount of time to avoid hitting the 
 # mirrors at the same time
 random_sleep
 
-# check if we can access the cache
-if ! apt-get check -q -q 2>/dev/null; then
-    # wait random amount of time before retrying
-    random_sleep
-    # check again
-    if ! apt-get check -q -q 2>/dev/null; then
-       echo "$0: could not lock the APT cache while performing daily cron job. "
-       echo "Is another package manager working?"
-       exit 1
-    fi
-fi
-
+# update package lists
 UPDATE_STAMP=/var/lib/apt/periodic/update-stamp
 if check_stamp $UPDATE_STAMP $UpdateInterval; then
-    if apt-get -qq update 2>/dev/null; then
-        if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
-            dbus-send --system / app.apt.dbus.updated boolean:true
-        fi
-        update_stamp $UPDATE_STAMP
+    if eval apt-get $XAPTOPT -y update $XSTDERR; then
+       debug_echo "download updated metadata (success)."
+       if which dbus-send >/dev/null && pidof dbus-daemon >/dev/null; then
+           if dbus-send --system / app.apt.dbus.updated boolean:true ; then
+               debug_echo "send dbus signal (success)"
+           else
+               debug_echo "send dbus signal (error)"
+           fi
+       else
+           debug_echo "dbus signal not send (command not available)"
+       fi
+       update_stamp $UPDATE_STAMP
+    else
+       debug_echo "download updated metadata (error)"
     fi
+else
+    debug_echo "download updated metadata (not run)."
 fi
-
+       
+# download all upgradeable packages (if it is requested)
 DOWNLOAD_UPGRADEABLE_STAMP=/var/lib/apt/periodic/download-upgradeable-stamp
 if check_stamp $DOWNLOAD_UPGRADEABLE_STAMP $DownloadUpgradeableInterval; then
-    apt-get -qq -d dist-upgrade 2>/dev/null
-    update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
+    if  eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then
+       update_stamp $DOWNLOAD_UPGRADEABLE_STAMP
+       debug_echo "download upgradable (success)"
+    else
+       debug_echo "download upgradable (error)"
+    fi
+else
+    debug_echo "download upgradable (not run)"
 fi
 
+# auto upgrade all upgradeable packages
 UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp
-if check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
-    unattended-upgrade
-    update_stamp $UPGRADE_STAMP
+if which unattended-upgrade >/dev/null && check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then
+    if unattended-upgrade $XUUPOPT; then
+       update_stamp $UPGRADE_STAMP
+       debug_echo "unattended-upgrade (success)"
+    else
+       debug_echo "unattended-upgrade (error)"
+    fi
+else
+    debug_echo "unattended-upgrade (not run)"
 fi
 
+# autoclean package archive
 AUTOCLEAN_STAMP=/var/lib/apt/periodic/autoclean-stamp
 if check_stamp $AUTOCLEAN_STAMP $AutocleanInterval; then
-    apt-get -qq autoclean
-    update_stamp $AUTOCLEAN_STAMP
+    if  eval apt-get $XAPTOPT -y autoclean $XSTDERR; then
+       debug_echo "autoclean (success)."
+       update_stamp $AUTOCLEAN_STAMP
+    else
+       debug_echo "autoclean (error)"
+    fi
+else
+    debug_echo "autoclean (not run)"
 fi
 
 # check cache size 
 check_size_constraints
+
+#
+#     vim: set sts=4 ai :
+#
+
index ea7e0469bdf514d16f24c1d1e05da992f729ce1a..970c7029fc4d279e1609df133a938877f395c178 100644 (file)
@@ -1,9 +1,13 @@
 apt (0.7.22) UNRELEASED; urgency=low
 
+  The 'not dead yet' release
+  
   [ Christian Perrier ]
   * Documentation translations:
     - Fix a typo in apt-get(8) French translation. Closes: #525043
       Thanks to Guillaume Delacour for spotting it.
+    - Updated apt.conf(5) manpgae French translation.
+      Thanks to Aurélien Couderc.
   * Translations:
     - fr.po
     - sk.po. Closes: #525857 
@@ -45,7 +49,49 @@ apt (0.7.22) UNRELEASED; urgency=low
   * honor the dpkg hold state in new Marker hooks (closes: #64141)
   * debian/apt.cron.daily:
     - if the timestamp is too far in the future, delete it
-
+  * apt-pkg/acquire.cc:
+    - make the max pipeline depth of the acquire queue configurable
+      via Acquire::Max-Pipeline-Depth
+  * apt-pkg/deb/dpkgpm.cc:
+    - add Dpkg::UseIoNice boolean option to run dpkg with ionice -c3
+      (off by default)
+    - send "dpkg-exec" message on the status fd when dpkg is run
+    - provide DPkg::Chroot-Directory config option (useful for testing)
+    - fix potential hang when in a backgroud process group
+  * apt-pkg/algorithms.cc:
+    - consider recommends when making the scores for the problem 
+      resolver
+  * apt-pkg/acquire-worker.cc:
+    - show error details of failed methods
+  * apt-pkg/contrib/fileutl.cc:
+    - if a process aborts with signal, show signal number
+  * methods/http.cc:
+    - ignore SIGPIPE, we deal with EPIPE from write in 
+      HttpMethod::ServerDie() (LP: #385144)
+  * apt-pkg/indexcopy.cc:
+    - support having CDs with no Packages file (just a Packages.gz)
+      by not forcing a verification on non-existing files
+     (LP: #255545)
+    - remove the gettext from a string that consists entirely 
+      of variables (LP: #56792)
+  * apt-pkg/cacheiterators.h:
+    - add missing checks for Owner == 0 in end()
+  * apt-pkg/indexrecords.cc:
+    - fix some i18n issues
+  * apt-pkg/contrib/strutl.h:
+    - add new strprintf() function to make i18n strings easier
+    - fix compiler warning
+  * apt-pkg/deb/debsystem.cc:
+    - make strings i18n able 
+  * fix problematic use of tolower() when calculating the version 
+    hash by using locale independant tolower_ascii() function. 
+    Thanks to M. Vefa Bicakci (LP: #80248)
+  * build fixes for g++-4.4
+  * cmdline/apt-mark:
+    - add "showauto" option to show automatically installed packages
+  * document --install-recommends and --no-install-recommends
+    (thanks to Dereck Wonnacott, LP: #126180)
+  
   [ Julian Andres Klode ]
   * apt-pkg/contrib/configuration.cc: Fix a small memory leak in
     ReadConfigFile.
@@ -54,6 +100,22 @@ apt (0.7.22) UNRELEASED; urgency=low
   * configure-index: document Dir::Etc::SourceParts and some other options
     (Closes: #459605)
   * Remove Eugene V. Lyubimkin from uploaders as requested.
+  * apt-pkg/contrib/hashes.cc, apt-pkg/contrib/md5.cc:
+    - Support reading until EOF if Size=0 to match behaviour of
+      SHA1Summation and SHA256Summation
+
+  [ Osamu Aoki ]
+  * Updated cron script to support backups by hardlinks and 
+    verbose levels.  All features turned off by default. 
+  * Added more error handlings.  Closes: #438803, #462734, #454989, 
+  * Refactored condition structure to make download and upgrade performed 
+    if only previous steps succeeded. Closes: #341970
+  * Documented all cron script related configuration items in 
+    configure-index.
+
+  [ Dereck Wonnacott ]
+  * apt-ftparchive might write corrupt Release files (LP: #46439)
+  * Apply --important option to apt-cache depends (LP: #16947) 
 
  -- Julian Andres Klode <jak@debian.org>  Fri, 03 Jul 2009 08:27:35 +0200
 
index 21605ff0e02a3f9fff69e410c1e520a470ab4e50..6c8938d8c8117a55336359c2305d2be9d2557139 100644 (file)
@@ -300,7 +300,7 @@ Reverse Provides:
      </varlistentry>
 
      <varlistentry><term><option>-i</option></term><term><option>--important</option></term>
-     <listitem><para>Print only important dependencies; for use with unmet. Causes only Depends and 
+     <listitem><para>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>.</para></listitem>
      </varlistentry>
index 50971d0f55110d5cdfd0191097fdbc0555ad8556..920f6b36eddb8889b72c0ae6990ecc7ebfbf68a9 100644 (file)
      Configuration Item: <literal>APT::Get::Compile</literal>.</para></listitem>
      </varlistentry>
 
+     <varlistentry><term><option>--install-recommends</option></term>
+     <listitem><para>Also install recommended packages.</para></listitem>
+     </varlistentry>
+
+     <varlistentry><term><option>--no-install-recommends</option></term>
+     <listitem><para>Do not install recommended packages.</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 
index 2045ca1f3d5701773af7d934bed2177008cd4f78..5dc7b5246f49927a2ac191660a0161e71e1703e8 100644 (file)
@@ -116,6 +116,56 @@ APT
   // 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
+  Periodic
+  {
+  BackupArchiveInterval "0";
+  // - Backup after n-days if archive contents changed.(0=disable)
+
+  BackupLevel "3";
+  // - Backup level.(0=disable), 1 is invalid.
+
+  // APT::Archives::MaxAge "0"; (old, deprecated)
+  MaxAge "0"; // (new)
+  // - Set maximum allowed age of a cache package file. If a cache 
+  //   package file is older it is deleted (0=disable)
+
+  // APT::Archives::MinAge "2"; (old, deprecated)
+  MinAge "2"; // (new)
+  // - Set minimum age of a package file. If a file is younger it
+  //   will not be deleted (0=disable). Usefull to prevent races 
+  //   and to keep backups of the packages for emergency.
+
+  // APT::Archives::MaxSize "0"; (old, deprecated)
+  MaxSize "0"; // (new)
+  // - Set maximum size of the cache in MB (0=disable). If the cache
+  //   is bigger, cached package files are deleted until the size
+  //   requirement is met (the biggest packages will be deleted 
+  //   first).
+
+  Update-Package-Lists "0";
+  // - Do "apt-get update" automatically every n-days (0=disable)
+  //   
+  Download-Upgradeable-Packages "0";
+  // - Do "apt-get upgrade --download-only" every n-days (0=disable)
+  //
+  Unattended-Upgrade "0";
+  // - Run the "unattended-upgrade" security upgrade script 
+  //   every n-days (0=disabled)
+  //   Requires the package "unattended-upgrades" and will write
+  //   a log in /var/log/unattended-upgrades
+  //
+  AutocleanInterval "0";
+  // - Do "apt-get autoclean" every n-days (0=disable)
+
+  Verbose "0";
+  // - Send report mail to root
+  //   0:  no report             (or null string)
+  //   1:  progress report       (actually any string)
+  //   2:  + command outputs     (remove -qq, remove 2>/dev/null, add -d)
+  //   3:  + trace on            
+  };
 };
 
 // Options for the downloading routines
@@ -214,6 +264,8 @@ Dir "/"
   // Location of the cache dir
   Cache "var/cache/apt/" {
      Archives "archives/";
+     // backup directory created by /etc/cron.daily/apt
+     Backup "backup/"; 
      srcpkgcache "srcpkgcache.bin";
      pkgcache "pkgcache.bin";     
   };
index 88ce46134fd758507dc5c8a7b5b23d214959878b..f4d8eddb803fc723807c6700db696d5cd55609ee 100644 (file)
@@ -15,7 +15,7 @@
    &apt-email;
    &apt-product;
    <!-- The last update date -->
-   <date>29 Février 2004</date>
+   <date>11 juillet 2008</date>
  </refentryinfo>
 
 <refmeta>
@@ -33,26 +33,30 @@ Le fichier <filename>apt.conf</filename> est le principal fichier de configurati
 de la collection d'outils que constitue APT&nbsp;; 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 (si elle existe) la variable d'environnement 
-<envar>APT_CONFIG</envar>&nbsp;; puis il lit les fichiers situés dans 
+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>&nbsp;; enfin il applique les options de 
-la ligne de commande qui annulent les directives de configuration, chargeant,
-si nécessaire, d'autres fichiers de configuration.
+la ligne de commande qui prévalent sur les directives de configuration, chargeant
+si nécessaire d'autres fichiers de configuration.
    </para>
 <para>
 Le fichier de configuration est construit comme un arbre d'options
 organisées en groupes fonctionnels. On se sert du double deux points («&nbsp;::&nbsp;») 
 pour indiquer une option&nbsp;; par exemple, <literal>APT::Get::Assume-Yes</literal> est
-une option pour le groupe d'outils APT, destinée Ã  l'outil Get. Les options
-n'héritent pas des groupes de leurs parents.
+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.
    </para>
 <para>
 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 un commentaire et elle est ignorée.
+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&nbsp;:
-   <literal>APT::Get::Assume-Yes "true";</literal> 
+<informalexample><programlisting>
+<literal>APT::Get::Assume-Yes "true";</literal> 
+     </programlisting></informalexample>
 Le point-virgule final est obligatoire et les guillemets sont optionnels.
 On peut déclarer un nouveau champ d'action avec des accolades, comme 
 suit&nbsp;:
@@ -68,10 +72,9 @@ APT {
 </programlisting></informalexample>
 
 <para>
-avec des retours Ã  la ligne pour faciliter la lecture. On peut créer des 
-listes en ouvrant un champ d'action et en mettant un seul mot entre 
-apostrophes suivi d'un point-virgule. On peut mettre plusieurs entrées,
-séparées par un point-virgule.
+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 pour chaque Ã©lément de la liste.
 </para>
 
 <informalexample><programlisting>   
@@ -79,14 +82,21 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";};
 </programlisting></informalexample>
 
 <para>
-Les modèles <filename>&docdir;examples/apt.conf</filename> &configureindex;
+Les modèles <filename>&docdir;examples/apt.conf</filename> et &configureindex;
 montrent Ã  quoi devrait ressembler le fichier de configuration.
    </para>
 <para>
+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>.
+   </para>
+<para>
 Deux Ã©léments spéciaux sont autorisés&nbsp;: <literal>#include</literal> et 
-<literal>#clear</literal>. <literal>#include</literal> inclut le fichier donné en argument,
-à moins que le nom ne se termine par une barre oblique. <literal>#clear</literal> sert Ã  
-effacer une liste de noms.
+<literal>#clear</literal>. <literal>#include</literal> inclut le fichier donné en
+argument, Ã  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.
    </para>
 <para>
 Tous les outils d'APT possèdent une option <option>-o</option> qui permet de 
@@ -95,20 +105,31 @@ 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 Â«&nbsp;::&nbsp;» au nom 
 de la liste.
- </para>
  </para>
 </refsect1>
 
 <refsect1><title>Le groupe APT</title>
-<para>   
-Ce groupe d'options contrôle aussi bien le comportement global d'APT que
-la prise en compte des options pour chaque outil.
+<para>
+Ce groupe d'options contrôle le comportement global d'APT et contient Ã©galement
+des options communes Ã  tous les outils.
 </para>
    <variablelist>
 <varlistentry><term>Architecture</term>
 <listitem><para>
 L'architecture du système&nbsp;; cette option positionne l'architecture Ã  utiliser 
-pour récupérer des fichiers et analyser des listes de paquets. L'architecture 
-interne par défaut est celle pour laquelle APT a Ã©té compilé.
+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é.
+     </para></listitem>
+</varlistentry>
+
+<varlistentry><term>Default-Release</term>
+<listitem><para>
+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&nbsp;: Â«&nbsp;stable&nbsp;»,
+«&nbsp;testing&nbsp;», Â«&nbsp;4.0&nbsp;», Â«&nbsp;5.0*&nbsp;». Les noms de codes
+des distributions («&nbsp;etch&nbsp;», Â«&nbsp;lenny&nbsp;», etc.) ne sont pas
+permis pour l'instant. Voir aussi &apt-preferences;.
      </para></listitem>
 </varlistentry>
 
@@ -123,7 +144,7 @@ dans sa prise de d
 <varlistentry><term>Clean-Installed</term>
 <listitem><para>
 Avec cette option qui est activée par défaut, la fonctionnalité Â«&nbsp;autoclean&nbsp;»
-supprime tout paquet qui ne peut plus Ãªtre récupéré dans le cache.
+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.
@@ -134,9 +155,9 @@ direct pour les r
 <listitem><para>
 Désactive la configuration immédiate&nbsp;; 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. C'est peut-être nécessaire sur des systèmes
-lents Ã  un seul utilisateur mais c'est extrêmement dangereux et cela peut 
-faire Ã©chouer les scripts d'installation, voire pire.
+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.
      </para></listitem>
 </varlistentry>
@@ -155,39 +176,37 @@ ou tous les paquets dont ces paquets d
 
 <varlistentry><term>Cache-Limit</term>
 <listitem><para>
-APT utilise un fichier cache d'une taille mémoire fixe pour ranger les
-informations du fichier Â«&nbsp;available&nbsp;». Cette option fixe la taille 
-de ce cache.
+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 pour le chargement de ce cache.
      </para></listitem>
 </varlistentry>
 
 <varlistentry><term>Build-Essential</term>
 <listitem><para>
      Cette option définit les paquets qui sont considérés comme faisant partie
-des dépendances essentielles pour la construction des paquets.
+des dépendances essentielles pour la construction de paquets.
      </para></listitem>
 </varlistentry>
 
 <varlistentry><term>Get</term>
 <listitem><para>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.
+veuillez consulter sa documentation pour avoir plus d'informations sur les options
+en question.
      </para></listitem>
 </varlistentry>
 
 <varlistentry><term>Cache</term>
-<listitem><para>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.
+<listitem><para>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.
      </para></listitem>
 </varlistentry>
 
 <varlistentry><term>CDROM</term>
-<listitem><para>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.
+<listitem><para>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.
      </para></listitem>
 </varlistentry>
 </variablelist>
@@ -199,13 +218,20 @@ Le groupe d'options <literal>Acquire</literal> contr
 les gestionnaires d'URI.
 
    <variablelist>
+<varlistentry><term>PDiffs</term>
+<listitem><para>Essayer de télécharger les fichiers différentiels appelés
+<literal>PDiffs</literal> pour les paquets ou les fichiers sources, plutôt que
+de les télécharger entièrement. Par défaut Ã  Â«&nbsp;true&nbsp;».
+     </para></listitem>
+</varlistentry>
+
 <varlistentry><term>Queue-Mode</term>
 <listitem><para>
-Le mode file d'attente&nbsp;; <literal>Queue-Mode</literal> peut prendre une valeur 
-parmi <literal>host</literal> ou <literal>access</literal> et cela 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.
+Le mode de file d'attente&nbsp;; <literal>Queue-Mode</literal> peut prendre les
+valeurs <literal>host</literal> ou <literal>access</literal> et cela 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.
      </para></listitem>
 </varlistentry>
 
@@ -227,30 +253,32 @@ Par d
 
 <varlistentry><term>http</term>
 <listitem><para>
-URI HTTP ; http::Proxy est le mandataire (proxy) http Ã  utiliser par défaut.
+URI HTTP&nbsp;; http::Proxy est le mandataire (proxy) HTTP Ã  utiliser par défaut.
 Il se présente sous la forme standard&nbsp;:
-<literal>http://[[user][:pass]@]host[:port]/</literal>. En utilisant la syntaxe&nbsp;:
-<literal>http::Proxy::&lt;host&gt;</literal>, où le mot-clé spécial <literal>DIRECT</literal>
-indique de n'utiliser aucun mandataire, on peut spécifier un mandataire
-pour chaque machine distante. La variable d'environnement <envar>http_proxy</envar>
-remplace tous ces paramètres.
+<literal>http://[[user][:pass]@]host[:port]/</literal>. On peut spécifier un
+mandataire particulier par hôte distant en utilisant la syntaxe&nbsp;:
+<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.
+Lorsqu'elle est définie, la variable d'environnement <envar>http_proxy</envar>
+annule et remplace toutes les options de mandataire HTTP.
      </para>
 <para>
-Trois options de configuration sont fournies pour le contrôle des caches qui
-sont compatibles avec HTTP/1.1. <literal>No-Cache</literal> signifie que le mandataire
-ne doit pas du tout utiliser les réponses qu'il a stockées&nbsp;; <literal>Max-Age</literal>
+Trois options de configuration sont fournies pour le contrôle des caches compatibles
+avec HTTP/1.1. <literal>No-Cache</literal> signifie que le mandataire ne doit jamais
+utiliser les réponses qu'il a stockées&nbsp;; <literal>Max-Age</literal>
 sert uniquement pour les fichiers d'index&nbsp;: cela demande au cache de les 
 mettre Ã  jour quand leur ancienneté est supérieure au nombre de secondes 
-donné. Debian met Ã  jour son fichier d'index de manière journalière, la
+donné. Debian met Ã  jour ses fichiers d'index de manière quotidienne&nbsp;; la
 valeur par défaut est donc de 1 jour. <literal>No-Store</literal> sert uniquement
-pour les fichiers d'archive&nbsp;: cela demande au cache de ne jamais garder 
+pour les fichiers d'archive&nbsp; et demande au cache de ne jamais garder 
 la requête. Cela peut Ã©viter de polluer un cache mandataire avec des 
 fichiers .deb très grands. Note&nbsp;: Squid 2.0.2 ne prend en compte aucune de 
 ces options.
      </para>
 <para>
 L'option <literal>timeout</literal> positionne le compteur de temps mort (timeout)
-utilisé par la méthode&nbsp;: cela vaut pour tout (connexion, données).
+utilisé par la méthode. Cela vaut pour tout, connexion et données.
      </para>
 <para>
 Une option de configuration est fournie pour contrôler la profondeur du tube
@@ -264,27 +292,62 @@ ne respectent pas la RFC 2068.
      </para></listitem>
 </varlistentry>
 
+<varlistentry><term>https</term>
+<listitem><para>
+URI HTTPS. Les options de contrôle de cache et de mandataire (proxy) sont les
+mêmes que pour la méthode <literal>http</literal>. L'option
+<literal>Pipeline-Depth</literal> n'est pas encore supportée.
+     </para>
+
+<para>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 clef 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 'TLSv1' ou 'SSLv3'.
+     </para>
+<para>Chacune de ces options peut Ãªtre spécifiée pour un hôte particulier en
+utilisant <literal>&lt;hôte&gt;::CaInfo</literal>,
+<literal>&lt;hôte&gt;::Verify-Peer</literal>,
+<literal>&lt;hôte&gt;::Verify-Host</literal>,
+<literal>&lt;hôte&gt;::SslCert</literal>,
+<literal>&lt;hôte&gt;::SslKey</literal> et
+<literal>&lt;hôte&gt;::SslForceVersion</literal> respectivement.
+     </para></listitem>
+</varlistentry>
+
 <varlistentry><term>ftp</term>
 <listitem><para>
-URI FTP ; ftp::Proxy est le serveur mandataire par défaut Ã  utiliser. Il se
-présente sous la forme standard&nbsp;: 
-<literal>ftp://[[user][:pass]@]host[:port]/</literal>&nbsp;; il est remplacé par la 
-variable d'environnement <envar>ftp_proxy</envar>. Pour utiliser un mandataire ftp,
-vous devez renseigner l'entrée <literal>ftp::ProxyLogin</literal> dans le fichier de
-configuration. Cette entrée spécifie les commandes qui disent au serveur
-mandataire comment se connecter. Voyez &configureindex; pour savoir
-comment faire. Les variables de substitution disponibles sont&nbsp;:
-<literal>$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>$(SITE_USER)</literal>,
-<literal>$(SITE_PASS)</literal>, <literal>$(SITE)</literal>, et <literal>$(SITE_PORT)</literal>.
-Chacune correspond Ã  un Ã©lément de l'URI.
+URI FTP&nbsp;; ftp::Proxy est le mandataire (proxy) FTP Ã  utiliser par défaut.
+Il se présente sous la forme standard&nbsp;: 
+<literal>ftp://[[user][:pass]@]host[:port]/</literal>. On peut spécifier un
+mandataire particulier par hôte distant en utilisant la syntaxe&nbsp;:
+<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. Lorsqu'elle est définie, 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 disponibles sont&nbsp;:
+<literal>$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>,
+<literal>$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>,
+<literal>$(SITE)</literal> et <literal>$(SITE_PORT)</literal>. Chacune
+correspond Ã  l'élément respectif de l'URI.
      </para>
 <para>
-L'option <literal>timeout</literal> positionne le compteur de temps mort (timeout)
-utilisé par la méthode&nbsp;: cela vaut pour tout (connexion, données).
+L'option <literal>timeout</literal> positionne le compteur de temps mort
+(timeout) utilisé par la méthode. Cela vaut pour tout, connexion et données.
      </para>
 <para>
 Plusieurs options de configuration sont fournies pour contrôler le mode 
-passif. Généralement, c'est plus sûr d'activer le mode passif&nbsp;; cela 
+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 
 Â«&nbsp;port&nbsp;» de ftp
@@ -293,16 +356,18 @@ connexions qui passent par un mandataire ou pour une machine
 spécifique (examinez le modèle de fichier de configuration).
      </para>
 <para>
-On peut utiliser un mandataire FTP pour atteindre une cible 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 fixer
-cette variable dans le fichier de configuration et il n'est pas recommandé
-d'utiliser HTTP par FTP Ã  cause de son peu d'efficacité.
+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 la faible efficacité de cette
+méthode.
      </para>
 <para>
 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 
-«&nbsp;false&nbsp;»&nbsp;; ce qui signifie que ces commandes ne sont 
+«&nbsp;false&nbsp;» ce qui signifie que ces commandes ne sont 
 utilisées que pour une connexion de type IPv6. Quand elle vaut 
 Â«&nbsp;true&nbsp;», on les utilise même si la connexion est de type IPv4. La 
 plupart des serveurs FTP ne suivent pas la RFC 2428.
@@ -311,7 +376,7 @@ plupart des serveurs FTP ne suivent pas la RFC 2428.
 
 <varlistentry><term>cdrom</term>
 <listitem><para>
-URI CDROM&nbsp;; la seule option de configuration pour les URI de CDROM
+URI cédérom&nbsp;; la seule option de configuration pour les URI de cédérom
 est le point de montage&nbsp;: <literal>cdrom::Mount</literal>&nbsp;; il doit 
 représenter le point de montage du lecteur de cédérom indiqué dans 
 <filename>/etc/fstab</filename>. 
@@ -326,9 +391,9 @@ peuvent 
 
      <varlistentry><term>gpgv</term>
      <listitem><para>
-URI GPGV ; la seule option pour les URI GPGV est celle qui permet de
+URI GPGV&nbsp;; la seule option pour les URI GPGV est celle qui permet de
      passer des paramètres Ã  gpgv.
-     <literal>gpgv::Options</literal> Options supplémentaires passées Ã 
+     <literal>gpgv::Options</literal>&nbsp;: options supplémentaires passées Ã 
      gpgv.
 </para>
          </listitem>
@@ -341,7 +406,8 @@ URI GPGV ; la seule option pour les URI GPGV est celle qui permet de
 <para>   
 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.
+téléchargés et <literal>status</literal> est le nom du fichier d'état de
+&dpkg;.
 <literal>preferences</literal> concerne APT&nbsp;: c'est le nom du fichier des 
 préférences.
 <literal>Dir::State</literal> contient le répertoire par défaut préfixé Ã  tous les
@@ -353,8 +419,8 @@ ou <filename>./</filename>.
 cache local&nbsp;: par exemple, les deux caches de paquets 
 <literal>srcpkgcache</literal> et <literal>pkgcache</literal>, et aussi 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 laissant leur nom en blanc. Cela ralentit 
-le démarrage mais cela sauve de l'espace disque. Il vaut mieux se passer du 
+empêcher la création des caches en saisissant un nom vide. Cela ralentit 
+le démarrage mais sauve 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>.
@@ -375,11 +441,22 @@ de configuration est charg
 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>&nbsp;; <literal>gzip</literal>, 
-<literal>Dpkg</literal>, <literal>apt-get</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.
- </para>
+   </para>
+<para>
+L'option de configuration <literal>RootDir</literal> a une signification
+particulière. Lorsqu'elle est définie, tous les chemins déclarés dans
+<literal>Dir::</literal> 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>.
+   </para>
 </refsect1>
 
 <refsect1><title>APT et DSelect</title>
@@ -406,14 +483,14 @@ de nouveaux paquets.
 
 <varlistentry><term>Options</term>
 <listitem><para>
-Le contenu de cette variable est passé Ã  &apt-get; avec les options de la ligne
-de commande quand ce programme est utilisé dans la phase d'installation.
+Le contenu de cette variable est passé comme options de ligne de commande Ã 
+&apt-get; lors de la phase d'installation.
      </para></listitem>
 </varlistentry>
 <varlistentry><term>UpdateOptions</term>
 <listitem><para>
-Le contenu de cette variable est passé Ã  &apt-get; avec les options de la 
-ligne de commande quand ce programme est utilisé dans la phase de mise Ã  jour.
+Le contenu de cette variable est passé comme options de ligne de commande Ã 
+&apt-get; lors de la phase de mise Ã  jour.
      </para></listitem>
 </varlistentry>
 
@@ -427,7 +504,7 @@ qu'en cas d'erreur que l'on propose 
 </variablelist>
 </refsect1>
 
-<refsect1><title>Comment APT appelle Dpkg</title>
+<refsect1><title>Comment APT appelle &dpkg;</title>
 <para>   
 Plusieurs directives de configuration contrôlent la manière dont APT
 invoque &dpkg;&nbsp;: elles figurent dans la section <literal>DPkg</literal>.
@@ -435,8 +512,8 @@ invoque &dpkg;&nbsp;: elles figurent dans la section <literal>DPkg</literal>.
    <variablelist>
 <varlistentry><term>Options</term>
 <listitem><para>
-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 liste est
+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 argument Ã  &dpkg;.
      </para></listitem>
 </varlistentry>
@@ -450,7 +527,7 @@ liste. Les commandes sont appel
 </varlistentry>
 <varlistentry><term>Pre-Install-Pkgs</term>
 <listitem><para>
-Il s'agit d'une liste de commandes shell Ã  exécuter avant d'appeler Dpkg
+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>&nbsp;: APT s'arrête dès que l'une d'elles Ã©choue. Sur 
@@ -467,7 +544,7 @@ commande pass
 </varlistentry>
 <varlistentry><term>Run-Directory</term>
 <listitem><para>
-APT se place dans ce répertoire avant d'appeler Dpkg&nbsp;; par défaut c'est 
+APT se place dans ce répertoire avant d'appeler &dpkg;&nbsp;; par défaut c'est 
 le répertoire <filename>/</filename>.
      </para></listitem>
 </varlistentry>
@@ -481,25 +558,262 @@ cr
 </variablelist>
  </refsect1>
 
+<refsect1>
+<title>Options Â«&nbsp;Periodic&nbsp;» et Â«&nbsp;Archive&nbsp;»</title>
+<para>
+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>/etc/cron.daily/apt</literal>, lancé
+quotidiennement.
+   </para>
+<variablelist>
+<varlistentry><term>APT::Periodic</term>
+<para>Les options de cette section permettent de configurer la fréquence
+d'exécution des tâches APT lancées automatiquement. Ces paramètre prennent
+comme valeurs des périodicités d'exécution en nombre de jours.
+   </para>
+<listitem><para>
+<literal>Update-Package-List</literal>&nbsp;: périodicité de mise Ã  jour de la
+liste des paquets disponibles. (0 = désactivé)
+     </para></listitem>
+<listitem><para>
+<literal>Download-Upgradable-Packages</literal>&nbsp;: périodicité de
+téléchargement dans le cache des paquets pour lesquels une mise Ã  jour est
+disponible. (0 = désactivé)
+     </para></listitem>
+<listitem><para>
+<literal>AutocleanInterval</literal>&nbsp;: périodicité des
+«&nbsp;autoclean&nbsp;», c'est Ã  dire de la suppression du cache des paquets
+qui ne peuvent plus Ãªtre téléchargés. (0 = désactivé)
+     </para></listitem>
+<listitem><para>
+<literal>Unattended-Upgrade</literal>&nbsp;: périodicité de mise Ã  jour
+automatique du système sans intervention humaine. Le paquet
+<literal>unattended-upgrades</literal> doit Ãªtre installé pour que cette tâche
+s'exécute. Le cas Ã©chéant un fichier journal est Ã©crit dans
+<literal>/var/log/unattended-upgrades</literal>. (0 = désactivé)
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>APT::Archive</term>
+<para>Les options de la section APT::Archive permettent de contrôler la taille
+du cache de paquets.
+   </para>
+<listitem><para>
+<literal>MaxAge</literal>&nbsp;: ancienneté maximale d'un paquet dans le cache,
+en nombre de jours. Les paquets plus anciens sont supprimés. (0 = désactivé)
+     </para></listitem>
+<listitem><para>
+<literal>MaxSize</literal>&nbsp;: taille maximale du cache en Mo. (0 =
+désactive) Si ce maximum est dépassé, des paquets sont supprimés jusqu'à ce
+que la taille du cache repasse sous la limite. Les paquets les plus volumineux
+sont supprimés en premier.
+     </para></listitem>
+<listitem><para>
+<literal>MinAge</literal>&nbsp;: age minimum d'un paquet du cache, en nombre de
+jours (0 = désactivé). Un paquet plus récent ne sera pas supprimé. Cette option
+est utile pour garder Ã  disposition une version des paquets en cas de problème
+grave.
+     </para></listitem>
+</varlistentry>
+</variablelist>
+</refsect1>
+
 <refsect1><title>Les options de débogage</title>
-<para>   
-La plupart des options de la section <literal>debug</literal> n'ont aucun intérêt
-pour le simple utilisateur&nbsp;; cependant, 
-<literal>Debug::pkgProblemResolver</literal> affiche d'intéressantes informations sur 
-les décisions que prend la commande dist-upgrade. <literal>Debug::NoLocking</literal> 
-désactive le verrouillage de fichier de manière Ã  ce que APT puisse effectuer 
-quelques opérations sans Ãªtre Â«&nbsp;root&nbsp;» et 
-<literal>Debug::pkgDPkgPM</literal> affiche la ligne de commande Ã  chaque appel de 
-Dpkg. <literal>Debug::IdentCdrom</literal> désactive l'inclusion de 
-données de type statfs dans les ID de CDROM.
-<literal>Debug::Acquire::gpgv</literal> Débogage de la méthode gpgv.
- </para>
+<para>
+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 librairies 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&nbsp;:
+   </para>
+<itemizedlist>
+<listitem><para>
+<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>.
+     </para></listitem>
+<listitem><para>
+<literal>Debug::NoLocking</literal> désactive le verrouillage de fichier de
+manière Ã  ce que APT puisse effectuer quelques opérations (telles que
+<literal>apt-get -s install</literal>) sans Ãªtre Â«&nbsp;root&nbsp;».
+     </para></listitem>
+<listitem><para>
+<literal>Debug::pkgDPkgPM</literal> affiche la ligne de commande Ã  chaque appel
+de &dpkg;.
+     </para></listitem>
+<listitem><para>
+<literal>Debug::IdentCdrom</literal> désactive l'inclusion de données de type
+statfs dans les ID de cédérom.
+     </para></listitem>
+</itemizedlist>
+
+<para>Voici une liste complète des options de débogage de APT.</para>
+<variablelist>
+<varlistentry><term>Debug::Acquire::cdrom</term>
+<listitem><para>
+Affiche les informations concernant les sources de type cdrom://
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::Acquire::ftp</term>
+<listitem><para>
+Affiche les informations concernant le téléchargement de paquets par FTP.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::Acquire::http</term>
+<listitem><para>
+Affiche les informations concernant le téléchargement de paquets par HTTP.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::Acquire::https</term>
+<listitem><para>
+Affiche les informations concernant le téléchargement de paquets par HTTPS.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::Acquire::gpgv</term>
+<listitem><para>
+Affiche les informations relatives Ã  la vérification de signatures
+cryptographiques avec <literal>gpg</literal>.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::aptcdrom</term>
+<listitem><para>
+Affiche des informations concernant l'accès aux collections de paquets
+stockées sur cédérom.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::BuildDeps</term>
+<listitem><para>
+Décrit le processus de résolution des dépendances pour la construction de
+paquets source (&nbsp;«&nbsp;build-dependencies&nbsp;»&nbsp;) par &apt-get;.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::Hashes</term>
+<listitem><para>
+Affiche toutes les clefs de hachage cryptographiques générées par les
+librairies APT.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::IdentCdrom</term>
+<listitem><para>Désactive l'inclusion des données de type
+<literal>statfs</literal> pour la génération des ID de cédérom, Ã  savoir le
+nombre de blocs libres et utilisés sur le système de fichier du cédérom.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::NoLocking</term>
+<listitem><para>
+Désactive le verrouillage de fichiers. Cela permet par exemple de lancer deux
+instances de Â«&nbsp;apt-get update&nbsp;» en même temps.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgAcquire</term>
+<listitem><para>
+Trace les ajouts et suppressions d'éléments de la queue globale de
+téléchargement.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgAcquire::Auth</term>
+<listitem><para>
+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.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgAcquire::Diffs</term>
+<listitem><para>
+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.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgAcquire::RRed</term>
+<listitem><para>
+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.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgAcquire::Worker</term>
+<listitem><para>
+Affiche toutes les interactions avec les processus enfants qui se chargent
+effectivement des téléchargements.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgAcquire::pkgAutoRemove</term>
+<listitem><para>
+Affiche les changements concernant le marquage des paquets comme installés
+automatiquement, et la suppression des paquets inutiles. 
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgDepCache::AutoInstall</term>
+<listitem><para>
+Génère 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&nbsp;; voir
+<literal>Debug::pkgProblemResolver</literal> pour ce dernier.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgInitConfig</term>
+<listitem><para>
+Au lancement, affiche l'ensemble de la configuration sur la sortie d'erreur
+standard.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgDPkgPM</term>
+<listitem><para>
+Affiche la commande exacte d'invocation de &dpkg; Ã  chaque appel&nbsp;; les
+arguments sont séparés par des espaces.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgDPkgProgressReporting</term>
+<listitem><para> 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.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgOrderList</term>
+<listitem><para>
+Affiche les Ã©tapes de l'algorithme utilisé pour choisir l'ordre dans lequel APT
+passe les paquets Ã  &dpkg;.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgPackageManager</term>
+<listitem><para>
+Affiche le détail des opérations liées Ã  l'invocation de &dpkg;. 
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgPolicy</term>
+<listitem><para>
+Au lancement, affiche la priorité de chaque liste de paquets.
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::pkgProblemResolver</term>
+<listitem><para>
+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).
+     </para></listitem>
+</varlistentry>
+<varlistentry><term>Debug::sourceList</term>
+<listitem><para>
+Affiche les fournisseurs déclarés dans le fichier
+<filename>/etc/apt/vendors.list</filename>.
+     </para></listitem>
+</varlistentry>
+<!-- 2009/07/11 Utilisé nulle part actuellement, le code est commenté.
+<varlistentry><term>Debug::Vendor</term>
+<listitem><para>
+Affiche les informations sur la recherche de fournisseurs.
+     </para></listitem>
+</varlistentry>
+-->
+</variablelist>
+
 </refsect1>
 
 <refsect1><title>Exemples</title>
 <para>
-Le fichier &configureindex; contient un modèle de fichier montrant les valeurs par
-défaut de toutes les options possibles.
+Le fichier &configureindex; contient un modèle de fichier montrant des exemples
+pour toutes les options existantes.
  </para>
 </refsect1>
 
@@ -514,4 +828,4 @@ d
 
 &manbugs;
 &deux-traducteurs;
-</refentry>
\ No newline at end of file
+</refentry>
index a4e4356f925febe67e72a3db83aa09b3795b1ad4..6e161c752ac4cbeacb3f8192a5adcb7d22fd01db 100644 (file)
@@ -52,7 +52,7 @@ class FTWScanner
    {
       if (ErrorPrinted == false && Quiet <= Priority)
       {
-        cout << endl;
+        c1out << endl;
         ErrorPrinted = true;
       }         
    }
index 470b47fd4afbcf1c08b05f8b442356c3e1d0f279..150c1d315ebe33ee530150a20e8a72c1c6b2bf16 100644 (file)
@@ -292,7 +292,7 @@ bool GPGVMethod::Fetch(FetchItem *Itm)
       // least one bad signature. good signatures and NoPubKey signatures
       // happen easily when a file is signed with multiple signatures
       if(GoodSigners.empty() or !BadSigners.empty())
-        return _error->Error(errmsg.c_str());
+        return _error->Error("%s", errmsg.c_str());
    }
       
    // Just pass the raw output up, because passing it as a real data
index 1bf798da44a9e02eac0d715186993380bd3146e8..006e89394a5282e7bc7c0125a638030fe41a5627 100644 (file)
@@ -1316,9 +1316,11 @@ int HttpMethod::Loop()
 int main()
 {
    setlocale(LC_ALL, "");
+   // ignore SIGPIPE, this can happen on write() if the socket
+   // closes the connection (this is dealt with via ServerDie())
+   signal(SIGPIPE, SIG_IGN);
 
    HttpMethod Mth;
-   
    return Mth.Loop();
 }
 
index 199b7f843aaee9b2044d637af469f58a019c459a..b8305c25ce7b85f8f446c25a96b26d77c9a69a16 100644 (file)
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-07-01 10:24+0200\n"
+"POT-Creation-Date: 2009-07-21 15:49+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"
@@ -15,153 +15,148 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: cmdline/apt-cache.cc:143
+#: cmdline/apt-cache.cc:141
 #, c-format
 msgid "Package %s version %s has an unmet dep:\n"
 msgstr ""
 
-#: cmdline/apt-cache.cc:183 cmdline/apt-cache.cc:552 cmdline/apt-cache.cc:640
-#: cmdline/apt-cache.cc:793 cmdline/apt-cache.cc:1013
-#: cmdline/apt-cache.cc:1415 cmdline/apt-cache.cc:1566
+#: cmdline/apt-cache.cc:181 cmdline/apt-cache.cc:550 cmdline/apt-cache.cc:644
+#: cmdline/apt-cache.cc:800 cmdline/apt-cache.cc:1022
+#: cmdline/apt-cache.cc:1423 cmdline/apt-cache.cc:1575
 #, c-format
 msgid "Unable to locate package %s"
 msgstr ""
 
-#: cmdline/apt-cache.cc:247
+#: cmdline/apt-cache.cc:245
 msgid "Total package names: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:287
+#: cmdline/apt-cache.cc:285
 msgid "  Normal packages: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:288
+#: cmdline/apt-cache.cc:286
 msgid "  Pure virtual packages: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:289
+#: cmdline/apt-cache.cc:287
 msgid "  Single virtual packages: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:290
+#: cmdline/apt-cache.cc:288
 msgid "  Mixed virtual packages: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:291
+#: cmdline/apt-cache.cc:289
 msgid "  Missing: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:293
+#: cmdline/apt-cache.cc:291
 msgid "Total distinct versions: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:295
+#: cmdline/apt-cache.cc:293
 msgid "Total distinct descriptions: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:297
+#: cmdline/apt-cache.cc:295
 msgid "Total dependencies: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:300
+#: cmdline/apt-cache.cc:298
 msgid "Total ver/file relations: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:302
+#: cmdline/apt-cache.cc:300
 msgid "Total Desc/File relations: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:304
+#: cmdline/apt-cache.cc:302
 msgid "Total Provides mappings: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:316
+#: cmdline/apt-cache.cc:314
 msgid "Total globbed strings: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:330
+#: cmdline/apt-cache.cc:328
 msgid "Total dependency version space: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:335
+#: cmdline/apt-cache.cc:333
 msgid "Total slack space: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:343
+#: cmdline/apt-cache.cc:341
 msgid "Total space accounted for: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:471 cmdline/apt-cache.cc:1213
+#: cmdline/apt-cache.cc:469 cmdline/apt-cache.cc:1222
 #, c-format
 msgid "Package file %s is out of sync."
 msgstr ""
 
-#: cmdline/apt-cache.cc:1289
+#: cmdline/apt-cache.cc:1297
 msgid "You must give exactly one pattern"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1443
+#: cmdline/apt-cache.cc:1451
 msgid "No packages found"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1520
+#: cmdline/apt-cache.cc:1528
 msgid "Package files:"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1527 cmdline/apt-cache.cc:1613
+#: cmdline/apt-cache.cc:1535 cmdline/apt-cache.cc:1622
 msgid "Cache is out of sync, can't x-ref a package file"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1528
-#, c-format
-msgid "%4i %s\n"
-msgstr ""
-
 #. Show any packages have explicit pins
-#: cmdline/apt-cache.cc:1540
+#: cmdline/apt-cache.cc:1549
 msgid "Pinned packages:"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1552 cmdline/apt-cache.cc:1593
+#: cmdline/apt-cache.cc:1561 cmdline/apt-cache.cc:1602
 msgid "(not found)"
 msgstr ""
 
 #. Installed version
-#: cmdline/apt-cache.cc:1573
+#: cmdline/apt-cache.cc:1582
 msgid "  Installed: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:1575 cmdline/apt-cache.cc:1583
+#: cmdline/apt-cache.cc:1584 cmdline/apt-cache.cc:1592
 msgid "(none)"
 msgstr ""
 
 #. Candidate Version
-#: cmdline/apt-cache.cc:1580
+#: cmdline/apt-cache.cc:1589
 msgid "  Candidate: "
 msgstr ""
 
-#: cmdline/apt-cache.cc:1590
+#: cmdline/apt-cache.cc:1599
 msgid "  Package pin: "
 msgstr ""
 
 #. Show the priority tables
-#: cmdline/apt-cache.cc:1599
+#: cmdline/apt-cache.cc:1608
 msgid "  Version table:"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1614
+#: cmdline/apt-cache.cc:1623
 #, c-format
 msgid "       %4i %s\n"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1709 cmdline/apt-cdrom.cc:134 cmdline/apt-config.cc:70
+#: cmdline/apt-cache.cc:1719 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:547
-#: cmdline/apt-get.cc:2584 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-get.cc:2586 cmdline/apt-sortpkgs.cc:144
 #, c-format
 msgid "%s %s for %s compiled on %s %s\n"
 msgstr ""
 
-#: cmdline/apt-cache.cc:1716
+#: cmdline/apt-cache.cc:1726
 msgid ""
 "Usage: apt-cache [options] command\n"
 "       apt-cache [options] add file1 [file2 ...]\n"
@@ -200,15 +195,15 @@ msgid ""
 "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n"
 msgstr ""
 
-#: cmdline/apt-cdrom.cc:77
+#: cmdline/apt-cdrom.cc:78
 msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'"
 msgstr ""
 
-#: cmdline/apt-cdrom.cc:92
+#: cmdline/apt-cdrom.cc:93
 msgid "Please insert a Disc in the drive and press enter"
 msgstr ""
 
-#: cmdline/apt-cdrom.cc:114
+#: cmdline/apt-cdrom.cc:117
 msgid "Repeat this process for the rest of the CDs in your set."
 msgstr ""
 
@@ -251,7 +246,7 @@ msgid ""
 "  -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n"
 msgstr ""
 
-#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:826
+#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:827
 #, c-format
 msgid "Unable to write to %s"
 msgstr ""
@@ -554,7 +549,7 @@ msgstr ""
 msgid "Y"
 msgstr ""
 
-#: cmdline/apt-get.cc:149 cmdline/apt-get.cc:1659
+#: cmdline/apt-get.cc:149 cmdline/apt-get.cc:1661
 #, c-format
 msgid "Regex compilation error - %s"
 msgstr ""
@@ -653,118 +648,118 @@ msgstr ""
 msgid "%lu not fully installed or removed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:669
+#: cmdline/apt-get.cc:670
 msgid "Correcting dependencies..."
 msgstr ""
 
-#: cmdline/apt-get.cc:672
+#: cmdline/apt-get.cc:673
 msgid " failed."
 msgstr ""
 
-#: cmdline/apt-get.cc:675
+#: cmdline/apt-get.cc:676
 msgid "Unable to correct dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:678
+#: cmdline/apt-get.cc:679
 msgid "Unable to minimize the upgrade set"
 msgstr ""
 
-#: cmdline/apt-get.cc:680
+#: cmdline/apt-get.cc:681
 msgid " Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:684
+#: cmdline/apt-get.cc:685
 msgid "You might want to run `apt-get -f install' to correct these."
 msgstr ""
 
-#: cmdline/apt-get.cc:687
+#: cmdline/apt-get.cc:688
 msgid "Unmet dependencies. Try using -f."
 msgstr ""
 
-#: cmdline/apt-get.cc:712
+#: cmdline/apt-get.cc:710
 msgid "WARNING: The following packages cannot be authenticated!"
 msgstr ""
 
-#: cmdline/apt-get.cc:716
+#: cmdline/apt-get.cc:714
 msgid "Authentication warning overridden.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:723
+#: cmdline/apt-get.cc:721
 msgid "Install these packages without verification [y/N]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:725
+#: cmdline/apt-get.cc:723
 msgid "Some packages could not be authenticated"
 msgstr ""
 
-#: cmdline/apt-get.cc:734 cmdline/apt-get.cc:883
+#: cmdline/apt-get.cc:732 cmdline/apt-get.cc:884
 msgid "There are problems and -y was used without --force-yes"
 msgstr ""
 
-#: cmdline/apt-get.cc:775
+#: cmdline/apt-get.cc:776
 msgid "Internal error, InstallPackages was called with broken packages!"
 msgstr ""
 
-#: cmdline/apt-get.cc:784
+#: cmdline/apt-get.cc:785
 msgid "Packages need to be removed but remove is disabled."
 msgstr ""
 
-#: cmdline/apt-get.cc:795
+#: cmdline/apt-get.cc:796
 msgid "Internal error, Ordering didn't finish"
 msgstr ""
 
-#: cmdline/apt-get.cc:811 cmdline/apt-get.cc:2001 cmdline/apt-get.cc:2034
+#: cmdline/apt-get.cc:812 cmdline/apt-get.cc:2003 cmdline/apt-get.cc:2036
 msgid "Unable to lock the download directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:821 cmdline/apt-get.cc:2082 cmdline/apt-get.cc:2328
-#: apt-pkg/cachefile.cc:64
+#: cmdline/apt-get.cc:822 cmdline/apt-get.cc:2084 cmdline/apt-get.cc:2330
+#: apt-pkg/cachefile.cc:65
 msgid "The list of sources could not be read."
 msgstr ""
 
-#: cmdline/apt-get.cc:836
+#: cmdline/apt-get.cc:837
 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
 msgstr ""
 
-#: cmdline/apt-get.cc:841
+#: cmdline/apt-get.cc:842
 #, c-format
 msgid "Need to get %sB/%sB of archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:844
+#: cmdline/apt-get.cc:845
 #, c-format
 msgid "Need to get %sB of archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:849
+#: cmdline/apt-get.cc:850
 #, c-format
 msgid "After this operation, %sB of additional disk space will be used.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:852
+#: cmdline/apt-get.cc:853
 #, c-format
 msgid "After this operation, %sB disk space will be freed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:866 cmdline/apt-get.cc:2177
+#: cmdline/apt-get.cc:867 cmdline/apt-get.cc:2179
 #, c-format
 msgid "Couldn't determine free space in %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:873
+#: cmdline/apt-get.cc:874
 #, c-format
 msgid "You don't have enough free space in %s."
 msgstr ""
 
-#: cmdline/apt-get.cc:889 cmdline/apt-get.cc:909
+#: cmdline/apt-get.cc:890 cmdline/apt-get.cc:910
 msgid "Trivial Only specified but this is not a trivial operation."
 msgstr ""
 
-#: cmdline/apt-get.cc:891
+#: cmdline/apt-get.cc:892
 msgid "Yes, do as I say!"
 msgstr ""
 
-#: cmdline/apt-get.cc:893
+#: cmdline/apt-get.cc:894
 #, c-format
 msgid ""
 "You are about to do something potentially harmful.\n"
@@ -772,74 +767,74 @@ msgid ""
 " ?] "
 msgstr ""
 
-#: cmdline/apt-get.cc:899 cmdline/apt-get.cc:918
+#: cmdline/apt-get.cc:900 cmdline/apt-get.cc:919
 msgid "Abort."
 msgstr ""
 
-#: cmdline/apt-get.cc:914
+#: cmdline/apt-get.cc:915
 msgid "Do you want to continue [Y/n]? "
 msgstr ""
 
-#: cmdline/apt-get.cc:986 cmdline/apt-get.cc:2225 apt-pkg/algorithms.cc:1382
+#: cmdline/apt-get.cc:987 cmdline/apt-get.cc:2227 apt-pkg/algorithms.cc:1407
 #, c-format
 msgid "Failed to fetch %s  %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1004
+#: cmdline/apt-get.cc:1005
 msgid "Some files failed to download"
 msgstr ""
 
-#: cmdline/apt-get.cc:1005 cmdline/apt-get.cc:2234
+#: cmdline/apt-get.cc:1006 cmdline/apt-get.cc:2236
 msgid "Download complete and in download only mode"
 msgstr ""
 
-#: cmdline/apt-get.cc:1011
+#: cmdline/apt-get.cc:1012
 msgid ""
 "Unable to fetch some archives, maybe run apt-get update or try with --fix-"
 "missing?"
 msgstr ""
 
-#: cmdline/apt-get.cc:1015
+#: cmdline/apt-get.cc:1016
 msgid "--fix-missing and media swapping is not currently supported"
 msgstr ""
 
-#: cmdline/apt-get.cc:1020
+#: cmdline/apt-get.cc:1021
 msgid "Unable to correct missing packages."
 msgstr ""
 
-#: cmdline/apt-get.cc:1021
+#: cmdline/apt-get.cc:1022
 msgid "Aborting install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1055
+#: cmdline/apt-get.cc:1056
 #, c-format
 msgid "Note, selecting %s instead of %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1065
+#: cmdline/apt-get.cc:1066
 #, c-format
 msgid "Skipping %s, it is already installed and upgrade is not set.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1083
+#: cmdline/apt-get.cc:1084
 #, c-format
 msgid "Package %s is not installed, so not removed\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1094
+#: cmdline/apt-get.cc:1095
 #, c-format
 msgid "Package %s is a virtual package provided by:\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1106
+#: cmdline/apt-get.cc:1107
 msgid " [Installed]"
 msgstr ""
 
-#: cmdline/apt-get.cc:1111
+#: cmdline/apt-get.cc:1112
 msgid "You should explicitly select one to install."
 msgstr ""
 
-#: cmdline/apt-get.cc:1116
+#: cmdline/apt-get.cc:1117
 #, c-format
 msgid ""
 "Package %s is not available, but is referred to by another package.\n"
@@ -847,68 +842,68 @@ msgid ""
 "is only available from another source\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1135
+#: cmdline/apt-get.cc:1136
 msgid "However the following packages replace it:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1138
+#: cmdline/apt-get.cc:1139
 #, c-format
 msgid "Package %s has no installation candidate"
 msgstr ""
 
-#: cmdline/apt-get.cc:1158
+#: cmdline/apt-get.cc:1159
 #, c-format
 msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1166
+#: cmdline/apt-get.cc:1167
 #, c-format
 msgid "%s is already the newest version.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1195
+#: cmdline/apt-get.cc:1196
 #, c-format
 msgid "Release '%s' for '%s' was not found"
 msgstr ""
 
-#: cmdline/apt-get.cc:1197
+#: cmdline/apt-get.cc:1198
 #, c-format
 msgid "Version '%s' for '%s' was not found"
 msgstr ""
 
-#: cmdline/apt-get.cc:1203
+#: cmdline/apt-get.cc:1204
 #, c-format
 msgid "Selected version %s (%s) for %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1309
+#: cmdline/apt-get.cc:1310
 #, c-format
 msgid "No source package '%s' picking '%s' instead\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1346
+#: cmdline/apt-get.cc:1348
 msgid "The update command takes no arguments"
 msgstr ""
 
-#: cmdline/apt-get.cc:1359
+#: cmdline/apt-get.cc:1361
 msgid "Unable to lock the list directory"
 msgstr ""
 
-#: cmdline/apt-get.cc:1411
+#: cmdline/apt-get.cc:1413
 msgid "We are not supposed to delete stuff, can't start AutoRemover"
 msgstr ""
 
-#: cmdline/apt-get.cc:1443
+#: cmdline/apt-get.cc:1445
 msgid ""
 "The following packages were automatically installed and are no longer "
 "required:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1445
+#: cmdline/apt-get.cc:1447
 msgid "Use 'apt-get autoremove' to remove them."
 msgstr ""
 
-#: cmdline/apt-get.cc:1450
+#: cmdline/apt-get.cc:1452
 msgid ""
 "Hmm, seems like the AutoRemover destroyed something which really\n"
 "shouldn't happen. Please file a bug report against apt."
@@ -924,49 +919,49 @@ msgstr ""
 #. "that package should be filed.") << endl;
 #. }
 #.
-#: cmdline/apt-get.cc:1453 cmdline/apt-get.cc:1743
+#: cmdline/apt-get.cc:1455 cmdline/apt-get.cc:1745
 msgid "The following information may help to resolve the situation:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1457
+#: cmdline/apt-get.cc:1459
 msgid "Internal Error, AutoRemover broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:1476
+#: cmdline/apt-get.cc:1478
 msgid "Internal error, AllUpgrade broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:1531
+#: cmdline/apt-get.cc:1533
 #, c-format
 msgid "Couldn't find task %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1646 cmdline/apt-get.cc:1682
+#: cmdline/apt-get.cc:1648 cmdline/apt-get.cc:1684
 #, c-format
 msgid "Couldn't find package %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:1669
+#: cmdline/apt-get.cc:1671
 #, c-format
 msgid "Note, selecting %s for regex '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1700
+#: cmdline/apt-get.cc:1702
 #, c-format
 msgid "%s set to manually installed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:1713
+#: cmdline/apt-get.cc:1715
 msgid "You might want to run `apt-get -f install' to correct these:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1716
+#: cmdline/apt-get.cc:1718
 msgid ""
 "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
 "solution)."
 msgstr ""
 
-#: cmdline/apt-get.cc:1728
+#: cmdline/apt-get.cc:1730
 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"
@@ -974,152 +969,152 @@ msgid ""
 "or been moved out of Incoming."
 msgstr ""
 
-#: cmdline/apt-get.cc:1746
+#: cmdline/apt-get.cc:1748
 msgid "Broken packages"
 msgstr ""
 
-#: cmdline/apt-get.cc:1775
+#: cmdline/apt-get.cc:1777
 msgid "The following extra packages will be installed:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1864
+#: cmdline/apt-get.cc:1866
 msgid "Suggested packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1865
+#: cmdline/apt-get.cc:1867
 msgid "Recommended packages:"
 msgstr ""
 
-#: cmdline/apt-get.cc:1894
+#: cmdline/apt-get.cc:1896
 msgid "Calculating upgrade... "
 msgstr ""
 
-#: cmdline/apt-get.cc:1897 methods/ftp.cc:702 methods/connect.cc:112
+#: cmdline/apt-get.cc:1899 methods/ftp.cc:702 methods/connect.cc:112
 msgid "Failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:1902
+#: cmdline/apt-get.cc:1904
 msgid "Done"
 msgstr ""
 
-#: cmdline/apt-get.cc:1969 cmdline/apt-get.cc:1977
+#: cmdline/apt-get.cc:1971 cmdline/apt-get.cc:1979
 msgid "Internal error, problem resolver broke stuff"
 msgstr ""
 
-#: cmdline/apt-get.cc:2077
+#: cmdline/apt-get.cc:2079
 msgid "Must specify at least one package to fetch source for"
 msgstr ""
 
-#: cmdline/apt-get.cc:2107 cmdline/apt-get.cc:2346
+#: cmdline/apt-get.cc:2109 cmdline/apt-get.cc:2348
 #, c-format
 msgid "Unable to find a source package for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2156
+#: cmdline/apt-get.cc:2158
 #, c-format
 msgid "Skipping already downloaded file '%s'\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2184
+#: cmdline/apt-get.cc:2186
 #, c-format
 msgid "You don't have enough free space in %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2190
+#: cmdline/apt-get.cc:2192
 #, c-format
 msgid "Need to get %sB/%sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2193
+#: cmdline/apt-get.cc:2195
 #, c-format
 msgid "Need to get %sB of source archives.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2199
+#: cmdline/apt-get.cc:2201
 #, c-format
 msgid "Fetch source %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2230
+#: cmdline/apt-get.cc:2232
 msgid "Failed to fetch some archives."
 msgstr ""
 
-#: cmdline/apt-get.cc:2258
+#: cmdline/apt-get.cc:2260
 #, c-format
 msgid "Skipping unpack of already unpacked source in %s\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2270
+#: cmdline/apt-get.cc:2272
 #, c-format
 msgid "Unpack command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2271
+#: cmdline/apt-get.cc:2273
 #, c-format
 msgid "Check if the 'dpkg-dev' package is installed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2288
+#: cmdline/apt-get.cc:2290
 #, c-format
 msgid "Build command '%s' failed.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2307
+#: cmdline/apt-get.cc:2309
 msgid "Child process failed"
 msgstr ""
 
-#: cmdline/apt-get.cc:2323
+#: cmdline/apt-get.cc:2325
 msgid "Must specify at least one package to check builddeps for"
 msgstr ""
 
-#: cmdline/apt-get.cc:2351
+#: cmdline/apt-get.cc:2353
 #, c-format
 msgid "Unable to get build-dependency information for %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2371
+#: cmdline/apt-get.cc:2373
 #, c-format
 msgid "%s has no build depends.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2423
+#: cmdline/apt-get.cc:2425
 #, c-format
 msgid ""
 "%s dependency for %s cannot be satisfied because the package %s cannot be "
 "found"
 msgstr ""
 
-#: cmdline/apt-get.cc:2476
+#: cmdline/apt-get.cc:2478
 #, 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:2512
+#: cmdline/apt-get.cc:2514
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
 msgstr ""
 
-#: cmdline/apt-get.cc:2539
+#: cmdline/apt-get.cc:2541
 #, c-format
 msgid "Failed to satisfy %s dependency for %s: %s"
 msgstr ""
 
-#: cmdline/apt-get.cc:2553
+#: cmdline/apt-get.cc:2555
 #, c-format
 msgid "Build-dependencies for %s could not be satisfied."
 msgstr ""
 
-#: cmdline/apt-get.cc:2557
+#: cmdline/apt-get.cc:2559
 msgid "Failed to process build dependencies"
 msgstr ""
 
-#: cmdline/apt-get.cc:2589
+#: cmdline/apt-get.cc:2591
 msgid "Supported modules:"
 msgstr ""
 
-#: cmdline/apt-get.cc:2630
+#: cmdline/apt-get.cc:2632
 msgid ""
 "Usage: apt-get [options] command\n"
 "       apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -1163,7 +1158,7 @@ msgid ""
 "                       This APT has Super Cow Powers.\n"
 msgstr ""
 
-#: cmdline/apt-get.cc:2796
+#: cmdline/apt-get.cc:2799
 msgid ""
 "NOTE: This is only a simulation!\n"
 "      apt-get needs root privileges for real execution.\n"
@@ -1388,7 +1383,7 @@ msgstr ""
 
 #: apt-inst/extract.cc:464 apt-pkg/contrib/configuration.cc:822
 #: apt-pkg/contrib/cdromutl.cc:150 apt-pkg/sourcelist.cc:320
-#: apt-pkg/acquire.cc:418 apt-pkg/clean.cc:33
+#: apt-pkg/acquire.cc:419 apt-pkg/clean.cc:34 apt-pkg/policy.cc:268
 #, c-format
 msgid "Unable to read %s"
 msgstr ""
@@ -1418,9 +1413,9 @@ 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:759
-#: apt-pkg/pkgcachegen.cc:828 apt-pkg/pkgcachegen.cc:833
-#: apt-pkg/pkgcachegen.cc:956
+#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:760
+#: apt-pkg/pkgcachegen.cc:829 apt-pkg/pkgcachegen.cc:834
+#: apt-pkg/pkgcachegen.cc:957
 msgid "Reading package lists"
 msgstr ""
 
@@ -1613,7 +1608,7 @@ msgstr ""
 msgid "Server closed the connection"
 msgstr ""
 
-#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:538 methods/rsh.cc:190
+#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:541 methods/rsh.cc:190
 msgid "Read error"
 msgstr ""
 
@@ -1625,7 +1620,7 @@ msgstr ""
 msgid "Protocol corruption"
 msgstr ""
 
-#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:577 methods/rsh.cc:232
+#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:580 methods/rsh.cc:232
 msgid "Write error"
 msgstr ""
 
@@ -2044,7 +2039,7 @@ msgid "Unable to stat the mount point %s"
 msgstr ""
 
 #: apt-pkg/contrib/cdromutl.cc:146 apt-pkg/contrib/cdromutl.cc:180
-#: apt-pkg/acquire.cc:424 apt-pkg/acquire.cc:449 apt-pkg/clean.cc:39
+#: apt-pkg/acquire.cc:425 apt-pkg/acquire.cc:450 apt-pkg/clean.cc:40
 #, c-format
 msgid "Unable to change to %s"
 msgstr ""
@@ -2078,45 +2073,50 @@ msgstr ""
 msgid "Waited for %s but it wasn't there"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:454
+#: apt-pkg/contrib/fileutl.cc:455
 #, c-format
 msgid "Sub-process %s received a segmentation fault."
 msgstr ""
 
 #: apt-pkg/contrib/fileutl.cc:457
 #, c-format
+msgid "Sub-process %s received signal %u."
+msgstr ""
+
+#: apt-pkg/contrib/fileutl.cc:460
+#, c-format
 msgid "Sub-process %s returned an error code (%u)"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:459
+#: apt-pkg/contrib/fileutl.cc:462
 #, c-format
 msgid "Sub-process %s exited unexpectedly"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:503
+#: apt-pkg/contrib/fileutl.cc:506
 #, c-format
 msgid "Could not open file %s"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:559
+#: apt-pkg/contrib/fileutl.cc:562
 #, c-format
 msgid "read, still have %lu to read but none left"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:589
+#: apt-pkg/contrib/fileutl.cc:592
 #, c-format
 msgid "write, still have %lu to write but couldn't"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:664
+#: apt-pkg/contrib/fileutl.cc:667
 msgid "Problem closing the file"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:670
+#: apt-pkg/contrib/fileutl.cc:673
 msgid "Problem unlinking the file"
 msgstr ""
 
-#: apt-pkg/contrib/fileutl.cc:681
+#: apt-pkg/contrib/fileutl.cc:684
 msgid "Problem syncing the file"
 msgstr ""
 
@@ -2209,16 +2209,16 @@ msgstr ""
 msgid "Dependency generation"
 msgstr ""
 
-#: apt-pkg/depcache.cc:173 apt-pkg/depcache.cc:192 apt-pkg/depcache.cc:196
+#: apt-pkg/depcache.cc:174 apt-pkg/depcache.cc:193 apt-pkg/depcache.cc:197
 msgid "Reading state information"
 msgstr ""
 
-#: apt-pkg/depcache.cc:220
+#: apt-pkg/depcache.cc:221
 #, c-format
 msgid "Failed to open StateFile %s"
 msgstr ""
 
-#: apt-pkg/depcache.cc:226
+#: apt-pkg/depcache.cc:227
 #, c-format
 msgid "Failed to write temporary StateFile %s"
 msgstr ""
@@ -2263,7 +2263,7 @@ msgstr ""
 msgid "Opening %s"
 msgstr ""
 
-#: apt-pkg/sourcelist.cc:216 apt-pkg/cdrom.cc:445
+#: apt-pkg/sourcelist.cc:216 apt-pkg/cdrom.cc:448
 #, c-format
 msgid "Line %u too long in source list %s."
 msgstr ""
@@ -2283,7 +2283,7 @@ msgstr ""
 msgid "Malformed line %u in source list %s (vendor id)"
 msgstr ""
 
-#: apt-pkg/packagemanager.cc:426
+#: apt-pkg/packagemanager.cc:428
 #, c-format
 msgid ""
 "This installation run will require temporarily removing the essential "
@@ -2302,40 +2302,40 @@ msgid ""
 "The package %s needs to be reinstalled, but I can't find an archive for it."
 msgstr ""
 
-#: apt-pkg/algorithms.cc:1131
+#: apt-pkg/algorithms.cc:1154
 msgid ""
 "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
 "held packages."
 msgstr ""
 
-#: apt-pkg/algorithms.cc:1133
+#: apt-pkg/algorithms.cc:1156
 msgid "Unable to correct problems, you have held broken packages."
 msgstr ""
 
-#: apt-pkg/algorithms.cc:1408 apt-pkg/algorithms.cc:1410
+#: apt-pkg/algorithms.cc:1433 apt-pkg/algorithms.cc:1435
 msgid ""
 "Some index files failed to download, they have been ignored, or old ones "
 "used instead."
 msgstr ""
 
-#: apt-pkg/acquire.cc:59
+#: apt-pkg/acquire.cc:60
 #, c-format
 msgid "Lists directory %spartial is missing."
 msgstr ""
 
-#: apt-pkg/acquire.cc:63
+#: apt-pkg/acquire.cc:64
 #, c-format
 msgid "Archive directory %spartial is missing."
 msgstr ""
 
 #. only show the ETA if it makes sense
 #. two days
-#: apt-pkg/acquire.cc:825
+#: apt-pkg/acquire.cc:829
 #, c-format
 msgid "Retrieving file %li of %li (%s remaining)"
 msgstr ""
 
-#: apt-pkg/acquire.cc:827
+#: apt-pkg/acquire.cc:831
 #, c-format
 msgid "Retrieving file %li of %li"
 msgstr ""
@@ -2355,16 +2355,16 @@ msgstr ""
 msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter."
 msgstr ""
 
-#: apt-pkg/init.cc:124
+#: apt-pkg/init.cc:125
 #, c-format
 msgid "Packaging system '%s' is not supported"
 msgstr ""
 
-#: apt-pkg/init.cc:140
+#: apt-pkg/init.cc:141
 msgid "Unable to determine a suitable packaging system type"
 msgstr ""
 
-#: apt-pkg/clean.cc:56
+#: apt-pkg/clean.cc:57
 #, c-format
 msgid "Unable to stat %s."
 msgstr ""
@@ -2373,24 +2373,25 @@ msgstr ""
 msgid "You must put some 'source' URIs in your sources.list"
 msgstr ""
 
-#: apt-pkg/cachefile.cc:70
+#: apt-pkg/cachefile.cc:71
 msgid "The package lists or status file could not be parsed or opened."
 msgstr ""
 
-#: apt-pkg/cachefile.cc:74
+#: apt-pkg/cachefile.cc:75
 msgid "You may want to run apt-get update to correct these problems"
 msgstr ""
 
-#: apt-pkg/policy.cc:289
-msgid "Invalid record in the preferences file, no Package header"
+#: apt-pkg/policy.cc:329
+#, c-format
+msgid "Invalid record in the preferences file %s, no Package header"
 msgstr ""
 
-#: apt-pkg/policy.cc:311
+#: apt-pkg/policy.cc:351
 #, c-format
 msgid "Did not understand pin type %s"
 msgstr ""
 
-#: apt-pkg/policy.cc:319
+#: apt-pkg/policy.cc:359
 msgid "No priority (or zero) specified for pin"
 msgstr ""
 
@@ -2474,16 +2475,16 @@ msgstr ""
 msgid "Package %s %s was not found while processing file dependencies"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:689
+#: apt-pkg/pkgcachegen.cc:690
 #, c-format
 msgid "Couldn't stat source package list %s"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:774
+#: apt-pkg/pkgcachegen.cc:775
 msgid "Collecting File Provides"
 msgstr ""
 
-#: apt-pkg/pkgcachegen.cc:901 apt-pkg/pkgcachegen.cc:908
+#: apt-pkg/pkgcachegen.cc:902 apt-pkg/pkgcachegen.cc:909
 msgid "IO Error saving source cache"
 msgstr ""
 
@@ -2492,140 +2493,161 @@ msgstr ""
 msgid "rename failed, %s (%s -> %s)."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:394
+#: apt-pkg/acquire-item.cc:401
 msgid "MD5Sum mismatch"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:644 apt-pkg/acquire-item.cc:1406
+#: apt-pkg/acquire-item.cc:658 apt-pkg/acquire-item.cc:1426
 msgid "Hash Sum mismatch"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:1101
+#: apt-pkg/acquire-item.cc:1118
 msgid "There is no public key available for the following key IDs:\n"
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:1211
+#: apt-pkg/acquire-item.cc:1231
 #, 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:1270
+#: apt-pkg/acquire-item.cc:1290
 #, 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:1311
+#: apt-pkg/acquire-item.cc:1331
 #, c-format
 msgid ""
 "The package index files are corrupted. No Filename: field for package %s."
 msgstr ""
 
-#: apt-pkg/acquire-item.cc:1398
+#: apt-pkg/acquire-item.cc:1418
 msgid "Size mismatch"
 msgstr ""
 
+#: apt-pkg/indexrecords.cc:40
+#, c-format
+msgid "Unable to parse Release file %s"
+msgstr ""
+
+#: 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
+#: apt-pkg/cdrom.cc:529
 #, 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
+#: apt-pkg/cdrom.cc:538 apt-pkg/cdrom.cc:627
 msgid "Identifying.. "
 msgstr ""
 
-#: apt-pkg/cdrom.cc:559
+#: apt-pkg/cdrom.cc:563
 #, c-format
 msgid "Stored label: %s\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:566 apt-pkg/cdrom.cc:836
+#: apt-pkg/cdrom.cc:570 apt-pkg/cdrom.cc:841
 msgid "Unmounting CD-ROM...\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:585
+#: apt-pkg/cdrom.cc:590
 #, c-format
 msgid "Using CD-ROM mount point %s\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:603
+#: apt-pkg/cdrom.cc:608
 msgid "Unmounting CD-ROM\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:607
+#: apt-pkg/cdrom.cc:612
 msgid "Waiting for disc...\n"
 msgstr ""
 
 #. Mount the new CDROM
-#: apt-pkg/cdrom.cc:615
+#: apt-pkg/cdrom.cc:620
 msgid "Mounting CD-ROM...\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:633
+#: apt-pkg/cdrom.cc:638
 msgid "Scanning disc for index files..\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:673
+#: apt-pkg/cdrom.cc:678
 #, c-format
 msgid ""
 "Found %zu package indexes, %zu source indexes, %zu translation indexes and %"
 "zu signatures\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:710
+#: apt-pkg/cdrom.cc:689
+msgid ""
+"Unable to locate any package files, perhaps this is not a Debian Disc or the "
+"wrong architecture?"
+msgstr ""
+
+#: apt-pkg/cdrom.cc:715
 #, c-format
 msgid "Found label '%s'\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:739
+#: apt-pkg/cdrom.cc:744
 msgid "That is not a valid name, try again.\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:755
+#: apt-pkg/cdrom.cc:760
 #, c-format
 msgid ""
 "This disc is called: \n"
 "'%s'\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:759
+#: apt-pkg/cdrom.cc:764
 msgid "Copying package lists..."
 msgstr ""
 
-#: apt-pkg/cdrom.cc:785
+#: apt-pkg/cdrom.cc:790
 msgid "Writing new source list\n"
 msgstr ""
 
-#: apt-pkg/cdrom.cc:794
+#: apt-pkg/cdrom.cc:799
 msgid "Source list entries for this disc are:\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:822
+#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:833
 #, c-format
 msgid "Wrote %i records.\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:824
+#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:835
 #, c-format
 msgid "Wrote %i records with %i missing files.\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:827
+#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:838
 #, c-format
 msgid "Wrote %i records with %i mismatched files\n"
 msgstr ""
 
-#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:830
+#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:841
 #, c-format
 msgid "Wrote %i records with %i missing files and %i mismatched files\n"
 msgstr ""
@@ -2635,12 +2657,12 @@ msgstr ""
 msgid "Installing %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:612
+#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:642
 #, c-format
 msgid "Configuring %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:627
+#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:649
 #, c-format
 msgid "Removing %s"
 msgstr ""
@@ -2650,61 +2672,77 @@ msgstr ""
 msgid "Running post-installation trigger %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:521
+#: apt-pkg/deb/dpkgpm.cc:546
 #, c-format
 msgid "Directory '%s' missing"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:605
+#: apt-pkg/deb/dpkgpm.cc:635
 #, c-format
 msgid "Preparing %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:606
+#: apt-pkg/deb/dpkgpm.cc:636
 #, c-format
 msgid "Unpacking %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:611
+#: apt-pkg/deb/dpkgpm.cc:641
 #, c-format
 msgid "Preparing to configure %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:614 apt-pkg/deb/dpkgpm.cc:615
-#, c-format
-msgid "Processing triggers for %s"
-msgstr ""
-
-#: apt-pkg/deb/dpkgpm.cc:617
+#: apt-pkg/deb/dpkgpm.cc:643
 #, c-format
 msgid "Installed %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:622 apt-pkg/deb/dpkgpm.cc:624
-#: apt-pkg/deb/dpkgpm.cc:625
+#: apt-pkg/deb/dpkgpm.cc:648
 #, c-format
 msgid "Preparing for removal of %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:628
+#: apt-pkg/deb/dpkgpm.cc:650
 #, c-format
 msgid "Removed %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:633
+#: apt-pkg/deb/dpkgpm.cc:655
 #, c-format
 msgid "Preparing to completely remove %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:634
+#: apt-pkg/deb/dpkgpm.cc:656
 #, c-format
 msgid "Completely removed %s"
 msgstr ""
 
-#: apt-pkg/deb/dpkgpm.cc:789
+#: apt-pkg/deb/dpkgpm.cc:820
 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n"
 msgstr ""
 
+#: apt-pkg/deb/dpkgpm.cc:848
+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
+#, 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 ""