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:
if (Res <= 0)
return MethodFailure();
-
- // Hmm.. this should never happen.
- if (Res < 0)
- return true;
OutQueue.erase(0,Res);
if (OutQueue.empty() == true)
{
_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);
#include <iostream>
#include <sstream>
-
+#include <stdio.h>
+
#include <dirent.h>
#include <sys/time.h>
#include <errno.h>
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;
}
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);
<< " Essentials => " << PrioEssentials << endl
<< " InstalledAndNotObsolete => " << PrioInstalledAndNotObsolete << endl
<< " Depends => " << PrioDepends << endl
+ << " Recommends => " << PrioRecommends << endl
<< " AddProtected => " << AddProtected << endl
<< " AddEssential => " << AddEssential << endl;
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;
}
}
{
// 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]);
// 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
// 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
// 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;};
// 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;};
// 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;};
{
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
{
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));
{
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);
{
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);
}
#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;
}
/*}}}*/
if (Fd == 0)
{
#ifdef _POSIX_MAPPED_FILES
- munmap(Base, WorkSpace);
+ if(munmap(Base, WorkSpace) < 0)
#else
delete [] (unsigned char *)Base;
#endif
#include <string>
#include <cstring>
#include <algorithm>
+#include <stdint.h>
using std::string;
using std::min;
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
}
/*}}}*/
+// 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
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));}; \
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] != '=')
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
{
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++;
};
}
+/* 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 /*{{{*/
// ---------------------------------------------------------------------
/* */
*/
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);
{
{"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}
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;
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
}
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);
_exit(100);
}
-
/* No Job Control Stop Env is a magic dpkg var that prevents it
from using sigstop */
putenv((char *)"DPKG_NO_TSTP=yes");
_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]);
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);
{
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());
if(!Verify(prefix,*I, MetaIndex)) {
// something went wrong, don't copy the Release.gpg
// FIXME: delete any existing gpg file?
+ _error->Discard();
continue;
}
}
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;
}
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;
}
{
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);
}
{
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);
}
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
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
{
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)
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
"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))
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)
#!/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()
{
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
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
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
# 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
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)
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()
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 :
+#
+
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
* 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.
* 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
</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>
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
// 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
// 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";
};
&apt-email;
&apt-product;
<!-- The last update date -->
- <date>29 Février 2004</date>
+ <date>11 juillet 2008</date>
</refentryinfo>
<refmeta>
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 :
</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>
</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
<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>
<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.
<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>
<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>
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>
<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
</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
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.
<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>.
<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>
<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
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>.
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>
<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>
</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>.
<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>
</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
</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>
</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>
&manbugs;
&deux-traducteurs;
-</refentry>
\ No newline at end of file
+</refentry>
{
if (ErrorPrinted == false && Quiet <= Priority)
{
- cout << endl;
+ c1out << endl;
ErrorPrinted = true;
}
}
// 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
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();
}
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"
"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"
"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 ""
" -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 ""
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 ""
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"
" ?] "
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"
"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."
#. "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"
"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"
" 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"
#: 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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 "
"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 ""
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 ""
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 ""
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 ""
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 ""
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 ""
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 ""