From: Michael Vogt Date: Tue, 21 Jul 2009 16:31:36 +0000 (+0200) Subject: The 'not dead yet' release X-Git-Tag: 0.7.22~13 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/d59725349555939d39af81cf7746069d6aa3536c?hp=c5f44afc2446d738e30ea4c6021d4b60915546b1 The 'not dead yet' release * 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) --- diff --git a/README.arch b/README.arch index 364e940a4..58c40a497 100644 --- a/README.arch +++ b/README.arch @@ -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: diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc index 78c68737c..4f0b52af9 100644 --- a/apt-pkg/acquire-worker.cc +++ b/apt-pkg/acquire-worker.cc @@ -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); diff --git a/apt-pkg/acquire.cc b/apt-pkg/acquire.cc index 68ff393d0..74510ae21 100644 --- a/apt-pkg/acquire.cc +++ b/apt-pkg/acquire.cc @@ -24,7 +24,8 @@ #include #include - +#include + #include #include #include @@ -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; } diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc index a30a02edb..34da745de 100644 --- a/apt-pkg/algorithms.cc +++ b/apt-pkg/algorithms.cc @@ -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]); diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 3d35e4298..28466cd40 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -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;}; diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 891c59836..8796805bb 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -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 diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index a5976cf3a..a7de09c44 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -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)); diff --git a/apt-pkg/contrib/hashes.cc b/apt-pkg/contrib/hashes.cc index 52b9bfbe6..b43771ea7 100644 --- a/apt-pkg/contrib/hashes.cc +++ b/apt-pkg/contrib/hashes.cc @@ -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); diff --git a/apt-pkg/contrib/md5.cc b/apt-pkg/contrib/md5.cc index a095f8f0f..2bfd70f1b 100644 --- a/apt-pkg/contrib/md5.cc +++ b/apt-pkg/contrib/md5.cc @@ -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); } diff --git a/apt-pkg/contrib/mmap.cc b/apt-pkg/contrib/mmap.cc index ba4482131..229b18037 100644 --- a/apt-pkg/contrib/mmap.cc +++ b/apt-pkg/contrib/mmap.cc @@ -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 diff --git a/apt-pkg/contrib/sha256.h b/apt-pkg/contrib/sha256.h index 1951f053b..5934b5641 100644 --- a/apt-pkg/contrib/sha256.h +++ b/apt-pkg/contrib/sha256.h @@ -17,6 +17,7 @@ #include #include #include +#include using std::string; using std::min; diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 61c582b85..a991b8988 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -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 diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 2450bd421..e1f9e3a1f 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -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));}; \ diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc index b2b8b8fb6..517b771a5 100644 --- a/apt-pkg/deb/deblistparser.cc +++ b/apt-pkg/deb/deblistparser.cc @@ -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] != '=') diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index ccd45d51b..59f826d96 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -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++; diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 85e54988e..f787f365e 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -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::iterator I = List.begin(); I != List.end();) { vector::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); diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index 22ee29697..15696585a 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -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 &SigList, if(!Verify(prefix,*I, MetaIndex)) { // something went wrong, don't copy the Release.gpg // FIXME: delete any existing gpg file? + _error->Discard(); continue; } } diff --git a/apt-pkg/indexrecords.cc b/apt-pkg/indexrecords.cc index 77fe03d45..1fc27b1a1 100644 --- a/apt-pkg/indexrecords.cc +++ b/apt-pkg/indexrecords.cc @@ -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; } diff --git a/apt-pkg/pkgcache.cc b/apt-pkg/pkgcache.cc index 4e10093a8..2a9756c45 100644 --- a/apt-pkg/pkgcache.cc +++ b/apt-pkg/pkgcache.cc @@ -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); } diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 57da9426f..0e950310b 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -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 diff --git a/cmdline/apt-mark b/cmdline/apt-mark index f6e749eb5..226d2079b 100755 --- a/cmdline/apt-mark +++ b/cmdline/apt-mark @@ -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) diff --git a/debian/apt.cron.daily b/debian/apt.cron.daily index b40bb2c30..3cf1e28f1 100644 --- a/debian/apt.cron.daily +++ b/debian/apt.cron.daily @@ -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 : +# + diff --git a/debian/changelog b/debian/changelog index ea7e0469b..970c7029f 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 Fri, 03 Jul 2009 08:27:35 +0200 diff --git a/doc/apt-cache.8.xml b/doc/apt-cache.8.xml index 21605ff0e..6c8938d8c 100644 --- a/doc/apt-cache.8.xml +++ b/doc/apt-cache.8.xml @@ -300,7 +300,7 @@ Reverse Provides: - Print only important dependencies; for use with unmet. Causes only Depends and + Print only important dependencies; for use with unmet and depends. Causes only Depends and Pre-Depends relations to be printed. Configuration Item: APT::Cache::Important. diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index 50971d0f5..920f6b36e 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -402,6 +402,14 @@ Configuration Item: APT::Get::Compile. + + Also install recommended packages. + + + + Do not install recommended packages. + + Ignore package Holds; This causes apt-get to ignore a hold placed on a package. This may be useful in conjunction with diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 2045ca1f3..5dc7b5246 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -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"; }; diff --git a/doc/fr/apt.conf.fr.5.xml b/doc/fr/apt.conf.fr.5.xml index 88ce46134..f4d8eddb8 100644 --- a/doc/fr/apt.conf.fr.5.xml +++ b/doc/fr/apt.conf.fr.5.xml @@ -15,7 +15,7 @@ &apt-email; &apt-product; - 29 Février 2004 + 11 juillet 2008 @@ -33,26 +33,30 @@ Le fichier apt.conf est le principal fichier de configurati de la collection d'outils que constitue APT ; tous les outils font appel à ce fichier de configuration et utilisent un analyseur syntaxique en ligne de commande commun afin de fournir un environnement uniforme. Quand un outil -d'APT démarre, il lit (si elle existe) la variable d'environnement -APT_CONFIG ; puis il lit les fichiers situés dans +d'APT démarre, il lit la configuration désignée par variable d'environnement +APT_CONFIG (si elle existe), puis il lit les fichiers situés dans Dir::Etc::Parts ainsi que le principal fichier de configuration indiqué par Dir::Etc::main ; 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. Le fichier de configuration est construit comme un arbre d'options organisées en groupes fonctionnels. On se sert du double deux points (« :: ») pour indiquer une option ; par exemple, APT::Get::Assume-Yes 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. 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 // est un commentaire et elle est ignorée. +qui commence par // est traitée comme un commentaire et ignorée, de +même que les sections de texte placées entre /* et +*/, tout comme les commentaires C/C++. Chaque ligne est de la forme : - APT::Get::Assume-Yes "true"; + +APT::Get::Assume-Yes "true"; + 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 : @@ -68,10 +72,9 @@ APT { -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. @@ -79,14 +82,21 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; -Les modèles &docdir;examples/apt.conf &configureindex; +Les modèles &docdir;examples/apt.conf et &configureindex; montrent à quoi devrait ressembler le fichier de configuration. +Les identifiants des options de configuration ne sont pas sensibles à la casse. +Dans l'exemple précédent, on pourrait donc aussi bien utiliser +dpkg::pre-install-pkgs. + + Deux éléments spéciaux sont autorisés : #include et -#clear. #include inclut le fichier donné en argument, -à moins que le nom ne se termine par une barre oblique. #clear sert à -effacer une liste de noms. +#clear. #include 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. #clear sert à +effacer une partie de l'arbre de configuration. L'élément désigné et tout ses +descendants sont supprimés. Tous les outils d'APT possèdent une option qui permet de @@ -95,20 +105,31 @@ syntaxe consiste en un nom complet d'option (par exemple APT::Get::Assume-Yes) suivi par un signe égal, puis par la nouvelle valeur de l'option. On peut compléter une liste en ajoutant un « :: » au nom de la liste. - + Le groupe APT - -Ce groupe d'options contrôle aussi bien le comportement global d'APT que -la prise en compte des options pour chaque outil. + +Ce groupe d'options contrôle le comportement global d'APT et contient également +des options communes à tous les outils. Architecture L'architecture du système ; 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é. + + + +Default-Release + +Indique la distribution à utiliser par défaut lors de l'installation d'un +paquet si plusieurs versions sont disponibles. La valeur peut être un nom de +distribution ou un numéro de version. Exemples : « stable », +« testing », « 4.0 », « 5.0* ». Les noms de codes +des distributions (« etch », « lenny », etc.) ne sont pas +permis pour l'instant. Voir aussi &apt-preferences;. @@ -123,7 +144,7 @@ dans sa prise de d Clean-Installed Avec cette option qui est activée par défaut, la fonctionnalité « autoclean » -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 Désactive la configuration immédiate ; cette dangereuse option désactive une partie du code de mise en ordre de APT pour que ce dernier effectue le -moins d'appels possible à Dpkg. 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. @@ -155,39 +176,37 @@ ou tous les paquets dont ces paquets d Cache-Limit -APT utilise un fichier cache d'une taille mémoire fixe pour ranger les -informations du fichier « available ». 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. Build-Essential 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. Get La sous-section Get 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. Cache -La sous-section Cache contrôle l'outil &apt-cache;, -veuillez -consulter sa documentation pour avoir plus d'informations sur les options en -question. +La sous-section Cache contrôle l'outil +&apt-cache;, veuillez consulter sa documentation pour avoir plus d'informations +sur les options en question. CDROM -La sous-section CDROM contrôle l'outil&apt-cdrom;, -veuillez -consulter sa documentation pour avoir plus d'informations sur les options en -question. +La sous-section CDROM contrôle l'outil +&apt-cdrom;, veuillez consulter sa documentation pour avoir plus d'informations +sur les options en question. @@ -199,13 +218,20 @@ Le groupe d'options Acquire contr les gestionnaires d'URI. +PDiffs +Essayer de télécharger les fichiers différentiels appelés +PDiffs pour les paquets ou les fichiers sources, plutôt que +de les télécharger entièrement. Par défaut à « true ». + + + Queue-Mode -Le mode file d'attente ; Queue-Mode peut prendre une valeur -parmi host ou access et cela détermine comment APT -parallélise les connexions sortantes. Host signifie qu'une -connexion par cible sera initiée, tandis que access signifie qu'une -connexion par type d'URI sera initiée. +Le mode de file d'attente ; Queue-Mode peut prendre les +valeurs host ou access et cela détermine +comment APT parallélise les connexions sortantes. Host signifie +qu'une connexion par cible sera initiée, tandis que access signifie +qu'une connexion par type d'URI sera initiée. @@ -227,30 +253,32 @@ Par d http -URI HTTP ; http::Proxy est le mandataire (proxy) http à utiliser par défaut. +URI HTTP ; http::Proxy est le mandataire (proxy) HTTP à utiliser par défaut. Il se présente sous la forme standard : -http://[[user][:pass]@]host[:port]/. En utilisant la syntaxe : -http::Proxy::<host>, où le mot-clé spécial DIRECT -indique de n'utiliser aucun mandataire, on peut spécifier un mandataire -pour chaque machine distante. La variable d'environnement http_proxy -remplace tous ces paramètres. +http://[[user][:pass]@]host[:port]/. On peut spécifier un +mandataire particulier par hôte distant en utilisant la syntaxe : +http::Proxy::<hôte>. Le mot-clé spécial +DIRECT indique alors de n'utiliser aucun mandataire pour +l'hôte. +Lorsqu'elle est définie, la variable d'environnement http_proxy +annule et remplace toutes les options de mandataire HTTP. -Trois options de configuration sont fournies pour le contrôle des caches qui -sont compatibles avec HTTP/1.1. No-Cache signifie que le mandataire -ne doit pas du tout utiliser les réponses qu'il a stockées ; Max-Age +Trois options de configuration sont fournies pour le contrôle des caches compatibles +avec HTTP/1.1. No-Cache signifie que le mandataire ne doit jamais +utiliser les réponses qu'il a stockées ; Max-Age sert uniquement pour les fichiers d'index : 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 ; la valeur par défaut est donc de 1 jour. No-Store sert uniquement -pour les fichiers d'archive : cela demande au cache de ne jamais garder +pour les fichiers d'archive  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 : Squid 2.0.2 ne prend en compte aucune de ces options. L'option timeout positionne le compteur de temps mort (timeout) -utilisé par la méthode : cela vaut pour tout (connexion, données). +utilisé par la méthode. Cela vaut pour tout, connexion et données. Une option de configuration est fournie pour contrôler la profondeur du tube @@ -264,27 +292,62 @@ ne respectent pas la RFC 2068. +https + +URI HTTPS. Les options de contrôle de cache et de mandataire (proxy) sont les +mêmes que pour la méthode http. L'option +Pipeline-Depth n'est pas encore supportée. + + +La sous-option CaInfo spécifie le fichier contenant +les informations sur les certificats de confiance. +La sous-option booléenne Verify-Peer précise si le +certificat d'hôte du serveur doit être confronté aux certificats de confiance +ou pas. La sous-option booléenne Verify-Host précise s'il +faut vérifier ou pas le nom d'hôte du serveur. SslCert +détermine le certificat à utiliser pour l'authentification du client. +SslKey détermine quelle clef privée doit être utilisée pour +l'authentification du client. SslForceVersion surcharge la +valeur par défaut pour la version de SSL à utiliser et peut contenir l'une des +chaînes 'TLSv1' ou 'SSLv3'. + +Chacune de ces options peut être spécifiée pour un hôte particulier en +utilisant <hôte>::CaInfo, +<hôte>::Verify-Peer, +<hôte>::Verify-Host, +<hôte>::SslCert, +<hôte>::SslKey et +<hôte>::SslForceVersion respectivement. + + + ftp -URI FTP ; ftp::Proxy est le serveur mandataire par défaut à utiliser. Il se -présente sous la forme standard : -ftp://[[user][:pass]@]host[:port]/ ; il est remplacé par la -variable d'environnement ftp_proxy. Pour utiliser un mandataire ftp, -vous devez renseigner l'entrée ftp::ProxyLogin 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 : -$(PROXY_USER), $(PROXY_PASS), $(SITE_USER), -$(SITE_PASS), $(SITE), et $(SITE_PORT). -Chacune correspond à un élément de l'URI. +URI FTP ; ftp::Proxy est le mandataire (proxy) FTP à utiliser par défaut. +Il se présente sous la forme standard : +ftp://[[user][:pass]@]host[:port]/. On peut spécifier un +mandataire particulier par hôte distant en utilisant la syntaxe : +ftp::Proxy::<hôte>. Le mot-clé spécial +DIRECT indique alors de n'utiliser aucun mandataire pour +l'hôte. Lorsqu'elle est définie, la variable d'environnement +ftp_proxy annule et replace toutes les options de mandataire +FTP. Pour utiliser un mandataire FTP, vous devrez renseigner l'entrée +ftp::ProxyLogin 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 : +$(PROXY_USER), $(PROXY_PASS), +$(SITE_USER), $(SITE_PASS), +$(SITE) et $(SITE_PORT). Chacune +correspond à l'élément respectif de l'URI. -L'option timeout positionne le compteur de temps mort (timeout) -utilisé par la méthode : cela vaut pour tout (connexion, données). +L'option timeout positionne le compteur de temps mort +(timeout) utilisé par la méthode. Cela vaut pour tout, connexion et données. 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 ; 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 « port » 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). -On peut utiliser un mandataire FTP pour atteindre une cible HTTP en -positionnant la variable d'environnement ftp_proxy à 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 ftp_proxy à 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. L'option ForceExtended contrôle l'utilisation des commandes liées à la RFC 2428, EPSV et EPRT. Par défaut, elle vaut -« false » ; ce qui signifie que ces commandes ne sont +« false » ce qui signifie que ces commandes ne sont utilisées que pour une connexion de type IPv6. Quand elle vaut « true », on les utilise même si la connexion est de type IPv4. La plupart des serveurs FTP ne suivent pas la RFC 2428. @@ -311,7 +376,7 @@ plupart des serveurs FTP ne suivent pas la RFC 2428. cdrom -URI CDROM ; la seule option de configuration pour les URI de CDROM +URI cédérom ; la seule option de configuration pour les URI de cédérom est le point de montage : cdrom::Mount ; il doit représenter le point de montage du lecteur de cédérom indiqué dans /etc/fstab. @@ -326,9 +391,9 @@ peuvent gpgv -URI GPGV ; la seule option pour les URI GPGV est celle qui permet de +URI GPGV ; la seule option pour les URI GPGV est celle qui permet de passer des paramètres à gpgv. - gpgv::Options Options supplémentaires passées à + gpgv::Options : options supplémentaires passées à gpgv. @@ -341,7 +406,8 @@ URI GPGV ; la seule option pour les URI GPGV est celle qui permet de Les répertoires de la section Dir::State concernent le système local. lists est le répertoire où placer les listes de paquets -téléchargés et status est le nom du fichier d'état de Dpkg. +téléchargés et status est le nom du fichier d'état de +&dpkg;. preferences concerne APT : c'est le nom du fichier des préférences. Dir::State contient le répertoire par défaut préfixé à tous les @@ -353,8 +419,8 @@ ou ./. cache local : par exemple, les deux caches de paquets srcpkgcache et pkgcache, et aussi l'endroit où sont placées les archives téléchargées, Dir::Cache::archives. 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 pkgcache plutôt que se passer du cache srcpkgcache. Comme pour Dir::State, le répertoire par défaut est contenu dans Dir::Cache. @@ -375,11 +441,22 @@ de configuration est charg Les programmes binaires sont pointés par Dir::Bin. L'emplacement des gestionnaires de méthodes est indiqué par Dir::Bin::Methods ; gzip, -Dpkg, apt-get, +dpkg, apt-get, dpkg-source, dpkg-buildpackage et apt-cache indiquent l'emplacement des programmes correspondants. - + + +L'option de configuration RootDir a une signification +particulière. Lorsqu'elle est définie, tous les chemins déclarés dans +Dir:: sont considérés relativement à +RootDir, même les chemins spécifiés de manière +absolue. Ainsi par exemple si RootDir est +défini comme /tmp/staging, et que chemin du fichier d'état +Dir::State::status est déclaré comme +/var/lib/dpkg/status alors ce fichier sera cherché +dans /tmp/staging/var/lib/dpkg/status. + APT et DSelect @@ -406,14 +483,14 @@ de nouveaux paquets. Options -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. UpdateOptions -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. @@ -427,7 +504,7 @@ qu'en cas d'erreur que l'on propose -Comment APT appelle Dpkg +Comment APT appelle &dpkg; Plusieurs directives de configuration contrôlent la manière dont APT invoque &dpkg; : elles figurent dans la section DPkg. @@ -435,8 +512,8 @@ invoque &dpkg; : elles figurent dans la section DPkg. Options -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;. @@ -450,7 +527,7 @@ liste. Les commandes sont appel Pre-Install-Pkgs -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 Options, on doit utiliser la notation de liste. Les commandes sont appelées dans l'ordre, en utilisant /bin/sh : APT s'arrête dès que l'une d'elles échoue. Sur @@ -467,7 +544,7 @@ commande pass Run-Directory -APT se place dans ce répertoire avant d'appeler Dpkg ; par défaut c'est +APT se place dans ce répertoire avant d'appeler &dpkg; ; par défaut c'est le répertoire /. @@ -481,25 +558,262 @@ cr + +Options « Periodic » et « Archive » + +Les groupes d'options APT::Periodic et +APT::Archive configurent les comportements périodiques +réalisés par le script /etc/cron.daily/apt, lancé +quotidiennement. + + +APT::Periodic +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. + + +Update-Package-List : périodicité de mise à jour de la +liste des paquets disponibles. (0 = désactivé) + + +Download-Upgradable-Packages : périodicité de +téléchargement dans le cache des paquets pour lesquels une mise à jour est +disponible. (0 = désactivé) + + +AutocleanInterval : périodicité des +« autoclean », c'est à dire de la suppression du cache des paquets +qui ne peuvent plus être téléchargés. (0 = désactivé) + + +Unattended-Upgrade : périodicité de mise à jour +automatique du système sans intervention humaine. Le paquet +unattended-upgrades doit être installé pour que cette tâche +s'exécute. Le cas échéant un fichier journal est écrit dans +/var/log/unattended-upgrades. (0 = désactivé) + + +APT::Archive +Les options de la section APT::Archive permettent de contrôler la taille +du cache de paquets. + + +MaxAge : ancienneté maximale d'un paquet dans le cache, +en nombre de jours. Les paquets plus anciens sont supprimés. (0 = désactivé) + + +MaxSize : 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. + + +MinAge : 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. + + + + + Les options de débogage - -La plupart des options de la section debug n'ont aucun intérêt -pour le simple utilisateur ; cependant, -Debug::pkgProblemResolver affiche d'intéressantes informations sur -les décisions que prend la commande dist-upgrade. Debug::NoLocking -désactive le verrouillage de fichier de manière à ce que APT puisse effectuer -quelques opérations sans être « root » et -Debug::pkgDPkgPM affiche la ligne de commande à chaque appel de -Dpkg. Debug::IdentCdrom désactive l'inclusion de -données de type statfs dans les ID de CDROM. -Debug::Acquire::gpgv Débogage de la méthode gpgv. - + +Les options de la section Debug:: 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 APT. 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 : + + + +Debug::pkgProblemResolver affiche d'intéressantes +informations sur les décisions prises par les commandes dist-upgrade, +upgrade, install, remove et purge. + + +Debug::NoLocking désactive le verrouillage de fichier de +manière à ce que APT puisse effectuer quelques opérations (telles que +apt-get -s install) sans être « root ». + + +Debug::pkgDPkgPM affiche la ligne de commande à chaque appel +de &dpkg;. + + +Debug::IdentCdrom désactive l'inclusion de données de type +statfs dans les ID de cédérom. + + + +Voici une liste complète des options de débogage de APT. + +Debug::Acquire::cdrom + +Affiche les informations concernant les sources de type cdrom:// + + +Debug::Acquire::ftp + +Affiche les informations concernant le téléchargement de paquets par FTP. + + +Debug::Acquire::http + +Affiche les informations concernant le téléchargement de paquets par HTTP. + + +Debug::Acquire::https + +Affiche les informations concernant le téléchargement de paquets par HTTPS. + + +Debug::Acquire::gpgv + +Affiche les informations relatives à la vérification de signatures +cryptographiques avec gpg. + + +Debug::aptcdrom + +Affiche des informations concernant l'accès aux collections de paquets +stockées sur cédérom. + + +Debug::BuildDeps + +Décrit le processus de résolution des dépendances pour la construction de +paquets source ( « build-dependencies » ) par &apt-get;. + + +Debug::Hashes + +Affiche toutes les clefs de hachage cryptographiques générées par les +librairies APT. + + +Debug::IdentCdrom +Désactive l'inclusion des données de type +statfs 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. + + +Debug::NoLocking + +Désactive le verrouillage de fichiers. Cela permet par exemple de lancer deux +instances de « apt-get update » en même temps. + + +Debug::pkgAcquire + +Trace les ajouts et suppressions d'éléments de la queue globale de +téléchargement. + + +Debug::pkgAcquire::Auth + +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. + + +Debug::pkgAcquire::Diffs + +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. + + +Debug::pkgAcquire::RRed + +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. + + +Debug::pkgAcquire::Worker + +Affiche toutes les interactions avec les processus enfants qui se chargent +effectivement des téléchargements. + + +Debug::pkgAcquire::pkgAutoRemove + +Affiche les changements concernant le marquage des paquets comme installés +automatiquement, et la suppression des paquets inutiles. + + +Debug::pkgDepCache::AutoInstall + +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 +apt-get install et pas le système de résolution de +dépendances complet de APT ; voir +Debug::pkgProblemResolver pour ce dernier. + + +Debug::pkgInitConfig + +Au lancement, affiche l'ensemble de la configuration sur la sortie d'erreur +standard. + + +Debug::pkgDPkgPM + +Affiche la commande exacte d'invocation de &dpkg; à chaque appel ; les +arguments sont séparés par des espaces. + + +Debug::pkgDPkgProgressReporting + 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. + + +Debug::pkgOrderList + +Affiche les étapes de l'algorithme utilisé pour choisir l'ordre dans lequel APT +passe les paquets à &dpkg;. + + +Debug::pkgPackageManager + +Affiche le détail des opérations liées à l'invocation de &dpkg;. + + +Debug::pkgPolicy + +Au lancement, affiche la priorité de chaque liste de paquets. + + +Debug::pkgProblemResolver + +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). + + +Debug::sourceList + +Affiche les fournisseurs déclarés dans le fichier +/etc/apt/vendors.list. + + + + + Exemples -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. @@ -514,4 +828,4 @@ d &manbugs; &deux-traducteurs; - \ No newline at end of file + diff --git a/ftparchive/writer.h b/ftparchive/writer.h index a4e4356f9..6e161c752 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -52,7 +52,7 @@ class FTWScanner { if (ErrorPrinted == false && Quiet <= Priority) { - cout << endl; + c1out << endl; ErrorPrinted = true; } } diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 470b47fd4..150c1d315 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -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 diff --git a/methods/http.cc b/methods/http.cc index 1bf798da4..006e89394 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -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(); } diff --git a/po/apt-all.pot b/po/apt-all.pot index 199b7f843..b8305c25c 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 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 \n" "Language-Team: LANGUAGE \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 ""