diff options
31 files changed, 1333 insertions, 519 deletions
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 <iostream> #include <sstream> - +#include <stdio.h> + #include <dirent.h> #include <sys/time.h> #include <errno.h> @@ -618,7 +619,7 @@ bool pkgAcquire::Queue::Startup() added other source retry to have cycle maintain a pipeline depth on its own. */ if (Cnf->Pipeline == true) - MaxPipeDepth = 1000; + MaxPipeDepth = _config->FindI("Acquire::Max-Pipeline-Depth",10); else MaxPipeDepth = 1; } 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 <string> #include <cstring> #include <algorithm> +#include <stdint.h> 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<Item>::iterator I = List.begin(); I != List.end();) { vector<Item>::iterator J = I; - for (; J != List.end() && J->Op == I->Op; J++); + for (; J != List.end() && J->Op == I->Op; J++) + /* nothing */; // Generate the argument list const char *Args[MaxArgs + 50]; + + // Now check if we are within the MaxArgs limit + // + // this code below is problematic, because it may happen that + // the argument list is split in a way that A depends on B + // and they are in the same "--configure A B" run + // - with the split they may now be configured in different + // runs if (J - I > (signed)MaxArgs) J = I + MaxArgs; @@ -796,12 +827,28 @@ bool pkgDPkgPM::Go(int OutStatusFd) rtt = tt; cfmakeraw(&rtt); rtt.c_lflag &= ~ECHO; + // block SIGTTOU during tcsetattr to prevent a hang if + // the process is a member of the background process group + // http://www.opengroup.org/onlinepubs/000095399/functions/tcsetattr.html + sigemptyset(&sigmask); + sigaddset(&sigmask, SIGTTOU); + sigprocmask(SIG_BLOCK,&sigmask, &original_sigmask); tcsetattr(0, TCSAFLUSH, &rtt); + sigprocmask(SIG_SETMASK, &original_sigmask, 0); } // Fork dpkg pid_t Child; _config->Set("APT::Keep-Fds::",fd[1]); + // send status information that we are about to fork dpkg + if(OutStatusFd > 0) { + ostringstream status; + status << "pmstatus:dpkg-exec:" + << (PackagesDone/float(PackagesTotal)*100.0) + << ":" << _("Running dpkg") + << endl; + write(OutStatusFd, status.str().c_str(), status.str().size()); + } Child = ExecFork(); // This is the child @@ -819,6 +866,15 @@ bool pkgDPkgPM::Go(int OutStatusFd) } close(fd[0]); // close the read end of the pipe + if (_config->FindDir("DPkg::Chroot-Directory","/") != "/") + { + std::cerr << "Chrooting into " + << _config->FindDir("DPkg::Chroot-Directory") + << std::endl; + if (chroot(_config->FindDir("DPkg::Chroot-Directory","/").c_str()) != 0) + _exit(100); + } + if (chdir(_config->FindDir("DPkg::Run-Directory","/").c_str()) != 0) _exit(100); @@ -838,7 +894,6 @@ bool pkgDPkgPM::Go(int OutStatusFd) _exit(100); } - /* No Job Control Stop Env is a magic dpkg var that prevents it from using sigstop */ putenv((char *)"DPKG_NO_TSTP=yes"); @@ -847,6 +902,10 @@ bool pkgDPkgPM::Go(int OutStatusFd) _exit(100); } + // apply ionice + if (_config->FindB("DPkg::UseIoNice", false) == true) + ionice(Child); + // clear the Keep-Fd again _config->Clear("APT::Keep-Fds",fd[1]); @@ -863,10 +922,6 @@ bool pkgDPkgPM::Go(int OutStatusFd) close(slave); // setups fds - fd_set rfds; - struct timespec tv; - sigset_t sigmask; - sigset_t original_sigmask; sigemptyset(&sigmask); sigprocmask(SIG_BLOCK,&sigmask,&original_sigmask); 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<string> &SigList, if(!Verify(prefix,*I, MetaIndex)) { // something went wrong, don't copy the Release.gpg // FIXME: delete any existing gpg file? + _error->Discard(); continue; } } 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 <jak@debian.org> 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: </varlistentry> <varlistentry><term><option>-i</option></term><term><option>--important</option></term> - <listitem><para>Print only important dependencies; for use with unmet. Causes only Depends and + <listitem><para>Print only important dependencies; for use with unmet and depends. Causes only Depends and Pre-Depends relations to be printed. Configuration Item: <literal>APT::Cache::Important</literal>.</para></listitem> </varlistentry> 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: <literal>APT::Get::Compile</literal>.</para></listitem> </varlistentry> + <varlistentry><term><option>--install-recommends</option></term> + <listitem><para>Also install recommended packages.</para></listitem> + </varlistentry> + + <varlistentry><term><option>--no-install-recommends</option></term> + <listitem><para>Do not install recommended packages.</para></listitem> + </varlistentry> + <varlistentry><term><option>--ignore-hold</option></term> <listitem><para>Ignore package Holds; This causes <command>apt-get</command> to ignore a hold placed on a package. This may be useful in conjunction with 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; <!-- The last update date --> - <date>29 Février 2004</date> + <date>11 juillet 2008</date> </refentryinfo> <refmeta> @@ -33,26 +33,30 @@ Le fichier <filename>apt.conf</filename> est le principal fichier de configurati de la collection d'outils que constitue APT ; tous les outils font appel à ce fichier de configuration et utilisent un analyseur syntaxique en ligne de commande commun afin de fournir un environnement uniforme. Quand un outil -d'APT démarre, il lit (si elle existe) la variable d'environnement -<envar>APT_CONFIG</envar> ; puis il lit les fichiers situés dans +d'APT démarre, il lit la configuration désignée par variable d'environnement +<envar>APT_CONFIG</envar> (si elle existe), puis il lit les fichiers situés dans <literal>Dir::Etc::Parts</literal> ainsi que le principal fichier de configuration indiqué par <literal>Dir::Etc::main</literal> ; enfin il applique les options de -la ligne de commande qui annulent les directives de configuration, chargeant, -si nécessaire, d'autres fichiers de configuration. +la ligne de commande qui prévalent sur les directives de configuration, chargeant +si nécessaire d'autres fichiers de configuration. </para> <para> Le fichier de configuration est construit comme un arbre d'options organisées en groupes fonctionnels. On se sert du double deux points (« :: ») pour indiquer une option ; par exemple, <literal>APT::Get::Assume-Yes</literal> est -une option pour le groupe d'outils APT, destinée à l'outil Get. Les options -n'héritent pas des groupes de leurs parents. +une option pour le groupe d'outils APT, destinée à l'outil Get. Il n'y a pas d'héritage +des options des groupes parents. </para> <para> Syntaxiquement, le langage de configuration est conçu sur le même modèle que les langages utilisés par des outils ISC tels que bind et dhcp. Une ligne -qui commence par <literal>//</literal> est un commentaire et elle est ignorée. +qui commence par <literal>//</literal> est traitée comme un commentaire et ignorée, de +même que les sections de texte placées entre <literal>/*</literal> et +<literal>*/</literal>, tout comme les commentaires C/C++. Chaque ligne est de la forme : - <literal>APT::Get::Assume-Yes "true";</literal> +<informalexample><programlisting> +<literal>APT::Get::Assume-Yes "true";</literal> + </programlisting></informalexample> Le point-virgule final est obligatoire et les guillemets sont optionnels. On peut déclarer un nouveau champ d'action avec des accolades, comme suit : @@ -68,10 +72,9 @@ APT { </programlisting></informalexample> <para> -avec des retours à la ligne pour faciliter la lecture. On peut créer des -listes en ouvrant un champ d'action et en mettant un seul mot entre -apostrophes suivi d'un point-virgule. On peut mettre plusieurs entrées, -séparées par un point-virgule. +avec des retours à la ligne pour faciliter la lecture. On peut créer une liste +en ouvrant un champ d'action et en y insérant une chaîne entre guillemets suivie +d'un point virgule pour chaque élément de la liste. </para> <informalexample><programlisting> @@ -79,14 +82,21 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; </programlisting></informalexample> <para> -Les modèles <filename>&docdir;examples/apt.conf</filename> &configureindex; +Les modèles <filename>&docdir;examples/apt.conf</filename> et &configureindex; montrent à quoi devrait ressembler le fichier de configuration. </para> <para> +Les identifiants des options de configuration ne sont pas sensibles à la casse. +Dans l'exemple précédent, on pourrait donc aussi bien utiliser +<literal>dpkg::pre-install-pkgs</literal>. + </para> +<para> Deux éléments spéciaux sont autorisés : <literal>#include</literal> et -<literal>#clear</literal>. <literal>#include</literal> inclut le fichier donné en argument, -à moins que le nom ne se termine par une barre oblique. <literal>#clear</literal> sert à -effacer une liste de noms. +<literal>#clear</literal>. <literal>#include</literal> inclut le fichier donné en +argument, à moins que le nom ne se termine par une barre oblique auquel cas le +répertoire entier est inclus. <literal>#clear</literal> sert à +effacer une partie de l'arbre de configuration. L'élément désigné et tout ses +descendants sont supprimés. </para> <para> Tous les outils d'APT possèdent une option <option>-o</option> qui permet de @@ -95,20 +105,31 @@ syntaxe consiste en un nom complet d'option (par exemple <literal>APT::Get::Assume-Yes</literal>) suivi par un signe égal, puis par la nouvelle valeur de l'option. On peut compléter une liste en ajoutant un « :: » au nom de la liste. - </para> + </para> </refsect1> <refsect1><title>Le groupe APT</title> -<para> -Ce groupe d'options contrôle aussi bien le comportement global d'APT que -la prise en compte des options pour chaque outil. +<para> +Ce groupe d'options contrôle le comportement global d'APT et contient également +des options communes à tous les outils. </para> <variablelist> <varlistentry><term>Architecture</term> <listitem><para> L'architecture du système ; cette option positionne l'architecture à utiliser -pour récupérer des fichiers et analyser des listes de paquets. L'architecture -interne par défaut est celle pour laquelle APT a été compilé. +pour récupérer des fichiers et analyser des listes de paquets. La valeur interne par +défaut est l'architecture pour laquelle APT a été compilé. + </para></listitem> +</varlistentry> + +<varlistentry><term>Default-Release</term> +<listitem><para> +Indique la distribution à utiliser par défaut lors de l'installation d'un +paquet si plusieurs versions sont disponibles. La valeur peut être un nom de +distribution ou un numéro de version. Exemples : « 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;. </para></listitem> </varlistentry> @@ -123,7 +144,7 @@ dans sa prise de décision. <varlistentry><term>Clean-Installed</term> <listitem><para> 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éinstaller. <listitem><para> 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. </para></listitem> </varlistentry> @@ -155,39 +176,37 @@ ou tous les paquets dont ces paquets dépendent. <varlistentry><term>Cache-Limit</term> <listitem><para> -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. </para></listitem> </varlistentry> <varlistentry><term>Build-Essential</term> <listitem><para> Cette option définit les paquets qui sont considérés comme faisant partie -des dépendances essentielles pour la construction des paquets. +des dépendances essentielles pour la construction de paquets. </para></listitem> </varlistentry> <varlistentry><term>Get</term> <listitem><para>La sous-section <literal>Get</literal> contrôle l'outil &apt-get;, -veuillez consulter -sa documentation pour avoir plus d'informations sur les options en question. +veuillez consulter sa documentation pour avoir plus d'informations sur les options +en question. </para></listitem> </varlistentry> <varlistentry><term>Cache</term> -<listitem><para>La sous-section <literal>Cache</literal> contrôle l'outil &apt-cache;, -veuillez -consulter sa documentation pour avoir plus d'informations sur les options en -question. +<listitem><para>La sous-section <literal>Cache</literal> contrôle l'outil +&apt-cache;, veuillez consulter sa documentation pour avoir plus d'informations +sur les options en question. </para></listitem> </varlistentry> <varlistentry><term>CDROM</term> -<listitem><para>La sous-section <literal>CDROM</literal> contrôle l'outil&apt-cdrom;, -veuillez -consulter sa documentation pour avoir plus d'informations sur les options en -question. +<listitem><para>La sous-section <literal>CDROM</literal> contrôle l'outil +&apt-cdrom;, veuillez consulter sa documentation pour avoir plus d'informations +sur les options en question. </para></listitem> </varlistentry> </variablelist> @@ -199,13 +218,20 @@ Le groupe d'options <literal>Acquire</literal> contrôle le téléchargement des pa les gestionnaires d'URI. <variablelist> +<varlistentry><term>PDiffs</term> +<listitem><para>Essayer de télécharger les fichiers différentiels appelés +<literal>PDiffs</literal> pour les paquets ou les fichiers sources, plutôt que +de les télécharger entièrement. Par défaut à « true ». + </para></listitem> +</varlistentry> + <varlistentry><term>Queue-Mode</term> <listitem><para> -Le mode file d'attente ; <literal>Queue-Mode</literal> peut prendre une valeur -parmi <literal>host</literal> ou <literal>access</literal> et cela détermine comment APT -parallélise les connexions sortantes. <literal>Host</literal> signifie qu'une -connexion par cible sera initiée, tandis que <literal>access</literal> signifie qu'une -connexion par type d'URI sera initiée. +Le mode de file d'attente ; <literal>Queue-Mode</literal> peut prendre les +valeurs <literal>host</literal> ou <literal>access</literal> et cela détermine +comment APT parallélise les connexions sortantes. <literal>Host</literal> signifie +qu'une connexion par cible sera initiée, tandis que <literal>access</literal> signifie +qu'une connexion par type d'URI sera initiée. </para></listitem> </varlistentry> @@ -227,30 +253,32 @@ Par défaut à « true ». <varlistentry><term>http</term> <listitem><para> -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 : -<literal>http://[[user][:pass]@]host[:port]/</literal>. En utilisant la syntaxe : -<literal>http::Proxy::<host></literal>, où le mot-clé spécial <literal>DIRECT</literal> -indique de n'utiliser aucun mandataire, on peut spécifier un mandataire -pour chaque machine distante. La variable d'environnement <envar>http_proxy</envar> -remplace tous ces paramètres. +<literal>http://[[user][:pass]@]host[:port]/</literal>. On peut spécifier un +mandataire particulier par hôte distant en utilisant la syntaxe : +<literal>http::Proxy::<hôte></literal>. Le mot-clé spécial +<literal>DIRECT</literal> indique alors de n'utiliser aucun mandataire pour +l'hôte. +Lorsqu'elle est définie, la variable d'environnement <envar>http_proxy</envar> +annule et remplace toutes les options de mandataire HTTP. </para> <para> -Trois options de configuration sont fournies pour le contrôle des caches qui -sont compatibles avec HTTP/1.1. <literal>No-Cache</literal> signifie que le mandataire -ne doit pas du tout utiliser les réponses qu'il a stockées ; <literal>Max-Age</literal> +Trois options de configuration sont fournies pour le contrôle des caches compatibles +avec HTTP/1.1. <literal>No-Cache</literal> signifie que le mandataire ne doit jamais +utiliser les réponses qu'il a stockées ; <literal>Max-Age</literal> 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. <literal>No-Store</literal> 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. </para> <para> L'option <literal>timeout</literal> 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. </para> <para> Une option de configuration est fournie pour contrôler la profondeur du tube @@ -264,27 +292,62 @@ ne respectent pas la RFC 2068. </para></listitem> </varlistentry> +<varlistentry><term>https</term> +<listitem><para> +URI HTTPS. Les options de contrôle de cache et de mandataire (proxy) sont les +mêmes que pour la méthode <literal>http</literal>. L'option +<literal>Pipeline-Depth</literal> n'est pas encore supportée. + </para> + +<para>La sous-option <literal>CaInfo</literal> spécifie le fichier contenant +les informations sur les certificats de confiance. +La sous-option booléenne <literal>Verify-Peer</literal> précise si le +certificat d'hôte du serveur doit être confronté aux certificats de confiance +ou pas. La sous-option booléenne <literal>Verify-Host</literal> précise s'il +faut vérifier ou pas le nom d'hôte du serveur. <literal>SslCert</literal> +détermine le certificat à utiliser pour l'authentification du client. +<literal>SslKey</literal> détermine quelle clef privée doit être utilisée pour +l'authentification du client. <literal>SslForceVersion</literal> surcharge la +valeur par défaut pour la version de SSL à utiliser et peut contenir l'une des +chaînes 'TLSv1' ou 'SSLv3'. + </para> +<para>Chacune de ces options peut être spécifiée pour un hôte particulier en +utilisant <literal><hôte>::CaInfo</literal>, +<literal><hôte>::Verify-Peer</literal>, +<literal><hôte>::Verify-Host</literal>, +<literal><hôte>::SslCert</literal>, +<literal><hôte>::SslKey</literal> et +<literal><hôte>::SslForceVersion</literal> respectivement. + </para></listitem> +</varlistentry> + <varlistentry><term>ftp</term> <listitem><para> -URI FTP ; ftp::Proxy est le serveur mandataire par défaut à utiliser. Il se -présente sous la forme standard : -<literal>ftp://[[user][:pass]@]host[:port]/</literal> ; il est remplacé par la -variable d'environnement <envar>ftp_proxy</envar>. Pour utiliser un mandataire ftp, -vous devez renseigner l'entrée <literal>ftp::ProxyLogin</literal> dans le fichier de -configuration. Cette entrée spécifie les commandes qui disent au serveur -mandataire comment se connecter. Voyez &configureindex; pour savoir -comment faire. Les variables de substitution disponibles sont : -<literal>$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, <literal>$(SITE_USER)</literal>, -<literal>$(SITE_PASS)</literal>, <literal>$(SITE)</literal>, et <literal>$(SITE_PORT)</literal>. -Chacune correspond à un élément de l'URI. +URI FTP ; ftp::Proxy est le mandataire (proxy) FTP à utiliser par défaut. +Il se présente sous la forme standard : +<literal>ftp://[[user][:pass]@]host[:port]/</literal>. On peut spécifier un +mandataire particulier par hôte distant en utilisant la syntaxe : +<literal>ftp::Proxy::<hôte></literal>. Le mot-clé spécial +<literal>DIRECT</literal> indique alors de n'utiliser aucun mandataire pour +l'hôte. Lorsqu'elle est définie, la variable d'environnement +<envar>ftp_proxy</envar> annule et replace toutes les options de mandataire +FTP. Pour utiliser un mandataire FTP, vous devrez renseigner l'entrée +<literal>ftp::ProxyLogin</literal> dans le fichier de configuration. Cette +entrée spécifie les commandes à envoyer au mandataire pour lui préciser à quoi +il doit se connecter. Voyez &configureindex; pour savoir comment faire. Les +variables de substitution disponibles sont : +<literal>$(PROXY_USER)</literal>, <literal>$(PROXY_PASS)</literal>, +<literal>$(SITE_USER)</literal>, <literal>$(SITE_PASS)</literal>, +<literal>$(SITE)</literal> et <literal>$(SITE_PORT)</literal>. Chacune +correspond à l'élément respectif de l'URI. </para> <para> -L'option <literal>timeout</literal> positionne le compteur de temps mort (timeout) -utilisé par la méthode : cela vaut pour tout (connexion, données). +L'option <literal>timeout</literal> positionne le compteur de temps mort +(timeout) utilisé par la méthode. Cela vaut pour tout, connexion et données. </para> <para> Plusieurs options de configuration sont fournies pour contrôler le mode -passif. Généralement, c'est plus sûr d'activer le mode passif ; 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). </para> <para> -On peut utiliser un mandataire FTP pour atteindre une cible HTTP en -positionnant la variable d'environnement <envar>ftp_proxy</envar> à une url http -- -consultez la méthode http ci-dessus pour la syntaxe. On ne peut pas fixer -cette variable dans le fichier de configuration et il n'est pas recommandé -d'utiliser HTTP par FTP à cause de son peu d'efficacité. +Il est possible de faire transiter le trafic FTP par un mandataire HTTP en +positionnant la variable d'environnement <envar>ftp_proxy</envar> à une URL +HTTP -- +consultez la méthode http ci-dessus pour la syntaxe. On ne peut pas le faire +dans le fichier de configuration et il n'est de toute façon pas recommandé +d'utiliser FTP au travers de HTTP en raison la faible efficacité de cette +méthode. </para> <para> L'option <literal>ForceExtended</literal> contrôle l'utilisation des commandes liées à la RFC 2428, <literal>EPSV</literal> et <literal>EPRT</literal>. Par défaut, elle vaut -« 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. <varlistentry><term>cdrom</term> <listitem><para> -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 : <literal>cdrom::Mount</literal> ; il doit représenter le point de montage du lecteur de cédérom indiqué dans <filename>/etc/fstab</filename>. @@ -326,9 +391,9 @@ peuvent être spécifiées en utilisant <literal>UMount</literal>. <varlistentry><term>gpgv</term> <listitem><para> -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. - <literal>gpgv::Options</literal> Options supplémentaires passées à + <literal>gpgv::Options</literal> : options supplémentaires passées à gpgv. </para> </listitem> @@ -341,7 +406,8 @@ URI GPGV ; la seule option pour les URI GPGV est celle qui permet de <para> Les répertoires de la section <literal>Dir::State</literal> concernent le système local. <literal>lists</literal> est le répertoire où placer les listes de paquets -téléchargés et <literal>status</literal> est le nom du fichier d'état de Dpkg. +téléchargés et <literal>status</literal> est le nom du fichier d'état de +&dpkg;. <literal>preferences</literal> concerne APT : c'est le nom du fichier des préférences. <literal>Dir::State</literal> contient le répertoire par défaut préfixé à tous les @@ -353,8 +419,8 @@ ou <filename>./</filename>. cache local : par exemple, les deux caches de paquets <literal>srcpkgcache</literal> et <literal>pkgcache</literal>, et aussi l'endroit où sont placées les archives téléchargées, <literal>Dir::Cache::archives</literal>. On peut -empêcher la création des caches en laissant leur nom en blanc. Cela ralentit -le démarrage mais cela sauve de l'espace disque. Il vaut mieux se passer du +empêcher la création des caches en saisissant un nom vide. Cela ralentit +le démarrage mais sauve de l'espace disque. Il vaut mieux se passer du cache <literal>pkgcache</literal> plutôt que se passer du cache <literal>srcpkgcache</literal>. Comme pour <literal>Dir::State</literal>, le répertoire par défaut est contenu dans <literal>Dir::Cache</literal>. @@ -375,11 +441,22 @@ de configuration est chargé. Les programmes binaires sont pointés par <literal>Dir::Bin</literal>. L'emplacement des gestionnaires de méthodes est indiqué par <literal>Dir::Bin::Methods</literal> ; <literal>gzip</literal>, -<literal>Dpkg</literal>, <literal>apt-get</literal>, +<literal>dpkg</literal>, <literal>apt-get</literal>, <literal>dpkg-source</literal>, <literal>dpkg-buildpackage</literal> et <literal>apt-cache</literal> indiquent l'emplacement des programmes correspondants. - </para> + </para> +<para> +L'option de configuration <literal>RootDir</literal> a une signification +particulière. Lorsqu'elle est définie, tous les chemins déclarés dans +<literal>Dir::</literal> sont considérés relativement à +<literal>RootDir</literal>, <emphasis>même les chemins spécifiés de manière +absolue</emphasis>. Ainsi par exemple si <literal>RootDir</literal> est +défini comme <filename>/tmp/staging</filename>, et que chemin du fichier d'état +<literal>Dir::State::status</literal> est déclaré comme +<filename>/var/lib/dpkg/status</filename> alors ce fichier sera cherché +dans <filename>/tmp/staging/var/lib/dpkg/status</filename>. + </para> </refsect1> <refsect1><title>APT et DSelect</title> @@ -406,14 +483,14 @@ de nouveaux paquets. <varlistentry><term>Options</term> <listitem><para> -Le contenu de cette variable est passé à &apt-get; avec les options de la ligne -de commande quand ce programme est utilisé dans la phase d'installation. +Le contenu de cette variable est passé comme options de ligne de commande à +&apt-get; lors de la phase d'installation. </para></listitem> </varlistentry> <varlistentry><term>UpdateOptions</term> <listitem><para> -Le contenu de cette variable est passé à &apt-get; avec les options de la -ligne de commande quand ce programme est utilisé dans la phase de mise à jour. +Le contenu de cette variable est passé comme options de ligne de commande à +&apt-get; lors de la phase de mise à jour. </para></listitem> </varlistentry> @@ -427,7 +504,7 @@ qu'en cas d'erreur que l'on propose à l'utilisateur d'intervenir. </variablelist> </refsect1> -<refsect1><title>Comment APT appelle Dpkg</title> +<refsect1><title>Comment APT appelle &dpkg;</title> <para> Plusieurs directives de configuration contrôlent la manière dont APT invoque &dpkg; : elles figurent dans la section <literal>DPkg</literal>. @@ -435,8 +512,8 @@ invoque &dpkg; : elles figurent dans la section <literal>DPkg</literal>. <variablelist> <varlistentry><term>Options</term> <listitem><para> -Il s'agit d'une liste d'options à passer à dpkg. Les options doivent être -déclarées en utilisant la notation de liste et chaque élément de liste est +Il s'agit d'une liste d'options à passer à &dpkg;. Les options doivent être +déclarées en utilisant la notation de liste et chaque élément de la liste est passé comme un seul argument à &dpkg;. </para></listitem> </varlistentry> @@ -450,7 +527,7 @@ liste. Les commandes sont appelées dans l'ordre, en utilisant </varlistentry> <varlistentry><term>Pre-Install-Pkgs</term> <listitem><para> -Il s'agit d'une liste de commandes shell à exécuter avant d'appeler Dpkg. +Il s'agit d'une liste de commandes shell à exécuter avant d'appeler &dpkg;. Tout comme pour <literal>Options</literal>, on doit utiliser la notation de liste. Les commandes sont appelées dans l'ordre, en utilisant <filename>/bin/sh</filename> : APT s'arrête dès que l'une d'elles échoue. Sur @@ -467,7 +544,7 @@ commande passée à <literal>Pre-Install-Pkgs</literal>. </varlistentry> <varlistentry><term>Run-Directory</term> <listitem><para> -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 <filename>/</filename>. </para></listitem> </varlistentry> @@ -481,25 +558,262 @@ créés. </variablelist> </refsect1> +<refsect1> +<title>Options « Periodic » et « Archive »</title> +<para> +Les groupes d'options <literal>APT::Periodic</literal> et +<literal>APT::Archive</literal> configurent les comportements périodiques +réalisés par le script <literal>/etc/cron.daily/apt</literal>, lancé +quotidiennement. + </para> +<variablelist> +<varlistentry><term>APT::Periodic</term> +<para>Les options de cette section permettent de configurer la fréquence +d'exécution des tâches APT lancées automatiquement. Ces paramètre prennent +comme valeurs des périodicités d'exécution en nombre de jours. + </para> +<listitem><para> +<literal>Update-Package-List</literal> : périodicité de mise à jour de la +liste des paquets disponibles. (0 = désactivé) + </para></listitem> +<listitem><para> +<literal>Download-Upgradable-Packages</literal> : périodicité de +téléchargement dans le cache des paquets pour lesquels une mise à jour est +disponible. (0 = désactivé) + </para></listitem> +<listitem><para> +<literal>AutocleanInterval</literal> : 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é) + </para></listitem> +<listitem><para> +<literal>Unattended-Upgrade</literal> : périodicité de mise à jour +automatique du système sans intervention humaine. Le paquet +<literal>unattended-upgrades</literal> doit être installé pour que cette tâche +s'exécute. Le cas échéant un fichier journal est écrit dans +<literal>/var/log/unattended-upgrades</literal>. (0 = désactivé) + </para></listitem> +</varlistentry> +<varlistentry><term>APT::Archive</term> +<para>Les options de la section APT::Archive permettent de contrôler la taille +du cache de paquets. + </para> +<listitem><para> +<literal>MaxAge</literal> : ancienneté maximale d'un paquet dans le cache, +en nombre de jours. Les paquets plus anciens sont supprimés. (0 = désactivé) + </para></listitem> +<listitem><para> +<literal>MaxSize</literal> : taille maximale du cache en Mo. (0 = +désactive) Si ce maximum est dépassé, des paquets sont supprimés jusqu'à ce +que la taille du cache repasse sous la limite. Les paquets les plus volumineux +sont supprimés en premier. + </para></listitem> +<listitem><para> +<literal>MinAge</literal> : age minimum d'un paquet du cache, en nombre de +jours (0 = désactivé). Un paquet plus récent ne sera pas supprimé. Cette option +est utile pour garder à disposition une version des paquets en cas de problème +grave. + </para></listitem> +</varlistentry> +</variablelist> +</refsect1> + <refsect1><title>Les options de débogage</title> -<para> -La plupart des options de la section <literal>debug</literal> n'ont aucun intérêt -pour le simple utilisateur ; cependant, -<literal>Debug::pkgProblemResolver</literal> affiche d'intéressantes informations sur -les décisions que prend la commande dist-upgrade. <literal>Debug::NoLocking</literal> -désactive le verrouillage de fichier de manière à ce que APT puisse effectuer -quelques opérations sans être « root » et -<literal>Debug::pkgDPkgPM</literal> affiche la ligne de commande à chaque appel de -Dpkg. <literal>Debug::IdentCdrom</literal> désactive l'inclusion de -données de type statfs dans les ID de CDROM. -<literal>Debug::Acquire::gpgv</literal> Débogage de la méthode gpgv. - </para> +<para> +Les options de la section <literal>Debug::</literal> servent soit à provoquer +l'affichage d'informations de débogage sur la sortie d'erreur standard du +programme qui utilise les librairies APT, soit à activer des modes de +fonctionnement spéciaux qui sont principalement utiles pour déboguer le +comportement de <literal>APT</literal>. La plupart de ces options n'ont pas +d'intérêt pour un utilisateur normal, mais certaines peuvent tout de même être +utiles : + </para> +<itemizedlist> +<listitem><para> +<literal>Debug::pkgProblemResolver</literal> affiche d'intéressantes +informations sur les décisions prises par les commandes <literal>dist-upgrade, +upgrade, install, remove et purge</literal>. + </para></listitem> +<listitem><para> +<literal>Debug::NoLocking</literal> désactive le verrouillage de fichier de +manière à ce que APT puisse effectuer quelques opérations (telles que +<literal>apt-get -s install</literal>) sans être « root ». + </para></listitem> +<listitem><para> +<literal>Debug::pkgDPkgPM</literal> affiche la ligne de commande à chaque appel +de &dpkg;. + </para></listitem> +<listitem><para> +<literal>Debug::IdentCdrom</literal> désactive l'inclusion de données de type +statfs dans les ID de cédérom. + </para></listitem> +</itemizedlist> + +<para>Voici une liste complète des options de débogage de APT.</para> +<variablelist> +<varlistentry><term>Debug::Acquire::cdrom</term> +<listitem><para> +Affiche les informations concernant les sources de type cdrom:// + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::Acquire::ftp</term> +<listitem><para> +Affiche les informations concernant le téléchargement de paquets par FTP. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::Acquire::http</term> +<listitem><para> +Affiche les informations concernant le téléchargement de paquets par HTTP. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::Acquire::https</term> +<listitem><para> +Affiche les informations concernant le téléchargement de paquets par HTTPS. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::Acquire::gpgv</term> +<listitem><para> +Affiche les informations relatives à la vérification de signatures +cryptographiques avec <literal>gpg</literal>. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::aptcdrom</term> +<listitem><para> +Affiche des informations concernant l'accès aux collections de paquets +stockées sur cédérom. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::BuildDeps</term> +<listitem><para> +Décrit le processus de résolution des dépendances pour la construction de +paquets source ( « build-dependencies » ) par &apt-get;. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::Hashes</term> +<listitem><para> +Affiche toutes les clefs de hachage cryptographiques générées par les +librairies APT. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::IdentCdrom</term> +<listitem><para>Désactive l'inclusion des données de type +<literal>statfs</literal> pour la génération des ID de cédérom, à savoir le +nombre de blocs libres et utilisés sur le système de fichier du cédérom. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::NoLocking</term> +<listitem><para> +Désactive le verrouillage de fichiers. Cela permet par exemple de lancer deux +instances de « apt-get update » en même temps. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgAcquire</term> +<listitem><para> +Trace les ajouts et suppressions d'éléments de la queue globale de +téléchargement. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgAcquire::Auth</term> +<listitem><para> +Affiche les détails de la vérification des sommes de contrôle et des signatures +cryptographiques des fichiers téléchargés, ainsi que les erreurs éventuelles. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgAcquire::Diffs</term> +<listitem><para> +Affiche les informations de téléchargement et de prise en compte des fichiers +différentiels des indexes de paquets, ainsi que les erreurs éventuelles. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgAcquire::RRed</term> +<listitem><para> +Affiche les détails de la vérification des sommes de contrôle et des signatures +cryptographiques des fichiers téléchargés, ainsi que les erreurs éventuelles. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgAcquire::Worker</term> +<listitem><para> +Affiche toutes les interactions avec les processus enfants qui se chargent +effectivement des téléchargements. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgAcquire::pkgAutoRemove</term> +<listitem><para> +Affiche les changements concernant le marquage des paquets comme installés +automatiquement, et la suppression des paquets inutiles. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgDepCache::AutoInstall</term> +<listitem><para> +Génère les informations de débogage décrivant quels paquets sont installés +automatiquement pour satisfaire les dépendances. Cela concerne la passe +initiale d'installation automatique effectuée par exemple par +<literal>apt-get install</literal> et pas le système de résolution de +dépendances complet de APT ; voir +<literal>Debug::pkgProblemResolver</literal> pour ce dernier. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgInitConfig</term> +<listitem><para> +Au lancement, affiche l'ensemble de la configuration sur la sortie d'erreur +standard. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgDPkgPM</term> +<listitem><para> +Affiche la commande exacte d'invocation de &dpkg; à chaque appel ; les +arguments sont séparés par des espaces. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgDPkgProgressReporting</term> +<listitem><para> Affiche l'ensemble des informations reçues de &dpkg; par +l'intermédiaire du descripteur de fichier d'état, et les éventuelles erreurs +d'analyse de ce fichier. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgOrderList</term> +<listitem><para> +Affiche les étapes de l'algorithme utilisé pour choisir l'ordre dans lequel APT +passe les paquets à &dpkg;. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgPackageManager</term> +<listitem><para> +Affiche le détail des opérations liées à l'invocation de &dpkg;. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgPolicy</term> +<listitem><para> +Au lancement, affiche la priorité de chaque liste de paquets. + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::pkgProblemResolver</term> +<listitem><para> +Affiche la trace d'exécution du système de résolution de dépendances (ne +concerne que les cas où un problème de dépendances complexe se présente). + </para></listitem> +</varlistentry> +<varlistentry><term>Debug::sourceList</term> +<listitem><para> +Affiche les fournisseurs déclarés dans le fichier +<filename>/etc/apt/vendors.list</filename>. + </para></listitem> +</varlistentry> +<!-- 2009/07/11 Utilisé nulle part actuellement, le code est commenté. +<varlistentry><term>Debug::Vendor</term> +<listitem><para> +Affiche les informations sur la recherche de fournisseurs. + </para></listitem> +</varlistentry> +--> +</variablelist> + </refsect1> <refsect1><title>Exemples</title> <para> -Le fichier &configureindex; contient un modèle de fichier montrant les valeurs par -défaut de toutes les options possibles. +Le fichier &configureindex; contient un modèle de fichier montrant des exemples +pour toutes les options existantes. </para> </refsect1> @@ -514,4 +828,4 @@ défaut de toutes les options possibles. &manbugs; &deux-traducteurs; -</refentry>
\ No newline at end of file +</refentry> 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 <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -15,153 +15,148 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: cmdline/apt-cache.cc:143 +#: cmdline/apt-cache.cc:141 #, c-format msgid "Package %s version %s has an unmet dep:\n" msgstr "" -#: cmdline/apt-cache.cc:183 cmdline/apt-cache.cc:552 cmdline/apt-cache.cc:640 -#: cmdline/apt-cache.cc:793 cmdline/apt-cache.cc:1013 -#: cmdline/apt-cache.cc:1415 cmdline/apt-cache.cc:1566 +#: cmdline/apt-cache.cc:181 cmdline/apt-cache.cc:550 cmdline/apt-cache.cc:644 +#: cmdline/apt-cache.cc:800 cmdline/apt-cache.cc:1022 +#: cmdline/apt-cache.cc:1423 cmdline/apt-cache.cc:1575 #, c-format msgid "Unable to locate package %s" msgstr "" -#: cmdline/apt-cache.cc:247 +#: cmdline/apt-cache.cc:245 msgid "Total package names: " msgstr "" -#: cmdline/apt-cache.cc:287 +#: cmdline/apt-cache.cc:285 msgid " Normal packages: " msgstr "" -#: cmdline/apt-cache.cc:288 +#: cmdline/apt-cache.cc:286 msgid " Pure virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:289 +#: cmdline/apt-cache.cc:287 msgid " Single virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:290 +#: cmdline/apt-cache.cc:288 msgid " Mixed virtual packages: " msgstr "" -#: cmdline/apt-cache.cc:291 +#: cmdline/apt-cache.cc:289 msgid " Missing: " msgstr "" -#: cmdline/apt-cache.cc:293 +#: cmdline/apt-cache.cc:291 msgid "Total distinct versions: " msgstr "" -#: cmdline/apt-cache.cc:295 +#: cmdline/apt-cache.cc:293 msgid "Total distinct descriptions: " msgstr "" -#: cmdline/apt-cache.cc:297 +#: cmdline/apt-cache.cc:295 msgid "Total dependencies: " msgstr "" -#: cmdline/apt-cache.cc:300 +#: cmdline/apt-cache.cc:298 msgid "Total ver/file relations: " msgstr "" -#: cmdline/apt-cache.cc:302 +#: cmdline/apt-cache.cc:300 msgid "Total Desc/File relations: " msgstr "" -#: cmdline/apt-cache.cc:304 +#: cmdline/apt-cache.cc:302 msgid "Total Provides mappings: " msgstr "" -#: cmdline/apt-cache.cc:316 +#: cmdline/apt-cache.cc:314 msgid "Total globbed strings: " msgstr "" -#: cmdline/apt-cache.cc:330 +#: cmdline/apt-cache.cc:328 msgid "Total dependency version space: " msgstr "" -#: cmdline/apt-cache.cc:335 +#: cmdline/apt-cache.cc:333 msgid "Total slack space: " msgstr "" -#: cmdline/apt-cache.cc:343 +#: cmdline/apt-cache.cc:341 msgid "Total space accounted for: " msgstr "" -#: cmdline/apt-cache.cc:471 cmdline/apt-cache.cc:1213 +#: cmdline/apt-cache.cc:469 cmdline/apt-cache.cc:1222 #, c-format msgid "Package file %s is out of sync." msgstr "" -#: cmdline/apt-cache.cc:1289 +#: cmdline/apt-cache.cc:1297 msgid "You must give exactly one pattern" msgstr "" -#: cmdline/apt-cache.cc:1443 +#: cmdline/apt-cache.cc:1451 msgid "No packages found" msgstr "" -#: cmdline/apt-cache.cc:1520 +#: cmdline/apt-cache.cc:1528 msgid "Package files:" msgstr "" -#: cmdline/apt-cache.cc:1527 cmdline/apt-cache.cc:1613 +#: cmdline/apt-cache.cc:1535 cmdline/apt-cache.cc:1622 msgid "Cache is out of sync, can't x-ref a package file" msgstr "" -#: cmdline/apt-cache.cc:1528 -#, c-format -msgid "%4i %s\n" -msgstr "" - #. Show any packages have explicit pins -#: cmdline/apt-cache.cc:1540 +#: cmdline/apt-cache.cc:1549 msgid "Pinned packages:" msgstr "" -#: cmdline/apt-cache.cc:1552 cmdline/apt-cache.cc:1593 +#: cmdline/apt-cache.cc:1561 cmdline/apt-cache.cc:1602 msgid "(not found)" msgstr "" #. Installed version -#: cmdline/apt-cache.cc:1573 +#: cmdline/apt-cache.cc:1582 msgid " Installed: " msgstr "" -#: cmdline/apt-cache.cc:1575 cmdline/apt-cache.cc:1583 +#: cmdline/apt-cache.cc:1584 cmdline/apt-cache.cc:1592 msgid "(none)" msgstr "" #. Candidate Version -#: cmdline/apt-cache.cc:1580 +#: cmdline/apt-cache.cc:1589 msgid " Candidate: " msgstr "" -#: cmdline/apt-cache.cc:1590 +#: cmdline/apt-cache.cc:1599 msgid " Package pin: " msgstr "" #. Show the priority tables -#: cmdline/apt-cache.cc:1599 +#: cmdline/apt-cache.cc:1608 msgid " Version table:" msgstr "" -#: cmdline/apt-cache.cc:1614 +#: cmdline/apt-cache.cc:1623 #, c-format msgid " %4i %s\n" msgstr "" -#: cmdline/apt-cache.cc:1709 cmdline/apt-cdrom.cc:134 cmdline/apt-config.cc:70 +#: cmdline/apt-cache.cc:1719 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:547 -#: cmdline/apt-get.cc:2584 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2586 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s compiled on %s %s\n" msgstr "" -#: cmdline/apt-cache.cc:1716 +#: cmdline/apt-cache.cc:1726 msgid "" "Usage: apt-cache [options] command\n" " apt-cache [options] add file1 [file2 ...]\n" @@ -200,15 +195,15 @@ msgid "" "See the apt-cache(8) and apt.conf(5) manual pages for more information.\n" msgstr "" -#: cmdline/apt-cdrom.cc:77 +#: cmdline/apt-cdrom.cc:78 msgid "Please provide a name for this Disc, such as 'Debian 2.1r1 Disk 1'" msgstr "" -#: cmdline/apt-cdrom.cc:92 +#: cmdline/apt-cdrom.cc:93 msgid "Please insert a Disc in the drive and press enter" msgstr "" -#: cmdline/apt-cdrom.cc:114 +#: cmdline/apt-cdrom.cc:117 msgid "Repeat this process for the rest of the CDs in your set." msgstr "" @@ -251,7 +246,7 @@ msgid "" " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" msgstr "" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:826 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:827 #, c-format msgid "Unable to write to %s" msgstr "" @@ -554,7 +549,7 @@ msgstr "" msgid "Y" msgstr "" -#: cmdline/apt-get.cc:149 cmdline/apt-get.cc:1659 +#: cmdline/apt-get.cc:149 cmdline/apt-get.cc:1661 #, c-format msgid "Regex compilation error - %s" msgstr "" @@ -653,118 +648,118 @@ msgstr "" msgid "%lu not fully installed or removed.\n" msgstr "" -#: cmdline/apt-get.cc:669 +#: cmdline/apt-get.cc:670 msgid "Correcting dependencies..." msgstr "" -#: cmdline/apt-get.cc:672 +#: cmdline/apt-get.cc:673 msgid " failed." msgstr "" -#: cmdline/apt-get.cc:675 +#: cmdline/apt-get.cc:676 msgid "Unable to correct dependencies" msgstr "" -#: cmdline/apt-get.cc:678 +#: cmdline/apt-get.cc:679 msgid "Unable to minimize the upgrade set" msgstr "" -#: cmdline/apt-get.cc:680 +#: cmdline/apt-get.cc:681 msgid " Done" msgstr "" -#: cmdline/apt-get.cc:684 +#: cmdline/apt-get.cc:685 msgid "You might want to run `apt-get -f install' to correct these." msgstr "" -#: cmdline/apt-get.cc:687 +#: cmdline/apt-get.cc:688 msgid "Unmet dependencies. Try using -f." msgstr "" -#: cmdline/apt-get.cc:712 +#: cmdline/apt-get.cc:710 msgid "WARNING: The following packages cannot be authenticated!" msgstr "" -#: cmdline/apt-get.cc:716 +#: cmdline/apt-get.cc:714 msgid "Authentication warning overridden.\n" msgstr "" -#: cmdline/apt-get.cc:723 +#: cmdline/apt-get.cc:721 msgid "Install these packages without verification [y/N]? " msgstr "" -#: cmdline/apt-get.cc:725 +#: cmdline/apt-get.cc:723 msgid "Some packages could not be authenticated" msgstr "" -#: cmdline/apt-get.cc:734 cmdline/apt-get.cc:883 +#: cmdline/apt-get.cc:732 cmdline/apt-get.cc:884 msgid "There are problems and -y was used without --force-yes" msgstr "" -#: cmdline/apt-get.cc:775 +#: cmdline/apt-get.cc:776 msgid "Internal error, InstallPackages was called with broken packages!" msgstr "" -#: cmdline/apt-get.cc:784 +#: cmdline/apt-get.cc:785 msgid "Packages need to be removed but remove is disabled." msgstr "" -#: cmdline/apt-get.cc:795 +#: cmdline/apt-get.cc:796 msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:811 cmdline/apt-get.cc:2001 cmdline/apt-get.cc:2034 +#: cmdline/apt-get.cc:812 cmdline/apt-get.cc:2003 cmdline/apt-get.cc:2036 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:821 cmdline/apt-get.cc:2082 cmdline/apt-get.cc:2328 -#: apt-pkg/cachefile.cc:64 +#: cmdline/apt-get.cc:822 cmdline/apt-get.cc:2084 cmdline/apt-get.cc:2330 +#: apt-pkg/cachefile.cc:65 msgid "The list of sources could not be read." msgstr "" -#: cmdline/apt-get.cc:836 +#: cmdline/apt-get.cc:837 msgid "How odd.. The sizes didn't match, email apt@packages.debian.org" msgstr "" -#: cmdline/apt-get.cc:841 +#: cmdline/apt-get.cc:842 #, c-format msgid "Need to get %sB/%sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:844 +#: cmdline/apt-get.cc:845 #, c-format msgid "Need to get %sB of archives.\n" msgstr "" -#: cmdline/apt-get.cc:849 +#: cmdline/apt-get.cc:850 #, c-format msgid "After this operation, %sB of additional disk space will be used.\n" msgstr "" -#: cmdline/apt-get.cc:852 +#: cmdline/apt-get.cc:853 #, c-format msgid "After this operation, %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:866 cmdline/apt-get.cc:2177 +#: cmdline/apt-get.cc:867 cmdline/apt-get.cc:2179 #, c-format msgid "Couldn't determine free space in %s" msgstr "" -#: cmdline/apt-get.cc:873 +#: cmdline/apt-get.cc:874 #, c-format msgid "You don't have enough free space in %s." msgstr "" -#: cmdline/apt-get.cc:889 cmdline/apt-get.cc:909 +#: cmdline/apt-get.cc:890 cmdline/apt-get.cc:910 msgid "Trivial Only specified but this is not a trivial operation." msgstr "" -#: cmdline/apt-get.cc:891 +#: cmdline/apt-get.cc:892 msgid "Yes, do as I say!" msgstr "" -#: cmdline/apt-get.cc:893 +#: cmdline/apt-get.cc:894 #, c-format msgid "" "You are about to do something potentially harmful.\n" @@ -772,74 +767,74 @@ msgid "" " ?] " msgstr "" -#: cmdline/apt-get.cc:899 cmdline/apt-get.cc:918 +#: cmdline/apt-get.cc:900 cmdline/apt-get.cc:919 msgid "Abort." msgstr "" -#: cmdline/apt-get.cc:914 +#: cmdline/apt-get.cc:915 msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:986 cmdline/apt-get.cc:2225 apt-pkg/algorithms.cc:1382 +#: cmdline/apt-get.cc:987 cmdline/apt-get.cc:2227 apt-pkg/algorithms.cc:1407 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" -#: cmdline/apt-get.cc:1004 +#: cmdline/apt-get.cc:1005 msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:1005 cmdline/apt-get.cc:2234 +#: cmdline/apt-get.cc:1006 cmdline/apt-get.cc:2236 msgid "Download complete and in download only mode" msgstr "" -#: cmdline/apt-get.cc:1011 +#: cmdline/apt-get.cc:1012 msgid "" "Unable to fetch some archives, maybe run apt-get update or try with --fix-" "missing?" msgstr "" -#: cmdline/apt-get.cc:1015 +#: cmdline/apt-get.cc:1016 msgid "--fix-missing and media swapping is not currently supported" msgstr "" -#: cmdline/apt-get.cc:1020 +#: cmdline/apt-get.cc:1021 msgid "Unable to correct missing packages." msgstr "" -#: cmdline/apt-get.cc:1021 +#: cmdline/apt-get.cc:1022 msgid "Aborting install." msgstr "" -#: cmdline/apt-get.cc:1055 +#: cmdline/apt-get.cc:1056 #, c-format msgid "Note, selecting %s instead of %s\n" msgstr "" -#: cmdline/apt-get.cc:1065 +#: cmdline/apt-get.cc:1066 #, c-format msgid "Skipping %s, it is already installed and upgrade is not set.\n" msgstr "" -#: cmdline/apt-get.cc:1083 +#: cmdline/apt-get.cc:1084 #, c-format msgid "Package %s is not installed, so not removed\n" msgstr "" -#: cmdline/apt-get.cc:1094 +#: cmdline/apt-get.cc:1095 #, c-format msgid "Package %s is a virtual package provided by:\n" msgstr "" -#: cmdline/apt-get.cc:1106 +#: cmdline/apt-get.cc:1107 msgid " [Installed]" msgstr "" -#: cmdline/apt-get.cc:1111 +#: cmdline/apt-get.cc:1112 msgid "You should explicitly select one to install." msgstr "" -#: cmdline/apt-get.cc:1116 +#: cmdline/apt-get.cc:1117 #, c-format msgid "" "Package %s is not available, but is referred to by another package.\n" @@ -847,68 +842,68 @@ msgid "" "is only available from another source\n" msgstr "" -#: cmdline/apt-get.cc:1135 +#: cmdline/apt-get.cc:1136 msgid "However the following packages replace it:" msgstr "" -#: cmdline/apt-get.cc:1138 +#: cmdline/apt-get.cc:1139 #, c-format msgid "Package %s has no installation candidate" msgstr "" -#: cmdline/apt-get.cc:1158 +#: cmdline/apt-get.cc:1159 #, c-format msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n" msgstr "" -#: cmdline/apt-get.cc:1166 +#: cmdline/apt-get.cc:1167 #, c-format msgid "%s is already the newest version.\n" msgstr "" -#: cmdline/apt-get.cc:1195 +#: cmdline/apt-get.cc:1196 #, c-format msgid "Release '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1197 +#: cmdline/apt-get.cc:1198 #, c-format msgid "Version '%s' for '%s' was not found" msgstr "" -#: cmdline/apt-get.cc:1203 +#: cmdline/apt-get.cc:1204 #, c-format msgid "Selected version %s (%s) for %s\n" msgstr "" -#: cmdline/apt-get.cc:1309 +#: cmdline/apt-get.cc:1310 #, c-format msgid "No source package '%s' picking '%s' instead\n" msgstr "" -#: cmdline/apt-get.cc:1346 +#: cmdline/apt-get.cc:1348 msgid "The update command takes no arguments" msgstr "" -#: cmdline/apt-get.cc:1359 +#: cmdline/apt-get.cc:1361 msgid "Unable to lock the list directory" msgstr "" -#: cmdline/apt-get.cc:1411 +#: cmdline/apt-get.cc:1413 msgid "We are not supposed to delete stuff, can't start AutoRemover" msgstr "" -#: cmdline/apt-get.cc:1443 +#: cmdline/apt-get.cc:1445 msgid "" "The following packages were automatically installed and are no longer " "required:" msgstr "" -#: cmdline/apt-get.cc:1445 +#: cmdline/apt-get.cc:1447 msgid "Use 'apt-get autoremove' to remove them." msgstr "" -#: cmdline/apt-get.cc:1450 +#: cmdline/apt-get.cc:1452 msgid "" "Hmm, seems like the AutoRemover destroyed something which really\n" "shouldn't happen. Please file a bug report against apt." @@ -924,49 +919,49 @@ msgstr "" #. "that package should be filed.") << endl; #. } #. -#: cmdline/apt-get.cc:1453 cmdline/apt-get.cc:1743 +#: cmdline/apt-get.cc:1455 cmdline/apt-get.cc:1745 msgid "The following information may help to resolve the situation:" msgstr "" -#: cmdline/apt-get.cc:1457 +#: cmdline/apt-get.cc:1459 msgid "Internal Error, AutoRemover broke stuff" msgstr "" -#: cmdline/apt-get.cc:1476 +#: cmdline/apt-get.cc:1478 msgid "Internal error, AllUpgrade broke stuff" msgstr "" -#: cmdline/apt-get.cc:1531 +#: cmdline/apt-get.cc:1533 #, c-format msgid "Couldn't find task %s" msgstr "" -#: cmdline/apt-get.cc:1646 cmdline/apt-get.cc:1682 +#: cmdline/apt-get.cc:1648 cmdline/apt-get.cc:1684 #, c-format msgid "Couldn't find package %s" msgstr "" -#: cmdline/apt-get.cc:1669 +#: cmdline/apt-get.cc:1671 #, c-format msgid "Note, selecting %s for regex '%s'\n" msgstr "" -#: cmdline/apt-get.cc:1700 +#: cmdline/apt-get.cc:1702 #, c-format msgid "%s set to manually installed.\n" msgstr "" -#: cmdline/apt-get.cc:1713 +#: cmdline/apt-get.cc:1715 msgid "You might want to run `apt-get -f install' to correct these:" msgstr "" -#: cmdline/apt-get.cc:1716 +#: cmdline/apt-get.cc:1718 msgid "" "Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a " "solution)." msgstr "" -#: cmdline/apt-get.cc:1728 +#: cmdline/apt-get.cc:1730 msgid "" "Some packages could not be installed. This may mean that you have\n" "requested an impossible situation or if you are using the unstable\n" @@ -974,152 +969,152 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1746 +#: cmdline/apt-get.cc:1748 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1775 +#: cmdline/apt-get.cc:1777 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1864 +#: cmdline/apt-get.cc:1866 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1865 +#: cmdline/apt-get.cc:1867 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1894 +#: cmdline/apt-get.cc:1896 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1897 methods/ftp.cc:702 methods/connect.cc:112 +#: cmdline/apt-get.cc:1899 methods/ftp.cc:702 methods/connect.cc:112 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1902 +#: cmdline/apt-get.cc:1904 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1969 cmdline/apt-get.cc:1977 +#: cmdline/apt-get.cc:1971 cmdline/apt-get.cc:1979 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:2077 +#: cmdline/apt-get.cc:2079 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:2107 cmdline/apt-get.cc:2346 +#: cmdline/apt-get.cc:2109 cmdline/apt-get.cc:2348 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:2156 +#: cmdline/apt-get.cc:2158 #, c-format msgid "Skipping already downloaded file '%s'\n" msgstr "" -#: cmdline/apt-get.cc:2184 +#: cmdline/apt-get.cc:2186 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:2190 +#: cmdline/apt-get.cc:2192 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2193 +#: cmdline/apt-get.cc:2195 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2199 +#: cmdline/apt-get.cc:2201 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2230 +#: cmdline/apt-get.cc:2232 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2258 +#: cmdline/apt-get.cc:2260 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2270 +#: cmdline/apt-get.cc:2272 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2271 +#: cmdline/apt-get.cc:2273 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2288 +#: cmdline/apt-get.cc:2290 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2307 +#: cmdline/apt-get.cc:2309 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2323 +#: cmdline/apt-get.cc:2325 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2351 +#: cmdline/apt-get.cc:2353 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2371 +#: cmdline/apt-get.cc:2373 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2423 +#: cmdline/apt-get.cc:2425 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2476 +#: cmdline/apt-get.cc:2478 #, c-format msgid "" "%s dependency for %s cannot be satisfied because no available versions of " "package %s can satisfy version requirements" msgstr "" -#: cmdline/apt-get.cc:2512 +#: cmdline/apt-get.cc:2514 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2539 +#: cmdline/apt-get.cc:2541 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2553 +#: cmdline/apt-get.cc:2555 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2557 +#: cmdline/apt-get.cc:2559 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2589 +#: cmdline/apt-get.cc:2591 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2630 +#: cmdline/apt-get.cc:2632 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1163,7 +1158,7 @@ msgid "" " This APT has Super Cow Powers.\n" msgstr "" -#: cmdline/apt-get.cc:2796 +#: cmdline/apt-get.cc:2799 msgid "" "NOTE: This is only a simulation!\n" " apt-get needs root privileges for real execution.\n" @@ -1388,7 +1383,7 @@ msgstr "" #: apt-inst/extract.cc:464 apt-pkg/contrib/configuration.cc:822 #: apt-pkg/contrib/cdromutl.cc:150 apt-pkg/sourcelist.cc:320 -#: apt-pkg/acquire.cc:418 apt-pkg/clean.cc:33 +#: apt-pkg/acquire.cc:419 apt-pkg/clean.cc:34 apt-pkg/policy.cc:268 #, c-format msgid "Unable to read %s" msgstr "" @@ -1418,9 +1413,9 @@ msgid "The info and temp directories need to be on the same filesystem" msgstr "" #. Build the status cache -#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:759 -#: apt-pkg/pkgcachegen.cc:828 apt-pkg/pkgcachegen.cc:833 -#: apt-pkg/pkgcachegen.cc:956 +#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:760 +#: apt-pkg/pkgcachegen.cc:829 apt-pkg/pkgcachegen.cc:834 +#: apt-pkg/pkgcachegen.cc:957 msgid "Reading package lists" msgstr "" @@ -1613,7 +1608,7 @@ msgstr "" msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:538 methods/rsh.cc:190 +#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:541 methods/rsh.cc:190 msgid "Read error" msgstr "" @@ -1625,7 +1620,7 @@ msgstr "" msgid "Protocol corruption" msgstr "" -#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:577 methods/rsh.cc:232 +#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:580 methods/rsh.cc:232 msgid "Write error" msgstr "" @@ -2044,7 +2039,7 @@ msgid "Unable to stat the mount point %s" msgstr "" #: apt-pkg/contrib/cdromutl.cc:146 apt-pkg/contrib/cdromutl.cc:180 -#: apt-pkg/acquire.cc:424 apt-pkg/acquire.cc:449 apt-pkg/clean.cc:39 +#: apt-pkg/acquire.cc:425 apt-pkg/acquire.cc:450 apt-pkg/clean.cc:40 #, c-format msgid "Unable to change to %s" msgstr "" @@ -2078,45 +2073,50 @@ msgstr "" msgid "Waited for %s but it wasn't there" msgstr "" -#: apt-pkg/contrib/fileutl.cc:454 +#: apt-pkg/contrib/fileutl.cc:455 #, c-format msgid "Sub-process %s received a segmentation fault." msgstr "" #: apt-pkg/contrib/fileutl.cc:457 #, c-format +msgid "Sub-process %s received signal %u." +msgstr "" + +#: apt-pkg/contrib/fileutl.cc:460 +#, c-format msgid "Sub-process %s returned an error code (%u)" msgstr "" -#: apt-pkg/contrib/fileutl.cc:459 +#: apt-pkg/contrib/fileutl.cc:462 #, c-format msgid "Sub-process %s exited unexpectedly" msgstr "" -#: apt-pkg/contrib/fileutl.cc:503 +#: apt-pkg/contrib/fileutl.cc:506 #, c-format msgid "Could not open file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:559 +#: apt-pkg/contrib/fileutl.cc:562 #, c-format msgid "read, still have %lu to read but none left" msgstr "" -#: apt-pkg/contrib/fileutl.cc:589 +#: apt-pkg/contrib/fileutl.cc:592 #, c-format msgid "write, still have %lu to write but couldn't" msgstr "" -#: apt-pkg/contrib/fileutl.cc:664 +#: apt-pkg/contrib/fileutl.cc:667 msgid "Problem closing the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:670 +#: apt-pkg/contrib/fileutl.cc:673 msgid "Problem unlinking the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:681 +#: apt-pkg/contrib/fileutl.cc:684 msgid "Problem syncing the file" msgstr "" @@ -2209,16 +2209,16 @@ msgstr "" msgid "Dependency generation" msgstr "" -#: apt-pkg/depcache.cc:173 apt-pkg/depcache.cc:192 apt-pkg/depcache.cc:196 +#: apt-pkg/depcache.cc:174 apt-pkg/depcache.cc:193 apt-pkg/depcache.cc:197 msgid "Reading state information" msgstr "" -#: apt-pkg/depcache.cc:220 +#: apt-pkg/depcache.cc:221 #, c-format msgid "Failed to open StateFile %s" msgstr "" -#: apt-pkg/depcache.cc:226 +#: apt-pkg/depcache.cc:227 #, c-format msgid "Failed to write temporary StateFile %s" msgstr "" @@ -2263,7 +2263,7 @@ msgstr "" msgid "Opening %s" msgstr "" -#: apt-pkg/sourcelist.cc:216 apt-pkg/cdrom.cc:445 +#: apt-pkg/sourcelist.cc:216 apt-pkg/cdrom.cc:448 #, c-format msgid "Line %u too long in source list %s." msgstr "" @@ -2283,7 +2283,7 @@ msgstr "" msgid "Malformed line %u in source list %s (vendor id)" msgstr "" -#: apt-pkg/packagemanager.cc:426 +#: apt-pkg/packagemanager.cc:428 #, c-format msgid "" "This installation run will require temporarily removing the essential " @@ -2302,40 +2302,40 @@ msgid "" "The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "" -#: apt-pkg/algorithms.cc:1131 +#: apt-pkg/algorithms.cc:1154 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." msgstr "" -#: apt-pkg/algorithms.cc:1133 +#: apt-pkg/algorithms.cc:1156 msgid "Unable to correct problems, you have held broken packages." msgstr "" -#: apt-pkg/algorithms.cc:1408 apt-pkg/algorithms.cc:1410 +#: apt-pkg/algorithms.cc:1433 apt-pkg/algorithms.cc:1435 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." msgstr "" -#: apt-pkg/acquire.cc:59 +#: apt-pkg/acquire.cc:60 #, c-format msgid "Lists directory %spartial is missing." msgstr "" -#: apt-pkg/acquire.cc:63 +#: apt-pkg/acquire.cc:64 #, c-format msgid "Archive directory %spartial is missing." msgstr "" #. only show the ETA if it makes sense #. two days -#: apt-pkg/acquire.cc:825 +#: apt-pkg/acquire.cc:829 #, c-format msgid "Retrieving file %li of %li (%s remaining)" msgstr "" -#: apt-pkg/acquire.cc:827 +#: apt-pkg/acquire.cc:831 #, c-format msgid "Retrieving file %li of %li" msgstr "" @@ -2355,16 +2355,16 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:124 +#: apt-pkg/init.cc:125 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:140 +#: apt-pkg/init.cc:141 msgid "Unable to determine a suitable packaging system type" msgstr "" -#: apt-pkg/clean.cc:56 +#: apt-pkg/clean.cc:57 #, c-format msgid "Unable to stat %s." msgstr "" @@ -2373,24 +2373,25 @@ msgstr "" msgid "You must put some 'source' URIs in your sources.list" msgstr "" -#: apt-pkg/cachefile.cc:70 +#: apt-pkg/cachefile.cc:71 msgid "The package lists or status file could not be parsed or opened." msgstr "" -#: apt-pkg/cachefile.cc:74 +#: apt-pkg/cachefile.cc:75 msgid "You may want to run apt-get update to correct these problems" msgstr "" -#: apt-pkg/policy.cc:289 -msgid "Invalid record in the preferences file, no Package header" +#: apt-pkg/policy.cc:329 +#, c-format +msgid "Invalid record in the preferences file %s, no Package header" msgstr "" -#: apt-pkg/policy.cc:311 +#: apt-pkg/policy.cc:351 #, c-format msgid "Did not understand pin type %s" msgstr "" -#: apt-pkg/policy.cc:319 +#: apt-pkg/policy.cc:359 msgid "No priority (or zero) specified for pin" msgstr "" @@ -2474,16 +2475,16 @@ msgstr "" msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:689 +#: apt-pkg/pkgcachegen.cc:690 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:774 +#: apt-pkg/pkgcachegen.cc:775 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:901 apt-pkg/pkgcachegen.cc:908 +#: apt-pkg/pkgcachegen.cc:902 apt-pkg/pkgcachegen.cc:909 msgid "IO Error saving source cache" msgstr "" @@ -2492,140 +2493,161 @@ msgstr "" msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:394 +#: apt-pkg/acquire-item.cc:401 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:644 apt-pkg/acquire-item.cc:1406 +#: apt-pkg/acquire-item.cc:658 apt-pkg/acquire-item.cc:1426 msgid "Hash Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:1101 +#: apt-pkg/acquire-item.cc:1118 msgid "There is no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:1211 +#: apt-pkg/acquire-item.cc:1231 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" msgstr "" -#: apt-pkg/acquire-item.cc:1270 +#: apt-pkg/acquire-item.cc:1290 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:1311 +#: apt-pkg/acquire-item.cc:1331 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:1398 +#: apt-pkg/acquire-item.cc:1418 msgid "Size mismatch" msgstr "" +#: apt-pkg/indexrecords.cc:40 +#, c-format +msgid "Unable to parse Release file %s" +msgstr "" + +#: apt-pkg/indexrecords.cc:47 +#, c-format +msgid "No sections in Release file %s" +msgstr "" + +#: apt-pkg/indexrecords.cc:81 +#, c-format +msgid "No Hash entry in Release file %s" +msgstr "" + #: apt-pkg/vendorlist.cc:66 #, c-format msgid "Vendor block %s contains no fingerprint" msgstr "" -#: apt-pkg/cdrom.cc:525 +#: apt-pkg/cdrom.cc:529 #, c-format msgid "" "Using CD-ROM mount point %s\n" "Mounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:534 apt-pkg/cdrom.cc:622 +#: apt-pkg/cdrom.cc:538 apt-pkg/cdrom.cc:627 msgid "Identifying.. " msgstr "" -#: apt-pkg/cdrom.cc:559 +#: apt-pkg/cdrom.cc:563 #, c-format msgid "Stored label: %s\n" msgstr "" -#: apt-pkg/cdrom.cc:566 apt-pkg/cdrom.cc:836 +#: apt-pkg/cdrom.cc:570 apt-pkg/cdrom.cc:841 msgid "Unmounting CD-ROM...\n" msgstr "" -#: apt-pkg/cdrom.cc:585 +#: apt-pkg/cdrom.cc:590 #, c-format msgid "Using CD-ROM mount point %s\n" msgstr "" -#: apt-pkg/cdrom.cc:603 +#: apt-pkg/cdrom.cc:608 msgid "Unmounting CD-ROM\n" msgstr "" -#: apt-pkg/cdrom.cc:607 +#: apt-pkg/cdrom.cc:612 msgid "Waiting for disc...\n" msgstr "" #. Mount the new CDROM -#: apt-pkg/cdrom.cc:615 +#: apt-pkg/cdrom.cc:620 msgid "Mounting CD-ROM...\n" msgstr "" -#: apt-pkg/cdrom.cc:633 +#: apt-pkg/cdrom.cc:638 msgid "Scanning disc for index files..\n" msgstr "" -#: apt-pkg/cdrom.cc:673 +#: apt-pkg/cdrom.cc:678 #, c-format msgid "" "Found %zu package indexes, %zu source indexes, %zu translation indexes and %" "zu signatures\n" msgstr "" -#: apt-pkg/cdrom.cc:710 +#: apt-pkg/cdrom.cc:689 +msgid "" +"Unable to locate any package files, perhaps this is not a Debian Disc or the " +"wrong architecture?" +msgstr "" + +#: apt-pkg/cdrom.cc:715 #, c-format msgid "Found label '%s'\n" msgstr "" -#: apt-pkg/cdrom.cc:739 +#: apt-pkg/cdrom.cc:744 msgid "That is not a valid name, try again.\n" msgstr "" -#: apt-pkg/cdrom.cc:755 +#: apt-pkg/cdrom.cc:760 #, c-format msgid "" "This disc is called: \n" "'%s'\n" msgstr "" -#: apt-pkg/cdrom.cc:759 +#: apt-pkg/cdrom.cc:764 msgid "Copying package lists..." msgstr "" -#: apt-pkg/cdrom.cc:785 +#: apt-pkg/cdrom.cc:790 msgid "Writing new source list\n" msgstr "" -#: apt-pkg/cdrom.cc:794 +#: apt-pkg/cdrom.cc:799 msgid "Source list entries for this disc are:\n" msgstr "" -#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:822 +#: apt-pkg/indexcopy.cc:263 apt-pkg/indexcopy.cc:833 #, c-format msgid "Wrote %i records.\n" msgstr "" -#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:824 +#: apt-pkg/indexcopy.cc:265 apt-pkg/indexcopy.cc:835 #, c-format msgid "Wrote %i records with %i missing files.\n" msgstr "" -#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:827 +#: apt-pkg/indexcopy.cc:268 apt-pkg/indexcopy.cc:838 #, c-format msgid "Wrote %i records with %i mismatched files\n" msgstr "" -#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:830 +#: apt-pkg/indexcopy.cc:271 apt-pkg/indexcopy.cc:841 #, c-format msgid "Wrote %i records with %i missing files and %i mismatched files\n" msgstr "" @@ -2635,12 +2657,12 @@ msgstr "" msgid "Installing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:612 +#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:642 #, c-format msgid "Configuring %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:627 +#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:649 #, c-format msgid "Removing %s" msgstr "" @@ -2650,61 +2672,77 @@ msgstr "" msgid "Running post-installation trigger %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:521 +#: apt-pkg/deb/dpkgpm.cc:546 #, c-format msgid "Directory '%s' missing" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:605 +#: apt-pkg/deb/dpkgpm.cc:635 #, c-format msgid "Preparing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:606 +#: apt-pkg/deb/dpkgpm.cc:636 #, c-format msgid "Unpacking %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:611 +#: apt-pkg/deb/dpkgpm.cc:641 #, c-format msgid "Preparing to configure %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:614 apt-pkg/deb/dpkgpm.cc:615 -#, c-format -msgid "Processing triggers for %s" -msgstr "" - -#: apt-pkg/deb/dpkgpm.cc:617 +#: apt-pkg/deb/dpkgpm.cc:643 #, c-format msgid "Installed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:622 apt-pkg/deb/dpkgpm.cc:624 -#: apt-pkg/deb/dpkgpm.cc:625 +#: apt-pkg/deb/dpkgpm.cc:648 #, c-format msgid "Preparing for removal of %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:628 +#: apt-pkg/deb/dpkgpm.cc:650 #, c-format msgid "Removed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:633 +#: apt-pkg/deb/dpkgpm.cc:655 #, c-format msgid "Preparing to completely remove %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:634 +#: apt-pkg/deb/dpkgpm.cc:656 #, c-format msgid "Completely removed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:789 +#: apt-pkg/deb/dpkgpm.cc:820 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n" msgstr "" +#: apt-pkg/deb/dpkgpm.cc:848 +msgid "Running dpkg" +msgstr "" + +#: apt-pkg/deb/debsystem.cc:70 +#, c-format +msgid "" +"Unable to lock the administration directory (%s), is another process using " +"it?" +msgstr "" + +#: apt-pkg/deb/debsystem.cc:73 +#, c-format +msgid "Unable to lock the administration directory (%s), are you root?" +msgstr "" + +#: apt-pkg/deb/debsystem.cc:82 +msgid "" +"dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct " +"the problem. " +msgstr "" + #: apt-pkg/deb/debsystem.cc:100 msgid "Not locked" msgstr "" |