summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/algorithms.cc183
-rw-r--r--apt-pkg/algorithms.h14
-rw-r--r--apt-pkg/deb/deblistparser.cc8
-rw-r--r--apt-pkg/depcache.cc56
-rw-r--r--apt-pkg/depcache.h6
-rw-r--r--apt-private/private-install.cc12
-rw-r--r--debian/NEWS7
-rw-r--r--debian/apt.auto-removal.sh69
-rw-r--r--doc/examples/configure-index7
-rw-r--r--methods/basehttp.h2
-rw-r--r--methods/connect.cc30
-rw-r--r--po/el.po691
-rw-r--r--test/integration/framework2
-rwxr-xr-xtest/integration/test-kernel-helper-autoremove15
14 files changed, 625 insertions, 477 deletions
diff --git a/apt-pkg/algorithms.cc b/apt-pkg/algorithms.cc
index cd09a6944..a8e198054 100644
--- a/apt-pkg/algorithms.cc
+++ b/apt-pkg/algorithms.cc
@@ -16,20 +16,32 @@
#include <config.h>
#include <apt-pkg/algorithms.h>
+#include <apt-pkg/cachefilter.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/depcache.h>
#include <apt-pkg/dpkgpm.h>
#include <apt-pkg/edsp.h>
#include <apt-pkg/error.h>
+#include <apt-pkg/macros.h>
#include <apt-pkg/packagemanager.h>
#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/string_view.h>
+#include <apt-pkg/strutl.h>
+#include <apt-pkg/version.h>
+
#include <apt-pkg/prettyprinters.h>
#include <cstdlib>
#include <iostream>
+#include <map>
+#include <regex>
+#include <set>
+#include <sstream>
#include <string>
#include <utility>
+#include <vector>
#include <string.h>
+#include <sys/utsname.h>
#include <apti18n.h>
/*}}}*/
@@ -1442,3 +1454,174 @@ void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List)
std::sort(List,List+Count,PrioComp(Cache));
}
/*}}}*/
+
+namespace APT
+{
+
+namespace KernelAutoRemoveHelper
+{
+
+// \brief Returns the uname from a kernel package name, or "" for non-kernel packages.
+std::string getUname(std::string const &packageName)
+{
+
+ static const constexpr char *const prefixes[] = {
+ "linux-image-",
+ "kfreebsd-image-",
+ "gnumach-image-",
+ };
+
+ for (auto prefix : prefixes)
+ {
+ if (likely(not APT::String::Startswith(packageName, prefix)))
+ continue;
+ if (unlikely(APT::String::Endswith(packageName, "-dbgsym")))
+ continue;
+ if (unlikely(APT::String::Endswith(packageName, "-dbg")))
+ continue;
+
+ auto aUname = packageName.substr(strlen(prefix));
+
+ // aUname must start with [0-9]+\.
+ if (aUname.length() < 2)
+ continue;
+ if (strchr("0123456789", aUname[0]) == nullptr)
+ continue;
+ auto dot = aUname.find_first_not_of("0123456789");
+ if (dot == aUname.npos || aUname[dot] != '.')
+ continue;
+
+ return aUname;
+ }
+
+ return "";
+}
+std::string GetProtectedKernelsRegex(pkgCache *cache, bool ReturnRemove)
+{
+ if (_config->FindB("APT::Protect-Kernels", true) == false)
+ return "";
+
+ struct CompareKernel
+ {
+ pkgCache *cache;
+ bool operator()(const std::string &a, const std::string &b) const
+ {
+ return cache->VS->CmpVersion(a, b) < 0;
+ }
+ };
+ bool Debug = _config->FindB("Debug::pkgAutoRemove", false);
+ // kernel version -> list of unames
+ std::map<std::string, std::vector<std::string>, CompareKernel> version2unames(CompareKernel{cache});
+ // needs to be initialized to 0s, might not be set up.
+ utsname uts{};
+ std::string bootedVersion;
+ std::string lastInstalledVersion;
+
+ std::string lastInstalledUname = _config->Find("APT::LastInstalledKernel");
+
+ // Get currently booted version, but only when not on reproducible build.
+ if (getenv("SOURCE_DATE_EPOCH") == 0)
+ {
+ if (uname(&uts) != 0)
+ abort();
+ }
+
+ auto VirtualKernelPkg = cache->FindPkg("$kernel", "any");
+ if (VirtualKernelPkg.end())
+ return "";
+
+ for (pkgCache::PrvIterator Prv = VirtualKernelPkg.ProvidesList(); Prv.end() == false; ++Prv)
+ {
+ auto Pkg = Prv.OwnerPkg();
+ if (likely(Pkg->CurrentVer == 0))
+ continue;
+
+ auto pkgUname = APT::KernelAutoRemoveHelper::getUname(Pkg.Name());
+ auto pkgVersion = Pkg.CurrentVer().VerStr();
+
+ if (pkgUname.empty())
+ continue;
+
+ if (Debug)
+ std::clog << "Found kernel " << pkgUname << "(" << pkgVersion << ")" << std::endl;
+
+ version2unames[pkgVersion].push_back(pkgUname);
+
+ if (pkgUname == uts.release)
+ bootedVersion = pkgVersion;
+ if (pkgUname == lastInstalledUname)
+ lastInstalledVersion = pkgVersion;
+ }
+
+ if (version2unames.size() == 0)
+ return "";
+
+ auto latest = version2unames.rbegin();
+ auto previous = latest;
+ ++previous;
+
+ std::set<std::string> keep;
+
+ if (not bootedVersion.empty())
+ {
+ if (Debug || false)
+ std::clog << "Keeping booted kernel " << bootedVersion << std::endl;
+ keep.insert(bootedVersion);
+ }
+ if (not lastInstalledVersion.empty())
+ {
+ if (Debug || false)
+ std::clog << "Keeping installed kernel " << lastInstalledVersion << std::endl;
+ keep.insert(lastInstalledVersion);
+ }
+ if (latest != version2unames.rend())
+ {
+ if (Debug || false)
+ std::clog << "Keeping latest kernel " << latest->first << std::endl;
+ keep.insert(latest->first);
+ }
+ if (keep.size() < 3 && previous != version2unames.rend())
+ {
+ if (Debug)
+ std::clog << "Keeping previous kernel " << previous->first << std::endl;
+ keep.insert(previous->first);
+ }
+
+ std::regex special("([\\.\\+])");
+ std::ostringstream ss;
+ for (auto &pattern : _config->FindVector("APT::VersionedKernelPackages"))
+ {
+ // Legacy compatibility: Always protected the booted uname and last installed uname
+ if (not lastInstalledUname.empty())
+ ss << "|^" << pattern << "-" << std::regex_replace(lastInstalledUname, special, "\\$1") << "$";
+ if (*uts.release)
+ ss << "|^" << pattern << "-" << std::regex_replace(uts.release, special, "\\$1") << "$";
+ for (auto const &kernel : version2unames)
+ {
+ if (ReturnRemove ? keep.find(kernel.first) == keep.end() : keep.find(kernel.first) != keep.end())
+ {
+ for (auto const &uname : kernel.second)
+ ss << "|^" << pattern << "-" << std::regex_replace(uname, special, "\\$1") << "$";
+ }
+ }
+ }
+
+ auto re = ss.str().substr(1);
+ if (Debug)
+ std::clog << "Kernel protection regex: " << re << "\n";
+
+ return re;
+}
+
+std::unique_ptr<APT::CacheFilter::Matcher> GetProtectedKernelsFilter(pkgCache *cache, bool returnRemove)
+{
+ auto regex = GetProtectedKernelsRegex(cache, returnRemove);
+
+ if (regex.empty())
+ return std::make_unique<APT::CacheFilter::FalseMatcher>();
+
+ return std::make_unique<APT::CacheFilter::PackageNameMatchesRegEx>(regex);
+}
+
+} // namespace KernelAutoRemoveHelper
+} // namespace APT
diff --git a/apt-pkg/algorithms.h b/apt-pkg/algorithms.h
index fc578a4ca..12a77d4b8 100644
--- a/apt-pkg/algorithms.h
+++ b/apt-pkg/algorithms.h
@@ -29,11 +29,13 @@
#ifndef PKGLIB_ALGORITHMS_H
#define PKGLIB_ALGORITHMS_H
+#include <apt-pkg/cachefilter.h>
#include <apt-pkg/depcache.h>
#include <apt-pkg/packagemanager.h>
#include <apt-pkg/pkgcache.h>
#include <iostream>
+#include <memory>
#include <string>
#include <apt-pkg/macros.h>
@@ -146,5 +148,17 @@ APT_PUBLIC bool pkgFixBroken(pkgDepCache &Cache);
APT_PUBLIC void pkgPrioSortList(pkgCache &Cache,pkgCache::Version **List);
+namespace APT
+{
+namespace KernelAutoRemoveHelper
+{
+// Public for linking to apt-private, but no A{P,B}I guarantee.
+APT_PUBLIC std::unique_ptr<APT::CacheFilter::Matcher> GetProtectedKernelsFilter(pkgCache *cache, bool returnRemove = false);
+std::string GetProtectedKernelsRegex(pkgCache *cache, bool ReturnRemove = false);
+std::string getUname(std::string const &packageName);
+
+} // namespace KernelAutoRemoveHelper
+
+} // namespace APT
#endif
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 240946529..95f6f6fc8 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -11,6 +11,7 @@
// Include Files /*{{{*/
#include <config.h>
+#include <apt-pkg/algorithms.h>
#include <apt-pkg/aptconfiguration.h>
#include <apt-pkg/cachefilter.h>
#include <apt-pkg/configuration.h>
@@ -246,7 +247,12 @@ bool debListParser::NewVersion(pkgCache::VerIterator &Ver)
if (ParseProvides(Ver) == false)
return false;
-
+ if (not APT::KernelAutoRemoveHelper::getUname(Ver.ParentPkg().Name()).empty())
+ {
+ if (not NewProvides(Ver, "$kernel", "any", Ver.VerStr(), pkgCache::Flag::MultiArchImplicit))
+ return false;
+ }
+
return true;
}
/*}}}*/
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index c7ef7a400..f2b3dbcdc 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -9,6 +9,7 @@
// Include Files /*{{{*/
#include <config.h>
+#include <apt-pkg/algorithms.h>
#include <apt-pkg/aptconfiguration.h>
#include <apt-pkg/cachefile.h>
#include <apt-pkg/cacheset.h>
@@ -43,6 +44,23 @@
using std::string;
+// helper for kernel autoremoval /*{{{*/
+
+/** \brief Returns \b true for packages matching a regular
+ * expression in APT::NeverAutoRemove.
+ */
+class APT_PUBLIC DefaultRootSetFunc2 : public pkgDepCache::DefaultRootSetFunc
+{
+ std::unique_ptr<APT::CacheFilter::Matcher> Kernels;
+
+ public:
+ DefaultRootSetFunc2(pkgCache *cache) : Kernels(APT::KernelAutoRemoveHelper::GetProtectedKernelsFilter(cache)){};
+ virtual ~DefaultRootSetFunc2(){};
+
+ bool InRootSet(const pkgCache::PkgIterator &pkg) APT_OVERRIDE { return pkg.end() == false && ((*Kernels)(pkg) || DefaultRootSetFunc::InRootSet(pkg)); };
+};
+
+ /*}}}*/
// helper for Install-Recommends-Sections and Never-MarkAuto-Sections /*{{{*/
static bool
ConfigValueInSubTree(const char* SubTree, const char *needle)
@@ -95,10 +113,14 @@ pkgDepCache::ActionGroup::~ActionGroup()
// DepCache::pkgDepCache - Constructors /*{{{*/
// ---------------------------------------------------------------------
/* */
-pkgDepCache::pkgDepCache(pkgCache * const pCache,Policy * const Plcy) :
- group_level(0), Cache(pCache), PkgState(0), DepState(0),
- iUsrSize(0), iDownloadSize(0), iInstCount(0), iDelCount(0), iKeepCount(0),
- iBrokenCount(0), iPolicyBrokenCount(0), iBadCount(0), d(NULL)
+
+struct pkgDepCache::Private
+{
+ std::unique_ptr<InRootSetFunc> inRootSetFunc;
+};
+pkgDepCache::pkgDepCache(pkgCache *const pCache, Policy *const Plcy) : group_level(0), Cache(pCache), PkgState(0), DepState(0),
+ iUsrSize(0), iDownloadSize(0), iInstCount(0), iDelCount(0), iKeepCount(0),
+ iBrokenCount(0), iPolicyBrokenCount(0), iBadCount(0), d(new Private)
{
DebugMarker = _config->FindB("Debug::pkgDepCache::Marker", false);
DebugAutoInstall = _config->FindB("Debug::pkgDepCache::AutoInstall", false);
@@ -116,6 +138,7 @@ pkgDepCache::~pkgDepCache()
delete [] PkgState;
delete [] DepState;
delete delLocalPolicy;
+ delete d;
}
/*}}}*/
bool pkgDepCache::CheckConsistency(char const *const msgtag) /*{{{*/
@@ -2148,14 +2171,21 @@ APT_PURE signed short pkgDepCache::Policy::GetPriority(pkgCache::PkgFileIterator
/*}}}*/
pkgDepCache::InRootSetFunc *pkgDepCache::GetRootSetFunc() /*{{{*/
{
- DefaultRootSetFunc *f = new DefaultRootSetFunc;
- if(f->wasConstructedSuccessfully())
- return f;
- else
- {
+ DefaultRootSetFunc *f = new DefaultRootSetFunc2(&GetCache());
+ if (f->wasConstructedSuccessfully())
+ return f;
+ else
+ {
delete f;
return NULL;
- }
+ }
+}
+
+pkgDepCache::InRootSetFunc *pkgDepCache::GetCachedRootSetFunc()
+{
+ if (d->inRootSetFunc == nullptr)
+ d->inRootSetFunc.reset(GetRootSetFunc());
+ return d->inRootSetFunc.get();
}
/*}}}*/
bool pkgDepCache::MarkFollowsRecommends()
@@ -2369,9 +2399,9 @@ bool pkgDepCache::MarkAndSweep(InRootSetFunc &rootFunc)
}
bool pkgDepCache::MarkAndSweep()
{
- std::unique_ptr<InRootSetFunc> f(GetRootSetFunc());
- if(f.get() != NULL)
- return MarkAndSweep(*f.get());
+ InRootSetFunc *f(GetCachedRootSetFunc());
+ if (f != NULL)
+ return MarkAndSweep(*f);
else
return false;
}
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index 78f88ba2f..9a6019092 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -380,6 +380,9 @@ class APT_PUBLIC pkgDepCache : protected pkgCache::Namespace
*/
virtual InRootSetFunc *GetRootSetFunc();
+ /** This should return const really - do not delete. */
+ InRootSetFunc *GetCachedRootSetFunc() APT_HIDDEN;
+
/** \return \b true if the garbage collector should follow recommendations.
*/
virtual bool MarkFollowsRecommends();
@@ -516,7 +519,8 @@ class APT_PUBLIC pkgDepCache : protected pkgCache::Namespace
bool const rPurge, unsigned long const Depth, bool const FromUser);
private:
- void * const d;
+ struct Private;
+ Private *const d;
APT_HIDDEN bool MarkInstall_StateChange(PkgIterator const &Pkg, bool AutoInst, bool FromUser);
APT_HIDDEN bool MarkInstall_DiscardInstall(PkgIterator const &Pkg);
diff --git a/apt-private/private-install.cc b/apt-private/private-install.cc
index af6697d7f..b110cbdc3 100644
--- a/apt-private/private-install.cc
+++ b/apt-private/private-install.cc
@@ -406,8 +406,15 @@ bool DoAutomaticRemove(CacheFile &Cache)
{
bool Debug = _config->FindB("Debug::pkgAutoRemove",false);
bool doAutoRemove = _config->FindB("APT::Get::AutomaticRemove", false);
+ bool doAutoRemoveKernels = _config->FindB("APT::Get::AutomaticRemove::Kernels", false);
bool hideAutoRemove = _config->FindB("APT::Get::HideAutoRemove");
+ std::unique_ptr<APT::CacheFilter::Matcher> kernelAutoremovalMatcher;
+ if (doAutoRemoveKernels && !doAutoRemove)
+ {
+ kernelAutoremovalMatcher = APT::KernelAutoRemoveHelper::GetProtectedKernelsFilter(Cache, true);
+ }
+
pkgDepCache::ActionGroup group(*Cache);
if(Debug)
std::cout << "DoAutomaticRemove()" << std::endl;
@@ -436,7 +443,7 @@ bool DoAutomaticRemove(CacheFile &Cache)
if(Debug)
std::cout << "We could delete " << APT::PrettyPkg(Cache, Pkg) << std::endl;
- if (doAutoRemove)
+ if (doAutoRemove || (kernelAutoremovalMatcher != nullptr && (*kernelAutoremovalMatcher)(Pkg)))
{
if(Pkg.CurrentVer() != 0 &&
Pkg->CurrentState != pkgCache::State::ConfigFiles)
@@ -692,6 +699,9 @@ bool DoCacheManipulationFromCommandLine(CommandLine &CmdL, std::vector<PseudoPkg
OpTextProgress Progress(*_config);
bool const distUpgradeMode = strcmp(CmdL.FileList[0], "dist-upgrade") == 0 || strcmp(CmdL.FileList[0], "full-upgrade") == 0;
+ if (distUpgradeMode)
+ _config->CndSet("APT::Get::AutomaticRemove::Kernels", "true");
+
bool resolver_fail = false;
if (distUpgradeMode == true || UpgradeMode != APT::Upgrade::ALLOW_EVERYTHING)
resolver_fail = APT::Upgrade::Upgrade(Cache, UpgradeMode, &Progress);
diff --git a/debian/NEWS b/debian/NEWS
index 13fc64182..9d9c963c2 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -1,3 +1,10 @@
+apt (2.1.16) UNRELEASED; urgency=medium
+
+ Automatically remove unused kernels on dist-upgrade. To revert to previous
+ behavior, set APT::Get::AutomaticRemove::Kernels to false.
+
+ -- Julian Andres Klode <jak@debian.org> Mon, 04 Jan 2021 10:47:14 +0100
+
apt (1.9.11) experimental; urgency=medium
apt(8) now waits for the lock indefinitely if connected to a tty, or
diff --git a/debian/apt.auto-removal.sh b/debian/apt.auto-removal.sh
index 2c32b0c9d..eef550a53 100644
--- a/debian/apt.auto-removal.sh
+++ b/debian/apt.auto-removal.sh
@@ -1,82 +1,15 @@
#!/bin/sh
set -e
-# Mark as not-for-autoremoval those kernel packages that are:
-# - the currently booted version
-# - the kernel version we've been called for
-# - the latest kernel version (as determined by debian version number)
-# - the second-latest kernel version
-#
-# In the common case this results in two kernels saved (booted into the
-# second-latest kernel, we install the latest kernel in an upgrade), but
-# can save up to four. Kernel refers here to a distinct release, which can
-# potentially be installed in multiple flavours counting as one kernel.
eval $(apt-config shell APT_CONF_D Dir::Etc::parts/d)
test -n "${APT_CONF_D}" || APT_CONF_D="/etc/apt/apt.conf.d"
config_file="${APT_CONF_D}/01autoremove-kernels"
-eval $(apt-config shell DPKG Dir::bin::dpkg/f)
-test -n "$DPKG" || DPKG="/usr/bin/dpkg"
-
-list="$("${DPKG}" -l | awk '/^[ih][^nc][ ]+(linux|kfreebsd|gnumach)-image-[0-9]+\./ && $2 !~ /-dbg(:.*)?$/ && $2 !~ /-dbgsym(:.*)?$/ { print $2,$3; }' \
- | sed -e 's#^\(linux\|kfreebsd\|gnumach\)-image-##' -e 's#:[^:]\+ # #')"
-debverlist="$(echo "$list" | cut -d' ' -f 2 | sort --unique --reverse --version-sort)"
-
-if [ -n "$1" ]; then
- installed_version="$(echo "$list" | awk "\$1 == \"$1\" { print \$2;exit; }")"
-fi
-unamer="$(uname -r | tr '[A-Z]' '[a-z]')"
-if [ -n "$unamer" ]; then
- running_version="$(echo "$list" | awk "\$1 == \"$unamer\" { print \$2;exit; }")"
-fi
-# ignore the currently running version if attempting a reproducible build
-if [ -n "${SOURCE_DATE_EPOCH}" ]; then
- unamer=""
- running_version=""
-fi
-latest_version="$(echo "$debverlist" | sed -n 1p)"
-previous_version="$(echo "$debverlist" | sed -n 2p)"
-
-debkernels="$(echo "$latest_version
-$installed_version
-$running_version
-$previous_version" | sort -u | sed -e '/^$/ d')"
-kernels="$( (echo "$1
-$unamer"; for deb in $debkernels; do echo "$list" | awk "\$2 == \"$deb\" { print \$1; }"; done; ) \
- | sed -e 's#\([\.\+]\)#\\\1#g' -e '/^$/ d' | sort -u)"
-
generateconfig() {
cat <<EOF
// DO NOT EDIT! File autogenerated by $0
-APT::NeverAutoRemove
-{
-EOF
- for package in $(apt-config dump --no-empty --format '%v%n' 'APT::VersionedKernelPackages'); do
- for kernel in $kernels; do
- echo " \"^${package}-${kernel}$\";"
- done
- done
- echo '};'
- if [ "${APT_AUTO_REMOVAL_KERNELS_DEBUG:-true}" = 'true' ]; then
- cat <<EOF
-/* Debug information:
-# dpkg list:
-$(dpkg -l | grep '\(linux\|kfreebsd\|gnumach\)-image-')
-# list of installed kernel packages:
-$list
-# list of different kernel versions:
-$debverlist
-# Installing kernel: $installed_version ($1)
-# Running kernel: ${running_version:-ignored} (${unamer:-ignored})
-# Last kernel: $latest_version
-# Previous kernel: $previous_version
-# Kernel versions list to keep:
-$debkernels
-# Kernel packages (version part) to protect:
-$kernels
-*/
+APT::LastInstalledKernel "$1";
EOF
- fi
}
generateconfig "$@" > "${config_file}.dpkg-new"
mv -f "${config_file}.dpkg-new" "$config_file"
diff --git a/doc/examples/configure-index b/doc/examples/configure-index
index b73166082..15b020198 100644
--- a/doc/examples/configure-index
+++ b/doc/examples/configure-index
@@ -54,6 +54,9 @@ APT
Build-Profiles "<STRING_OR_LIST>";
NeverAutoRemove "<LIST>"; // list of package name regexes
+ LastInstalledKernel "<STRING>"; // last installed kernel version
+ VersionedKernelPackages "<LIST>"; // regular expressions to be protected from autoremoval (kernel uname will be appended)
+ Protect-Kernels "<BOOL>"; // whether to protect installed kernels against autoremoval (default: true)
// Options for apt-get
Get
@@ -77,7 +80,9 @@ APT
Remove "<BOOL>";
AllowUnauthenticated "<BOOL>"; // skip security
- AutomaticRemove "<BOOL>";
+ AutomaticRemove "<BOOL>" {
+ "Kernels" "<BOOL>"; // Allow removing kernels even if not removing other packages (true for dist-upgrade)
+ };
HideAutoRemove "<STRING_OR_BOOL>"; // yes, no, small
Simulate "<BOOL>";
diff --git a/methods/basehttp.h b/methods/basehttp.h
index 4a83f319c..62c9963ea 100644
--- a/methods/basehttp.h
+++ b/methods/basehttp.h
@@ -94,7 +94,7 @@ struct ServerState
/** \brief Get the headers before the data */
RunHeadersResult RunHeaders(RequestState &Req, const std::string &Uri);
- bool Comp(URI Other) const {return Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
+ bool Comp(URI Other) const {return Other.Access == ServerName.Access && Other.Host == ServerName.Host && Other.Port == ServerName.Port;};
virtual void Reset();
virtual bool WriteResponse(std::string const &Data) = 0;
diff --git a/methods/connect.cc b/methods/connect.cc
index 57dfb6299..d513a4540 100644
--- a/methods/connect.cc
+++ b/methods/connect.cc
@@ -45,7 +45,7 @@
/*}}}*/
static std::string LastHost;
-static int LastPort = 0;
+static std::string LastService;
static struct addrinfo *LastHostAddr = 0;
static struct addrinfo *LastUsed = 0;
@@ -349,17 +349,14 @@ static ResultState ConnectToHostname(std::string const &Host, int const Port,
{
if (ConnectionAllowed(Service, Host) == false)
return ResultState::FATAL_ERROR;
- // Convert the port name/number
- char ServStr[300];
- if (Port != 0)
- snprintf(ServStr,sizeof(ServStr),"%i", Port);
- else
- snprintf(ServStr,sizeof(ServStr),"%s", Service);
+
+ // Used by getaddrinfo(); prefer port if given, else fallback to service
+ std::string ServiceNameOrPort = Port != 0 ? std::to_string(Port) : Service;
/* We used a cached address record.. Yes this is against the spec but
the way we have setup our rotating dns suggests that this is more
sensible */
- if (LastHost != Host || LastPort != Port)
+ if (LastHost != Host || LastService != ServiceNameOrPort)
{
Owner->Status(_("Connecting to %s"),Host.c_str());
@@ -405,14 +402,14 @@ static ResultState ConnectToHostname(std::string const &Host, int const Port,
while (1)
{
int Res;
- if ((Res = getaddrinfo(Host.c_str(),ServStr,&Hints,&LastHostAddr)) != 0 ||
+ if ((Res = getaddrinfo(Host.c_str(), ServiceNameOrPort.c_str(), &Hints, &LastHostAddr)) != 0 ||
LastHostAddr == 0)
{
if (Res == EAI_NONAME || Res == EAI_SERVICE)
{
if (DefPort != 0)
{
- snprintf(ServStr, sizeof(ServStr), "%i", DefPort);
+ ServiceNameOrPort = std::to_string(DefPort);
DefPort = 0;
continue;
}
@@ -431,17 +428,17 @@ static ResultState ConnectToHostname(std::string const &Host, int const Port,
}
if (Res == EAI_SYSTEM)
_error->Errno("getaddrinfo", _("System error resolving '%s:%s'"),
- Host.c_str(), ServStr);
+ Host.c_str(), ServiceNameOrPort.c_str());
else
_error->Error(_("Something wicked happened resolving '%s:%s' (%i - %s)"),
- Host.c_str(), ServStr, Res, gai_strerror(Res));
+ Host.c_str(), ServiceNameOrPort.c_str(), Res, gai_strerror(Res));
return ResultState::TRANSIENT_ERROR;
}
break;
}
LastHost = Host;
- LastPort = Port;
+ LastService = ServiceNameOrPort;
}
// When we have an IP rotation stay with the last IP.
@@ -469,7 +466,7 @@ static ResultState ConnectToHostname(std::string const &Host, int const Port,
return Result;
if (_error->PendingError() == true)
return ResultState::FATAL_ERROR;
- _error->Error(_("Unable to connect to %s:%s:"), Host.c_str(), ServStr);
+ _error->Error(_("Unable to connect to %s:%s:"), Host.c_str(), ServiceNameOrPort.c_str());
return ResultState::TRANSIENT_ERROR;
}
/*}}}*/
@@ -486,7 +483,10 @@ ResultState Connect(std::string Host, int Port, const char *Service,
if (ConnectionAllowed(Service, Host) == false)
return ResultState::FATAL_ERROR;
- if(LastHost != Host || LastPort != Port)
+ // Used by getaddrinfo(); prefer port if given, else fallback to service
+ std::string ServiceNameOrPort = Port != 0 ? std::to_string(Port) : Service;
+
+ if(LastHost != Host || LastService != ServiceNameOrPort)
{
SrvRecords.clear();
if (_config->FindB("Acquire::EnableSrvRecords", true) == true)
diff --git a/po/el.po b/po/el.po
index 6f0140cb8..eb8386c0d 100644
--- a/po/el.po
+++ b/po/el.po
@@ -12,32 +12,37 @@
# Serafeim Zanikolas <serzan@hellug.gr>, 2008.
# quad-nrg.net <yodesy@quad-nrg.net>, 2008.
# Θανάσης Νάτσης <natsisthanasis@gmail.com>, 2012.
+# Vangelis Skarmoutsos <skarmoutsosv@gmail.com>, 2020
msgid ""
msgstr ""
"Project-Id-Version: apt 1.0.5\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
"POT-Creation-Date: 2020-08-11 14:34+0200\n"
-"PO-Revision-Date: 2008-08-26 18:25+0300\n"
-"Last-Translator: Θανάσης Νάτσης <natsisthanasis@gmail.com>\n"
+"PO-Revision-Date: 2020-12-30 12:20+0200\n"
+"Last-Translator: Vangelis Skarmoutsos <skarmoutsosv@gmail.com>\n"
"Language-Team: Greek <debian-l10n-greek@lists.debian.org>\n"
"Language: el\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 2.4.2\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apt-pkg/acquire-item.cc
msgid ""
"Updating from such a repository can't be done securely, and is therefore "
"disabled by default."
msgstr ""
+"Η ενημέρωση από ένα τέτοιο αποθετήριο δεν μπορεί να γίνει με ασφάλεια και "
+"έτσι είναι απενεργοποιημένη από πριν."
#: apt-pkg/acquire-item.cc
msgid ""
"Data from such a repository can't be authenticated and is therefore "
"potentially dangerous to use."
msgstr ""
+"Τα δεδομένα από ένα τέτοιο αποθετήριο δεν μπορούν να πιστοποιηθούν και άρα "
+"είναι δυνητικά επικίνδυνη η χρήση τους."
#: apt-pkg/acquire-item.cc
msgid ""
@@ -46,14 +51,14 @@ msgid ""
msgstr ""
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' is no longer signed."
-msgstr "Ο φάκελος %s έχει εκτραπεί"
+msgstr "Το αποθετήριο '%s' δεν είναι πλέον υπογραμμένος."
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' no longer has a Release file."
-msgstr "Ο φάκελος %s έχει εκτραπεί"
+msgstr "Το αποθετήριο '%s' δεν έχει πια ένα αρχείο Release."
#: apt-pkg/acquire-item.cc
msgid ""
@@ -62,19 +67,19 @@ msgid ""
msgstr ""
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' is not signed."
-msgstr "Ο φάκελος %s έχει εκτραπεί"
+msgstr "Το αποθετήριο %s δεν είναι υπογραμμένο."
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' does not have a Release file."
-msgstr "Ο φάκελος %s έχει εκτραπεί"
+msgstr "Το αποθετήριο '%s' δεν έχει αρχείο Release."
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' provides only weak security information."
-msgstr "Ο φάκελος %s έχει εκτραπεί"
+msgstr "Το αποθετήριο '%s' παρέχει μόνο ισχνές πληροφορίες ασφαλείας."
#: apt-pkg/acquire-item.cc ftparchive/writer.cc
#, c-format
@@ -84,7 +89,7 @@ msgstr "Αποτυχία ανάγνωσης του %s"
#: apt-pkg/acquire-item.cc ftparchive/cachedb.cc methods/rred.cc
#, c-format
msgid "Failed to stat %s"
-msgstr "Αποτυχία εύρεσης της κατάστασης του %s."
+msgstr "Αποτυχία εύρεσης της κατάστασης του %s"
#: apt-pkg/acquire-item.cc
msgid "Hash Sum mismatch"
@@ -104,14 +109,12 @@ msgid "Size mismatch"
msgstr "Ανόμοιο μέγεθος"
#: apt-pkg/acquire-item.cc
-#, fuzzy
msgid "Invalid file format"
-msgstr "Μη έγκυρη λειτουργία %s"
+msgstr "Άκυρη μορφή αρχείου"
#: apt-pkg/acquire-item.cc
-#, fuzzy
msgid "Signature error"
-msgstr "Σφάλμα εγγραφής"
+msgstr "Σφάλμα υπογραφής"
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: apt-pkg/acquire-item.cc methods/gpgv.cc
@@ -233,9 +236,9 @@ msgstr ""
#. TRANSLATOR: %s=%s is sourcename=sourceversion, e.g. apt=1.1
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "Changelog unavailable for %s=%s"
-msgstr "Changelog για %s (%s)"
+msgstr "Το changelog δεν είναι διαθέσιμο για %s=%s"
#: apt-pkg/acquire-worker.cc
#, c-format
@@ -260,9 +263,9 @@ msgid "The method driver %s could not be found."
msgstr "Ο οδηγός μεθόδου %s δεν μπορεί να εντοπιστεί."
#: apt-pkg/acquire-worker.cc
-#, fuzzy, c-format
+#, c-format
msgid "Is the package %s installed?"
-msgstr "Ελέγξτε αν είναι εγκαταστημένο το πακέτο 'dpkg-dev'.\n"
+msgstr "Είναι εγκατεστημένο το πακέτο %s;"
#: apt-pkg/acquire-worker.cc
#, c-format
@@ -270,27 +273,27 @@ msgid "Method %s did not start correctly"
msgstr "Η μέθοδος %s δεν εκκινήθηκε σωστά"
#: apt-pkg/acquire-worker.cc
-#, fuzzy, c-format
+#, c-format
msgid ""
"Please insert the disc labeled: '%s' in the drive '%s' and press [Enter]."
msgstr ""
"Παρακαλώ εισάγετε το δίσκο με ετικέτα '%s' στη συσκευή '%s' και πατήστε "
-"enter."
+"[Enter]."
#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
-#, fuzzy, c-format
+#, c-format
msgid "List directory %s is missing."
-msgstr "Ο φάκελος λιστών %s αγνοείται."
+msgstr ""
#: apt-pkg/acquire.cc
-#, fuzzy, c-format
+#, c-format
msgid "Archives directory %s is missing."
-msgstr "Ο φάκελος αρχειοθηκών %s αγνοείται."
+msgstr "Ο φάκελος αρχειοθηκών %s λείπει."
#: apt-pkg/acquire.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to lock directory %s"
-msgstr "Αδύνατο το κλείδωμα του καταλόγου"
+msgstr "Αδύνατο το κλείδωμα του καταλόγου %s"
#: apt-pkg/acquire.cc
#, c-format
@@ -305,9 +308,9 @@ msgid ""
msgstr ""
#: apt-pkg/acquire.cc apt-pkg/clean.cc
-#, fuzzy, c-format
+#, c-format
msgid "Clean of %s is not supported"
-msgstr "Ο τύπος αρχείου ευρετηρίου '%s' δεν υποστηρίζεται"
+msgstr "Το καθάρισμα του %s δεν υποστηρίζεται"
#. Only warn if there are no sources.list.d.
#. Only warn if there is no sources.list file.
@@ -366,7 +369,7 @@ msgstr "Αδύνατη η ανάγνωση της λίστας πηγών."
#: apt-private/private-output.cc
#, c-format
msgid "Regex compilation error - %s"
-msgstr "σφάλμα μεταγλωτισμου - %s"
+msgstr "Σφάλμα μεταγλωτισμού regex - %s"
#: apt-pkg/cacheset.cc
#, c-format
@@ -379,19 +382,19 @@ msgid "Version '%s' for '%s' was not found"
msgstr "Η έκδοση %s για το %s δεν βρέθηκε"
#: apt-pkg/cacheset.cc
-#, fuzzy, c-format
+#, c-format
msgid "Couldn't find task '%s'"
-msgstr "Αδύνατη η εύρεση του συνόλου πακέτων %s"
+msgstr "Δεν μπόρεσε να βρεθεί η εργασία '%s'"
#: apt-pkg/cacheset.cc
-#, fuzzy, c-format
+#, c-format
msgid "Couldn't find any package by regex '%s'"
-msgstr "Αδύνατη η εύρεση του πακέτου %s"
+msgstr "Δεν βρέθηκε κάποιο πακέτο με το regex '%s'"
#: apt-pkg/cacheset.cc
-#, fuzzy, c-format
+#, c-format
msgid "Couldn't find any package by glob '%s'"
-msgstr "Αδύνατη η εύρεση του πακέτου %s"
+msgstr "Δεν βρέθηκε κάποιο πακέτο με το glob '%s'"
#: apt-pkg/cacheset.cc apt-private/private-show.cc
#, c-format
@@ -449,7 +452,7 @@ msgstr "Προσάρτηση του CD-ROM...\n"
#: apt-pkg/cdrom.cc
msgid "Identifying... "
-msgstr "Αναγνώριση..."
+msgstr "Αναγνώριση... "
#: apt-pkg/cdrom.cc
#, c-format
@@ -533,25 +536,29 @@ msgstr "Αποτυχία ανάγνωσης των επικεφαλίδων τη
#: apt-pkg/contrib/cdromutl.cc
#, c-format
msgid "Unable to stat the mount point %s"
-msgstr "Αδύνατη η εύρεση της κατάστασης του σημείου επαφής %s"
+msgstr "Αδύνατη η εύρεση της κατάστασης του σημείου προσάρτησης %s"
#: apt-pkg/contrib/cdromutl.cc
msgid "Failed to stat the cdrom"
msgstr "Αδύνατη η εύρεση της κατάστασης του cdrom"
#: apt-pkg/contrib/cmndline.cc
-#, fuzzy, c-format
+#, c-format
msgid ""
"Command line option '%c' [from %s] is not understood in combination with the "
"other options."
-msgstr "Η επιλογή γραμμής εντολών '%c' [από %s] δεν είναι γνωστή."
+msgstr ""
+"Η επιλογή γραμμής εντολών '%c' [από %s] δεν είναι κατανοητή σε συνδυασμό με "
+"άλλες επιλογές."
#: apt-pkg/contrib/cmndline.cc
-#, fuzzy, c-format
+#, c-format
msgid ""
"Command line option %s is not understood in combination with the other "
"options"
-msgstr "Η επιλογή γραμμής εντολών %s δεν είναι κατανοητή"
+msgstr ""
+"Η επιλογή γραμμής εντολών %s δεν είναι κατανοητή σε συνδυασμό με άλλες "
+"επιλογές"
#: apt-pkg/contrib/cmndline.cc
#, c-format
@@ -631,10 +638,11 @@ msgid "Syntax error %s:%u: Unsupported directive '%s'"
msgstr "Συντακτικό σφάλμα %s:%u: Μη υποστηριζόμενη εντολή '%s'"
#: apt-pkg/contrib/configuration.cc
-#, fuzzy, c-format
+#, c-format
msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
msgstr ""
-"Συντακτικό σφάλμα %s:%u: Οι οδηγίες βρίσκονται μόνο στο ανώτατο επίπεδο"
+"Συντακτικό σφάλμα %s:%u: η καθαρή οδηγία απαιτεί ένα δέντρο επιλογών ως "
+"όρισμα"
#: apt-pkg/contrib/configuration.cc
#, c-format
@@ -642,9 +650,9 @@ msgid "Syntax error %s:%u: Extra junk at end of file"
msgstr "Συντακτικό σφάλμα %s:%u: Άχρηστοι χαρακτήρες στο τέλος του αρχείου"
#: apt-pkg/contrib/extracttar.cc
-#, fuzzy, c-format
+#, c-format
msgid "Cannot find a configured compressor for '%s'"
-msgstr "Αδύνατη η εύρεση του πακέτου %s"
+msgstr "Αδύνατη η εύρεση ρυθμισμένου συμπιεστή '%s'"
#: apt-pkg/contrib/extracttar.cc
msgid "Corrupted archive"
@@ -655,15 +663,14 @@ msgid "Tar checksum failed, archive corrupted"
msgstr "Το Checksum του tar απέτυχε, η αρχείοθήκη είναι κατεστραμμένη"
#: apt-pkg/contrib/extracttar.cc
-#, fuzzy, c-format
-#| msgid "Unknown TAR header type %u, member %s"
+#, c-format
msgid "Unknown TAR header type %u"
-msgstr "Άγνωστη επικεφαλίδα TAR τύπος %u, μέλος %s"
+msgstr "Άγνωστη επικεφαλίδα TAR τύπος %u"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Problem unlinking the file %s"
-msgstr "Πρόβλημα κατά την διαγραφή του αρχείου"
+msgstr "Πρόβλημα κατά την αποσύνδεση του αρχείου %s"
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -684,10 +691,9 @@ msgstr ""
"%s"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
-#| msgid "Could not get lock %s"
+#, c-format
msgid "Could not get lock %s. It is held by process %d"
-msgstr "Αδύνατο το κλείδωμα %s"
+msgstr "Αδύνατο το κλείδωμα %s. Κρατείται από την διεργασία %d"
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -738,9 +744,9 @@ msgid "Sub-process %s received a segmentation fault."
msgstr "Η υποδιεργασία %s έλαβε ένα σφάλμα καταμερισμού (segfault)"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Sub-process %s received signal %u."
-msgstr "Η υποδιεργασία %s έλαβε ένα σφάλμα καταμερισμού (segfault)"
+msgstr "Η υποδιεργασία %s έλαβε σήμα %u."
#. we forward the statuscode, so don't generate a message on the fd in this case
#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc
@@ -762,13 +768,13 @@ msgid "Write error"
msgstr "Σφάλμα εγγραφής"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Problem closing the gzip file %s"
-msgstr "Πρόβλημα κατά το κλείσιμο του αρχείου"
+msgstr "Πρόβλημα κατά το κλείσιμο του αρχείου gzip %s"
#: apt-pkg/contrib/fileutl.cc
msgid "Unexpected end of file"
-msgstr ""
+msgstr "Μη αναμενόμενο τέλος αρχείου"
#: apt-pkg/contrib/fileutl.cc
msgid "Failed to create subprocess IPC"
@@ -784,38 +790,38 @@ msgid "Could not open file %s"
msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Could not open file descriptor %d"
-msgstr "Αδύνατο το άνοιγμα διασωλήνωσης για το %s"
+msgstr "Αδύνατο το άνοιγμα περιγραφέα αρχείου για το %d"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "read, still have %llu to read but none left"
-msgstr "αναγνώστηκαν, απομένουν ακόμη %lu για ανάγνωση αλλά δεν απομένουν άλλα"
+msgstr "αναγνώστηκαν, απομένουν ακόμη %llu για ανάγνωση αλλά δεν υπάρχουν άλλα"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "write, still have %llu to write but couldn't"
-msgstr "γράφτηκαν, απομένουν %lu για εγγραφή αλλά χωρίς επιτυχία"
+msgstr "γράφτηκαν, απομένουν %llu για εγγραφή αλλά δεν μπορούσε"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Problem closing the file %s"
-msgstr "Πρόβλημα κατά το κλείσιμο του αρχείου"
+msgstr "Πρόβλημα κατά το κλείσιμο του αρχείου %s"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Problem renaming the file %s to %s"
-msgstr "Πρόβλημα κατά τον συγχρονισμό του αρχείου"
+msgstr "Πρόβλημα κατά την μετονομασία του αρχείου %s σε %s"
#: apt-pkg/contrib/fileutl.cc
msgid "Problem syncing the file"
msgstr "Πρόβλημα κατά τον συγχρονισμό του αρχείου"
#: apt-pkg/contrib/fileutl.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to mkstemp %s"
-msgstr "Αδύνατη η εύρεση της κατάστασης του %s"
+msgstr "Αδύνατο το mktemp %s"
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -827,24 +833,22 @@ msgid "Can't mmap an empty file"
msgstr "Αδύνατη η απεικόνιση mmap ενός άδειου αρχείου"
#: apt-pkg/contrib/mmap.cc
-#, fuzzy, c-format
+#, c-format
msgid "Couldn't make mmap of %llu bytes"
-msgstr "Αδύνατη η απεικόνιση μέσω mmap %lu bytes"
+msgstr "Δεν μπόρεσε να γίνει mmap από %llu byte"
#: apt-pkg/contrib/mmap.cc
-#, fuzzy, c-format
+#, c-format
msgid "Couldn't duplicate file descriptor %i"
-msgstr "Αδύνατο το άνοιγμα διασωλήνωσης για το %s"
+msgstr "Αδύνατη η δημιουργία διπλότυπου του περιγραφέα αρχείου για το %i"
#: apt-pkg/contrib/mmap.cc
-#, fuzzy
msgid "Unable to close mmap"
-msgstr "Αδύνατο το άνοιγμα του %s"
+msgstr "Αδύνατο το κλείσιμο του mmap"
#: apt-pkg/contrib/mmap.cc
-#, fuzzy
msgid "Unable to synchronize mmap"
-msgstr "Αδύνατη η εκτέλεση"
+msgstr "Αδύνατος ο συγχρονισμός του mmap"
#: apt-pkg/contrib/mmap.cc
#, c-format
@@ -852,9 +856,8 @@ msgid "Couldn't make mmap of %lu bytes"
msgstr "Αδύνατη η απεικόνιση μέσω mmap %lu bytes"
#: apt-pkg/contrib/mmap.cc
-#, fuzzy
msgid "Failed to truncate file"
-msgstr "Αποτυχία εγγραφής του αρχείου %s"
+msgstr "Αποτυχία περικοπής αρχείου"
#: apt-pkg/contrib/mmap.cc
#, c-format
@@ -894,46 +897,46 @@ msgstr "%c%s... Ολοκληρώθηκε"
#: apt-pkg/contrib/progress.cc
msgid "..."
-msgstr ""
+msgstr "..."
#: apt-pkg/contrib/progress.cc
-#, fuzzy, c-format
+#, c-format
msgid "%c%s... %llu/%llus"
-msgstr "%c%s... Ολοκληρώθηκε"
+msgstr "%c%s... %llu/%llus"
#: apt-pkg/contrib/progress.cc
-#, fuzzy, c-format
+#, c-format
msgid "%c%s... %llus"
-msgstr "%c%s... Ολοκληρώθηκε"
+msgstr "%c%s... %llus"
#: apt-pkg/contrib/progress.cc
-#, fuzzy, c-format
+#, c-format
msgid "%c%s... %u%%"
-msgstr "%c%s... Ολοκληρώθηκε"
+msgstr "%c%s... %u%%"
#. TRANSLATOR: d means days, h means hours, min means minutes, s means seconds
#: apt-pkg/contrib/strutl.cc
#, c-format
msgid "%lid %lih %limin %lis"
-msgstr ""
+msgstr "%liη %liω %liλ %liδ"
#. TRANSLATOR: h means hours, min means minutes, s means seconds
#: apt-pkg/contrib/strutl.cc
#, c-format
msgid "%lih %limin %lis"
-msgstr ""
+msgstr "%liω %liλ %liδ"
#. TRANSLATOR: min means minutes, s means seconds
#: apt-pkg/contrib/strutl.cc
#, c-format
msgid "%limin %lis"
-msgstr ""
+msgstr "%liλ %liδ"
#. TRANSLATOR: s means seconds
#: apt-pkg/contrib/strutl.cc
#, c-format
msgid "%lis"
-msgstr ""
+msgstr "%liδ"
#: apt-pkg/contrib/strutl.cc
#, c-format
@@ -955,10 +958,9 @@ msgid "Unparsable control file"
msgstr "Μη αναλύσιμο αρχείο control"
#: apt-pkg/deb/debindexfile.cc
-#, fuzzy, c-format
-#| msgid "Could not get lock %s"
+#, c-format
msgid "Could not read meta data from %s"
-msgstr "Αδύνατο το κλείδωμα %s"
+msgstr "Αδύνατη η ανάγνωση μετα-δεδομένων από %s"
#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
#. a file like main/binary-amd64/Packages; another identifier like Contents;
@@ -977,14 +979,14 @@ msgid "Target %s (%s) is configured multiple times in %s and %s"
msgstr ""
#: apt-pkg/deb/debmetaindex.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to parse Release file %s"
-msgstr "Αδύνατη η ανάλυση του αρχείου πακέτου %s (1)"
+msgstr "Αδύνατη η ανάλυση του αρχείου Release %s"
#: apt-pkg/deb/debmetaindex.cc
-#, fuzzy, c-format
+#, c-format
msgid "No sections in Release file %s"
-msgstr "Σημείωση, επιλέχθηκε το %s αντί του%s\n"
+msgstr ""
#: apt-pkg/deb/debmetaindex.cc
#, c-format
@@ -999,9 +1001,9 @@ msgid ""
msgstr ""
#: apt-pkg/deb/debmetaindex.cc
-#, fuzzy, c-format
+#, c-format
msgid "Invalid '%s' entry in Release file %s"
-msgstr "Μη έγκυρη γραμμή στο αρχείο παρακάμψεων: %s"
+msgstr "Άκυρη εισαγωγή '%s' στο αρχείο Release %s"
#. TRANSLATOR: The first is an option name from sources.list manpage, the other two URI and Suite
#: apt-pkg/deb/debmetaindex.cc
@@ -1020,15 +1022,14 @@ msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
msgstr ""
#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to parse package file %s (%d)"
-msgstr "Αδύνατη η ανάλυση του αρχείου πακέτου %s (%s)"
+msgstr "Αδύνατη η ανάλυση του αρχείου πακέτου %s (%d)"
#: apt-pkg/deb/debsystem.cc
-#, fuzzy, c-format
-#| msgid "Waiting for headers"
+#, c-format
msgid "Waiting for cache lock: %s"
-msgstr "Αναμονή επικεφαλίδων"
+msgstr "Αναμονή κλειδώματος cache: %s"
#: apt-pkg/deb/debsystem.cc
#, c-format
@@ -1037,9 +1038,9 @@ msgid ""
msgstr ""
#: apt-pkg/deb/debsystem.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to acquire the dpkg frontend lock (%s), are you root?"
-msgstr "Αδύνατο το κλείδωμα του καταλόγου"
+msgstr "Αδύνατη η απόκτηση κλειδώματος του dpkg frontend (%s), είστε ο root;"
#. TRANSLATORS: the %s contains the recovery command, usually
#. dpkg --configure -a
@@ -1057,13 +1058,13 @@ msgid ""
msgstr ""
#: apt-pkg/deb/debsystem.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to lock the administration directory (%s), are you root?"
-msgstr "Αδύνατο το κλείδωμα του καταλόγου"
+msgstr "Αδύνατο το κλείδωμα του διαχειριστικού καταλόγου (%s), είσαι ο root;"
#: apt-pkg/deb/debsystem.cc
msgid "Not locked"
-msgstr ""
+msgstr "Μη κλειδωμένο"
#. we don't care for the difference
#: apt-pkg/deb/dpkgpm.cc
@@ -1110,12 +1111,12 @@ msgstr "Ρύθμιση του %s"
#: apt-pkg/deb/dpkgpm.cc
#, c-format
msgid "Directory '%s' missing"
-msgstr "Ο φάκελος %s αγνοείται."
+msgstr "Ο φάκελος %s λείπει"
#: apt-pkg/deb/dpkgpm.cc apt-pkg/edsp.cc
-#, fuzzy, c-format
+#, c-format
msgid "Could not open file '%s'"
-msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+msgstr "Αδύνατο το άνοιγμα του αρχείου '%s'"
#: apt-pkg/deb/dpkgpm.cc
#, c-format
@@ -1133,9 +1134,9 @@ msgid "Removing %s"
msgstr "Αφαιρώ το %s"
#: apt-pkg/deb/dpkgpm.cc
-#, fuzzy, c-format
+#, c-format
msgid "Completely removing %s"
-msgstr "Το %s διαγράφηκε πλήρως"
+msgstr "Ολοκληρωτική αφαίρεση του %s"
#: apt-pkg/deb/dpkgpm.cc
#, c-format
@@ -1143,13 +1144,13 @@ msgid "Completely removed %s"
msgstr "Το %s διαγράφηκε πλήρως"
#: apt-pkg/deb/dpkgpm.cc
-#, fuzzy, c-format
+#, c-format
msgid "Can not write log (%s)"
-msgstr "Αδύνατη η εγγραφή στο %s"
+msgstr "Δεν μπορεί να γραφτεί η καταγραφή (%s)"
#: apt-pkg/deb/dpkgpm.cc
msgid "Is /dev/pts mounted?"
-msgstr ""
+msgstr "Είναι προσαρτημένο το /dev/pts ;"
#: apt-pkg/deb/dpkgpm.cc
msgid "Operation was interrupted before it could finish"
@@ -1162,7 +1163,7 @@ msgstr ""
#. check if its not a follow up error
#: apt-pkg/deb/dpkgpm.cc
msgid "dependency problems - leaving unconfigured"
-msgstr ""
+msgstr "προβλήματα εξαρτήσεων - αφήνεται χωρίς ρύθμιση"
#: apt-pkg/deb/dpkgpm.cc
msgid ""
@@ -1207,7 +1208,7 @@ msgstr "Παραγωγή Εξαρτήσεων"
#: apt-pkg/depcache.cc
msgid "Reading state information"
-msgstr "Ανάγνωση περιγραφής της τρέχουσας κατάσταση"
+msgstr "Ανάγνωση πληροφοριών κατάστασης"
#: apt-pkg/depcache.cc
#, c-format
@@ -1231,23 +1232,23 @@ msgstr "Αποτυχία στο κλείσιμο του αρχείου %s"
#: apt-pkg/edsp.cc
msgid "Send scenario to solver"
-msgstr ""
+msgstr "Αποστολή σεναρίου στον solver"
#: apt-pkg/edsp.cc
msgid "Send request to solver"
-msgstr ""
+msgstr "Αποστολή αιτήματος στον solver"
#: apt-pkg/edsp.cc
msgid "Prepare for receiving solution"
-msgstr ""
+msgstr "Προετοιμασία για λήψη λύσης"
#: apt-pkg/edsp.cc
msgid "External solver failed without a proper error message"
-msgstr ""
+msgstr "Ο εξωτερικός solver απέτυχε χωρίς κανονικό μήνυμα σφάλματος"
#: apt-pkg/edsp.cc
msgid "Execute external solver"
-msgstr ""
+msgstr "Εκτέλεση εξωτερικού solver"
#: apt-pkg/edsp.cc
msgid "Execute external planner"
@@ -1288,12 +1289,12 @@ msgstr "Εγιναν %i εγγραφές με %i απώντα αρχεία κα
#: apt-pkg/indexcopy.cc
#, c-format
msgid "Can't find authentication record for: %s"
-msgstr ""
+msgstr "Δεν μπορεί να βρεθεί εγγραφή πιστοποίησης για: %s"
#: apt-pkg/indexcopy.cc
-#, fuzzy, c-format
+#, c-format
msgid "Hash mismatch for: %s"
-msgstr "Ανόμοιο MD5Sum"
+msgstr "Ανόμοιο hash για το: %s"
#: apt-pkg/init.cc
#, c-format
@@ -1307,12 +1308,12 @@ msgstr "Αδύνατος ο καθορισμός ενός κατάλληλου
#: apt-pkg/install-progress.cc
#, c-format
msgid "Progress: [%3li%%]"
-msgstr ""
+msgstr "Πρόοδος: [%3li%%]"
#. send status information that we are about to fork dpkg
#: apt-pkg/install-progress.cc
msgid "Running dpkg"
-msgstr ""
+msgstr "Γίνεται τρέξιμο του dpkg"
#: apt-pkg/packagemanager.cc
#, c-format
@@ -1322,9 +1323,9 @@ msgid ""
msgstr ""
#: apt-pkg/packagemanager.cc
-#, fuzzy, c-format
+#, c-format
msgid "Could not configure '%s'. "
-msgstr "Αδύνατο το άνοιγμα του αρχείου %s"
+msgstr "Δεν μπόρεσε να ρυθμιστεί το '%s'. "
#: apt-pkg/packagemanager.cc
#, c-format
@@ -1356,14 +1357,14 @@ msgid "This APT does not support the versioning system '%s'"
msgstr "Αυτό το APT δεν υποστηρίζει το Σύστημα Απόδοσης Έκδοσης '%s'"
#: apt-pkg/pkgcache.cc
-#, fuzzy, c-format
+#, c-format
msgid "The package cache was built for different architectures: %s vs %s"
-msgstr "Η cache πακέτων κατασκευάστηκε για μια διαφορετική αρχιτεκτονική"
+msgstr ""
+"Η cache του πακέτου κατασκευάστηκε για διαφορετικές αρχιτεκτονικές: %s vs %s"
#: apt-pkg/pkgcache.cc
-#, fuzzy
msgid "The package cache file is corrupted, it has the wrong hash"
-msgstr "Το αρχείο cache των πακέτων είναι κατεστραμμένο"
+msgstr "Το αρχείο cache του πακέτου είναι κατεστραμμένο, έχει λανθασμένο hash"
#: apt-pkg/pkgcache.cc
msgid "Depends"
@@ -1395,7 +1396,7 @@ msgstr "Χαλάει"
#: apt-pkg/pkgcache.cc
msgid "Enhances"
-msgstr ""
+msgstr "Επεκτείνει"
#: apt-pkg/pkgcache.cc
msgid "Obsoletes"
@@ -1428,9 +1429,9 @@ msgstr "Η cache έχει ασύμβατο σύστημα απόδοσης έκ
#. TRANSLATOR: The first placeholder is a package name,
#. the other two should be copied verbatim as they include debug info
#: apt-pkg/pkgcachegen.cc
-#, fuzzy, c-format
+#, c-format
msgid "Error occurred while processing %s (%s%d)"
-msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (FindPkg)"
+msgstr "Προέκυψε σφάλμα κατά την επεξεργασία του %s (%s%d)"
#: apt-pkg/pkgcachegen.cc
msgid "Wow, you exceeded the number of package names this APT is capable of."
@@ -1454,7 +1455,7 @@ msgstr ""
#: apt-pkg/pkgcachegen.cc
msgid "Reading package lists"
-msgstr "Ανάγνωση Λιστών Πακέτων"
+msgstr "Ανάγνωση λιστών πακέτων"
#: apt-pkg/pkgcachegen.cc
msgid "IO Error saving source cache"
@@ -1473,9 +1474,9 @@ msgid ""
msgstr ""
#: apt-pkg/policy.cc
-#, fuzzy, c-format
+#, c-format
msgid "Invalid record in the preferences file %s, no Package header"
-msgstr "Μη έγκυρη εγγραφή στο αρχείο προτιμήσεων, καμία επικεφαλίδα Package"
+msgstr "Μη έγκυρη εγγραφή στο αρχείο προτιμήσεων %s, καμία επικεφαλίδα Package"
#: apt-pkg/policy.cc
#, c-format
@@ -1500,9 +1501,9 @@ msgstr ""
#. TRANSLATOR: %u is a line number, the first %s is a filename of a file with the extension "second %s" and the third %s is a unique identifier for bugreports
#: apt-pkg/sourcelist.cc
-#, fuzzy, c-format
+#, c-format
msgid "Malformed entry %u in %s file %s (%s)"
-msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+msgstr "Κακογραμμένη καταχώρηση %u στο %s αρχείο %s (%s)"
#: apt-pkg/sourcelist.cc
#, c-format
@@ -1512,17 +1513,17 @@ msgstr "Λάθος μορφή της γραμμής %u στη λίστα πηγ
#: apt-pkg/sourcelist.cc
#, c-format
msgid "Type '%s' is not known on line %u in source list %s"
-msgstr "Ο τύπος '%s' στη γραμμή %u στη λίστα πηγών %s είναι άγνωστος "
+msgstr "Ο τύπος '%s' στη γραμμή %u στη λίστα πηγών %s είναι άγνωστος"
#: apt-pkg/sourcelist.cc
-#, fuzzy, c-format
+#, c-format
msgid "Malformed stanza %u in source list %s (type)"
msgstr "Λάθος μορφή της γραμμής %u στη λίστα πηγών %s (τύπος)"
#: apt-pkg/sourcelist.cc
-#, fuzzy, c-format
+#, c-format
msgid "Type '%s' is not known on stanza %u in source list %s"
-msgstr "Ο τύπος '%s' στη γραμμή %u στη λίστα πηγών %s είναι άγνωστος "
+msgstr "Ο τύπος '%s' στη γραμμή %u στη λίστα πηγών %s είναι άγνωστος"
#: apt-pkg/sourcelist.cc apt-private/private-install.cc
#, c-format
@@ -1530,10 +1531,8 @@ msgid "Unsupported file %s given on commandline"
msgstr ""
#: apt-pkg/srcrecords.cc
-#, fuzzy
-#| msgid "You must put some 'source' URIs in your sources.list"
msgid "You must put some 'deb-src' URIs in your sources.list"
-msgstr "Πρέπει να τοποθετήσετε μερικά URI 'πηγών' στο sources.list"
+msgstr "Πρέπει να βάλετε μερικά 'deb-src' URI στο sources.list"
#: apt-pkg/tagfile.cc
#, c-format
@@ -1541,13 +1540,12 @@ msgid "Cannot convert %s to integer: out of range"
msgstr ""
#: apt-pkg/update.cc
-#, fuzzy
msgid ""
"Some index files failed to download. They have been ignored, or old ones "
"used instead."
msgstr ""
-"Μερικά αρχεία δεν μεταφορτώθηκαν, αγνοήθηκαν ή χρησιμοποιήθηκαν παλαιότερα "
-"στη θέση τους."
+"Μερικά αρχεία index απέτυχαν να ληφθούν. Είτε αγνοήθηκαν ή χρησιμοποιήθηκαν "
+"παλαιότερα στη θέση τους."
#: apt-pkg/upgrade.cc
msgid "Calculating upgrade"
@@ -1590,15 +1588,15 @@ msgid " [Working]"
msgstr " [Επεξεργασία]"
#: apt-private/acqprogress.cc
-#, fuzzy, c-format
+#, c-format
msgid ""
"Media change: please insert the disc labeled\n"
" '%s'\n"
"in the drive '%s' and press [Enter]\n"
msgstr ""
-"Αλλαγή Μέσου: Παρακαλώ εισάγετε το δίσκο με ετικέτα\n"
+"Αλλαγή μέσου: παρακαλώ εισάγετε το δίσκο με ετικέτα\n"
" '%s'\n"
-"στη συσκευή '%s' και πιέστε enter\n"
+"στον οδηγό '%s' και πιέστε [Enter]\n"
#: apt-private/acqprogress.cc
msgid ""
@@ -1642,22 +1640,22 @@ msgstr ""
#: apt-private/private-cacheset.cc apt-private/private-search.cc
msgid "Sorting"
-msgstr ""
+msgstr "Γίνεται ταξινόμηση"
#: apt-private/private-cacheset.cc
-#, fuzzy, c-format
+#, c-format
msgid "Note, selecting '%s' for task '%s'\n"
-msgstr "Σημείωση, επιλέχτηκε το %s στη θέση του '%s'\n"
+msgstr "Σημείωση, επιλέχτηκε το '%s' για το task '%s'\n"
#: apt-private/private-cacheset.cc
-#, fuzzy, c-format
+#, c-format
msgid "Note, selecting '%s' for glob '%s'\n"
-msgstr "Σημείωση, επιλέχτηκε το %s στη θέση του '%s'\n"
+msgstr "Σημείωση, επιλέχτηκε το '%s' για το glob '%s'\n"
#: apt-private/private-cacheset.cc
-#, fuzzy, c-format
+#, c-format
msgid "Note, selecting '%s' for regex '%s'\n"
-msgstr "Σημείωση, επιλέχτηκε το %s στη θέση του '%s'\n"
+msgstr "Σημείωση, επιλέχτηκε το '%s' για το regex '%s'\n"
#: apt-private/private-cacheset.cc
#, c-format
@@ -1665,13 +1663,12 @@ msgid "Package %s is a virtual package provided by:\n"
msgstr "Το πακέτο %s είναι εικονικό και παρέχεται από τα:\n"
#: apt-private/private-cacheset.cc
-#, fuzzy
msgid " [Installed]"
msgstr " [Εγκατεστημένα]"
#: apt-private/private-cacheset.cc
msgid " [Not candidate version]"
-msgstr "[Μγ Υποψήφια Εκδόση]"
+msgstr " [Μη υποψήφια έκδοση]"
#: apt-private/private-cacheset.cc
msgid "You should explicitly select one to install."
@@ -1722,12 +1719,13 @@ msgstr "Σημείωση, επιλέχθηκε το %s αντί του %s\n"
#: apt-private/private-cmndline.cc
msgid "Most used commands:"
-msgstr ""
+msgstr "Οι πιο συχνές εντολές:"
#: apt-private/private-cmndline.cc
#, c-format
msgid "See %s for more information about the available commands."
msgstr ""
+"Δείτε το %s για περισσότερες πληροφορίες σχετικά με τις διαθέσιμες εντολές."
#: apt-private/private-cmndline.cc
msgid ""
@@ -1750,6 +1748,8 @@ msgid ""
"--force-yes is deprecated, use one of the options starting with --allow "
"instead."
msgstr ""
+"Το --force-yes είναι παρωχημένο, χρησιμοποιήστε τις επιλογές που ξεκινάνε με "
+"--allow."
#: apt-private/private-depends.cc apt-private/private-download.cc
#: apt-private/private-show.cc cmdline/apt-mark.cc
@@ -1758,7 +1758,7 @@ msgstr "Δε βρέθηκαν πακέτα"
#: apt-private/private-download.cc
msgid "WARNING: The following packages cannot be authenticated!"
-msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Τα ακόλουθα πακέτα δεν εξακριβώθηκαν!"
+msgstr "ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Τα ακόλουθα πακέτα δεν επικυρώθηκαν!"
#: apt-private/private-download.cc
msgid "Authentication warning overridden.\n"
@@ -1773,11 +1773,12 @@ msgid "Install these packages without verification?"
msgstr "Εγκατάσταση των πακέτων χωρίς επαλήθευση;"
#: apt-private/private-download.cc
-#, fuzzy
msgid ""
"There were unauthenticated packages and -y was used without --allow-"
"unauthenticated"
-msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes"
+msgstr ""
+"Υπήρχαν μη επικυρωμένα πακέτα και χρησιμοποιήθηκε το -y χωρίς το --allow-"
+"unauthenticated"
#: apt-private/private-download.cc
#, c-format
@@ -1841,22 +1842,24 @@ msgstr ""
"Μερικά πακέτα πρέπει να αφαιρεθούν αλλά η Αφαίρεση είναι απενεργοποιημένη."
#: apt-private/private-install.cc
-#, fuzzy
msgid ""
"Essential packages were removed and -y was used without --allow-remove-"
"essential."
-msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes"
+msgstr ""
+"Αφαιρέθηκαν ουσιώδη πακέτα και χρησιμοποιήθηκε το -y χωρίς το --allow-remove-"
+"essential."
#: apt-private/private-install.cc
-#, fuzzy
msgid "Packages were downgraded and -y was used without --allow-downgrades."
-msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes"
+msgstr "Υπάρχουν προβλήματα και δώσατε -y χωρίς το --force-yes."
#: apt-private/private-install.cc
msgid ""
"Held packages were changed and -y was used without --allow-change-held-"
"packages."
msgstr ""
+"Τα κρατημένα πακέτα άλλαξαν και το -y χρησιμοποιήθηκε χωρίς το --allow-"
+"change-held-packages."
#: apt-private/private-install.cc
msgid "Internal error, Ordering didn't finish"
@@ -1899,7 +1902,8 @@ msgstr "Μετά από αυτή τη λειτουργία, θα ελευθερ
#: apt-private/private-install.cc
msgid "Trivial Only specified but this is not a trivial operation."
-msgstr "Καθορίσατε συνηθισμένο, αλλά αυτή δεν είναι μια συνηθισμένη εργασία"
+msgstr ""
+"Καθορίστηκε μόνο συνηθισμένο, αλλά αυτή δεν είναι μια συνηθισμένη εργασία."
#. TRANSLATOR: This string needs to be typed by the user as a confirmation, so be
#. careful with hard to type or special characters (like non-breaking spaces)
@@ -1959,7 +1963,7 @@ msgstr[1] ""
#: apt-private/private-install.cc
msgid "Note: This is done automatically and on purpose by dpkg."
-msgstr ""
+msgstr "Σημείωση: Αυτό έγινε αυτόματα και με κάποιο σκοπό από το dpkg."
#: apt-private/private-install.cc
msgid "We are not supposed to delete stuff, can't start AutoRemover"
@@ -1989,14 +1993,12 @@ msgstr[1] ""
"Τα ακόλουθα πακέτα εγκαταστάθηκαν αυτόματα και δεν χρειάζονται πλέον:"
#: apt-private/private-install.cc
-#, fuzzy, c-format
+#, c-format
msgid "%lu package was automatically installed and is no longer required.\n"
msgid_plural ""
"%lu packages were automatically installed and are no longer required.\n"
-msgstr[0] ""
-"%lu το ακόλουθο πακέτο εγκαταστάθηκε αυτόματα και δεν χρειάζεται πλέον:"
-msgstr[1] ""
-"%lu τα ακόλουθα πακέτα εγκαταστάθηκαν αυτόματα και δεν χρειάζονται πλέον:"
+msgstr[0] "%lu πακέτο εγκαταστάθηκε αυτόματα και δεν χρειάζεται πλέον.\n"
+msgstr[1] "%lu πακέτα εγκαταστάθηκαν αυτόματα και δεν χρειάζονται πλέον.\n"
#: apt-private/private-install.cc
#, c-format
@@ -2006,7 +2008,6 @@ msgstr[0] "Χρησιμοποιήστε '%s' για να το διαγράψετ
msgstr[1] "Χρησιμοποιήστε '%s' για να τα διαγράψετε."
#: apt-private/private-install.cc
-#, fuzzy
msgid "The following additional packages will be installed:"
msgstr "Τα ακόλουθα επιπλέον πακέτα θα εγκατασταθούν:"
@@ -2039,9 +2040,9 @@ msgstr ""
#. TRANSLATORS: First string is package name, second is version
#: apt-private/private-install.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s is already the newest version (%s).\n"
-msgstr "το %s είναι ήδη η τελευταία έκδοση.\n"
+msgstr "το %s είναι ήδη η τελευταία έκδοση (%s).\n"
#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
#, c-format
@@ -2060,7 +2061,7 @@ msgstr "Επιλέχθηκε η έκδοση %s (%s) για το %s λόγω τ
#: apt-private/private-list.cc
msgid "Listing"
-msgstr ""
+msgstr "Δημιουργία λίστας"
#: apt-private/private-list.cc
#, c-format
@@ -2082,40 +2083,37 @@ msgstr ""
#: apt-private/private-output.cc apt-private/private-show.cc
msgid "unknown"
-msgstr ""
+msgstr "άγνωστο"
#: apt-private/private-output.cc
-#, fuzzy, c-format
+#, c-format
msgid "[installed,upgradable to: %s]"
-msgstr " [Εγκατεστημένα]"
+msgstr "[εγκατεστημένα,αναβαθμίσιμα σε: %s]"
#: apt-private/private-output.cc
-#, fuzzy
msgid "[installed,local]"
-msgstr " [Εγκατεστημένα]"
+msgstr "[εγκατεστημένα,τοπικά]"
#: apt-private/private-output.cc
msgid "[installed,auto-removable]"
-msgstr ""
+msgstr "[εγκατεστημένο,αυτόματα-αφαιρέσιμο]"
#: apt-private/private-output.cc
-#, fuzzy
msgid "[installed,automatic]"
-msgstr " [Εγκατεστημένα]"
+msgstr "[εγκατεστημένα,αυτόματα]"
#: apt-private/private-output.cc
-#, fuzzy
msgid "[installed]"
-msgstr " [Εγκατεστημένα]"
+msgstr "[εγκατεστημένα]"
#: apt-private/private-output.cc
#, c-format
msgid "[upgradable from: %s]"
-msgstr ""
+msgstr "[αναβαθμίσιμο από: %s]"
#: apt-private/private-output.cc
msgid "[residual-config]"
-msgstr ""
+msgstr "[υπολοιπόμενο-config]"
#: apt-private/private-output.cc
#, c-format
@@ -2196,7 +2194,7 @@ msgstr "%lu αναβαθμίστηκαν, %lu νέο εγκατεστημένα,
#: apt-private/private-output.cc
#, c-format
msgid "%lu reinstalled, "
-msgstr "%lu επανεγκατεστημένα,"
+msgstr "%lu επανεγκατεστημένα, "
#: apt-private/private-output.cc
#, c-format
@@ -2232,12 +2230,12 @@ msgstr "[ν/Ο]"
#. TRANSLATOR: "Yes" answer printed for a yes/no question if --assume-yes is set
#: apt-private/private-output.cc
msgid "Y"
-msgstr ""
+msgstr "Y"
#. TRANSLATOR: "No" answer printed for a yes/no question if --assume-no is set
#: apt-private/private-output.cc
msgid "N"
-msgstr ""
+msgstr "Ο"
#: apt-private/private-search.cc
msgid "You must give at least one search pattern"
@@ -2245,7 +2243,7 @@ msgstr "Πρέπει να δώσετε τουλάχιστον ένα μοτίβ
#: apt-private/private-search.cc
msgid "Full Text Search"
-msgstr ""
+msgstr "Αναζήτηση πλήρους κειμένου"
#: apt-private/private-show.cc
#, c-format
@@ -2257,7 +2255,7 @@ msgstr[1] ""
#: apt-private/private-show.cc
msgid "not a real package (virtual)"
-msgstr ""
+msgstr "δεν είναι πραγματικό πακέτο (ιδεατό)"
#: apt-private/private-show.cc
msgid "Package files:"
@@ -2277,7 +2275,7 @@ msgstr "Καθηλωμένα Πακέτα:"
#: apt-private/private-show.cc
#, c-format
msgid "%s -> %s with priority %d\n"
-msgstr ""
+msgstr "%s -> %s με προτεραιότητα %d\n"
#: apt-private/private-show.cc
msgid " Installed: "
@@ -2297,19 +2295,19 @@ msgid " Version table:"
msgstr " Πίνακας Έκδοσης:"
#: apt-private/private-source.cc
-#, fuzzy, c-format
+#, c-format
msgid "Can not find a package for architecture '%s'"
-msgstr "Αδύνατη η εύρεση του πακέτου %s"
+msgstr "Δεν βρέθηκε πακέτο για την αρχιτεκτονική '%s'"
#: apt-private/private-source.cc
-#, fuzzy, c-format
+#, c-format
msgid "Can not find a package '%s' with version '%s'"
-msgstr "Αδύνατη η εύρεση του πακέτου %s"
+msgstr "Δεν βρέθηκε πακέτο '%s' με έκδοση '%s'"
#: apt-private/private-source.cc
-#, fuzzy, c-format
+#, c-format
msgid "Can not find a package '%s' with release '%s'"
-msgstr "Αδύνατη η εύρεση του πακέτου %s"
+msgstr "Δεν βρέθηκε πακέτο '%s' με έκδοση '%s'"
#: apt-private/private-source.cc
#, c-format
@@ -2319,7 +2317,7 @@ msgstr "Επιλογή του %s ώς λίστας πηγαίων πακέτων
#: apt-private/private-source.cc
#, c-format
msgid "Can not find version '%s' of package '%s'"
-msgstr ""
+msgstr "Δεν μπορεί να βρεθεί η έκδοση '%s' του πακέτου '%s'"
#: apt-private/private-source.cc
msgid "Must specify at least one package to fetch source for"
@@ -2428,23 +2426,23 @@ msgid "Note, using directory '%s' to get the build dependencies\n"
msgstr ""
#: apt-private/private-source.cc
-#, fuzzy, c-format
+#, c-format
msgid "Note, using file '%s' to get the build dependencies\n"
-msgstr "Αποτυχία επεξεργασίας εξαρτήσεων χτισίματος"
+msgstr "Σημείωση, χρήση του αρχείου '%s' για λήψη εξαρτήσεων κατασκευής\n"
#: apt-private/private-source.cc
msgid "Failed to process build dependencies"
msgstr "Αποτυχία επεξεργασίας εξαρτήσεων χτισίματος"
#: apt-private/private-sources.cc
-#, fuzzy, c-format
+#, c-format
msgid "Failed to parse %s. Edit again? "
-msgstr "Αποτυχία μετονομασίας του %s σε %s"
+msgstr "Αποτυχία ανάλυσης του %s. Επεξεργασία ξανά; "
#: apt-private/private-sources.cc
#, c-format
msgid "Your '%s' file changed, please run 'apt-get update'.\n"
-msgstr ""
+msgstr "Το αρχείο '%s' άλλαξε, παρακαλώ τρέξτε το 'apt-get update'.\n"
#: apt-private/private-unmet.cc
#, c-format
@@ -2469,16 +2467,20 @@ msgid "%i package can be upgraded. Run 'apt list --upgradable' to see it.\n"
msgid_plural ""
"%i packages can be upgraded. Run 'apt list --upgradable' to see them.\n"
msgstr[0] ""
+"%i πακέτο μπορεί να αναβαθμιστεί. Τρέξτε 'apt list --upgradable' για να το "
+"δείτε.\n"
msgstr[1] ""
+"%i πακέτα μπορούν να αναβαθμιστούν. Τρέξτε 'apt list --upgradable' για να τα "
+"δείτε.\n"
#: apt-private/private-update.cc
msgid "All packages are up to date."
-msgstr ""
+msgstr "Όλα τα πακέτα είναι ενημερωμένα."
#: cmdline/apt-cache.cc cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s does not take any arguments"
-msgstr "Η εντολή update δεν παίρνει ορίσματα"
+msgstr "%s δεν παίρνει ορίσματα"
#: cmdline/apt-cache.cc
msgid "Total package names: "
@@ -2506,7 +2508,7 @@ msgstr " Μικτά Εικονικά Πακέτα: "
#: cmdline/apt-cache.cc
msgid " Missing: "
-msgstr "Αγνοούμενα: "
+msgstr " Αγνοούμενα: "
#: cmdline/apt-cache.cc
msgid "Total distinct versions: "
@@ -2547,6 +2549,7 @@ msgstr "Συνολικός Καταμετρημένος Χώρος: "
#: cmdline/apt-cache.cc
msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
msgstr ""
+"Αυτή η εντολή είναι παρωχημένη. Παρακαλώ χρησιμοποιήστε 'apt-mark showauto'."
#: cmdline/apt-cache.cc
msgid ""
@@ -2595,9 +2598,8 @@ msgstr ""
"Παρακαλώ δώστε ένα όνομα για αυτόν τον δίσκο, όπως 'Debian 5.0.3 Disk 1'"
#: cmdline/apt-cdrom.cc
-#, fuzzy
msgid "Please insert a Disc in the drive and press [Enter]"
-msgstr "Παρακαλώ εισάγετε το δίσκο στη συσκευή και πατήστε enter"
+msgstr "Παρακαλώ εισάγετε δίσκο στον οδηγό και πατήστε [Enter}"
#: cmdline/apt-cdrom.cc
#, c-format
@@ -2630,7 +2632,6 @@ msgid "Arguments not in pairs"
msgstr "Τα ορίσματα δεν είναι σε ζεύγη"
#: cmdline/apt-config.cc
-#, fuzzy
msgid ""
"Usage: apt-config [options] command\n"
"\n"
@@ -2639,8 +2640,10 @@ msgid ""
msgstr ""
"Χρήση: apt-config [επιλογές] εντολή\n"
"\n"
-"το apt-config είναι ένα απλό εργαλείο για την ανάγνωση του αρχείου ρυθμίσεων "
-"APT\n"
+"το apt-config είναι μια διεπαφή στις προσαρμοσμένες ρυθμίσεις που "
+"χρησιμοποιούνται από όλα\n"
+"τα εργαλεία APT, με κύριο σκοπό την αποσφαλμάτωση και την δημιουργία "
+"σεναρίων κελύφους.\n"
#: cmdline/apt-config.cc
msgid "get configuration values via shell evaluation"
@@ -2659,7 +2662,6 @@ msgid ""
msgstr ""
#: cmdline/apt-extracttemplates.cc
-#, fuzzy
msgid ""
"Usage: apt-extracttemplates file1 [file2 ...]\n"
"\n"
@@ -2669,14 +2671,9 @@ msgid ""
msgstr ""
"Χρήση: apt-extracttemplates αρχείο1 [αρχείο2 ...]\n"
"\n"
-"το apt-extracttemplates είναι ένα βοήθημα για να εξάγετε ρυθμίσεις \n"
-"και πρότυπα από πακέτα debian\n"
-"\n"
-"Επιλογές:\n"
-" -h Το παρόν κείμενο βοήθειας\n"
-" -t Καθορισμός προσωρινού καταλόγου\n"
-" -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
-" -o=? Καθορισμός αυθαίρετης επιλογής παραμέτρου, πχ -o dir::cache=/tmp\n"
+"το apt-extracttemplates χρησιμοποιείται για να εξάγετε αρχεία προτύπων\n"
+"και ρυθμίσεις από πακέτα debian. Χρησιμοποιείται κυρίως από το debconf(1)\n"
+"για προτροπή ερωτήσεων προσαρμογής πριν την εγκατάσταση πακέτων.\n"
#: cmdline/apt-extracttemplates.cc
msgid "Cannot get debconf version. Is debconf installed?"
@@ -2709,7 +2706,6 @@ msgid "Supported modules:"
msgstr "Υποστηριζόμενοι Οδηγοί:"
#: cmdline/apt-get.cc
-#, fuzzy
msgid ""
"Usage: apt-get [options] command\n"
" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
@@ -2724,9 +2720,10 @@ msgstr ""
" apt-get [παράμετροι] install|remove pkg1 [pkg2 ...]\n"
" apt-get [παράμετροι] source pkg1 [pkg2 ...]\n"
"\n"
-"η apt-get είναι μια απλή διασύνδεση για τη μεταφόρτωση και την\n"
-"εγκατάσταση πακέτων. Οι πιο συχνές εντολές είναι η update\n"
-"και η install.\n"
+"η apt-get είναι μια διεπαφή της γραμμής εντολών για την ανάκτηση\n"
+"πακέτων και πληροφοριών σχετικά με αυτά, από πιστοποιημένες πηγές\n"
+"και για εγκατάσταση, αναβάθμιση και αφαίρεση πακέτων μαζί με τις\n"
+"εξαρτήσεις τους.\n"
#: cmdline/apt-get.cc
msgid "Retrieve new lists of packages"
@@ -2741,10 +2738,8 @@ msgid "Install new packages (pkg is libc6 not libc6.deb)"
msgstr "Εγκατάσταση νέων πακέτων (χωρίς την επέκταση .deb)"
#: cmdline/apt-get.cc
-#, fuzzy
-#| msgid "Install new packages (pkg is libc6 not libc6.deb)"
msgid "Reinstall packages (pkg is libc6 not libc6.deb)"
-msgstr "Εγκατάσταση νέων πακέτων (χωρίς την επέκταση .deb)"
+msgstr "Επανεγκατάσταση πακέτων (το pkg είναι libc6 όχι libc6.deb)"
#: cmdline/apt-get.cc
msgid "Remove packages"
@@ -2752,12 +2747,11 @@ msgstr "Αφαίρεση πακέτων"
#: cmdline/apt-get.cc
msgid "Remove packages and config files"
-msgstr ""
+msgstr "Αφαίρεση πακέτων και αρχείων ρυθμίσεων"
#: cmdline/apt-get.cc cmdline/apt.cc
-#, fuzzy
msgid "Remove automatically all unused packages"
-msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+msgstr "Αυτόματη αφαίρεση όλων των μη χρησιμοποιούμενων πακέτων"
#: cmdline/apt-get.cc
msgid "Distribution upgrade, see apt-get(8)"
@@ -2772,10 +2766,8 @@ msgid "Configure build-dependencies for source packages"
msgstr "Ρύθμιση εξαρτήσεων χτισίματος για πακέτα πηγαίου κώδικα"
#: cmdline/apt-get.cc
-#, fuzzy
-#| msgid "Building dependency tree"
msgid "Satisfy dependency strings"
-msgstr "Κατασκευή Δένδρου Εξαρτήσεων"
+msgstr "Εκπλήρωση των συμβολοσειρών εξαρτήσεων"
#: cmdline/apt-get.cc
msgid "Erase downloaded archive files"
@@ -2795,31 +2787,28 @@ msgstr "Μεταφόρτωση πακέτων πηγαίου κώδικα"
#: cmdline/apt-get.cc
msgid "Download the binary package into the current directory"
-msgstr ""
+msgstr "Λήψη του δυαδικού πακέτου μέσα στον τρέχοντα κατάλογο"
#: cmdline/apt-get.cc
msgid "Download and display the changelog for the given package"
-msgstr ""
+msgstr "Λήψη και εμφάνιση του changelog για το δοθέν πακέτο"
#: cmdline/apt-helper.cc
msgid "Need one URL as argument"
-msgstr ""
+msgstr "Χρειάζεται ένα URL ως παράμετρο"
#: cmdline/apt-helper.cc
-#, fuzzy
msgid "Must specify at least one pair url/filename"
-msgstr ""
-"Θα πρέπει να καθορίσετε τουλάχιστον ένα πακέτο για να μεταφορτώσετε τον "
-"κωδικάτου"
+msgstr "Πρέπει να προσδιορίσετε τουλάχιστον ένα ζεύγος url/αρχείου"
#: cmdline/apt-helper.cc
msgid "Download Failed"
-msgstr ""
+msgstr "Η λήψη απέτυχε"
#: cmdline/apt-helper.cc
#, c-format
msgid "GetSrvRec failed for %s"
-msgstr ""
+msgstr "Το GetSrvRec απέτυχε για το %s"
#: cmdline/apt-helper.cc
msgid ""
@@ -2849,7 +2838,7 @@ msgstr ""
#: cmdline/apt-helper.cc
msgid "wait for system to be online"
-msgstr ""
+msgstr "αναμονή μέχρι το σύστημα να είναι online"
#: cmdline/apt-helper.cc
msgid "drop privileges before running given command"
@@ -2857,10 +2846,9 @@ msgstr ""
#: cmdline/apt-helper.cc
msgid "analyse a pattern"
-msgstr ""
+msgstr "ανάλυση μοτίβου"
#: cmdline/apt-internal-planner.cc
-#, fuzzy
msgid ""
"Usage: apt-internal-planner\n"
"\n"
@@ -2868,19 +2856,13 @@ msgid ""
"installation planner for the APT family like an external one,\n"
"for debugging or the like.\n"
msgstr ""
-"Χρήση: apt-extracttemplates αρχείο1 [αρχείο2 ...]\n"
+"Χρήση: apt-internal-planner\n"
"\n"
-"το apt-extracttemplates είναι ένα βοήθημα για να εξάγετε ρυθμίσεις \n"
-"και πρότυπα από πακέτα debian\n"
-"\n"
-"Επιλογές:\n"
-" -h Το παρόν κείμενο βοήθειας\n"
-" -t Καθορισμός προσωρινού καταλόγου\n"
-" -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
-" -o=? Καθορισμός αυθαίρετης επιλογής παραμέτρου, πχ -o dir::cache=/tmp\n"
+"το apt-internal-planner είναι μια διεπαφή για χρήση του τρέχοντος\n"
+"installation planner για την οικογένεια APT, όπως ένα εξωτερικό,\n"
+"για αποσφαλμάτωση και τα σχετικά.\n"
#: cmdline/apt-internal-solver.cc
-#, fuzzy
msgid ""
"Usage: apt-internal-solver\n"
"\n"
@@ -2888,65 +2870,58 @@ msgid ""
"resolver for the APT family like an external one, for debugging or\n"
"the like.\n"
msgstr ""
-"Χρήση: apt-extracttemplates αρχείο1 [αρχείο2 ...]\n"
+"Χρήση: apt-internal-solver\n"
"\n"
-"το apt-extracttemplates είναι ένα βοήθημα για να εξάγετε ρυθμίσεις \n"
-"και πρότυπα από πακέτα debian\n"
-"\n"
-"Επιλογές:\n"
-" -h Το παρόν κείμενο βοήθειας\n"
-" -t Καθορισμός προσωρινού καταλόγου\n"
-" -c=? Ανάγνωση αυτού του αρχείου ρυθμίσεων\n"
-" -o=? Καθορισμός αυθαίρετης επιλογής παραμέτρου, πχ -o dir::cache=/tmp\n"
+"Το apt-internal-solver είναι μια διεπαφή για χρήση του τρέχοντος εσωτερικού\n"
+"resolver για την οικογένεια APT, όπως ένα εξωτερικό, για αποσφαλμάτωση ή\n"
+"σχετικά.\n"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s can not be marked as it is not installed.\n"
-msgstr "αλλά δεν είναι εγκατεστημένο"
+msgstr "Το %s δεν μπορεί να σημειωθεί καθώς δεν είναι εγκατεστημένο.\n"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s was already set to manually installed.\n"
-msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+msgstr "Το %s έχει ήδη ορισθεί ως εγκατεστημένο χειρωνακτικά.\n"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s was already set to automatically installed.\n"
-msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+msgstr "Το %s έχει ήδη ορισθεί να εγκατασταθεί αυτόματα.\n"
#: cmdline/apt-mark.cc
msgid "No changes necessary"
msgstr ""
#: cmdline/apt-mark.cc
-#, fuzzy
-#| msgid "The following NEW packages will be installed:"
msgid "The following packages will be marked as automatically installed:"
-msgstr "Τα ακόλουθα ΝΕΑ πακέτα θα εγκατασταθούν:"
+msgstr "Τα ακόλουθα πακέτα θα σημειωθούν ως αυτόματα εγκατεστημένα:"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s was already set on hold.\n"
-msgstr "το %s είναι ήδη η τελευταία έκδοση.\n"
+msgstr "το %s ήταν ήδη ορισμένο σε κράτηση.\n"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s was already not hold.\n"
-msgstr "το %s είναι ήδη η τελευταία έκδοση.\n"
+msgstr "το %s ήταν ήδη χωρίς κράτηση.\n"
#: cmdline/apt-mark.cc
msgid "Executing dpkg failed. Are you root?"
-msgstr ""
+msgstr "Η εκτέλεση του dpkg απέτυχε. Είστε root;"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "%s set on hold.\n"
-msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+msgstr "το %s ορίστηκε σε κράτηση.\n"
#: cmdline/apt-mark.cc
-#, fuzzy, c-format
+#, c-format
msgid "Canceled hold on %s.\n"
-msgstr "Αποτυχία ανοίγματος του %s"
+msgstr "Ακύρωση κράτησης του %s\n"
#: cmdline/apt-mark.cc
#, c-format
@@ -2956,12 +2931,12 @@ msgstr ""
#: cmdline/apt-mark.cc
#, c-format
msgid "Selected %s for removal.\n"
-msgstr ""
+msgstr "Επιλέχθηκαν %s για αφαίρεση.\n"
#: cmdline/apt-mark.cc
#, c-format
msgid "Selected %s for installation.\n"
-msgstr ""
+msgstr "Επιλέχθηκαν %s για εγκατάσταση.\n"
#: cmdline/apt-mark.cc
msgid ""
@@ -2974,19 +2949,17 @@ msgid ""
msgstr ""
#: cmdline/apt-mark.cc
-#, fuzzy
msgid "Mark the given packages as automatically installed"
-msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+msgstr "Σημείωση των δοθέντων πακέτων ως αυτόματα εγκατεστημένων"
#: cmdline/apt-mark.cc
-#, fuzzy
msgid "Mark the given packages as manually installed"
-msgstr "Ελέγξτε αν είναι εγκαταστημένο το πακέτο 'dpkg-dev'.\n"
+msgstr "Σημείωση των δοθέντων πακέτων ως εγκατεστημένων χειρονακτικά"
#: cmdline/apt-mark.cc
-#, fuzzy
msgid "Mark all dependencies of meta packages as automatically installed."
-msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+msgstr ""
+"Σημείωση όλων των εξαρτήσεων των μετα-πακέτων ως εγκατεστημένα αυτόματα."
#: cmdline/apt-mark.cc
msgid "Mark a package as held back"
@@ -2997,18 +2970,16 @@ msgid "Unset a package set as held back"
msgstr ""
#: cmdline/apt-mark.cc
-#, fuzzy
msgid "Print the list of automatically installed packages"
-msgstr "το %s έχει εγκατασταθεί αυτόματα\n"
+msgstr "Εκτύπωση της λίστας των αυτόματα εγκατεστημένων πακέτων"
#: cmdline/apt-mark.cc
-#, fuzzy
msgid "Print the list of manually installed packages"
-msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+msgstr "Εκτύπωση της λίστας των χειρωνακτικά εγκαταστημένων πακέτων"
#: cmdline/apt-mark.cc
msgid "Print the list of packages on hold"
-msgstr ""
+msgstr "Εκτύπωση της λίστας των πακέτων υπό κράτηση"
#: cmdline/apt-sortpkgs.cc
msgid "Unknown package record!"
@@ -3037,81 +3008,71 @@ msgstr ""
#. query
#: cmdline/apt.cc
msgid "list packages based on package names"
-msgstr ""
+msgstr "λίστα πακέτων βασισμένη στα ονόματα πακέτων"
#: cmdline/apt.cc
-#, fuzzy
msgid "search in package descriptions"
-msgstr "Ανάγνωση Λιστών Πακέτων"
+msgstr "αναζήτηση στις περιγραφές των πακέτων"
#: cmdline/apt.cc
msgid "show package details"
-msgstr ""
+msgstr "εμφάνιση λεπτομερειών πακέτου"
#. package stuff
#: cmdline/apt.cc
-#, fuzzy
msgid "install packages"
-msgstr "Καθηλωμένα Πακέτα:"
+msgstr "εγκατάσταση πακέτων"
#: cmdline/apt.cc
-#, fuzzy
msgid "reinstall packages"
-msgstr "Καθηλωμένα Πακέτα:"
+msgstr "επανεγκατάσταση πακέτων"
#: cmdline/apt.cc
-#, fuzzy
msgid "remove packages"
-msgstr "Χαλασμένα πακέτα"
+msgstr "αφαίρεση πακέτων"
#. system wide stuff
#: cmdline/apt.cc
-#, fuzzy
msgid "update list of available packages"
-msgstr "το %s έχει εγκατασταθεί με το χέρι\n"
+msgstr "ενημέρωση λίστας διαθέσιμων πακέτων"
#: cmdline/apt.cc
msgid "upgrade the system by installing/upgrading packages"
-msgstr ""
+msgstr "αναβάθμιση του συστήματος με εγκατάσταση/αναβάθμιση πακέτων"
#: cmdline/apt.cc
msgid "upgrade the system by removing/installing/upgrading packages"
msgstr ""
+"αναβάθμιση του συστήματος με την αφαίρεση/εγκατάσταση/αναβάθμιση πακέτων"
#. misc
#: cmdline/apt.cc
-#, fuzzy
msgid "edit the source information file"
-msgstr "Ανάγνωση περιγραφής της τρέχουσας κατάσταση"
+msgstr "επεξεργασία του αρχείου με τις πληροφορίες πηγής"
#: cmdline/apt.cc
-#, fuzzy
-#| msgid "Failed to satisfy %s dependency for %s: %s"
msgid "satisfy dependency strings"
-msgstr "Αποτυχία ικανοποίησης %s εξάρτησης για το %s: %s"
+msgstr "εκπλήρωση των συμβολοσειρών εξαρτήσεων"
#: dselect/install
msgid "Bad default setting!"
msgstr "Κακή προκαθορισμένη ρύθμιση!"
#: dselect/install dselect/update
-#, fuzzy
msgid "Press [Enter] to continue."
-msgstr "Πιέστε enter για συνέχεια."
+msgstr "Πατήστε [Enter] για συνέχεια."
#: dselect/install
msgid "Do you want to erase any previously downloaded .deb files?"
msgstr "Επιθυμείτε τη διαγραφή ήδη μεταφορτωμένων αρχείων .deb;"
#: dselect/install
-#, fuzzy
msgid "Some errors occurred while unpacking. Packages that were installed"
-msgstr "Προέκυψανσφάλματα κατά την αποσυμπίεση. Θα ρυθμίσω τα "
+msgstr "Προέκυψαν σφάλματα κατά την αποσυμπίεση. Τα πακέτα που εγκαταστάθηκαν"
#: dselect/install
-#, fuzzy
msgid "will be configured. This may result in duplicate errors"
-msgstr "πακέτα που εγκαταστάθηκαν. Αυτό μπορεί να παράγει διπλά λάθη"
+msgstr "θα ρυθμιστούν. Αυτό μπορεί να έχει ως αποτέλεσμα διπλότυπα σφάλματα"
#: dselect/install
msgid "or errors caused by missing dependencies. This is OK, only the errors"
@@ -3256,13 +3217,12 @@ msgid "DB is old, attempting to upgrade %s"
msgstr "Η βάση δεν είναι ενημερωμένη, γίνεται προσπάθεια να αναβαθμιστεί το %s"
#: ftparchive/cachedb.cc
-#, fuzzy
msgid ""
"DB format is invalid. If you upgraded from an older version of apt, please "
"remove and re-create the database."
msgstr ""
-"Το φορμά της βάσης δεν είναι έγκυρο. Εάν αναβαθμίσατε το apt σε νεότερη "
-"έκδοση, παρακαλώ αφαιρέστε και δημιουργήστε τη βάση εκ νέου."
+"Η μορφή της βάσης δεν είναι έγκυρη. Εάν αναβαθμίσατε το apt από παλαιότερη "
+"έκδοση, παρακαλώ αφαιρέστε και ξαναδημιουργήστε τη βάση δεδομένων."
#: ftparchive/cachedb.cc
#, c-format
@@ -3270,9 +3230,8 @@ msgid "Unable to open DB file %s: %s"
msgstr "Το άνοιγμά του αρχείου της βάσης %s: %s απέτυχε"
#: ftparchive/cachedb.cc
-#, fuzzy
msgid "Failed to read .dsc"
-msgstr "Αποτυχία ανάγνωσης του %s"
+msgstr "Αποτυχία ανάγνωσης .dsc"
#: ftparchive/cachedb.cc
msgid "Archive has no control record"
@@ -3334,9 +3293,9 @@ msgstr "Αδύνατο το άνοιγμα του %s"
#. skip spaces
#. find end of word
#: ftparchive/override.cc
-#, fuzzy, c-format
+#, c-format
msgid "Malformed override %s line %llu (%s)"
-msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+msgstr "Κακογραμμένη παράκαμψη %s γραμμή %llu (%s)"
#: ftparchive/override.cc
#, c-format
@@ -3344,19 +3303,19 @@ msgid "Failed to read the override file %s"
msgstr "Αποτυχία ανάγνωσης του αρχείου παράκαμψης %s"
#: ftparchive/override.cc
-#, fuzzy, c-format
+#, c-format
msgid "Malformed override %s line %llu #1"
-msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #1"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %llu #1"
#: ftparchive/override.cc
-#, fuzzy, c-format
+#, c-format
msgid "Malformed override %s line %llu #2"
-msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #2"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %llu #2"
#: ftparchive/override.cc
-#, fuzzy, c-format
+#, c-format
msgid "Malformed override %s line %llu #3"
-msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %lu #3"
+msgstr "Κακογραμμένη παρακαμπτήρια %s γραμμή %llu #3"
#: ftparchive/writer.cc
#, c-format
@@ -3378,7 +3337,7 @@ msgstr "W: "
#: ftparchive/writer.cc
msgid "E: Errors apply to file "
-msgstr "E: Σφάλματα στο αρχείο"
+msgstr "E: Σφάλματα στο αρχείο "
#: ftparchive/writer.cc
#, c-format
@@ -3397,12 +3356,12 @@ msgstr "Αποτυχία ανοίγματος του %s"
#: ftparchive/writer.cc
#, c-format
msgid " DeLink %s [%s]\n"
-msgstr "Αποσύνδεση %s [%s]\n"
+msgstr " Αποσύνδεση %s [%s]\n"
#: ftparchive/writer.cc
#, c-format
msgid "*** Failed to link %s to %s"
-msgstr " Αποτυχία σύνδεσης του %s με το %s"
+msgstr "Αποτυχία σύνδεσης του %s με το %s"
#: ftparchive/writer.cc
#, c-format
@@ -3527,10 +3486,9 @@ msgid "[IP: %s %s]"
msgstr "[IP: %s %s]"
#: methods/connect.cc
-#, fuzzy, c-format
-#| msgid "Connecting to %s (%s)"
+#, c-format
msgid "Connected to %s (%s)"
-msgstr "Σύνδεση στο %s (%s)"
+msgstr "Συνδέθηκε στο %s (%s)"
#: methods/connect.cc methods/http.cc
#, c-format
@@ -3579,19 +3537,19 @@ msgid "Temporary failure resolving '%s'"
msgstr "Προσωρινή αποτυχία στην εύρεση του '%s'"
#: methods/connect.cc
-#, fuzzy, c-format
+#, c-format
msgid "System error resolving '%s:%s'"
-msgstr "Κάτι παράξενο συνέβη κατά την εύρεση του '%s:%s' (%i)"
+msgstr "Σφάλμα συστήματος κατά την επίλυση '%s:%s'"
#: methods/connect.cc
-#, fuzzy, c-format
+#, c-format
msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
-msgstr "Κάτι παράξενο συνέβη κατά την εύρεση του '%s:%s' (%i)"
+msgstr "Κάτι παράξενο συνέβη κατά την επίλυση του '%s:%s' (%i - %s)"
#: methods/connect.cc
-#, fuzzy, c-format
+#, c-format
msgid "Unable to connect to %s:%s:"
-msgstr "Αδύνατη η σύνδεση στο %s %s:"
+msgstr "Αδύνατη η σύνδεση στο %s:%s:"
#: methods/copy.cc
msgid "Failed to stat"
@@ -3635,7 +3593,7 @@ msgid ""
"is empty."
msgstr ""
"Ο διαμεσολαβητής έχει οριστεί αλλά χωρίς σενάριο εισόδου, το Acquire::ftp::"
-"ProxyLogin είναι άδειο"
+"ProxyLogin είναι άδειο."
#: methods/ftp.cc
#, c-format
@@ -3677,7 +3635,7 @@ msgstr "Αδύνατη η σύνδεση σε παθητική υποδοχή (s
#: methods/ftp.cc
msgid "getaddrinfo was unable to get a listening socket"
-msgstr "Το getaddrinfo ήταν αδύνατο να δέσμευση υποδοχή παρακολούθησης"
+msgstr "Το getaddrinfo ήταν αδύνατο να δεσμεύσει υποδοχή παρακολούθησης"
#: methods/ftp.cc
msgid "Could not bind a socket"
@@ -3738,7 +3696,7 @@ msgstr "Επερώτηση"
#: methods/ftp.cc
msgid "Unable to invoke "
-msgstr "Αδύνατη η εκτέλεση"
+msgstr "Αδύνατη η επίκληση "
#. TRANSLATORS: %s is a single techy word like 'NODATA'
#: methods/gpgv.cc
@@ -3759,10 +3717,9 @@ msgstr ""
"αποτυπώματος?!"
#: methods/gpgv.cc
-#, fuzzy
msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
msgstr ""
-"Αδυναμία εκτέλεσης του '%s' για την επαλήθευση της υπογραφής (είναι "
+"Δεν μπόρεσε να εκτελεστεί το 'apt-key' για επιβεβαίωση της υπογραφής (είναι "
"εγκατεστημένο το gnupg;)"
#: methods/gpgv.cc
diff --git a/test/integration/framework b/test/integration/framework
index 20173da23..3973ad863 100644
--- a/test/integration/framework
+++ b/test/integration/framework
@@ -504,7 +504,7 @@ EOF
unset http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy
# Make dpkg inherit testing path
- echo 'DPkg::Path "";\n' >> aptconfig.conf
+ echo 'DPkg::Path "";' >> aptconfig.conf
# Make gcov shut up
export GCOV_ERROR_FILE=/dev/null
diff --git a/test/integration/test-kernel-helper-autoremove b/test/integration/test-kernel-helper-autoremove
index 9cc978645..8dac44b93 100755
--- a/test/integration/test-kernel-helper-autoremove
+++ b/test/integration/test-kernel-helper-autoremove
@@ -38,9 +38,8 @@ testprotected() {
testsuccess --nomsg test -e rootdir/etc/apt/apt.conf.d/01autoremove-kernels
testfilestats 'rootdir/etc/apt/apt.conf.d/01autoremove-kernels' '%U:%G:%a' '=' "${TEST_DEFAULT_USER}:${TEST_DEFAULT_GROUP}:444"
- msgtest 'Check kernel autoremoval protection list' 'can be dumped'
- testsuccess --nomsg aptconfig dump --no-empty --format '%v%n' 'APT::NeverAutoRemove'
- cp rootdir/tmp/testsuccess.output protected.list
+ testsuccess --nomsg apt -o Debug::PkgAutoRemove=1 autoremove -s
+ grep "Kernel protection regex" rootdir/tmp/testsuccess.output | cut -f2- -d: | tr '|' '\n' | sed 's/\s*//g' | sort -u > protected.list
msgtest 'Check kernel autoremoval protection list' 'can be parsed'
testfailure --nomsg grep '^[A-Z]: ' protected.list
@@ -71,7 +70,7 @@ The following packages were automatically installed and are no longer required:
${CURRENTKERNEL}-686-pae:i386 (5-1)
${CURRENTKERNEL}-dbg (5-1)
Use '$AUTOREMOVE' to remove them.
-0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -sV
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -sV -o APT::Protect-Kernels=0
testsuccessequal "Reading package lists...
Building dependency tree...
Reading state information...
@@ -85,13 +84,13 @@ The following packages were automatically installed and are no longer required:
${CURRENTKERNEL}-dbg (5-1)
${CURRENTKERNEL}-rt (5-1)
Use '$AUTOREMOVE' to remove them.
-0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -sV --ignore-hold
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -sV --ignore-hold -o APT::Protect-Kernels=0
testequal "Reading package lists...
Building dependency tree...
Reading state information...
7 packages were automatically installed and are no longer required.
Use '$AUTOREMOVE' to remove them.
-0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small
+0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded." aptget install -s -o APT::Get::HideAutoRemove=small -o APT::Protect-Kernels=0
testequal "Reading package lists...
Building dependency tree...
Reading state information...
@@ -110,7 +109,7 @@ Remv linux-image-100.0.0-1-generic [100.0.0-1]
Remv $CURRENTKERNEL [5-1]
Remv ${CURRENTKERNEL}+variant [5-1]
Remv ${CURRENTKERNEL}-686-pae:i386 [5-1]
-Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -sV
+Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -sV -o APT::Protect-Kernels=0
msgmsg "run without parameter"
testprotected
@@ -168,7 +167,7 @@ Remv ${CURRENTKERNEL}-dbg [5-1]" aptget autoremove -s
unset COLUMNS
# rt kernel was put on hold while the protected list was generated
-testsuccess aptmark unhold "${CURRENTKERNEL}-rt"
+testsuccess aptmark hold "${CURRENTKERNEL}-rt"
export COLUMNS=99999
testsuccessequal "Reading package lists...
Building dependency tree...