diff options
-rw-r--r-- | README.arch | 2 | ||||
-rw-r--r-- | apt-pkg/cacheiterators.h | 10 | ||||
-rw-r--r-- | apt-pkg/cdrom.cc | 2 | ||||
-rw-r--r-- | apt-pkg/contrib/strutl.cc | 17 | ||||
-rw-r--r-- | apt-pkg/contrib/strutl.h | 1 | ||||
-rw-r--r-- | apt-pkg/deb/debsystem.cc | 15 | ||||
-rw-r--r-- | apt-pkg/deb/dpkgpm.cc | 16 | ||||
-rw-r--r-- | apt-pkg/indexcopy.cc | 10 | ||||
-rw-r--r-- | apt-pkg/indexrecords.cc | 6 | ||||
-rw-r--r-- | cmdline/apt-cache.cc | 17 | ||||
-rw-r--r-- | cmdline/apt-get.cc | 8 | ||||
-rw-r--r-- | debian/apt.cron.daily | 382 | ||||
-rw-r--r-- | debian/changelog | 47 | ||||
-rw-r--r-- | doc/apt-cache.8.xml | 2 | ||||
-rw-r--r-- | doc/apt-get.8.xml | 8 | ||||
-rw-r--r-- | doc/examples/configure-index | 52 | ||||
-rw-r--r-- | ftparchive/writer.h | 2 | ||||
-rw-r--r-- | methods/gpgv.cc | 2 | ||||
-rw-r--r-- | po/apt-all.pot | 281 |
19 files changed, 621 insertions, 259 deletions
diff --git a/README.arch b/README.arch index 364e940a4..58c40a497 100644 --- a/README.arch +++ b/README.arch @@ -1,7 +1,7 @@ You can build apt from arch, but this needs the following additional packages (in addtion to the usual build-depends): -autoconf automake xmlto perlsgml sgml2x sgmlspl docbook +autoconf automake xmlto perlsgml sgml2x sgmlspl docbook doxygen then run: diff --git a/apt-pkg/cacheiterators.h b/apt-pkg/cacheiterators.h index 08eafca0f..bbbcb7753 100644 --- a/apt-pkg/cacheiterators.h +++ b/apt-pkg/cacheiterators.h @@ -104,7 +104,7 @@ class pkgCache::VerIterator // Iteration void operator ++(int) {if (Ver != Owner->VerP) Ver = Owner->VerP + Ver->NextVer;}; inline void operator ++() {operator ++(0);}; - inline bool end() const {return Owner == NULL || (Ver == Owner->VerP?true:false);}; + inline bool end() const {return Owner == 0 || (Ver == Owner->VerP?true:false);}; inline void operator =(const VerIterator &B) {Ver = B.Ver; Owner = B.Owner;}; // Comparison @@ -160,7 +160,7 @@ class pkgCache::DescIterator // Iteration void operator ++(int) {if (Desc != Owner->DescP) Desc = Owner->DescP + Desc->NextDesc;}; inline void operator ++() {operator ++(0);}; - inline bool end() const {return Desc == Owner->DescP?true:false;}; + inline bool end() const {return Owner == 0 || Desc == Owner->DescP?true:false;}; inline void operator =(const DescIterator &B) {Desc = B.Desc; Owner = B.Owner;}; // Comparison @@ -314,7 +314,7 @@ class pkgCache::PkgFileIterator // Iteration void operator ++(int) {if (File!= Owner->PkgFileP) File = Owner->PkgFileP + File->NextFile;}; inline void operator ++() {operator ++(0);}; - inline bool end() const {return File == Owner->PkgFileP?true:false;}; + inline bool end() const {return Owner == 0 || File == Owner->PkgFileP?true:false;}; // Comparison inline bool operator ==(const PkgFileIterator &B) const {return File == B.File;}; @@ -360,7 +360,7 @@ class pkgCache::VerFileIterator // Iteration void operator ++(int) {if (FileP != Owner->VerFileP) FileP = Owner->VerFileP + FileP->NextFile;}; inline void operator ++() {operator ++(0);}; - inline bool end() const {return FileP == Owner->VerFileP?true:false;}; + inline bool end() const {return Owner == 0 || FileP == Owner->VerFileP?true:false;}; // Comparison inline bool operator ==(const VerFileIterator &B) const {return FileP == B.FileP;}; @@ -392,7 +392,7 @@ class pkgCache::DescFileIterator // Iteration void operator ++(int) {if (FileP != Owner->DescFileP) FileP = Owner->DescFileP + FileP->NextFile;}; inline void operator ++() {operator ++(0);}; - inline bool end() const {return FileP == Owner->DescFileP?true:false;}; + inline bool end() const {return Owner == 0 || FileP == Owner->DescFileP?true:false;}; // Comparison inline bool operator ==(const DescFileIterator &B) const {return FileP == B.FileP;}; diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 370687f24..a31602dfa 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -686,7 +686,7 @@ bool pkgCdrom::Add(pkgCdromStatus *log) { if (_config->FindB("APT::CDROM::NoMount",false) == false) UnmountCdrom(CDROM); - return _error->Error("Unable to locate any package files, perhaps this is not a Debian Disc"); + return _error->Error(_("Unable to locate any package files, perhaps this is not a Debian Disc or the wrong architecture?")); } // Check if the CD is in the database diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index bd374fd1e..98d9c41e4 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -1027,11 +1027,26 @@ void ioprintf(ostream &out,const char *format,...) va_start(args,format); // sprintf the description - char S[400]; + char S[4096]; vsnprintf(S,sizeof(S),format,args); out << S; } /*}}}*/ +// strprintf - C format string outputter to C++ strings /*{{{*/ +// --------------------------------------------------------------------- +/* This is used to make the internationalization strings easier to translate + and to allow reordering of parameters */ +void strprintf(string &out,const char *format,...) +{ + va_list args; + va_start(args,format); + + // sprintf the description + char S[4096]; + vsnprintf(S,sizeof(S),format,args); + out = string(S); +} + /*}}}*/ // safe_snprintf - Safer snprintf /*{{{*/ // --------------------------------------------------------------------- /* This is a snprintf that will never (ever) go past 'End' and returns a diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 53146ced7..d9972abf4 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -59,6 +59,7 @@ bool Hex2Num(const string &Str,unsigned char *Num,unsigned int Length); bool TokSplitString(char Tok,char *Input,char **List, unsigned long ListMax); void ioprintf(ostream &out,const char *format,...) APT_FORMAT2; +void strprintf(string &out,const char *format,...) APT_FORMAT2; char *safe_snprintf(char *Buffer,char *End,const char *Format,...) APT_FORMAT3; bool CheckDomainList(const string &Host, const string &List); diff --git a/apt-pkg/deb/debsystem.cc b/apt-pkg/deb/debsystem.cc index 11a84f1c6..b882367b8 100644 --- a/apt-pkg/deb/debsystem.cc +++ b/apt-pkg/deb/debsystem.cc @@ -17,7 +17,8 @@ #include <apt-pkg/configuration.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> - +#include <apti18n.h> + #include <sys/types.h> #include <unistd.h> #include <dirent.h> @@ -66,11 +67,11 @@ bool debSystem::Lock() if (LockFD == -1) { if (errno == EACCES || errno == EAGAIN) - return _error->Error("Unable to lock the administration directory (%s), " - "is another process using it?",AdminDir.c_str()); + return _error->Error(_("Unable to lock the administration directory (%s), " + "is another process using it?"),AdminDir.c_str()); else - return _error->Error("Unable to lock the administration directory (%s), " - "are you root?",AdminDir.c_str()); + return _error->Error(_("Unable to lock the administration directory (%s), " + "are you root?"),AdminDir.c_str()); } // See if we need to abort with a dirty journal @@ -78,8 +79,8 @@ bool debSystem::Lock() { close(LockFD); LockFD = -1; - return _error->Error("dpkg was interrupted, you must manually " - "run 'dpkg --configure -a' to correct the problem. "); + return _error->Error(_("dpkg was interrupted, you must manually " + "run 'dpkg --configure -a' to correct the problem. ")); } LockCount++; diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 40aafafa4..686cbc6ee 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -587,6 +587,11 @@ static int racy_pselect(int nfds, fd_set *readfds, fd_set *writefds, */ bool pkgDPkgPM::Go(int OutStatusFd) { + fd_set rfds; + struct timespec tv; + sigset_t sigmask; + sigset_t original_sigmask; + unsigned int MaxArgs = _config->FindI("Dpkg::MaxArgs",8*1024); unsigned int MaxArgBytes = _config->FindI("Dpkg::MaxArgBytes",32*1024); bool NoTriggers = _config->FindB("DPkg::NoTriggers",false); @@ -798,7 +803,14 @@ bool pkgDPkgPM::Go(int OutStatusFd) rtt = tt; cfmakeraw(&rtt); rtt.c_lflag &= ~ECHO; + // block SIGTTOU during tcsetattr to prevent a hang if + // the process is a member of the background process group + // http://www.opengroup.org/onlinepubs/000095399/functions/tcsetattr.html + sigemptyset(&sigmask); + sigaddset(&sigmask, SIGTTOU); + sigprocmask(SIG_BLOCK,&sigmask, &original_sigmask); tcsetattr(0, TCSAFLUSH, &rtt); + sigprocmask(SIG_SETMASK, &original_sigmask, 0); } // Fork dpkg @@ -865,10 +877,6 @@ bool pkgDPkgPM::Go(int OutStatusFd) close(slave); // setups fds - fd_set rfds; - struct timespec tv; - sigset_t sigmask; - sigset_t original_sigmask; sigemptyset(&sigmask); sigprocmask(SIG_BLOCK,&sigmask,&original_sigmask); diff --git a/apt-pkg/indexcopy.cc b/apt-pkg/indexcopy.cc index 9e5c03e0b..5a92c79b7 100644 --- a/apt-pkg/indexcopy.cc +++ b/apt-pkg/indexcopy.cc @@ -522,6 +522,15 @@ bool SigVerify::Verify(string prefix, string file, indexRecords *MetaIndex) { const indexRecords::checkSum *Record = MetaIndex->Lookup(file); + // we skip non-existing files in the verifcation to support a cdrom + // with no Packages file (just a Package.gz), see LP: #255545 + // (non-existing files are not considered a error) + if(!FileExists(prefix+file)) + { + _error->Warning("Skipping non-exisiting file %s", string(prefix+file).c_str()); + return true; + } + if (!Record) { _error->Warning("Can't find authentication record for: %s",file.c_str()); @@ -651,6 +660,7 @@ bool SigVerify::CopyAndVerify(string CDROM,string Name,vector<string> &SigList, if(!Verify(prefix,*I, MetaIndex)) { // something went wrong, don't copy the Release.gpg // FIXME: delete any existing gpg file? + _error->Discard(); continue; } } diff --git a/apt-pkg/indexrecords.cc b/apt-pkg/indexrecords.cc index 502f454a8..ab208e246 100644 --- a/apt-pkg/indexrecords.cc +++ b/apt-pkg/indexrecords.cc @@ -37,14 +37,14 @@ bool indexRecords::Load(const string Filename) pkgTagFile TagFile(&Fd, Fd.Size() + 256); // XXX if (_error->PendingError() == true) { - ErrorText = _(("Unable to parse Release file " + Filename).c_str()); + strprintf(ErrorText, _("Unable to parse Release file %s"),Filename.c_str()); return false; } pkgTagSection Section; if (TagFile.Step(Section) == false) { - ErrorText = _(("No sections in Release file " + Filename).c_str()); + strprintf(ErrorText, _("No sections in Release file %s"), Filename.c_str()); return false; } @@ -78,7 +78,7 @@ bool indexRecords::Load(const string Filename) if(HashString::SupportedHashes()[i] == NULL) { - ErrorText = _(("No Hash entry in Release file " + Filename).c_str()); + strprintf(ErrorText, _("No Hash entry in Release file %s"), Filename.c_str()); return false; } diff --git a/cmdline/apt-cache.cc b/cmdline/apt-cache.cc index 4431fd4f9..425df6994 100644 --- a/cmdline/apt-cache.cc +++ b/cmdline/apt-cache.cc @@ -102,15 +102,13 @@ bool UnMet(CommandLine &CmdL) if (End->Type != pkgCache::Dep::PreDepends && End->Type != pkgCache::Dep::Depends && End->Type != pkgCache::Dep::Suggests && - End->Type != pkgCache::Dep::Recommends && - End->Type != pkgCache::Dep::DpkgBreaks) + End->Type != pkgCache::Dep::Recommends) continue; // Important deps only if (Important == true) if (End->Type != pkgCache::Dep::PreDepends && - End->Type != pkgCache::Dep::Depends && - End->Type != pkgCache::Dep::DpkgBreaks) + End->Type != pkgCache::Dep::Depends) continue; // Verify the or group @@ -557,6 +555,7 @@ bool Depends(CommandLine &CmdL) bool Recurse = _config->FindB("APT::Cache::RecurseDepends",false); bool Installed = _config->FindB("APT::Cache::Installed",false); + bool Important = _config->FindB("APT::Cache::Important",false); bool DidSomething; do { @@ -579,7 +578,12 @@ bool Depends(CommandLine &CmdL) for (pkgCache::DepIterator D = Ver.DependsList(); D.end() == false; D++) { - + // Important deps only + if (Important == true) + if (D->Type != pkgCache::Dep::PreDepends && + D->Type != pkgCache::Dep::Depends) + continue; + pkgCache::PkgIterator Trg = D.TargetPkg(); if((Installed && Trg->CurrentVer != 0) || !Installed) @@ -1529,7 +1533,8 @@ bool Policy(CommandLine &CmdL) if (SrcList->FindIndex(F,Indx) == false && _system->FindIndex(F,Indx) == false) return _error->Error(_("Cache is out of sync, can't x-ref a package file")); - printf(_("%4i %s\n"), + + printf("%4i %s\n", Plcy.GetPriority(F),Indx->Describe(true).c_str()); // Print the reference information for the package diff --git a/cmdline/apt-get.cc b/cmdline/apt-get.cc index 43f8ec8b8..4dbc4873f 100644 --- a/cmdline/apt-get.cc +++ b/cmdline/apt-get.cc @@ -1295,9 +1295,9 @@ pkgSrcRecords::Parser *FindSrc(const char *Name,pkgRecords &Recs, { string Ver = Parse->Version(); - // Skip name mismatches - if (IsMatch == true && Parse->Package() != Src) - continue; + // show name mismatches + if (IsMatch == true && Parse->Package() != Src) + ioprintf(c1out, _("No source package '%s' picking '%s' instead"), Parse->Package().c_str(), Src.c_str()); if (VerTag.empty() == false) { @@ -2515,7 +2515,7 @@ bool DoBuildDep(CommandLine &CmdL) { // We successfully installed something; skip remaining alternatives skipAlternatives = hasAlternatives; - if(_config->FindB("APT::Get::Build-Dep-Automatic", false) == true) + if(_config->FindB("APT::Get::Build-Dep-Automatic", true) == true) Cache->MarkAuto(Pkg, true); continue; } diff --git a/debian/apt.cron.daily b/debian/apt.cron.daily index 32fbafc57..cdec7eea0 100644 --- a/debian/apt.cron.daily +++ b/debian/apt.cron.daily @@ -1,40 +1,67 @@ #!/bin/sh -# - #set -e # # This file understands the following apt configuration variables: +# Values here are the default. +# Create /etc/apt/apt.conf.d/02periodic file to set your preference. # -# "APT::Periodic::Update-Package-Lists=1" -# - Do "apt-get update" automatically every n-days (0=disable) -# -# "APT::Periodic::Download-Upgradeable-Packages=0", -# - Do "apt-get upgrade --download-only" every n-days (0=disable) -# -# "APT::Periodic::AutocleanInterval" -# - Do "apt-get autoclean" every n-days (0=disable) +# Dir "/"; +# - RootDir for all configuration files # -# "APT::Periodic::Unattended-Upgrade" -# - Run the "unattended-upgrade" security upgrade script -# every n-days (0=disabled) -# Requires the package "unattended-upgrades" and will write -# a log in /var/log/unattended-upgrades -# -# "APT::Archives::MaxAge", +# Dir::Cache "var/apt/cache/"; +# - Set apt package cache directory +# +# Dir::Cache::Archive "archives/"; +# - Set package archive directory +# +# APT::Periodic::BackupArchiveInterval "0"; +# - Backup after n-days if archive contents changed.(0=disable) +# +# APT::Periodic::BackupLevel "3"; +# - Backup level.(0=disable), 1 is invalid. +# +# Dir::Cache::Backup "backup/"; +# - Set periodic package backup directory +# +# APT::Archives::MaxAge "0"; (old, deprecated) +# APT::Periodic::MaxAge "0"; (new) # - Set maximum allowed age of a cache package file. If a cache # package file is older it is deleted (0=disable) # -# "APT::Archives::MaxSize", +# APT::Archives::MinAge "2"; (old, deprecated) +# APT::Periodic::MinAge "2"; (new) +# - Set minimum age of a package file. If a file is younger it +# will not be deleted (0=disable). Usefull to prevent races +# and to keep backups of the packages for emergency. +# +# APT::Archives::MaxSize "0"; (old, deprecated) +# APT::Periodic::MaxSize "0"; (new) # - Set maximum size of the cache in MB (0=disable). If the cache # is bigger, cached package files are deleted until the size # requirement is met (the biggest packages will be deleted # first). # -# "APT::Archives::MinAge" -# - Set minimum age of a package file. If a file is younger it -# will not be deleted (0=disable). Usefull to prevent races -# and to keep backups of the packages for emergency. +# APT::Periodic::Update-Package-Lists "0"; +# - Do "apt-get update" automatically every n-days (0=disable) +# +# APT::Periodic::Download-Upgradeable-Packages "0"; +# - Do "apt-get upgrade --download-only" every n-days (0=disable) # +# APT::Periodic::Unattended-Upgrade "0"; +# - Run the "unattended-upgrade" security upgrade script +# every n-days (0=disabled) +# Requires the package "unattended-upgrades" and will write +# a log in /var/log/unattended-upgrades +# +# APT::Periodic::AutocleanInterval "0"; +# - Do "apt-get autoclean" every n-days (0=disable) +# +# APT::Periodic::Verbose "0"; +# - Send report mail to root +# 0: no report (or null string) +# 1: progress report (actually any string) +# 2: + command outputs (remove -qq, remove 2>/dev/null, add -d) +# 3: + trace on check_stamp() { @@ -42,22 +69,25 @@ 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 + update_stamp $stamp + debug_echo "check_stamp: missing time stamp file: $stamp." + # treat as enough time has passed return 0 fi # compare midnight today to midnight the day the stamp was updated - stamp=$(date --date=$(date -r $stamp --iso-8601) +%s) - now=$(date --date=$(date --iso-8601) +%s) + stamp=$(date -r $stamp '+%s') 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)" if [ $delta -ge $interval ]; then return 0 @@ -69,12 +99,9 @@ check_stamp() update_stamp() { stamp="$1" - touch $stamp } - - # we check here if autoclean was enough sizewise check_size_constraints() { @@ -164,83 +191,282 @@ random_sleep() sleep $TIME } + +debug_echo() +{ + # Display message if $VERBOSE >= 1 + if [ "$VERBOSE" -ge 1 ]; then + echo $1 1>&2 + fi +} + # main -if ! which apt-config >/dev/null; then +# 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) +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 on main power." exit 0 + elif [ $POWER -ne 0 ]; then + debug_echo "exit: power status ($POWER) undetermined." + exit 0 + 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 && ! eval apt-get check $XAPTOPT $XSTDERR ; then + debug_echo "error encountered in cron job with \"apt-get check\"." + exit 0 +fi +# No need to check for apt-get below + +# Global current time in seconds since 1970-01-01 00:00:00 UTC +now=$(date +%s) + +# 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" + exit 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" + exit 0 +fi + +BackupArchiveInterval=0 +eval $(apt-config shell BackupArchiveInterval APT::Periodic::BackupArchiveInterval) + +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 + exit 0 +fi + +# Support old Archive for compatibility. +# Document only Periodic for all controling parameters of this script. +MaxAge=0 +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 MaxSize APT::Periodic::MaxSize) + 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) + +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 + # 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 -# 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 +# 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 -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 - fi +# package archive contnts removal by package age +if [ $MaxAge -ne 0 ] && [ $MinAge -ne 0 ]; then + find $Cache -name "*.deb" \( -mtime +$MaxAge -and -ctime +$MaxAge \) -and -not \( -mtime -$MinAge -or -ctime -$MinAge \) -print0 | xargs -r -0 rm -f + debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge and ctime>$MinAge and mtime>$MinAge" +elif [ $MaxAge -ne 0 ]; then + find $Cache -name "*.deb" -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f + debug_echo "aged: ctime <$MaxAge and mtime <$MaxAge only" +else + debug_echo "skip aging since MaxAge is 0" fi + +# package archive contnts removal down to $MaxSize +if [ $MaxSize -ne 0 ]; then + + MinAgeSec=$(($MinAge*24*60*60)) + + # reverse-sort by mtime + for file in $(ls -rt $Cache/*.deb 2>/dev/null); do + du=$(du -m -s $Cache) + 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 in second of the file + if [ $MinAgeSec -ne 0 ]; then + # check both ctime and mtime + mtime=$(stat -c %Y $file) + ctime=$(stat -c %Z $file) + if [ $mtime -gt $ctime ]; then + delta=$(($now-$mtime)) + else + delta=$(($now-$ctime)) + fi + if [ $delta -le $MinAgeSec ]; then + debug_echo "skip remove by archive size: $file, delta=$delta < $MinAgeSec" + else + # delete oldest file + debug_echo "remove by archive size: $file, delta=$delta >= $MinAgeSec (sec), size=$size >= $MaxSize" + rm -f $file + fi + fi -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 + done fi -UPGRADE_STAMP=/var/lib/apt/periodic/upgrade-stamp -if check_stamp $UPGRADE_STAMP $UnattendedUpgradeInterval; then - unattended-upgrade - update_stamp $UPGRADE_STAMP +# update package lists +UPDATE_STAMP=/var/lib/apt/periodic/update-stamp +if check_stamp $UPDATE_STAMP $UpdateInterval; then + 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 + # 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 + if eval apt-get $XAPTOPT -y -d dist-upgrade $XSTDERR; then + update_stamp $DOWNLOAD_UPGRADEABLE_STAMP + debug_echo "download upgradable (success)." + # auto upgrade all upgradeable packages + UPGRADE_STAMP=/var/lib/apt/periodic/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 + else + debug_echo "download upgradable (error)." + fi + else + debug_echo "download upgradable (not run)." + fi + else + debug_echo "download updated metadata (error)." + fi +else + debug_echo "download updated metadata (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 apt-get $XAPTOPT -y autoclean $XSTDERR; then + debug_echo "autoclean (success)." + update_stamp $AUTOCLEAN_STAMP + else + debug_echo "autoclean (error)." + fi +else + debug_echo "autoclean (not run)." fi -# check cache size -check_size_constraints +# +# vim: set sts=4 ai : +# + diff --git a/debian/changelog b/debian/changelog index 5b3c1a470..c113a9597 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,45 @@ +apt (0.7.21) UNRELEASED; urgency=low + + [ 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. + + [ Michael Vogt ] + * 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) + * doc/makefile: + - add examples/apt-https-method-example.conf + * apt-pkg/cacheiterators.h: + - add missing checks for Owner == 0 in end() + * apt-pkg/deb/dpkgpm.cc: + - fix potential hang when in a backgroud process group + * apt-pkg/indexrecords.cc: + - fix some i18n issues + * apt-pkg/contrib/strutl.h: + - add new strprintf() function to make i18n strings easier + * methods/gpgv.cc: + - fix compiler warning + * cmdline/apt-get.cc: + - fix "apt-get source pkg=ver" if binary name != source name + and show a message (LP: #202219) + * apt-pkg/deb/debsystem.cc: + - make strings i18n able + + [ Dereck Wonnacott ] + * apt-ftparchive might write corrupt Release files (LP: #46439) + * Apply --important option to apt-cache depends (LP: #16947) + + -- Michael Vogt <michael.vogt@ubuntu.com> Fri, 12 Sep 2008 11:34:24 +0200 + apt (0.7.20) unstable; urgency=low [ Eugene V. Lyubimkin ] @@ -14,6 +56,11 @@ apt (0.7.20) unstable; urgency=low (Closes: #438559) [ Michael Vogt ] + * apt-pkg/depcache.cc: + - when checking for new important deps, skip critical ones + (LP: #236360) + * document --install-recommends and --no-install-recommends + (thanks to Dereck Wonnacott, LP: #126180) * make "apt-get build-dep" installed packages marked automatic by default. This can be changed by setting the value of APT::Get::Build-Dep-Automatic to false (thanks to Aaron diff --git a/doc/apt-cache.8.xml b/doc/apt-cache.8.xml index 21605ff0e..6c8938d8c 100644 --- a/doc/apt-cache.8.xml +++ b/doc/apt-cache.8.xml @@ -300,7 +300,7 @@ Reverse Provides: </varlistentry> <varlistentry><term><option>-i</option></term><term><option>--important</option></term> - <listitem><para>Print only important dependencies; for use with unmet. Causes only Depends and + <listitem><para>Print only important dependencies; for use with unmet and depends. Causes only Depends and Pre-Depends relations to be printed. Configuration Item: <literal>APT::Cache::Important</literal>.</para></listitem> </varlistentry> diff --git a/doc/apt-get.8.xml b/doc/apt-get.8.xml index ace7f9e1b..64c3a35e4 100644 --- a/doc/apt-get.8.xml +++ b/doc/apt-get.8.xml @@ -390,6 +390,14 @@ Configuration Item: <literal>APT::Get::Compile</literal>.</para></listitem> </varlistentry> + <varlistentry><term><option>--install-recommends</option></term> + <listitem><para>Also install recommended packages.</para></listitem> + </varlistentry> + + <varlistentry><term><option>--no-install-recommends</option></term> + <listitem><para>Do not install recommended packages.</para></listitem> + </varlistentry> + <varlistentry><term><option>--ignore-hold</option></term> <listitem><para>Ignore package Holds; This causes <command>apt-get</command> to ignore a hold placed on a package. This may be useful in conjunction with diff --git a/doc/examples/configure-index b/doc/examples/configure-index index db07f189e..84b1d8829 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -115,6 +115,56 @@ APT // Keep the list of FDs open (normally apt closes all fds when it // does a ExecFork) Keep-Fds {}; + + // control parameters for cron jobs by /etc/cron.daily/apt + Periodic + { + BackupArchiveInterval "0"; + // - Backup after n-days if archive contents changed.(0=disable) + + BackupLevel "3"; + // - Backup level.(0=disable), 1 is invalid. + + // APT::Archives::MaxAge "0"; (old, deprecated) + MaxAge "0"; // (new) + // - Set maximum allowed age of a cache package file. If a cache + // package file is older it is deleted (0=disable) + + // APT::Archives::MinAge "2"; (old, deprecated) + MinAge "2"; // (new) + // - Set minimum age of a package file. If a file is younger it + // will not be deleted (0=disable). Usefull to prevent races + // and to keep backups of the packages for emergency. + + // APT::Archives::MaxSize "0"; (old, deprecated) + MaxSize "0"; // (new) + // - Set maximum size of the cache in MB (0=disable). If the cache + // is bigger, cached package files are deleted until the size + // requirement is met (the biggest packages will be deleted + // first). + + Update-Package-Lists "0"; + // - Do "apt-get update" automatically every n-days (0=disable) + // + Download-Upgradeable-Packages "0"; + // - Do "apt-get upgrade --download-only" every n-days (0=disable) + // + Unattended-Upgrade "0"; + // - Run the "unattended-upgrade" security upgrade script + // every n-days (0=disabled) + // Requires the package "unattended-upgrades" and will write + // a log in /var/log/unattended-upgrades + // + AutocleanInterval "0"; + // - Do "apt-get autoclean" every n-days (0=disable) + + Verbose "0"; + // - Send report mail to root + // 0: no report (or null string) + // 1: progress report (actually any string) + // 2: + command outputs (remove -qq, remove 2>/dev/null, add -d) + // 3: + trace on + }; }; // Options for the downloading routines @@ -211,6 +261,8 @@ Dir "/" // Location of the cache dir Cache "var/cache/apt/" { Archives "archives/"; + // backup directory created by /etc/cron.daily/apt + Backup "backup/"; srcpkgcache "srcpkgcache.bin"; pkgcache "pkgcache.bin"; }; diff --git a/ftparchive/writer.h b/ftparchive/writer.h index a4e4356f9..6e161c752 100644 --- a/ftparchive/writer.h +++ b/ftparchive/writer.h @@ -52,7 +52,7 @@ class FTWScanner { if (ErrorPrinted == false && Quiet <= Priority) { - cout << endl; + c1out << endl; ErrorPrinted = true; } } diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 9f4683e6e..f3277b300 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -264,7 +264,7 @@ bool GPGVMethod::Fetch(FetchItem *Itm) // least one bad signature. good signatures and NoPubKey signatures // happen easily when a file is signed with multiple signatures if(GoodSigners.empty() or !BadSigners.empty()) - return _error->Error(errmsg.c_str()); + return _error->Error("%s", errmsg.c_str()); } // Just pass the raw output up, because passing it as a real data diff --git a/po/apt-all.pot b/po/apt-all.pot index 70f81f357..ae7cb4795 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-11-12 22:07+0100\n" +"POT-Creation-Date: 2008-05-22 16:56+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" @@ -156,7 +156,7 @@ msgstr "" #: cmdline/apt-cache.cc:1714 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70 #: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:547 -#: cmdline/apt-get.cc:2573 cmdline/apt-sortpkgs.cc:144 +#: cmdline/apt-get.cc:2571 cmdline/apt-sortpkgs.cc:144 #, c-format msgid "%s %s for %s compiled on %s %s\n" msgstr "" @@ -184,8 +184,8 @@ msgid "" " show - Show a readable record for the package\n" " depends - Show raw dependency information for a package\n" " rdepends - Show reverse dependency information for a package\n" -" pkgnames - List the names of all packages in the system\n" -" dotty - Generate package graphs for GraphViz\n" +" pkgnames - List the names of all packages\n" +" dotty - Generate package graphs for GraphVis\n" " xvcg - Generate package graphs for xvcg\n" " policy - Show policy settings\n" "\n" @@ -251,7 +251,7 @@ msgid "" " -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp\n" msgstr "" -#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:827 +#: cmdline/apt-extracttemplates.cc:267 apt-pkg/pkgcachegen.cc:815 #, c-format msgid "Unable to write to %s" msgstr "" @@ -713,11 +713,11 @@ msgstr "" msgid "Internal error, Ordering didn't finish" msgstr "" -#: cmdline/apt-get.cc:809 cmdline/apt-get.cc:1992 cmdline/apt-get.cc:2025 +#: cmdline/apt-get.cc:809 cmdline/apt-get.cc:1990 cmdline/apt-get.cc:2023 msgid "Unable to lock the download directory" msgstr "" -#: cmdline/apt-get.cc:819 cmdline/apt-get.cc:2073 cmdline/apt-get.cc:2319 +#: cmdline/apt-get.cc:819 cmdline/apt-get.cc:2071 cmdline/apt-get.cc:2317 #: apt-pkg/cachefile.cc:65 msgid "The list of sources could not be read." msgstr "" @@ -746,7 +746,7 @@ msgstr "" msgid "After this operation, %sB disk space will be freed.\n" msgstr "" -#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:2168 +#: cmdline/apt-get.cc:864 cmdline/apt-get.cc:2166 #, c-format msgid "Couldn't determine free space in %s" msgstr "" @@ -780,7 +780,7 @@ msgstr "" msgid "Do you want to continue [Y/n]? " msgstr "" -#: cmdline/apt-get.cc:984 cmdline/apt-get.cc:2216 apt-pkg/algorithms.cc:1349 +#: cmdline/apt-get.cc:984 cmdline/apt-get.cc:2214 apt-pkg/algorithms.cc:1344 #, c-format msgid "Failed to fetch %s %s\n" msgstr "" @@ -789,7 +789,7 @@ msgstr "" msgid "Some files failed to download" msgstr "" -#: cmdline/apt-get.cc:1003 cmdline/apt-get.cc:2225 +#: cmdline/apt-get.cc:1003 cmdline/apt-get.cc:2223 msgid "Download complete and in download only mode" msgstr "" @@ -909,17 +909,7 @@ msgid "" "shouldn't happen. Please file a bug report against apt." msgstr "" -#. -#. if (Packages == 1) -#. { -#. c1out << endl; -#. c1out << -#. _("Since you only requested a single operation it is extremely likely that\n" -#. "the package is simply not installable and a bug report against\n" -#. "that package should be filed.") << endl; -#. } -#. -#: cmdline/apt-get.cc:1445 cmdline/apt-get.cc:1735 +#: cmdline/apt-get.cc:1445 cmdline/apt-get.cc:1733 msgid "The following information may help to resolve the situation:" msgstr "" @@ -969,152 +959,159 @@ msgid "" "or been moved out of Incoming." msgstr "" -#: cmdline/apt-get.cc:1738 +#: cmdline/apt-get.cc:1728 +msgid "" +"Since you only requested a single operation it is extremely likely that\n" +"the package is simply not installable and a bug report against\n" +"that package should be filed." +msgstr "" + +#: cmdline/apt-get.cc:1736 msgid "Broken packages" msgstr "" -#: cmdline/apt-get.cc:1767 +#: cmdline/apt-get.cc:1765 msgid "The following extra packages will be installed:" msgstr "" -#: cmdline/apt-get.cc:1856 +#: cmdline/apt-get.cc:1854 msgid "Suggested packages:" msgstr "" -#: cmdline/apt-get.cc:1857 +#: cmdline/apt-get.cc:1855 msgid "Recommended packages:" msgstr "" -#: cmdline/apt-get.cc:1885 +#: cmdline/apt-get.cc:1883 msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1888 methods/ftp.cc:702 methods/connect.cc:112 +#: cmdline/apt-get.cc:1886 methods/ftp.cc:702 methods/connect.cc:112 msgid "Failed" msgstr "" -#: cmdline/apt-get.cc:1893 +#: cmdline/apt-get.cc:1891 msgid "Done" msgstr "" -#: cmdline/apt-get.cc:1960 cmdline/apt-get.cc:1968 +#: cmdline/apt-get.cc:1958 cmdline/apt-get.cc:1966 msgid "Internal error, problem resolver broke stuff" msgstr "" -#: cmdline/apt-get.cc:2068 +#: cmdline/apt-get.cc:2066 msgid "Must specify at least one package to fetch source for" msgstr "" -#: cmdline/apt-get.cc:2098 cmdline/apt-get.cc:2337 +#: cmdline/apt-get.cc:2096 cmdline/apt-get.cc:2335 #, c-format msgid "Unable to find a source package for %s" msgstr "" -#: cmdline/apt-get.cc:2147 +#: cmdline/apt-get.cc:2145 #, c-format msgid "Skipping already downloaded file '%s'\n" msgstr "" -#: cmdline/apt-get.cc:2175 +#: cmdline/apt-get.cc:2173 #, c-format msgid "You don't have enough free space in %s" msgstr "" -#: cmdline/apt-get.cc:2181 +#: cmdline/apt-get.cc:2179 #, c-format msgid "Need to get %sB/%sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2184 +#: cmdline/apt-get.cc:2182 #, c-format msgid "Need to get %sB of source archives.\n" msgstr "" -#: cmdline/apt-get.cc:2190 +#: cmdline/apt-get.cc:2188 #, c-format msgid "Fetch source %s\n" msgstr "" -#: cmdline/apt-get.cc:2221 +#: cmdline/apt-get.cc:2219 msgid "Failed to fetch some archives." msgstr "" -#: cmdline/apt-get.cc:2249 +#: cmdline/apt-get.cc:2247 #, c-format msgid "Skipping unpack of already unpacked source in %s\n" msgstr "" -#: cmdline/apt-get.cc:2261 +#: cmdline/apt-get.cc:2259 #, c-format msgid "Unpack command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2262 +#: cmdline/apt-get.cc:2260 #, c-format msgid "Check if the 'dpkg-dev' package is installed.\n" msgstr "" -#: cmdline/apt-get.cc:2279 +#: cmdline/apt-get.cc:2277 #, c-format msgid "Build command '%s' failed.\n" msgstr "" -#: cmdline/apt-get.cc:2298 +#: cmdline/apt-get.cc:2296 msgid "Child process failed" msgstr "" -#: cmdline/apt-get.cc:2314 +#: cmdline/apt-get.cc:2312 msgid "Must specify at least one package to check builddeps for" msgstr "" -#: cmdline/apt-get.cc:2342 +#: cmdline/apt-get.cc:2340 #, c-format msgid "Unable to get build-dependency information for %s" msgstr "" -#: cmdline/apt-get.cc:2362 +#: cmdline/apt-get.cc:2360 #, c-format msgid "%s has no build depends.\n" msgstr "" -#: cmdline/apt-get.cc:2414 +#: cmdline/apt-get.cc:2412 #, c-format msgid "" "%s dependency for %s cannot be satisfied because the package %s cannot be " "found" msgstr "" -#: cmdline/apt-get.cc:2467 +#: cmdline/apt-get.cc:2465 #, 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:2503 +#: cmdline/apt-get.cc:2501 #, c-format msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new" msgstr "" -#: cmdline/apt-get.cc:2528 +#: cmdline/apt-get.cc:2526 #, c-format msgid "Failed to satisfy %s dependency for %s: %s" msgstr "" -#: cmdline/apt-get.cc:2542 +#: cmdline/apt-get.cc:2540 #, c-format msgid "Build-dependencies for %s could not be satisfied." msgstr "" -#: cmdline/apt-get.cc:2546 +#: cmdline/apt-get.cc:2544 msgid "Failed to process build dependencies" msgstr "" -#: cmdline/apt-get.cc:2578 +#: cmdline/apt-get.cc:2576 msgid "Supported modules:" msgstr "" -#: cmdline/apt-get.cc:2619 +#: cmdline/apt-get.cc:2617 msgid "" "Usage: apt-get [options] command\n" " apt-get [options] install|remove pkg1 [pkg2 ...]\n" @@ -1405,9 +1402,9 @@ msgid "The info and temp directories need to be on the same filesystem" msgstr "" #. Build the status cache -#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:760 -#: apt-pkg/pkgcachegen.cc:829 apt-pkg/pkgcachegen.cc:834 -#: apt-pkg/pkgcachegen.cc:957 +#: apt-inst/deb/dpkgdb.cc:135 apt-pkg/pkgcachegen.cc:748 +#: apt-pkg/pkgcachegen.cc:817 apt-pkg/pkgcachegen.cc:822 +#: apt-pkg/pkgcachegen.cc:945 msgid "Reading package lists" msgstr "" @@ -1600,7 +1597,7 @@ msgstr "" msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:538 methods/rsh.cc:190 +#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:536 methods/rsh.cc:190 msgid "Read error" msgstr "" @@ -1612,7 +1609,7 @@ msgstr "" msgid "Protocol corruption" msgstr "" -#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:577 methods/rsh.cc:232 +#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:575 methods/rsh.cc:232 msgid "Write error" msgstr "" @@ -1666,7 +1663,7 @@ msgstr "" msgid "Unable to accept connection" msgstr "" -#: methods/ftp.cc:864 methods/http.cc:960 methods/rsh.cc:303 +#: methods/ftp.cc:864 methods/http.cc:959 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "" @@ -1858,19 +1855,15 @@ msgstr "" msgid "Error reading from server" msgstr "" -#: methods/http.cc:945 apt-pkg/contrib/mmap.cc:196 -msgid "Failed to truncate file" -msgstr "" - -#: methods/http.cc:1105 +#: methods/http.cc:1104 msgid "Bad header data" msgstr "" -#: methods/http.cc:1122 methods/http.cc:1177 +#: methods/http.cc:1121 methods/http.cc:1176 msgid "Connection failed" msgstr "" -#: methods/http.cc:1229 +#: methods/http.cc:1228 msgid "Internal error" msgstr "" @@ -1883,10 +1876,6 @@ msgstr "" msgid "Couldn't make mmap of %lu bytes" msgstr "" -#: apt-pkg/contrib/mmap.cc:213 -msgid "Dynamic MMap ran out of room" -msgstr "" - #: apt-pkg/contrib/strutl.cc:1014 #, c-format msgid "Selection %s not found" @@ -2003,80 +1992,79 @@ msgstr "" msgid "Unable to stat the mount point %s" msgstr "" -#: apt-pkg/contrib/cdromutl.cc:146 apt-pkg/contrib/cdromutl.cc:180 -#: apt-pkg/acquire.cc:424 apt-pkg/acquire.cc:449 apt-pkg/clean.cc:40 +#: apt-pkg/contrib/cdromutl.cc:146 apt-pkg/acquire.cc:424 apt-pkg/clean.cc:40 #, c-format msgid "Unable to change to %s" msgstr "" -#: apt-pkg/contrib/cdromutl.cc:188 +#: apt-pkg/contrib/cdromutl.cc:187 msgid "Failed to stat the cdrom" msgstr "" -#: apt-pkg/contrib/fileutl.cc:149 +#: apt-pkg/contrib/fileutl.cc:147 #, c-format msgid "Not using locking for read only lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:154 +#: apt-pkg/contrib/fileutl.cc:152 #, c-format msgid "Could not open lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:172 +#: apt-pkg/contrib/fileutl.cc:170 #, c-format msgid "Not using locking for nfs mounted lock file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:176 +#: apt-pkg/contrib/fileutl.cc:174 #, c-format msgid "Could not get lock %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:444 +#: apt-pkg/contrib/fileutl.cc:442 #, c-format msgid "Waited for %s but it wasn't there" msgstr "" -#: apt-pkg/contrib/fileutl.cc:454 +#: apt-pkg/contrib/fileutl.cc:452 #, c-format msgid "Sub-process %s received a segmentation fault." msgstr "" -#: apt-pkg/contrib/fileutl.cc:457 +#: apt-pkg/contrib/fileutl.cc:455 #, c-format msgid "Sub-process %s returned an error code (%u)" msgstr "" -#: apt-pkg/contrib/fileutl.cc:459 +#: apt-pkg/contrib/fileutl.cc:457 #, c-format msgid "Sub-process %s exited unexpectedly" msgstr "" -#: apt-pkg/contrib/fileutl.cc:503 +#: apt-pkg/contrib/fileutl.cc:501 #, c-format msgid "Could not open file %s" msgstr "" -#: apt-pkg/contrib/fileutl.cc:559 +#: apt-pkg/contrib/fileutl.cc:557 #, c-format msgid "read, still have %lu to read but none left" msgstr "" -#: apt-pkg/contrib/fileutl.cc:589 +#: apt-pkg/contrib/fileutl.cc:587 #, c-format msgid "write, still have %lu to write but couldn't" msgstr "" -#: apt-pkg/contrib/fileutl.cc:664 +#: apt-pkg/contrib/fileutl.cc:662 msgid "Problem closing the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:670 +#: apt-pkg/contrib/fileutl.cc:668 msgid "Problem unlinking the file" msgstr "" -#: apt-pkg/contrib/fileutl.cc:681 +#: apt-pkg/contrib/fileutl.cc:679 msgid "Problem syncing the file" msgstr "" @@ -2252,23 +2240,23 @@ msgstr "" msgid "Index file type '%s' is not supported" msgstr "" -#: apt-pkg/algorithms.cc:248 +#: apt-pkg/algorithms.cc:247 #, c-format msgid "" "The package %s needs to be reinstalled, but I can't find an archive for it." msgstr "" -#: apt-pkg/algorithms.cc:1107 +#: apt-pkg/algorithms.cc:1106 msgid "" "Error, pkgProblemResolver::Resolve generated breaks, this may be caused by " "held packages." msgstr "" -#: apt-pkg/algorithms.cc:1109 +#: apt-pkg/algorithms.cc:1108 msgid "Unable to correct problems, you have held broken packages." msgstr "" -#: apt-pkg/algorithms.cc:1375 apt-pkg/algorithms.cc:1377 +#: apt-pkg/algorithms.cc:1370 apt-pkg/algorithms.cc:1372 msgid "" "Some index files failed to download, they have been ignored, or old ones " "used instead." @@ -2286,12 +2274,12 @@ msgstr "" #. only show the ETA if it makes sense #. two days -#: apt-pkg/acquire.cc:828 +#: apt-pkg/acquire.cc:827 #, c-format msgid "Retrieving file %li of %li (%s remaining)" msgstr "" -#: apt-pkg/acquire.cc:830 +#: apt-pkg/acquire.cc:829 #, c-format msgid "Retrieving file %li of %li" msgstr "" @@ -2364,82 +2352,82 @@ msgstr "" msgid "Error occurred while processing %s (UsePackage1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:164 +#: apt-pkg/pkgcachegen.cc:153 #, c-format msgid "Error occurred while processing %s (NewFileDesc1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:189 +#: apt-pkg/pkgcachegen.cc:178 #, c-format msgid "Error occurred while processing %s (UsePackage2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:193 +#: apt-pkg/pkgcachegen.cc:182 #, c-format msgid "Error occurred while processing %s (NewFileVer1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:224 +#: apt-pkg/pkgcachegen.cc:213 #, c-format msgid "Error occurred while processing %s (NewVersion1)" msgstr "" -#: apt-pkg/pkgcachegen.cc:228 +#: apt-pkg/pkgcachegen.cc:217 #, c-format msgid "Error occurred while processing %s (UsePackage3)" msgstr "" -#: apt-pkg/pkgcachegen.cc:232 +#: apt-pkg/pkgcachegen.cc:221 #, c-format msgid "Error occurred while processing %s (NewVersion2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:256 +#: apt-pkg/pkgcachegen.cc:245 #, c-format msgid "Error occurred while processing %s (NewFileDesc2)" msgstr "" -#: apt-pkg/pkgcachegen.cc:262 +#: apt-pkg/pkgcachegen.cc:251 msgid "Wow, you exceeded the number of package names this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:265 +#: apt-pkg/pkgcachegen.cc:254 msgid "Wow, you exceeded the number of versions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:268 +#: apt-pkg/pkgcachegen.cc:257 msgid "Wow, you exceeded the number of descriptions this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:271 +#: apt-pkg/pkgcachegen.cc:260 msgid "Wow, you exceeded the number of dependencies this APT is capable of." msgstr "" -#: apt-pkg/pkgcachegen.cc:299 +#: apt-pkg/pkgcachegen.cc:288 #, c-format msgid "Error occurred while processing %s (FindPkg)" msgstr "" -#: apt-pkg/pkgcachegen.cc:312 +#: apt-pkg/pkgcachegen.cc:301 #, c-format msgid "Error occurred while processing %s (CollectFileProvides)" msgstr "" -#: apt-pkg/pkgcachegen.cc:318 +#: apt-pkg/pkgcachegen.cc:307 #, c-format msgid "Package %s %s was not found while processing file dependencies" msgstr "" -#: apt-pkg/pkgcachegen.cc:690 +#: apt-pkg/pkgcachegen.cc:678 #, c-format msgid "Couldn't stat source package list %s" msgstr "" -#: apt-pkg/pkgcachegen.cc:775 +#: apt-pkg/pkgcachegen.cc:763 msgid "Collecting File Provides" msgstr "" -#: apt-pkg/pkgcachegen.cc:902 apt-pkg/pkgcachegen.cc:909 +#: apt-pkg/pkgcachegen.cc:890 apt-pkg/pkgcachegen.cc:897 msgid "IO Error saving source cache" msgstr "" @@ -2452,35 +2440,35 @@ msgstr "" msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:658 apt-pkg/acquire-item.cc:1426 +#: apt-pkg/acquire-item.cc:647 apt-pkg/acquire-item.cc:1408 msgid "Hash Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:1118 +#: apt-pkg/acquire-item.cc:1100 msgid "There is no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:1231 +#: apt-pkg/acquire-item.cc:1213 #, 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:1290 +#: apt-pkg/acquire-item.cc:1272 #, 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:1331 +#: apt-pkg/acquire-item.cc:1313 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:1418 +#: apt-pkg/acquire-item.cc:1400 msgid "Size mismatch" msgstr "" @@ -2586,78 +2574,79 @@ msgstr "" msgid "Wrote %i records with %i missing files and %i mismatched files\n" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:49 +#: apt-pkg/deb/dpkgpm.cc:486 #, c-format -msgid "Installing %s" +msgid "Directory '%s' missing" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:50 apt-pkg/deb/dpkgpm.cc:612 +#: apt-pkg/deb/dpkgpm.cc:569 #, c-format -msgid "Configuring %s" +msgid "Preparing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:51 apt-pkg/deb/dpkgpm.cc:627 +#: apt-pkg/deb/dpkgpm.cc:570 #, c-format -msgid "Removing %s" +msgid "Unpacking %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:52 +#: apt-pkg/deb/dpkgpm.cc:575 #, c-format -msgid "Running post-installation trigger %s" +msgid "Preparing to configure %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:521 +#: apt-pkg/deb/dpkgpm.cc:576 apt-pkg/deb/dpkgpm.cc:605 #, c-format -msgid "Directory '%s' missing" +msgid "Configuring %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:605 +#: apt-pkg/deb/dpkgpm.cc:578 apt-pkg/deb/dpkgpm.cc:579 #, c-format -msgid "Preparing %s" +msgid "Processing triggers for %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:606 +#: apt-pkg/deb/dpkgpm.cc:581 #, c-format -msgid "Unpacking %s" +msgid "Installed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:611 +#: apt-pkg/deb/dpkgpm.cc:586 apt-pkg/deb/dpkgpm.cc:588 +#: apt-pkg/deb/dpkgpm.cc:589 #, c-format -msgid "Preparing to configure %s" +msgid "Preparing for removal of %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:614 apt-pkg/deb/dpkgpm.cc:615 +#: apt-pkg/deb/dpkgpm.cc:591 apt-pkg/deb/dpkgpm.cc:606 #, c-format -msgid "Processing triggers for %s" +msgid "Removing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:617 +#: apt-pkg/deb/dpkgpm.cc:592 #, c-format -msgid "Installed %s" +msgid "Removed %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:597 #, c-format -msgid "Preparing for removal of %s" +msgid "Preparing to completely remove %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:628 +#: apt-pkg/deb/dpkgpm.cc:598 #, c-format -msgid "Removed %s" +msgid "Completely removed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:633 +#. populate the "processing" map +#: apt-pkg/deb/dpkgpm.cc:604 #, c-format -msgid "Preparing to completely remove %s" +msgid "Installing %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:634 +#: apt-pkg/deb/dpkgpm.cc:607 #, c-format -msgid "Completely removed %s" +msgid "Triggering %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:791 +#: apt-pkg/deb/dpkgpm.cc:756 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n" msgstr "" |