summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore8
-rw-r--r--.gitlab-ci.yml33
-rw-r--r--apt-pkg/acquire-item.cc263
-rw-r--r--apt-pkg/acquire-item.h39
-rw-r--r--apt-pkg/acquire-worker.cc84
-rw-r--r--apt-pkg/depcache.cc33
-rw-r--r--apt-pkg/depcache.h6
-rw-r--r--debian/NEWS2
-rw-r--r--methods/connect.cc7
-rw-r--r--po/ru.po836
-rwxr-xr-xtest/integration/test-apt-get-autoremove25
-rwxr-xr-xtest/integration/test-bug-611729-mark-as-manual2
-rwxr-xr-xtest/integration/test-disappearing-packages2
-rwxr-xr-xtest/integration/test-partial-file-support2
-rwxr-xr-xtest/integration/test-pdiff-usage5
15 files changed, 716 insertions, 631 deletions
diff --git a/.gitignore b/.gitignore
index b27957646..7ca0cb136 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,8 @@ cmake_install.cmake
install_manifest.txt
CTestTestfile.cmake
Testing/
+CMakeDoxyfile.in
+CMakeDoxygenDefaults.cmake
gtest-*
@@ -60,6 +62,11 @@ docbook-text-style.xsl
**/methods/http
**/methods/https
**/methods/mirror
+**/methods/mirror+copy
+**/methods/mirror+file
+**/methods/mirror+ftp
+**/methods/mirror+http
+**/methods/mirror+https
**/methods/ftp
**/methods/rred
**/methods/rsh
@@ -89,6 +96,7 @@ doxygen/
*.[1-9]
**/doc/*/*.xml
**/doc/*/*.dbk
+**/doc/*/apt.ent
!/doc/examples/
# Backend files
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 000000000..0ebff095c
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,33 @@
+image: debian:testing
+
+test as root:
+ stage: test
+ script:
+ - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000
+ - rm -f /etc/dpkg/dpkg.cfg.d/excludes
+ - apt-get update
+ - apt-get install -qq build-essential expect gcovr sudo
+ - chmod -R o+rwX $PWD
+ - ./prepare-release travis-ci
+ - sudo -u travis mkdir build
+ - sudo -u travis env -C build cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja ..
+ - sudo -u travis ninja -C build
+ - CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
+ - unbuffer ./test/integration/run-tests -q -j 4
+ - gcovr
+
+test as user:
+ stage: test
+ script:
+ - adduser --home /home/travis travis --quiet --disabled-login --gecos "" --uid 1000
+ - rm -f /etc/dpkg/dpkg.cfg.d/excludes
+ - apt-get update
+ - apt-get install -qq build-essential expect gcovr sudo
+ - chmod -R o+rwX $PWD
+ - ./prepare-release travis-ci
+ - sudo -u travis mkdir build
+ - sudo -u travis env -C build cmake -DCMAKE_BUILD_TYPE=Coverage -G Ninja ..
+ - sudo -u travis ninja -C build
+ - sudo -u travis CTEST_OUTPUT_ON_FAILURE=1 ninja -C build test
+ - sudo -u travis unbuffer ./test/integration/run-tests -q -j 4
+ - sudo -u travis gcovr
diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc
index f5986a260..a366b8981 100644
--- a/apt-pkg/acquire-item.cc
+++ b/apt-pkg/acquire-item.cc
@@ -398,21 +398,66 @@ bool pkgAcqTransactionItem::QueueURI(pkgAcquire::ItemDesc &Item)
Status = StatDone;
return false;
}
+ // this ensures we rewrite only once and only the first step
+ auto const OldBaseURI = Target.Option(IndexTarget::BASE_URI);
+ if (OldBaseURI.empty() || APT::String::Startswith(Item.URI, OldBaseURI) == false)
+ return pkgAcquire::Item::QueueURI(Item);
+ // the given URI is our last resort
+ PushAlternativeURI(std::string(Item.URI), {}, false);
// If we got the InRelease file via a mirror, pick all indexes directly from this mirror, too
- if (TransactionManager->BaseURI.empty() == false && UsedMirror.empty() &&
- URI::SiteOnly(Item.URI) != URI::SiteOnly(TransactionManager->BaseURI))
+ std::string SameMirrorURI;
+ if (TransactionManager->BaseURI.empty() == false && TransactionManager->UsedMirror.empty() == false &&
+ URI::SiteOnly(Item.URI) != URI::SiteOnly(TransactionManager->BaseURI))
{
- // this ensures we rewrite only once and only the first step
- auto const OldBaseURI = Target.Option(IndexTarget::BASE_URI);
- if (OldBaseURI.empty() == false && APT::String::Startswith(Item.URI, OldBaseURI))
+ auto ExtraPath = Item.URI.substr(OldBaseURI.length());
+ auto newURI = flCombine(TransactionManager->BaseURI, std::move(ExtraPath));
+ if (IsGoodAlternativeURI(newURI))
{
- auto const ExtraPath = Item.URI.substr(OldBaseURI.length());
- Item.URI = flCombine(TransactionManager->BaseURI, ExtraPath);
- UsedMirror = TransactionManager->UsedMirror;
- if (Item.Description.find(" ") != string::npos)
- Item.Description.replace(0, Item.Description.find(" "), UsedMirror);
+ SameMirrorURI = std::move(newURI);
+ PushAlternativeURI(std::string(SameMirrorURI), {}, false);
}
}
+ // add URI and by-hash based on it
+ if (AcquireByHash())
+ {
+ // if we use the mirror transport, ask it for by-hash uris
+ // we need to stick to the same mirror only for non-unique filenames
+ auto const sameMirrorException = [&]() {
+ if (Item.URI.find("mirror") == std::string::npos)
+ return false;
+ ::URI uri(Item.URI);
+ return uri.Access == "mirror" || APT::String::Startswith(uri.Access, "mirror+") ||
+ APT::String::Endswith(uri.Access, "+mirror") || uri.Access.find("+mirror+") != std::string::npos;
+ }();
+ if (sameMirrorException)
+ SameMirrorURI.clear();
+ // now add the actual by-hash uris
+ auto const Expected = GetExpectedHashes();
+ auto const TargetHash = Expected.find(nullptr);
+ auto const PushByHashURI = [&](std::string U) {
+ if (unlikely(TargetHash == nullptr))
+ return false;
+ auto const trailing_slash = U.find_last_of("/");
+ if (unlikely(trailing_slash == std::string::npos))
+ return false;
+ auto byhashSuffix = "/by-hash/" + TargetHash->HashType() + "/" + TargetHash->HashValue();
+ U.replace(trailing_slash, U.length() - trailing_slash, std::move(byhashSuffix));
+ PushAlternativeURI(std::move(U), {}, false);
+ return true;
+ };
+ PushByHashURI(Item.URI);
+ if (SameMirrorURI.empty() == false && PushByHashURI(SameMirrorURI) == false)
+ SameMirrorURI.clear();
+ }
+ // the last URI added is the first one tried
+ if (unlikely(PopAlternativeURI(Item.URI) == false))
+ return false;
+ if (SameMirrorURI.empty() == false)
+ {
+ UsedMirror = TransactionManager->UsedMirror;
+ if (Item.Description.find(" ") != string::npos)
+ Item.Description.replace(0, Item.Description.find(" "), UsedMirror);
+ }
return pkgAcquire::Item::QueueURI(Item);
}
/* The transition manager InRelease itself (or its older sisters-in-law
@@ -619,6 +664,26 @@ bool pkgAcqDiffIndex::TransactionState(TransactionStates const state)
return true;
}
/*}}}*/
+// pkgAcqTransactionItem::AcquireByHash and specialisations for child classes /*{{{*/
+bool pkgAcqTransactionItem::AcquireByHash() const
+{
+ if (TransactionManager->MetaIndexParser == nullptr)
+ return false;
+ auto const useByHashConf = Target.Option(IndexTarget::BY_HASH);
+ if (useByHashConf == "force")
+ return true;
+ return StringToBool(useByHashConf) == true && TransactionManager->MetaIndexParser->GetSupportsAcquireByHash();
+}
+// pdiff patches have a unique name already, no need for by-hash
+bool pkgAcqIndexMergeDiffs::AcquireByHash() const
+{
+ return false;
+}
+bool pkgAcqIndexDiffs::AcquireByHash() const
+{
+ return false;
+}
+ /*}}}*/
class APT_HIDDEN NoActionItem : public pkgAcquire::Item /*{{{*/
/* The sole purpose of this class is having an item which does nothing to
@@ -686,11 +751,12 @@ class pkgAcquire::Item::Private
public:
struct AlternateURI
{
- std::string const URI;
+ std::string URI;
std::unordered_map<std::string, std::string> changefields;
AlternateURI(std::string &&u, decltype(changefields) &&cf) : URI(u), changefields(cf) {}
};
std::list<AlternateURI> AlternativeURIs;
+ std::vector<std::string> BadAlternativeSites;
std::vector<std::string> PastRedirections;
std::unordered_map<std::string, std::string> CustomFields;
unsigned int Retries;
@@ -749,14 +815,32 @@ bool pkgAcquire::Item::PopAlternativeURI(std::string &NewURI) /*{{{*/
return true;
}
/*}}}*/
+bool pkgAcquire::Item::IsGoodAlternativeURI(std::string const &AltUri) const/*{{{*/
+{
+ return std::find(d->PastRedirections.cbegin(), d->PastRedirections.cend(), AltUri) == d->PastRedirections.cend() &&
+ std::find(d->BadAlternativeSites.cbegin(), d->BadAlternativeSites.cend(), URI::SiteOnly(AltUri)) == d->BadAlternativeSites.cend();
+}
+ /*}}}*/
void pkgAcquire::Item::PushAlternativeURI(std::string &&NewURI, std::unordered_map<std::string, std::string> &&fields, bool const at_the_back) /*{{{*/
{
+ if (IsGoodAlternativeURI(NewURI) == false)
+ return;
if (at_the_back)
d->AlternativeURIs.emplace_back(std::move(NewURI), std::move(fields));
else
d->AlternativeURIs.emplace_front(std::move(NewURI), std::move(fields));
}
/*}}}*/
+void pkgAcquire::Item::RemoveAlternativeSite(std::string &&OldSite) /*{{{*/
+{
+ d->AlternativeURIs.erase(std::remove_if(d->AlternativeURIs.begin(), d->AlternativeURIs.end(),
+ [&](decltype(*d->AlternativeURIs.cbegin()) AltUri) {
+ return URI::SiteOnly(AltUri.URI) == OldSite;
+ }),
+ d->AlternativeURIs.end());
+ d->BadAlternativeSites.push_back(std::move(OldSite));
+}
+ /*}}}*/
unsigned int &pkgAcquire::Item::ModifyRetries() /*{{{*/
{
return d->Retries;
@@ -1429,7 +1513,6 @@ void pkgAcqMetaClearSig::QueueIndexes(bool const verify) /*{{{*/
std::set<std::string> targetsSeen;
bool const hasReleaseFile = TransactionManager->MetaIndexParser != NULL;
- bool const metaBaseSupportsByHash = hasReleaseFile && TransactionManager->MetaIndexParser->GetSupportsAcquireByHash();
bool hasHashes = true;
auto IndexTargets = TransactionManager->MetaIndexParser->GetIndexTargets();
if (hasReleaseFile && verify == false)
@@ -1565,15 +1648,6 @@ void pkgAcqMetaClearSig::QueueIndexes(bool const verify) /*{{{*/
if (types.empty() == false)
{
std::ostringstream os;
- // add the special compressiontype byhash first if supported
- std::string const useByHashConf = Target.Option(IndexTarget::BY_HASH);
- bool useByHash = false;
- if(useByHashConf == "force")
- useByHash = true;
- else
- useByHash = StringToBool(useByHashConf) == true && metaBaseSupportsByHash;
- if (useByHash == true)
- os << "by-hash ";
std::copy(types.begin(), types.end()-1, std::ostream_iterator<std::string>(os, " "));
os << *types.rbegin();
Target.Options["COMPRESSIONTYPES"] = os.str();
@@ -2219,8 +2293,6 @@ pkgAcqDiffIndex::pkgAcqDiffIndex(pkgAcquire * const Owner,
CompressionExtensions = os.str();
}
}
- if (Target.Option(IndexTarget::COMPRESSIONTYPES).find("by-hash") != std::string::npos)
- CompressionExtensions = "by-hash " + CompressionExtensions;
Init(GetDiffIndexURI(Target), GetDiffIndexFileName(Target.Description), Target.ShortDesc);
if(Debug)
@@ -2231,7 +2303,7 @@ void pkgAcqDiffIndex::QueueOnIMSHit() const /*{{{*/
{
// list cleanup needs to know that this file as well as the already
// present index is ours, so we create an empty diff to save it for us
- new pkgAcqIndexDiffs(Owner, TransactionManager, Target, UsedMirror, Target.URI);
+ new pkgAcqIndexDiffs(Owner, TransactionManager, Target);
}
/*}}}*/
static bool RemoveFileForBootstrapLinking(std::string &ErrorText, std::string const &For, std::string const &Boot)/*{{{*/
@@ -2585,7 +2657,7 @@ bool pkgAcqDiffIndex::ParseDiffIndex(string const &IndexDiffFile) /*{{{*/
/*}}}*/
void pkgAcqDiffIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)/*{{{*/
{
- if (CommonFailed(GetDiffIndexURI(Target), GetDiffIndexFileName(Target.Description), Message, Cnf))
+ if (CommonFailed(GetDiffIndexURI(Target), Message, Cnf))
return;
RenameOnError(PDiffError);
@@ -2631,33 +2703,16 @@ void pkgAcqDiffIndex::Done(string const &Message,HashStringList const &Hashes, /
}
else
{
- // we have something, queue the diffs
- string::size_type const last_space = Description.rfind(" ");
- if(last_space != string::npos)
- Description.erase(last_space, Description.size()-last_space);
-
- std::string indexURI = Desc.URI;
- auto const byhashidx = indexURI.find("/by-hash/");
- if (byhashidx != std::string::npos)
- indexURI = indexURI.substr(0, byhashidx - strlen(".diff"));
- else
- {
- auto end = indexURI.length() - strlen(".diff/Index");
- if (CurrentCompressionExtension != "uncompressed")
- end -= (1 + CurrentCompressionExtension.length());
- indexURI = indexURI.substr(0, end);
- }
-
if (pdiff_merge == false)
- new pkgAcqIndexDiffs(Owner, TransactionManager, Target, UsedMirror, indexURI, available_patches);
+ new pkgAcqIndexDiffs(Owner, TransactionManager, Target, available_patches);
else
{
diffs = new std::vector<pkgAcqIndexMergeDiffs*>(available_patches.size());
for(size_t i = 0; i < available_patches.size(); ++i)
(*diffs)[i] = new pkgAcqIndexMergeDiffs(Owner, TransactionManager,
- Target, UsedMirror, indexURI,
- available_patches[i],
- diffs);
+ Target,
+ available_patches[i],
+ diffs);
}
}
@@ -2681,28 +2736,20 @@ pkgAcqDiffIndex::~pkgAcqDiffIndex()
/* The package diff is added to the queue. one object is constructed
* for each diff and the index
*/
-pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire * const Owner,
- pkgAcqMetaClearSig * const TransactionManager,
- IndexTarget const &Target,
- std::string const &indexUsedMirror, std::string const &indexURI,
+pkgAcqIndexDiffs::pkgAcqIndexDiffs(pkgAcquire *const Owner,
+ pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target,
vector<DiffInfo> const &diffs)
- : pkgAcqBaseIndex(Owner, TransactionManager, Target), indexURI(indexURI),
- available_patches(diffs)
+ : pkgAcqBaseIndex(Owner, TransactionManager, Target),
+ available_patches(diffs)
{
DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI), Target);
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
Desc.Owner = this;
- Description = Target.Description;
Desc.ShortDesc = Target.ShortDesc;
- UsedMirror = indexUsedMirror;
- if (UsedMirror == "DIRECT")
- UsedMirror.clear();
- else if (UsedMirror.empty() == false && Description.find(" ") != string::npos)
- Description.replace(0, Description.find(" "), UsedMirror);
-
if(available_patches.empty() == true)
{
// we are done (yeah!), check hashes against the final file
@@ -2817,8 +2864,8 @@ bool pkgAcqIndexDiffs::QueueNextDiff() /*{{{*/
}
// queue the right diff
- Desc.URI = indexURI + ".diff/" + available_patches[0].file + ".gz";
- Desc.Description = Description + " " + available_patches[0].file + string(".pdiff");
+ Desc.URI = Target.URI + ".diff/" + available_patches[0].file + ".gz";
+ Desc.Description = Target.Description + " " + available_patches[0].file + string(".pdiff");
DestFile = GetKeepCompressedFileName(GetPartialFileNameFromURI(Target.URI + ".diff/" + available_patches[0].file), Target);
if(Debug)
@@ -2870,7 +2917,7 @@ void pkgAcqIndexDiffs::Done(string const &Message, HashStringList const &Hashes,
// see if there is more to download
if(available_patches.empty() == false)
{
- new pkgAcqIndexDiffs(Owner, TransactionManager, Target, UsedMirror, indexURI, available_patches);
+ new pkgAcqIndexDiffs(Owner, TransactionManager, Target, available_patches);
Finish();
} else {
DestFile = PatchedFile;
@@ -2896,28 +2943,20 @@ std::string pkgAcqIndexDiffs::Custom600Headers() const /*{{{*/
pkgAcqIndexDiffs::~pkgAcqIndexDiffs() {}
// AcqIndexMergeDiffs::AcqIndexMergeDiffs - Constructor /*{{{*/
-pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire * const Owner,
- pkgAcqMetaClearSig * const TransactionManager,
- IndexTarget const &Target,
- std::string const &indexUsedMirror, std::string const &indexURI,
- DiffInfo const &patch,
- std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches)
- : pkgAcqBaseIndex(Owner, TransactionManager, Target), indexURI(indexURI),
- patch(patch), allPatches(allPatches), State(StateFetchDiff)
+pkgAcqIndexMergeDiffs::pkgAcqIndexMergeDiffs(pkgAcquire *const Owner,
+ pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target,
+ DiffInfo const &patch,
+ std::vector<pkgAcqIndexMergeDiffs *> const *const allPatches)
+ : pkgAcqBaseIndex(Owner, TransactionManager, Target),
+ patch(patch), allPatches(allPatches), State(StateFetchDiff)
{
Debug = _config->FindB("Debug::pkgAcquire::Diffs",false);
- Description = Target.Description;
- UsedMirror = indexUsedMirror;
- if (UsedMirror == "DIRECT")
- UsedMirror.clear();
- else if (UsedMirror.empty() == false && Description.find(" ") != string::npos)
- Description.replace(0, Description.find(" "), UsedMirror);
-
Desc.Owner = this;
Desc.ShortDesc = Target.ShortDesc;
- Desc.URI = indexURI + ".diff/" + patch.file + ".gz";
- Desc.Description = Description + " " + patch.file + ".pdiff";
+ Desc.URI = Target.URI + ".diff/" + patch.file + ".gz";
+ Desc.Description = Target.Description + " " + patch.file + ".pdiff";
DestFile = GetPartialFileNameFromURI(Target.URI + ".diff/" + patch.file + ".gz");
if(Debug)
@@ -3073,60 +3112,28 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire * const Owner,
}
/*}}}*/
// AcqIndex::Init - deferred Constructor /*{{{*/
-static void NextCompressionExtension(std::string &CurrentCompressionExtension, std::string &CompressionExtensions, bool const preview)
+void pkgAcqIndex::Init(string const &URI, string const &URIDesc,
+ string const &ShortDesc)
{
+ Stage = STAGE_DOWNLOAD;
+
+ DestFile = GetPartialFileNameFromURI(URI);
size_t const nextExt = CompressionExtensions.find(' ');
if (nextExt == std::string::npos)
{
CurrentCompressionExtension = CompressionExtensions;
- if (preview == false)
- CompressionExtensions.clear();
+ CompressionExtensions.clear();
}
else
{
CurrentCompressionExtension = CompressionExtensions.substr(0, nextExt);
- if (preview == false)
- CompressionExtensions = CompressionExtensions.substr(nextExt+1);
+ CompressionExtensions = CompressionExtensions.substr(nextExt+1);
}
-}
-void pkgAcqIndex::Init(string const &URI, string const &URIDesc,
- string const &ShortDesc)
-{
- Stage = STAGE_DOWNLOAD;
-
- DestFile = GetPartialFileNameFromURI(URI);
- NextCompressionExtension(CurrentCompressionExtension, CompressionExtensions, false);
if (CurrentCompressionExtension == "uncompressed")
{
Desc.URI = URI;
}
- else if (CurrentCompressionExtension == "by-hash")
- {
- NextCompressionExtension(CurrentCompressionExtension, CompressionExtensions, true);
- if(unlikely(CurrentCompressionExtension.empty()))
- return;
- if (CurrentCompressionExtension != "uncompressed")
- {
- Desc.URI = URI + '.' + CurrentCompressionExtension;
- DestFile = DestFile + '.' + CurrentCompressionExtension;
- }
- else
- Desc.URI = URI;
-
- HashStringList const Hashes = GetExpectedHashes();
- HashString const * const TargetHash = Hashes.find(NULL);
- if (unlikely(TargetHash == nullptr))
- return;
- std::string const ByHash = "/by-hash/" + TargetHash->HashType() + "/" + TargetHash->HashValue();
- size_t const trailing_slash = Desc.URI.find_last_of("/");
- if (unlikely(trailing_slash == std::string::npos))
- return;
- Desc.URI = Desc.URI.replace(
- trailing_slash,
- Desc.URI.substr(trailing_slash+1).size()+1,
- ByHash);
- }
else if (unlikely(CurrentCompressionExtension.empty()))
return;
else
@@ -3170,24 +3177,10 @@ string pkgAcqIndex::Custom600Headers() const
}
/*}}}*/
// AcqIndex::Failed - getting the indexfile failed /*{{{*/
-bool pkgAcqIndex::CommonFailed(std::string const &TargetURI, std::string const TargetDesc,
- std::string const &Message, pkgAcquire::MethodConfig const * const Cnf)
+bool pkgAcqIndex::CommonFailed(std::string const &TargetURI,
+ std::string const &Message, pkgAcquire::MethodConfig const *const Cnf)
{
pkgAcqBaseIndex::Failed(Message,Cnf);
-
- if (UsedMirror.empty() == false && UsedMirror != "DIRECT" &&
- LookupTag(Message, "FailReason") == "HttpError404")
- {
- UsedMirror = "DIRECT";
- if (Desc.URI.find("/by-hash/") != std::string::npos)
- CompressionExtensions = "by-hash " + CompressionExtensions;
- else
- CompressionExtensions = CurrentCompressionExtension + ' ' + CompressionExtensions;
- Init(TargetURI, TargetDesc, Desc.ShortDesc);
- Status = StatIdle;
- return true;
- }
-
// authorisation matches will not be fixed by other compression types
if (Status != StatAuthError)
{
@@ -3202,7 +3195,7 @@ bool pkgAcqIndex::CommonFailed(std::string const &TargetURI, std::string const T
}
void pkgAcqIndex::Failed(string const &Message,pkgAcquire::MethodConfig const * const Cnf)
{
- if (CommonFailed(Target.URI, Target.Description, Message, Cnf))
+ if (CommonFailed(Target.URI, Message, Cnf))
return;
if(Target.IsOptional && GetExpectedHashes().empty() && Stage == STAGE_DOWNLOAD)
diff --git a/apt-pkg/acquire-item.h b/apt-pkg/acquire-item.h
index 46d79df92..3a5a518c2 100644
--- a/apt-pkg/acquire-item.h
+++ b/apt-pkg/acquire-item.h
@@ -246,7 +246,9 @@ class pkgAcquire::Item : public WeakPointable /*{{{*/
APT_HIDDEN std::unordered_map<std::string, std::string> &ModifyCustomFields();
// this isn't the super nicest interface either…
APT_HIDDEN bool PopAlternativeURI(std::string &NewURI);
+ APT_HIDDEN bool IsGoodAlternativeURI(std::string const &AltUri) const;
APT_HIDDEN void PushAlternativeURI(std::string &&NewURI, std::unordered_map<std::string, std::string> &&fields, bool const at_the_back);
+ APT_HIDDEN void RemoveAlternativeSite(std::string &&OldSite);
/** \brief A "descriptive" URI-like string.
*
@@ -405,7 +407,7 @@ class APT_HIDDEN pkgAcqTransactionItem: public pkgAcquire::Item /*{{{*/
virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
virtual std::string GetMetaKey() const;
virtual bool HashesRequired() const APT_OVERRIDE;
-
+ virtual bool AcquireByHash() const;
pkgAcqTransactionItem(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager, IndexTarget const &Target) APT_NONNULL(2, 3);
virtual ~pkgAcqTransactionItem();
@@ -690,8 +692,8 @@ class APT_HIDDEN pkgAcqIndex : public pkgAcqBaseIndex
protected:
APT_HIDDEN void Init(std::string const &URI, std::string const &URIDesc,
std::string const &ShortDesc);
- APT_HIDDEN bool CommonFailed(std::string const &TargetURI, std::string const TargetDesc,
- std::string const &Message, pkgAcquire::MethodConfig const * const Cnf);
+ APT_HIDDEN bool CommonFailed(std::string const &TargetURI,
+ std::string const &Message, pkgAcquire::MethodConfig const *const Cnf);
};
/*}}}*/
struct APT_HIDDEN DiffInfo { /*{{{*/
@@ -728,11 +730,6 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex
/** \brief If \b true, debugging information will be written to std::clog. */
bool Debug;
- /** \brief A description of the Packages file (stored in
- * pkgAcquire::ItemDesc::Description).
- */
- std::string Description;
-
/** \brief Get the full pathname of the final file for the current URI */
virtual std::string GetFinalFilename() const APT_OVERRIDE;
@@ -790,8 +787,6 @@ class APT_HIDDEN pkgAcqDiffIndex : public pkgAcqIndex
*/
class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
{
- std::string const indexURI;
-
protected:
/** \brief If \b true, debugging output will be written to
@@ -799,9 +794,6 @@ class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
*/
bool Debug;
- /** \brief description of the file being downloaded. */
- std::string Description;
-
/** \brief information about the current patch */
struct DiffInfo const patch;
@@ -837,6 +829,7 @@ class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "Index";};
virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
virtual bool HashesRequired() const APT_OVERRIDE;
+ virtual bool AcquireByHash() const APT_OVERRIDE;
/** \brief Create an index merge-diff item.
*
@@ -850,10 +843,9 @@ class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
* \param allPatches contains all related items so that each item can
* check if it was the last one to complete the download step
*/
- pkgAcqIndexMergeDiffs(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
- IndexTarget const &Target, std::string const &indexUsedMirror,
- std::string const &indexURI, DiffInfo const &patch,
- std::vector<pkgAcqIndexMergeDiffs*> const * const allPatches) APT_NONNULL(2, 3, 8);
+ pkgAcqIndexMergeDiffs(pkgAcquire *const Owner, pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target, DiffInfo const &patch,
+ std::vector<pkgAcqIndexMergeDiffs *> const *const allPatches) APT_NONNULL(2, 3, 6);
virtual ~pkgAcqIndexMergeDiffs();
};
/*}}}*/
@@ -870,8 +862,6 @@ class APT_HIDDEN pkgAcqIndexMergeDiffs : public pkgAcqBaseIndex
*/
class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
{
- std::string const indexURI;
-
private:
/** \brief Queue up the next diff download.
@@ -905,9 +895,6 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
*/
bool Debug;
- /** A description of the file being downloaded. */
- std::string Description;
-
/** The patches that remain to be downloaded, including the patch
* being downloaded right now. This list should be ordered so
* that each diff appears before any diff that depends on it.
@@ -943,6 +930,7 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
virtual std::string DescURI() const APT_OVERRIDE {return Target.URI + "IndexDiffs";};
virtual HashStringList GetExpectedHashes() const APT_OVERRIDE;
virtual bool HashesRequired() const APT_OVERRIDE;
+ virtual bool AcquireByHash() const APT_OVERRIDE;
/** \brief Create an index diff item.
*
@@ -957,10 +945,9 @@ class APT_HIDDEN pkgAcqIndexDiffs : public pkgAcqBaseIndex
* should be ordered so that each diff appears before any diff
* that depends on it.
*/
- pkgAcqIndexDiffs(pkgAcquire * const Owner, pkgAcqMetaClearSig * const TransactionManager,
- IndexTarget const &Target,
- std::string const &indexUsedMirror, std::string const &indexURI,
- std::vector<DiffInfo> const &diffs=std::vector<DiffInfo>()) APT_NONNULL(2, 3);
+ pkgAcqIndexDiffs(pkgAcquire *const Owner, pkgAcqMetaClearSig *const TransactionManager,
+ IndexTarget const &Target,
+ std::vector<DiffInfo> const &diffs = std::vector<DiffInfo>()) APT_NONNULL(2, 3);
virtual ~pkgAcqIndexDiffs();
};
/*}}}*/
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index d159ef84f..c2bbf8bed 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -321,28 +321,35 @@ bool pkgAcquire::Worker::RunMessages()
Itm = nullptr;
for (auto const &Owner: ItmOwners)
{
+ for (auto alt = AltUris.crbegin(); alt != AltUris.crend(); ++alt)
+ Owner->PushAlternativeURI(std::string(*alt), {}, false);
+
pkgAcquire::ItemDesc &desc = Owner->GetItemDesc();
- if (Owner->IsRedirectionLoop(NewURI))
+ // for a simplified retry a method might redirect without URI change
+ // see also IsRedirectionLoop implementation
+ if (desc.URI != NewURI)
{
- std::string msg = Message;
- msg.append("\nFailReason: RedirectionLoop");
- Owner->Failed(msg, Config);
- if (Log != nullptr)
- Log->Fail(Owner->GetItemDesc());
- continue;
- }
+ auto newuri = NewURI;
+ if (Owner->IsGoodAlternativeURI(newuri) == false && Owner->PopAlternativeURI(newuri) == false)
+ newuri.clear();
+ if (newuri.empty() || Owner->IsRedirectionLoop(newuri))
+ {
+ std::string msg = Message;
+ msg.append("\nFailReason: RedirectionLoop");
+ Owner->Failed(msg, Config);
+ if (Log != nullptr)
+ Log->Fail(Owner->GetItemDesc());
+ continue;
+ }
- if (Log != nullptr)
- Log->Done(desc);
+ if (Log != nullptr)
+ Log->Done(desc);
- ChangeSiteIsMirrorChange(NewURI, desc, Owner);
- desc.URI = NewURI;
+ ChangeSiteIsMirrorChange(NewURI, desc, Owner);
+ desc.URI = NewURI;
+ }
if (isDoomedItem(Owner) == false)
- {
- for (auto alt = AltUris.crbegin(); alt != AltUris.crend(); ++alt)
- Owner->PushAlternativeURI(std::string(*alt), {}, false);
OwnerQ->Owner->Enqueue(desc);
- }
}
break;
}
@@ -608,28 +615,33 @@ void pkgAcquire::Worker::HandleFailure(std::vector<pkgAcquire::Item *> const &It
if (isDoomedItem(Owner) == false)
OwnerQ->Owner->Enqueue(SavedDesc);
}
- else if (Owner->PopAlternativeURI(NewURI))
- {
- Owner->FailMessage(Message);
- auto &desc = Owner->GetItemDesc();
- if (Log != nullptr)
- Log->Fail(desc);
- ChangeSiteIsMirrorChange(NewURI, desc, Owner);
- desc.URI = NewURI;
- if (isDoomedItem(Owner) == false)
- OwnerQ->Owner->Enqueue(desc);
- }
else
{
- if (errAuthErr && Owner->GetExpectedHashes().empty() == false)
- Owner->Status = pkgAcquire::Item::StatAuthError;
- else if (errTransient)
- Owner->Status = pkgAcquire::Item::StatTransientNetworkError;
- auto SavedDesc = Owner->GetItemDesc();
- if (isDoomedItem(Owner) == false)
- Owner->Failed(Message, Config);
- if (Log != nullptr)
- Log->Fail(SavedDesc);
+ if (errAuthErr)
+ Owner->RemoveAlternativeSite(URI::SiteOnly(Owner->GetItemDesc().URI));
+ if (Owner->PopAlternativeURI(NewURI))
+ {
+ Owner->FailMessage(Message);
+ auto &desc = Owner->GetItemDesc();
+ if (Log != nullptr)
+ Log->Fail(desc);
+ ChangeSiteIsMirrorChange(NewURI, desc, Owner);
+ desc.URI = NewURI;
+ if (isDoomedItem(Owner) == false)
+ OwnerQ->Owner->Enqueue(desc);
+ }
+ else
+ {
+ if (errAuthErr && Owner->GetExpectedHashes().empty() == false)
+ Owner->Status = pkgAcquire::Item::StatAuthError;
+ else if (errTransient)
+ Owner->Status = pkgAcquire::Item::StatTransientNetworkError;
+ auto SavedDesc = Owner->GetItemDesc();
+ if (isDoomedItem(Owner) == false)
+ Owner->Failed(Message, Config);
+ if (Log != nullptr)
+ Log->Fail(SavedDesc);
+ }
}
}
}
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index 0f45fec90..7c016a5e7 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -1873,28 +1873,29 @@ bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
if (PkgState[P->ID].Marked || IsPkgInBoringState(P, PkgState))
continue;
+ const char *reason = nullptr;
+
if ((PkgState[P->ID].Flags & Flag::Auto) == 0)
- ;
- else if ((P->Flags & Flag::Essential) || (P->Flags & Flag::Important))
- ;
- // be nice even then a required package violates the policy (#583517)
- // and do the full mark process also for required packages
+ reason = "Manual-Installed";
+ else if (P->Flags & Flag::Essential)
+ reason = "Essential";
+ else if (P->Flags & Flag::Important)
+ reason = "Important";
else if (P->CurrentVer != 0 && P.CurrentVer()->Priority == pkgCache::State::Required)
- ;
+ reason = "Required";
else if (userFunc.InRootSet(P))
- ;
- // packages which can't be changed (like holds) can't be garbage
+ reason = "Blacklisted [APT::NeverAutoRemove]";
else if (IsModeChangeOk(ModeGarbage, P, 0, false) == false)
- ;
+ reason = "Hold";
else
continue;
if (PkgState[P->ID].Install())
MarkPackage(P, PkgState[P->ID].InstVerIter(*this),
- follow_recommends, follow_suggests);
+ follow_recommends, follow_suggests, reason);
else
MarkPackage(P, P.CurrentVer(),
- follow_recommends, follow_suggests);
+ follow_recommends, follow_suggests, reason);
}
return true;
@@ -1904,7 +1905,8 @@ bool pkgDepCache::MarkRequired(InRootSetFunc &userFunc)
void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &Pkg,
const pkgCache::VerIterator &Ver,
bool const &follow_recommends,
- bool const &follow_suggests)
+ bool const &follow_suggests,
+ const char *reason)
{
{
pkgDepCache::StateCache &state = PkgState[Pkg->ID];
@@ -1919,7 +1921,8 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &Pkg,
bool const debug_autoremove = _config->FindB("Debug::pkgAutoRemove", false);
if(debug_autoremove)
- std::clog << "Marking: " << Pkg.FullName() << " " << Ver.VerStr() << std::endl;
+ std::clog << "Marking: " << Pkg.FullName() << " " << Ver.VerStr()
+ << " (" << reason << ")" << std::endl;
for (auto D = Ver.DependsList(); D.end() == false; ++D)
{
@@ -1976,7 +1979,7 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &Pkg,
std::clog << "Following dep: " << APT::PrettyDep(this, D)
<< ", provided by " << PP.FullName() << " " << PV.VerStr()
<< " (" << providers.size() << "/" << prvsize << ")"<< std::endl;
- MarkPackage(PP, PV, follow_recommends, follow_suggests);
+ MarkPackage(PP, PV, follow_recommends, follow_suggests, "Provider");
}
}
@@ -1991,7 +1994,7 @@ void pkgDepCache::MarkPackage(const pkgCache::PkgIterator &Pkg,
if (debug_autoremove)
std::clog << "Following dep: " << APT::PrettyDep(this, D) << std::endl;
- MarkPackage(T, TV, follow_recommends, follow_suggests);
+ MarkPackage(T, TV, follow_recommends, follow_suggests, "Dependency");
}
}
/*}}}*/
diff --git a/apt-pkg/depcache.h b/apt-pkg/depcache.h
index 4536f3b52..724bf566e 100644
--- a/apt-pkg/depcache.h
+++ b/apt-pkg/depcache.h
@@ -88,11 +88,15 @@ class pkgDepCache : protected pkgCache::Namespace
*
* \param follow_suggests If \b true, suggestions of the package
* will be recursively marked.
+ *
+ * \param reason The reason why the package is being marked.
+ * (Used in logging when Debug::pkgAutoRemove is set.)
*/
APT_HIDDEN void MarkPackage(const pkgCache::PkgIterator &pkg,
const pkgCache::VerIterator &ver,
bool const &follow_recommends,
- bool const &follow_suggests);
+ bool const &follow_suggests,
+ const char *reason);
/** \brief Update the Marked field of all packages.
*
diff --git a/debian/NEWS b/debian/NEWS
index 9e77685a7..95c2d27fd 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -47,7 +47,7 @@ apt (1.5~beta1) unstable; urgency=medium
setting the option Acquire::AllowTLS to "false".
As for backwards compatibility, the options IssuerCert and SslForceVersion
- are not supported anymore, and any specified certificate files must in the
+ are not supported anymore, and any specified certificate files must be in the
PEM format (curl might have allowed DER files as well).
[ Changes to unauthenticated repositories ]
diff --git a/methods/connect.cc b/methods/connect.cc
index 35f2da397..d4e4303b3 100644
--- a/methods/connect.cc
+++ b/methods/connect.cc
@@ -546,7 +546,12 @@ static bool TalkToSocksProxy(int const ServerFd, std::string const &Proxy,
unsigned int const Size, unsigned int const Timeout)
{
if (WaitFd(ServerFd, ReadWrite, Timeout) == false)
- return _error->Error("Waiting for the SOCKS proxy %s to %s timed out", URI::SiteOnly(Proxy).c_str(), type);
+ {
+ if (ReadWrite)
+ return _error->Error("Timed out while waiting to write '%s' to proxy %s", type, URI::SiteOnly(Proxy).c_str());
+ else
+ return _error->Error("Timed out while waiting to read '%s' from proxy %s", type, URI::SiteOnly(Proxy).c_str());
+ }
if (ReadWrite == false)
{
if (FileFd::Read(ServerFd, ToFrom, Size) == false)
diff --git a/po/ru.po b/po/ru.po
index 4a06424c2..0e8a9450b 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,21 +8,22 @@
# Dmitry Astapov <adept@despammed.com>, 2004.
# Yuri Kozlov <kozlov.y@gmail.com>, 2004, 2005, 2006, 2007, 2008.
# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2012, 2015, 2016.
-# Aleksej Shilin <rootlexx@mail.ru>, 2017.
+# Aleksej Shilin <rootlexx@mail.ru>, 2017, 2018.
+# Lev Lamberov <dogsleg@debian.org>, 2018.
msgid ""
msgstr ""
-"Project-Id-Version: apt 1.2.12\n"
+"Project-Id-Version: apt 1.6\n"
"Report-Msgid-Bugs-To: APT Development Team <deity@lists.debian.org>\n"
-"POT-Creation-Date: 2018-02-26 13:14+0100\n"
-"PO-Revision-Date: 2017-07-01 16:05+0300\n"
+"POT-Creation-Date: 2018-05-14 20:21+0300\n"
+"PO-Revision-Date: 2018-05-14 20:24+0300\n"
"Last-Translator: Aleksej Shilin <rootlexx@mail.ru>\n"
"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 2.0\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"X-Generator: Poedit 1.8.11\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: apt-inst/contrib/arfile.cc
@@ -61,7 +62,7 @@ msgstr "Повреждённый архив"
#: apt-inst/contrib/extracttar.cc
msgid "Tar checksum failed, archive corrupted"
-msgstr "Неправильная контрольная сумма Tar, архив повреждён"
+msgstr "Неправильная контрольная сумма Tar — архив повреждён"
#: apt-inst/contrib/extracttar.cc
#, c-format
@@ -71,16 +72,16 @@ msgstr "Неизвестный заголовок в архиве TAR. Тип %u
#: apt-inst/deb/debfile.cc
#, c-format
msgid "This is not a valid DEB archive, missing '%s' member"
-msgstr "Это неправильный DEB-архив — отсутствует составная часть «%s»"
+msgstr "Это неправильный DEB-архив: отсутствует составная часть «%s»"
#: apt-inst/deb/debfile.cc
#, c-format
msgid "Internal error, could not locate member %s"
-msgstr "Внутренняя ошибка, не удалось найти составную часть %s"
+msgstr "Внутренняя ошибка: не удалось найти составную часть %s"
#: apt-inst/deb/debfile.cc
msgid "Unparsable control file"
-msgstr "Не удалось прочесть содержимое control-файла"
+msgstr "Не удалось разобрать содержимое файла control"
#: apt-inst/dirstream.cc
#, c-format
@@ -105,16 +106,16 @@ msgstr "Повторная распаковка %s"
#: apt-inst/extract.cc
#, c-format
msgid "The directory %s is diverted"
-msgstr "Каталог %s входит в список diverted"
+msgstr "Каталог %s входит в список отклоняемых"
#: apt-inst/extract.cc
#, c-format
msgid "The package is trying to write to the diversion target %s/%s"
-msgstr "Пакет пытается писать в diversion %s/%s"
+msgstr "Пакет пытается писать в отклонённый файл %s/%s"
#: apt-inst/extract.cc
msgid "The diversion path is too long"
-msgstr "Путь diversion слишком длинен"
+msgstr "Путь отклонения слишком длинный"
#: apt-inst/extract.cc apt-pkg/acquire-item.cc ftparchive/cachedb.cc
#: methods/rred.cc
@@ -134,11 +135,11 @@ msgstr "Каталог %s был заменён не-каталогом"
#: apt-inst/extract.cc
msgid "Failed to locate node in its hash bucket"
-msgstr "Не удалось разместить узел в хеше"
+msgstr "Не удалось найти узел в его хеш-цепочке"
#: apt-inst/extract.cc
msgid "The path is too long"
-msgstr "Путь слишком длинен"
+msgstr "Путь слишком длинный"
#: apt-inst/extract.cc
#, c-format
@@ -174,7 +175,7 @@ msgstr "Не удалось найти элемент хеша!"
#: apt-inst/filelist.cc
msgid "Failed to allocate diversion"
-msgstr "Не удалось создать diversion"
+msgstr "Не удалось создать отклонение"
#: apt-inst/filelist.cc
msgid "Internal error in AddDiversion"
@@ -183,24 +184,24 @@ msgstr "Внутренняя ошибка в AddDiversion"
#: apt-inst/filelist.cc
#, c-format
msgid "Trying to overwrite a diversion, %s -> %s and %s/%s"
-msgstr "Попытка изменения diversion, %s -> %s и %s/%s"
+msgstr "Попытка перезаписи отклонения, %s -> %s и %s/%s"
#: apt-inst/filelist.cc
#, c-format
msgid "Double add of diversion %s -> %s"
-msgstr "Двойное добавление diversion %s -> %s"
+msgstr "Повторное добавление отклонения %s -> %s"
#: apt-inst/filelist.cc
#, c-format
msgid "Duplicate conf file %s/%s"
-msgstr "Повторно указан файл настройки %s/%s"
+msgstr "Дубликат файла настройки %s/%s"
#: 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
@@ -208,16 +209,16 @@ msgid ""
"Data from such a repository can't be authenticated and is therefore "
"potentially dangerous to use."
msgstr ""
-"Данные из этого репозитория нельзя аутентифицировать, и поэтому потенциально "
-"из небезопасно использовать."
+"Данные из этого репозитория не могут быть аутентифицированы, поэтому их "
+"использование потенциально небезопасно."
#: apt-pkg/acquire-item.cc
msgid ""
"See apt-secure(8) manpage for repository creation and user configuration "
"details."
msgstr ""
-"Смотрите справочную страницу apt-secure(8) о создании репозитория и "
-"настройке пользователя."
+"Информацию о создании репозитория и настройке пользователя смотрите в "
+"справочной странице apt-secure(8)."
#: apt-pkg/acquire-item.cc
#, c-format
@@ -225,17 +226,17 @@ msgid "The repository '%s' is no longer signed."
msgstr "Репозиторий «%s» больше не подписан."
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' no longer has a Release file."
-msgstr "Репозиторий «%s» не содержит файла Release."
+msgstr "Репозиторий «%s» больше не содержит файла Release."
#: apt-pkg/acquire-item.cc
msgid ""
"This is normally not allowed, but the option Acquire::"
"AllowDowngradeToInsecureRepositories was given to override it."
msgstr ""
-"Обычно это не разрешается, но указан параметр Acquire::"
-"AllowDowngradeToInsecureRepositories для игнорирования."
+"Обычно это не разрешается, однако указан параметр Acquire::"
+"AllowDowngradeToInsecureRepositories для продолжения."
#: apt-pkg/acquire-item.cc
#, c-format
@@ -248,29 +249,27 @@ msgid "The repository '%s' does not have a Release file."
msgstr "Репозиторий «%s» не содержит файла Release."
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
+#, c-format
msgid "The repository '%s' provides only weak security information."
-msgstr ""
-"Пропускается получение настроенного файла «s», так как репозиторий «%s» "
-"предоставляет только нестойкое шифрование информации"
+msgstr "Репозиторий «%s» обеспечивает только слабую защиту информации."
#: apt-pkg/acquire-item.cc ftparchive/writer.cc
#, c-format
msgid "Failed to readlink %s"
-msgstr "Не удалось прочесть ссылку %s"
+msgstr "Не удалось прочесть значение символьной ссылки %s"
#: apt-pkg/acquire-item.cc
msgid "Hash Sum mismatch"
-msgstr "Хеш сумма не совпадает"
+msgstr "Хеш-сумма не совпадает"
#: apt-pkg/acquire-item.cc
msgid "Insufficient information available to perform this download securely"
-msgstr ""
+msgstr "Недостаточно информации для безопасной загрузки"
#: apt-pkg/acquire-item.cc apt-pkg/contrib/fileutl.cc
#, c-format
msgid "rename failed, %s (%s -> %s)."
-msgstr "переименовать не удалось, %s (%s -> %s)."
+msgstr "Ошибка в rename: %s (%s -> %s)."
#: apt-pkg/acquire-item.cc
msgid "Size mismatch"
@@ -291,7 +290,7 @@ msgid ""
"Clearsigned file isn't valid, got '%s' (does the network require "
"authentication?)"
msgstr ""
-"Некорректный подписанный файл, получено «%s» (возможно в сети требуется "
+"Некорректный подписанный файл: получено «%s» (возможно, в сети требуется "
"аутентификация?)"
#: apt-pkg/acquire-item.cc
@@ -300,7 +299,7 @@ msgid ""
"An error occurred during the signature verification. The repository is not "
"updated and the previous index files will be used. GPG error: %s: %s"
msgstr ""
-"Произошла ошибка при проверке подписи. Репозиторий не обновлён и будут "
+"Произошла ошибка при проверке подписи. Репозиторий не обновлён, и будут "
"использованы предыдущие индексные файлы. Ошибка GPG: %s: %s"
#. Invalid signature file, reject (LP: #346386) (Closes: #627642)
@@ -310,16 +309,14 @@ msgid "GPG error: %s: %s"
msgstr "Ошибка GPG: %s: %s"
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
-#| msgid ""
-#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
-#| "support architecture '%s'"
+#, c-format
msgid ""
"Skipping acquire of configured file '%s' as repository '%s' doesn't have the "
"component '%s' (component misspelt in sources.list?)"
msgstr ""
-"Пропускается получение настроенного файла «%s», так как репозиторий «%s» не "
-"поддерживает архитектуру «%s»"
+"Пропускается получение настроенного файла «%s», так как в репозитории «%s» "
+"отсутствует компонент «%s» (возможно, компонент указан с ошибкой в sources."
+"list?)"
#: apt-pkg/acquire-item.cc
#, c-format
@@ -331,16 +328,13 @@ msgstr ""
"поддерживает архитектуру «%s»"
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
-#| msgid ""
-#| "Skipping acquire of configured file '%s' as repository '%s' doesn't "
-#| "support architecture '%s'"
+#, c-format
msgid ""
"Skipping acquire of configured file '%s' as repository '%s' does not seem to "
"provide it (sources.list entry misspelt?)"
msgstr ""
-"Пропускается получение настроенного файла «%s», так как репозиторий «%s» не "
-"поддерживает архитектуру «%s»"
+"Пропускается получение настроенного файла «%s», так как репозиторий «%s» его "
+"не предоставляет (возможно, репозиторий указан с ошибкой в sources.list?)"
#: apt-pkg/acquire-item.cc
#, c-format
@@ -348,8 +342,8 @@ msgid ""
"Skipping acquire of configured file '%s' as repository '%s' provides only "
"weak security information for it"
msgstr ""
-"Пропускается получение настроенного файла «%s», так как репозиторий «%s» "
-"предоставляет только нестойкое шифрование информации"
+"Пропускается получение настроенного файла «%s», так как репозиторий «%s» "
+"обеспечивает только слабую защиту информации"
#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
#. the time since then the file is invalid - formatted in the same way as in
@@ -360,38 +354,36 @@ msgid ""
"Release file for %s is expired (invalid since %s). Updates for this "
"repository will not be applied."
msgstr ""
-"Файл Release для %s просрочен (недостоверный начиная с %s). Обновление этого "
+"Файл Release для %s просрочен (недостоверный уже %s). Обновление этого "
"репозитория производиться не будет."
#. TRANSLATOR: The first %s is the URL of the bad Release file, the second is
#. the time until the file will be valid - formatted in the same way as in
#. the download progress display (e.g. 7d 3h 42min 1s)
#: apt-pkg/acquire-item.cc
-#, fuzzy, c-format
-#| msgid ""
-#| "Release file for %s is expired (invalid since %s). Updates for this "
-#| "repository will not be applied."
+#, c-format
msgid ""
"Release file for %s is not valid yet (invalid for another %s). Updates for "
"this repository will not be applied."
msgstr ""
-"Файл Release для %s просрочен (недостоверный начиная с %s). Обновление этого "
-"репозитория производиться не будет."
+"Файл Release для %s пока не действителен (недостоверный ещё %s). Обновление "
+"этого репозитория производиться не будет."
#: apt-pkg/acquire-item.cc
#, c-format
msgid "Conflicting distribution: %s (expected %s but got %s)"
-msgstr "Конфликт распространения: %s (ожидался %s, но получен %s)"
+msgstr "Противоречивый выпуск: %s (ожидался %s, но получен %s)"
#: apt-pkg/acquire-item.cc
#, c-format
msgid "Repository '%s' changed its '%s' value from '%s' to '%s'"
-msgstr ""
+msgstr "Репозиторий «%s» изменил значение поля «%s» с «%s» на «%s»"
#: apt-pkg/acquire-item.cc
#, c-format
msgid "Repository '%s' changed its default priority for %s from %hi to %hi."
msgstr ""
+"Репозиторий «%s» изменил свой приоритет по умолчанию для %s с %hi на %hi."
#. TRANSLATOR: the "this" refers to changes in the repository like a new release or owner change
#: apt-pkg/acquire-item.cc
@@ -399,6 +391,8 @@ msgstr ""
msgid ""
"More information about this can be found online in the Release notes at: %s"
msgstr ""
+"Дополнительные сведения об этом можно найти в «Информации о выпуске» по "
+"адресу: %s"
#. TRANSLATOR: %s is the name of the manpage in question, e.g. apt-secure(8)
#: apt-pkg/acquire-item.cc
@@ -407,6 +401,8 @@ msgid ""
"This must be accepted explicitly before updates for this repository can be "
"applied. See %s manpage for details."
msgstr ""
+"Требуется явное подтверждение, прежде чем можно будет обновить данный "
+"репозиторий. Дополнительную информацию смотрите в справочной странице %s."
#: apt-pkg/acquire-item.cc apt-pkg/update.cc apt-private/private-download.cc
#, c-format
@@ -420,7 +416,7 @@ msgid ""
"to manually fix this package. (due to missing arch)"
msgstr ""
"Не удалось обнаружить файл пакета %s. Это может означать, что вам придётся "
-"вручную исправить этот пакет (возможно, пропущен arch)"
+"вручную исправить этот пакет (отсутствует архитектура)."
#: apt-pkg/acquire-item.cc
#, c-format
@@ -431,17 +427,19 @@ msgstr "Невозможно найти источник для загрузки
#: apt-pkg/acquire-item.cc
#, c-format
msgid "Changelog unavailable for %s=%s"
-msgstr "Changelog для %s=%s недоступен"
+msgstr "Журнал изменений для %s=%s недоступен"
#: apt-pkg/acquire-worker.cc
#, c-format
msgid "The method '%s' is explicitly disabled via configuration."
-msgstr ""
+msgstr "Метод «%s» явным образом отключён в настройках."
#: apt-pkg/acquire-worker.cc methods/connect.cc
#, c-format
msgid "If you meant to use Tor remember to use %s instead of %s."
msgstr ""
+"Если вы намеревались использовать Tor, помните, что нужно использовать %s "
+"вместо %s."
#: apt-pkg/acquire-worker.cc
#, c-format
@@ -451,12 +449,12 @@ msgstr "Драйвер для метода %s не найден."
#: apt-pkg/acquire-worker.cc
#, c-format
msgid "Is the package %s installed?"
-msgstr "Проверьте, установлен ли пакет %s?"
+msgstr "Проверьте, установлен ли пакет %s."
#: apt-pkg/acquire-worker.cc
#, c-format
msgid "Method %s did not start correctly"
-msgstr "Метод %s запустился не корректно"
+msgstr "Метод %s запустился некорректно"
#: apt-pkg/acquire-worker.cc
#, c-format
@@ -467,12 +465,12 @@ msgstr "Вставьте диск с меткой «%s» в устройство
#: apt-pkg/acquire.cc apt-pkg/cdrom.cc
#, c-format
msgid "List directory %s is missing."
-msgstr "Каталог списка %s отсутствует."
+msgstr "Каталог списков %s отсутствует."
#: apt-pkg/acquire.cc
#, c-format
msgid "Archives directory %s is missing."
-msgstr "Архивный каталог %s отсутствует."
+msgstr "Каталог архивов %s отсутствует."
#: apt-pkg/acquire.cc
#, c-format
@@ -483,19 +481,16 @@ msgstr "Невозможно заблокировать каталог %s"
#, c-format
msgid "No sandbox user '%s' on the system, can not drop privileges"
msgstr ""
-"В системе не пользователя «%s» для песочницы, невозможно сбросить права"
+"В системе нет пользователя «%s» для песочницы, невозможно сбросить права"
#: apt-pkg/acquire.cc
-#, fuzzy, c-format
-#| msgid ""
-#| "Can't drop privileges for downloading as file '%s' couldn't be accessed "
-#| "by user '%s'."
+#, c-format
msgid ""
"Download is performed unsandboxed as root as file '%s' couldn't be accessed "
"by user '%s'."
msgstr ""
-"Невозможно сбросить права для скачивания, так как файл «%s» недоступен для "
-"пользователя «%s»."
+"Загрузка выполняется от лица суперпользователя без ограничений песочницы, "
+"так как файл «%s» недоступен для пользователя «%s»."
#: apt-pkg/acquire.cc apt-pkg/clean.cc
#, c-format
@@ -526,16 +521,18 @@ msgid ""
"Error, pkgProblemResolver::Resolve generated breaks, this may be caused by "
"held packages."
msgstr ""
-"Ошибка, pkgProblemResolver::Resolve сгенерировал повреждённые пакеты. Это "
-"может быть вызвано отложенными (held) пакетами."
+"Ошибка: pkgProblemResolver::Resolve привёл к появлению сломанных пакетов. "
+"Это может быть вызвано зафиксированными пакетами."
#: apt-pkg/algorithms.cc
msgid "Unable to correct problems, you have held broken packages."
-msgstr "Невозможно исправить ошибки, у вас отложены (held) битые пакеты."
+msgstr "Невозможно исправить ошибки: у вас зафиксированы сломанные пакеты."
#: apt-pkg/cachefile.cc
msgid "The package lists or status file could not be parsed or opened."
-msgstr "Списки пакетов или файл состояния не могут быть открыты или прочитаны."
+msgstr ""
+"Не удалось открыть либо разобрать содержимое списков пакетов или файла "
+"состояния."
#: apt-pkg/cachefile.cc
msgid "You may want to run apt-get update to correct these problems"
@@ -543,12 +540,12 @@ msgstr "Вы можете запустить «apt-get update» для испр
#: apt-pkg/cachefile.cc methods/mirror.cc
msgid "The list of sources could not be read."
-msgstr "Не читается перечень источников."
+msgstr "Не удалось прочитать перечень источников."
#: apt-pkg/cachefilter.cc apt-private/private-output.cc
#, c-format
msgid "Regex compilation error - %s"
-msgstr "Ошибка компиляции регулярного выражения — %s"
+msgstr "Ошибка компиляции регулярного выражения: %s"
#: apt-pkg/cacheset.cc
#, c-format
@@ -568,17 +565,17 @@ msgstr "Не удалось найти задачу «%s»"
#: apt-pkg/cacheset.cc
#, c-format
msgid "Couldn't find any package by regex '%s'"
-msgstr "Не удалось найти пакет с помощью regex «%s»"
+msgstr "Не удалось найти ни один пакет с помощью регулярного выражения «%s»"
#: apt-pkg/cacheset.cc
#, c-format
msgid "Couldn't find any package by glob '%s'"
-msgstr "Не удалось найти пакет с помощью glob «%s»"
+msgstr "Не удалось найти ни один пакет с помощью шаблона «%s»"
#: apt-pkg/cacheset.cc apt-private/private-show.cc
#, c-format
msgid "Unable to locate package %s"
-msgstr "Не удалось найти пакет %s"
+msgstr "Невозможно найти пакет %s"
#: apt-pkg/cacheset.cc
#, c-format
@@ -597,7 +594,7 @@ msgstr ""
#, c-format
msgid "Can't select candidate version from package %s as it has no candidate"
msgstr ""
-"Не удалось выбрать самую версию кандидата из пакета %s, так как у него нет "
+"Не удалось выбрать версию-кандидата из пакета %s, так как у него нет "
"кандидатов"
#: apt-pkg/cacheset.cc
@@ -613,13 +610,13 @@ msgid ""
"Can't select installed nor candidate version from package '%s' as it has "
"neither of them"
msgstr ""
-"Не удалось выбрать ни установленную, ни версию кандидата из пакета «%s», так "
+"Не удалось выбрать ни установленную, ни версию-кандидата из пакета «%s», так "
"как в нём нет ни той, ни другой"
#: apt-pkg/cdrom.cc
#, c-format
msgid "Line %u too long in source list %s."
-msgstr "Строка %u в списке источников %s слишком длинна."
+msgstr "Строка %u в списке источников %s слишком длинная."
#: apt-pkg/cdrom.cc
msgid "Unmounting CD-ROM...\n"
@@ -632,7 +629,7 @@ msgstr "Использование %s в качестве точки монти
#: apt-pkg/cdrom.cc
msgid "Waiting for disc...\n"
-msgstr "Ожидание операции работы с диском…\n"
+msgstr "Ожидание диска…\n"
#: apt-pkg/cdrom.cc
msgid "Mounting CD-ROM...\n"
@@ -640,16 +637,16 @@ msgstr "Монтирование CD-ROM…\n"
#: apt-pkg/cdrom.cc
msgid "Identifying... "
-msgstr "Идентификация... "
+msgstr "Идентификация… "
#: apt-pkg/cdrom.cc
#, c-format
msgid "Stored label: %s\n"
-msgstr "Найдена метка: %s \n"
+msgstr "Найдена метка: %s\n"
#: apt-pkg/cdrom.cc
msgid "Scanning disc for index files...\n"
-msgstr "Поиск на диске индексных файлов...\n"
+msgstr "Поиск индексных файлов на диске…\n"
#: apt-pkg/cdrom.cc
#, c-format
@@ -657,21 +654,21 @@ msgid ""
"Found %zu package indexes, %zu source indexes, %zu translation indexes and "
"%zu signatures\n"
msgstr ""
-"Найдено индексов: %zu для пакетов, %zu для источников, %zu для переводов и "
-"%zu для сигнатур\n"
+"Найдено %zu индексов двоичных пакетов, %zu индексов пакетов с исходным "
+"кодом, %zu индексов переводов и %zu подписей\n"
#: apt-pkg/cdrom.cc
msgid ""
"Unable to locate any package files, perhaps this is not a Debian Disc or the "
"wrong architecture?"
msgstr ""
-"Не удалось найти ни одного файла пакетов; возможно это не диск Debian или с "
+"Не удалось найти ни одного файла пакетов; возможно, это не диск Debian или с "
"не той архитектурой?"
#: apt-pkg/cdrom.cc
#, c-format
msgid "Found label '%s'\n"
-msgstr "Найден ярлык «%s»\n"
+msgstr "Найдена метка «%s»\n"
#: apt-pkg/cdrom.cc
msgid "That is not a valid name, try again.\n"
@@ -715,7 +712,7 @@ msgstr "Невозможно прочитать атрибуты точки мо
#: apt-pkg/contrib/cdromutl.cc
msgid "Failed to stat the cdrom"
-msgstr "Невозможно получить атрибуты cdrom"
+msgstr "Невозможно получить атрибуты CD-ROM"
#: apt-pkg/contrib/cmndline.cc
#, c-format
@@ -737,7 +734,7 @@ msgstr ""
#: apt-pkg/contrib/cmndline.cc
#, c-format
msgid "Command line option %s is not boolean"
-msgstr "Параметр командной строки %s — не логический переключатель «да/нет»"
+msgstr "Параметр командной строки %s не логического типа"
#: apt-pkg/contrib/cmndline.cc
#, c-format
@@ -782,7 +779,7 @@ msgstr "Синтаксическая ошибка %s:%u: в начале бло
#: apt-pkg/contrib/configuration.cc
#, c-format
msgid "Syntax error %s:%u: Malformed tag"
-msgstr "Синтаксическая ошибка %s:%u: искажённый тег"
+msgstr "Синтаксическая ошибка %s:%u: неправильный тег"
#: apt-pkg/contrib/configuration.cc
#, c-format
@@ -809,14 +806,14 @@ msgstr "Синтаксическая ошибка %s:%u вызвана include
#: apt-pkg/contrib/configuration.cc
#, c-format
msgid "Syntax error %s:%u: Unsupported directive '%s'"
-msgstr "Синтаксическая ошибка %s:%u: не поддерживаемая директива «%s»"
+msgstr "Синтаксическая ошибка %s:%u: неподдерживаемая директива «%s»"
#: apt-pkg/contrib/configuration.cc
#, c-format
msgid "Syntax error %s:%u: clear directive requires an option tree as argument"
msgstr ""
-"Синтаксическая ошибка %s:%u: для директивы clear требуется третий параметр в "
-"качестве аргумента"
+"Синтаксическая ошибка %s:%u: для директивы clear требуется дерево параметров "
+"в качестве аргумента"
#: apt-pkg/contrib/configuration.cc
#, c-format
@@ -850,29 +847,29 @@ msgstr ""
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid "Could not get lock %s"
-msgstr "Не удалось получить доступ к файлу блокировки %s"
+msgstr "Не удалось получить файл блокировки %s"
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid "List of files can't be created as '%s' is not a directory"
-msgstr "Список файлов не может быть создан, так как «%s» не является каталогом"
+msgstr "Невозможно создать список файлов, так как «%s» не является каталогом"
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid "Ignoring '%s' in directory '%s' as it is not a regular file"
-msgstr "Файл «%s» в каталоге «%s» игнорируется, так как это необычный файл"
+msgstr "Игнорируется файл «%s» в каталоге «%s», так как это не обычный файл"
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid "Ignoring file '%s' in directory '%s' as it has no filename extension"
-msgstr "Файл «%s» в каталоге «%s» игнорируется, так как он не имеет расширения"
+msgstr "Игнорируется файл «%s» в каталоге «%s», так как он не имеет расширения"
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid ""
"Ignoring file '%s' in directory '%s' as it has an invalid filename extension"
msgstr ""
-"Файл «%s» в каталоге «%s» игнорируется, так как он не имеет неправильное "
+"Игнорируется файл «%s» в каталоге «%s», так как он имеет неправильное "
"расширение"
#: apt-pkg/contrib/fileutl.cc apt-pkg/contrib/gpgv.cc apt-pkg/deb/debsystem.cc
@@ -884,8 +881,7 @@ msgstr "Ожидалось завершение процесса %s, но он
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid "Sub-process %s received a segmentation fault."
-msgstr ""
-"Нарушение защиты памяти (segmentation fault) в порождённом процессе %s."
+msgstr "В порождённом процессе %s произошла ошибка сегментирования."
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -926,7 +922,7 @@ msgstr "Не удалось создать IPC с порождённым про
#: apt-pkg/contrib/fileutl.cc
msgid "Failed to exec compressor "
-msgstr "Не удалось выполнить компрессор "
+msgstr "Не удалось выполнить программу сжатия "
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -942,12 +938,12 @@ msgstr "Не удалось открыть файловый дескриптор
#, c-format
msgid "read, still have %llu to read but none left"
msgstr ""
-"ошибка при чтении; собирались прочесть ещё %llu байт, но ничего больше нет"
+"Ошибка чтения: планировалось прочесть ещё %llu байтов, но ничего больше нет"
#: apt-pkg/contrib/fileutl.cc
#, c-format
msgid "write, still have %llu to write but couldn't"
-msgstr "ошибка при записи; собирались записать ещё %llu байт, но не смогли"
+msgstr "Ошибка записи: планировалось записать ещё %llu байтов, но не удалось"
#: apt-pkg/contrib/fileutl.cc
#, c-format
@@ -980,7 +976,7 @@ msgstr "Невозможно отобразить в память пустой
#: apt-pkg/contrib/mmap.cc
#, c-format
msgid "Couldn't make mmap of %llu bytes"
-msgstr "Невозможно отобразить в память %llu байт"
+msgstr "Не удалось отобразить в память %llu байтов"
#: apt-pkg/contrib/mmap.cc
#, c-format
@@ -989,16 +985,16 @@ msgstr "Не удалось сделать копию файлового дес
#: apt-pkg/contrib/mmap.cc
msgid "Unable to close mmap"
-msgstr "Не удалось закрыть mmap"
+msgstr "Невозможно закрыть отображение в память"
#: apt-pkg/contrib/mmap.cc
msgid "Unable to synchronize mmap"
-msgstr "Не удалось синхронизировать mmap"
+msgstr "Невозможно синхронизировать отображение в память"
#: apt-pkg/contrib/mmap.cc
#, c-format
msgid "Couldn't make mmap of %lu bytes"
-msgstr "Невозможно отобразить в память %lu байт"
+msgstr "Не удалось отобразить в память %lu байтов"
#: apt-pkg/contrib/mmap.cc
msgid "Failed to truncate file"
@@ -1010,8 +1006,8 @@ msgid ""
"Dynamic MMap ran out of room. Please increase the size of APT::Cache-Start. "
"Current value: %lu. (man 5 apt.conf)"
msgstr ""
-"Не хватает места для Dynamic MMap. Увеличьте значение APT::Cache-Start. "
-"Текущее значение: %lu. (man 5 apt.conf)"
+"Не хватает места для динамического отображения в память. Увеличьте значение "
+"APT::Cache-Start. Текущее значение: %lu. (man 5 apt.conf)"
#: apt-pkg/contrib/mmap.cc
#, c-format
@@ -1019,14 +1015,15 @@ msgid ""
"Unable to increase the size of the MMap as the limit of %lu bytes is already "
"reached."
msgstr ""
-"Не удалось увеличить размер MMap, так как уже достигнут предел в %lu байт."
+"Невозможно увеличить размер отображения в память, так как уже достигнут "
+"предел в %lu байтов."
#: apt-pkg/contrib/mmap.cc
msgid ""
"Unable to increase size of the MMap as automatic growing is disabled by user."
msgstr ""
-"Не удалось увеличить размер MMap, так как автоматическое увеличение "
-"отключено пользователем."
+"Невозможно увеличить размер отображения в память, так как автоматическое "
+"увеличение отключено пользователем."
#: apt-pkg/contrib/progress.cc
#, c-format
@@ -1083,7 +1080,7 @@ msgstr "Не найдено: %s"
#: apt-pkg/deb/debmetaindex.cc
#, c-format
msgid "Target %s wants to acquire the same file (%s) as %s from source %s"
-msgstr "Для цели %s нужно получить такой же файл (%s) как %s из источника %s"
+msgstr "Для цели %s нужно получить такой же файл (%s), как %s из источника %s"
#. TRANSLATOR: an identifier like Packages; Releasefile key indicating
#. a file like main/binary-amd64/Packages; filename and linenumber of
@@ -1091,7 +1088,7 @@ msgstr "Для цели %s нужно получить такой же файл
#: apt-pkg/deb/debmetaindex.cc
#, c-format
msgid "Target %s (%s) is configured multiple times in %s and %s"
-msgstr "Цель %s (%s) настроена несколько раз в %s и %s"
+msgstr "Цель %s (%s) настроена несколько раз: в %s и в %s"
#: apt-pkg/deb/debmetaindex.cc
#, c-format
@@ -1106,7 +1103,7 @@ msgstr "Отсутствуют разделы в файле Release (%s)"
#: apt-pkg/deb/debmetaindex.cc
#, c-format
msgid "No Hash entry in Release file %s"
-msgstr "Отсутствуют элементы Hash в файле Release (%s)"
+msgstr "Отсутствуют хеш-суммы в файле Release (%s)"
#: apt-pkg/deb/debmetaindex.cc
#, c-format
@@ -1114,13 +1111,13 @@ msgid ""
"No Hash entry in Release file %s which is considered strong enough for "
"security purposes"
msgstr ""
-"Отсутствуют элементы Hash в файле Release %s, который считается достаточно "
-"стойким, с точки зрения безопасности"
+"Отсутствуют хеш-суммы в файле Release (%s), которые считались бы достаточно "
+"стойкими с точки зрения безопасности"
#: apt-pkg/deb/debmetaindex.cc
#, c-format
msgid "Invalid '%s' entry in Release file %s"
-msgstr "Неправильный элемент «%s» в файле Release %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
@@ -1131,12 +1128,13 @@ msgstr "Указаны конфликтующие значения параме
#: apt-pkg/deb/debmetaindex.cc
#, c-format
msgid "Invalid value set for option %s regarding source %s %s (%s)"
-msgstr "Указано некорректное значения параметра %s из источника %s %s (%s)"
+msgstr "Указано некорректное значение параметра %s из источника %s %s (%s)"
#: apt-pkg/deb/debmetaindex.cc
-#, fuzzy, c-format
+#, c-format
msgid "Conflicting values set for option %s regarding source %s %s: %s != %s"
-msgstr "Указаны конфликтующие значения параметра %s из источника %s %s"
+msgstr ""
+"Указаны конфликтующие значения параметра %s из источника %s %s: %s != %s"
#: apt-pkg/deb/debrecords.cc apt-pkg/tagfile.cc
#, c-format
@@ -1149,14 +1147,14 @@ msgid ""
"Unable to lock the administration directory (%s), is another process using "
"it?"
msgstr ""
-"Не удалось выполнить блокировку управляющего каталога (%s); он уже "
+"Невозможно выполнить блокировку управляющего каталога (%s); он уже "
"используется другим процессом?"
#: apt-pkg/deb/debsystem.cc
#, c-format
msgid "Unable to lock the administration directory (%s), are you root?"
msgstr ""
-"Не удалось выполнить блокировку управляющего каталога (%s); у вас есть права "
+"Невозможно выполнить блокировку управляющего каталога (%s); у вас есть права "
"суперпользователя?"
#. TRANSLATORS: the %s contains the recovery command, usually
@@ -1166,7 +1164,7 @@ msgstr ""
msgid ""
"dpkg was interrupted, you must manually run '%s' to correct the problem. "
msgstr ""
-"Работа dpkg прервана, вы должны вручную запустить «%s» для устранения "
+"Работа dpkg была прервана, вы должны вручную запустить «%s» для устранения "
"проблемы. "
#: apt-pkg/deb/debsystem.cc
@@ -1270,7 +1268,7 @@ msgstr "Действие прервано до его завершения"
#: apt-pkg/deb/dpkgpm.cc
msgid "No apport report written because MaxReports is reached already"
-msgstr "Отчёты apport не записаны, так достигнут MaxReports"
+msgstr "Отчёт apport не записан, так как достигнуто значение MaxReports"
#. check if its not a follow up error
#: apt-pkg/deb/dpkgpm.cc
@@ -1282,15 +1280,15 @@ msgid ""
"No apport report written because the error message indicates its a followup "
"error from a previous failure."
msgstr ""
-"Отчёты apport не записаны, так как сообщение об ошибке указывает на "
-"повторную ошибку от предыдущего отказа."
+"Отчёт apport не записан, так как сообщение об ошибке указывает на повторную "
+"ошибку от предыдущего отказа."
#: apt-pkg/deb/dpkgpm.cc
msgid ""
"No apport report written because the error message indicates a disk full "
"error"
msgstr ""
-"Отчёты apport не записаны, так как получено сообщение об ошибке о нехватке "
+"Отчёт apport не записан, так как получено сообщение об ошибке о нехватке "
"места на диске"
#: apt-pkg/deb/dpkgpm.cc
@@ -1298,7 +1296,7 @@ msgid ""
"No apport report written because the error message indicates a out of memory "
"error"
msgstr ""
-"Отчёты apport не записаны, так как получено сообщение об ошибке о нехватке "
+"Отчёт apport не записан, так как получено сообщение об ошибке о нехватке "
"памяти"
#: apt-pkg/deb/dpkgpm.cc
@@ -1306,15 +1304,15 @@ msgid ""
"No apport report written because the error message indicates an issue on the "
"local system"
msgstr ""
-"Отчёты apport не записаны, так как получено сообщение о проблеме в локальной "
+"Отчёт apport не записан, так как получено сообщение о проблеме в локальной "
"системе"
#: apt-pkg/deb/dpkgpm.cc
msgid ""
"No apport report written because the error message indicates a dpkg I/O error"
msgstr ""
-"Отчёты apport не записаны, так как получено сообщение об ошибке об ошибке "
-"ввода-выводы dpkg"
+"Отчёт apport не записан, так как получено сообщение об ошибке ввода-вывода "
+"dpkg"
#: apt-pkg/depcache.cc
msgid "Building dependency tree"
@@ -1326,7 +1324,7 @@ msgstr "Версии-кандидаты"
#: apt-pkg/depcache.cc
msgid "Dependency generation"
-msgstr "Генерирование зависимостей"
+msgstr "Формирование зависимостей"
#: apt-pkg/depcache.cc
msgid "Reading state information"
@@ -1335,12 +1333,12 @@ msgstr "Чтение информации о состоянии"
#: apt-pkg/depcache.cc
#, c-format
msgid "Failed to open StateFile %s"
-msgstr "Не удалось открыть StateFile %s"
+msgstr "Не удалось открыть файл состояний %s"
#: apt-pkg/depcache.cc
#, c-format
msgid "Failed to write temporary StateFile %s"
-msgstr "Не удалось записать временный StateFile %s"
+msgstr "Не удалось записать временный файл состояний %s"
#: apt-pkg/edsp.cc
msgid "Send scenario to solver"
@@ -1356,31 +1354,28 @@ msgstr "Подготовка к приёму решения"
#: apt-pkg/edsp.cc
msgid "External solver failed without a proper error message"
-msgstr "Внешний решатель завершился с ошибкой не передав сообщения об ошибке"
+msgstr "Внешний решатель завершился с ошибкой, не передав сообщения об ошибке"
#: apt-pkg/edsp.cc
msgid "Execute external solver"
-msgstr "Запустить внешний решатель"
+msgstr "Выполнение внешнего решателя"
#: apt-pkg/edsp.cc
-#, fuzzy
msgid "Execute external planner"
-msgstr "Запустить внешний решатель"
+msgstr "Выполнение внешнего планировщика"
#: apt-pkg/edsp.cc
-#, fuzzy
msgid "Send request to planner"
-msgstr "Отправка запроса решателю"
+msgstr "Отправка запроса планировщику"
#: apt-pkg/edsp.cc
-#, fuzzy
msgid "Send scenario to planner"
-msgstr "Отправка сценария решателю"
+msgstr "Отправка сценария планировщику"
#: apt-pkg/edsp.cc
-#, fuzzy
msgid "External planner failed without a proper error message"
-msgstr "Внешний решатель завершился с ошибкой не передав сообщения об ошибке"
+msgstr ""
+"Внешний планировщик завершился с ошибкой, не передав сообщения об ошибке"
#: apt-pkg/indexcopy.cc
#, c-format
@@ -1412,7 +1407,7 @@ msgstr "Не удалось найти аутентификационную за
#: apt-pkg/indexcopy.cc
#, c-format
msgid "Hash mismatch for: %s"
-msgstr "Не совпадает хеш сумма для: %s"
+msgstr "Не совпадает хеш-сумма для: %s"
#: apt-pkg/init.cc
#, c-format
@@ -1439,8 +1434,8 @@ msgid ""
"Could not perform immediate configuration on '%s'. Please see man 5 apt.conf "
"under APT::Immediate-Configure for details. (%d)"
msgstr ""
-"Не удалось выполнить оперативную настройку «%s». Подробней, смотрите в man 5 "
-"apt.conf о APT::Immediate-Configure. (%d)"
+"Не удалось выполнить оперативную настройку «%s». Подробнее смотрите в man 5 "
+"apt.conf об APT::Immediate-Configure. (%d)"
#: apt-pkg/packagemanager.cc
#, c-format
@@ -1455,10 +1450,9 @@ msgid ""
"you really want to do it, activate the APT::Force-LoopBreak option."
msgstr ""
"Вследствие возникновения циклических зависимостей типа Конфликтует/"
-"ПредЗависит, для продолжения установки необходимо временно удалить "
-"существенно важный пакет %s. Это может привести к фатальным последствиям. "
-"Если вы действительно хотите продолжить, установите параметр APT::Force-"
-"LoopBreak."
+"Предзависит, для продолжения установки необходимо временно удалить пакет "
+"первой необходимости %s. Это может привести к фатальным последствиям. Если "
+"вы действительно хотите продолжить, установите параметр APT::Force-LoopBreak."
#: apt-pkg/pkgcache.cc
msgid "Empty package cache"
@@ -1470,7 +1464,7 @@ msgstr "Кэш пакетов повреждён"
#: apt-pkg/pkgcache.cc
msgid "The package cache file is an incompatible version"
-msgstr "Не поддерживаемая версия кэша пакетов"
+msgstr "Несовместимая версия кэша пакетов"
#: apt-pkg/pkgcache.cc
#, c-format
@@ -1480,11 +1474,11 @@ msgstr "Эта версия APT не поддерживает систему в
#: apt-pkg/pkgcache.cc
#, c-format
msgid "The package cache was built for different architectures: %s vs %s"
-msgstr "Кэш пакетов был собран для другой архитектуры: %s и %s"
+msgstr "Кэш пакетов был создан для разных архитектур: %s против %s"
#: apt-pkg/pkgcache.cc
msgid "The package cache file is corrupted, it has the wrong hash"
-msgstr "Кэш пакетов повреждён, содержит некорректный хеш"
+msgstr "Кэш пакетов повреждён: у него неправильный хеш"
#: apt-pkg/pkgcache.cc
msgid "Depends"
@@ -1492,7 +1486,7 @@ msgstr "Зависит"
#: apt-pkg/pkgcache.cc
msgid "PreDepends"
-msgstr "ПредЗависит"
+msgstr "Предзависит"
#: apt-pkg/pkgcache.cc
msgid "Suggests"
@@ -1600,34 +1594,34 @@ msgstr ""
#: apt-pkg/policy.cc
#, c-format
msgid "Invalid record in the preferences file %s, no Package header"
-msgstr "Неверная запись в файле параметров %s: отсутствует заголовок Package"
+msgstr "Неверная запись в файле предпочтений %s: отсутствует заголовок Package"
#: apt-pkg/policy.cc
#, c-format
msgid "Did not understand pin type %s"
-msgstr "Неизвестный тип фиксации %s"
+msgstr "Неизвестный тип привязки %s"
#: apt-pkg/policy.cc
#, c-format
msgid "%s: Value %s is outside the range of valid pin priorities (%d to %d)"
msgstr ""
-"%s: значение %s находится вне диапазона корректных закрепляющих приоритетов "
-"(с %d по %d)"
+"%s: значение %s находится вне диапазона корректных приоритетов привязки (с "
+"%d по %d)"
#: apt-pkg/policy.cc
msgid "No priority (or zero) specified for pin"
-msgstr "Для фиксации не указан приоритет (или указан нулевой)"
+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
#, c-format
msgid "Malformed entry %u in %s file %s (%s)"
-msgstr "Искажённая запись %u в %s из файла %s (%s)"
+msgstr "Некорректная запись в строке %u файла «%s» %s (%s)"
#: apt-pkg/sourcelist.cc
#, c-format
msgid "Malformed line %u in source list %s (type)"
-msgstr "Искажённая строка %u в списке источников %s (тип)"
+msgstr "Некорректная строка %u в списке источников %s (тип)"
#: apt-pkg/sourcelist.cc
#, c-format
@@ -1637,21 +1631,23 @@ msgstr "Неизвестный тип «%s» в строке %u в списке
#: apt-pkg/sourcelist.cc
#, c-format
msgid "Malformed stanza %u in source list %s (type)"
-msgstr "Искажённая строка %u в списке источников %s (тип)"
+msgstr "Некорректная запись %u в списке источников %s (тип)"
#: apt-pkg/sourcelist.cc
#, 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
-#, fuzzy, c-format
+#, c-format
msgid "Unsupported file %s given on commandline"
-msgstr "В командной строке указан не поддерживаемый файл"
+msgstr "В командной строке указан неподдерживаемый файл %s"
#: apt-pkg/srcrecords.cc
msgid "You must put some 'source' URIs in your sources.list"
-msgstr "Вы должны заполнить sources.list, поместив туда URI источников пакетов"
+msgstr ""
+"Вы должны заполнить sources.list, поместив туда URI источников пакетов с "
+"исходным кодом"
#: apt-pkg/tagfile.cc
#, c-format
@@ -1663,8 +1659,8 @@ msgid ""
"Some index files failed to download. They have been ignored, or old ones "
"used instead."
msgstr ""
-"Некоторые индексные файлы не скачались. Они были проигнорированы или вместо "
-"них были использованы старые версии."
+"Некоторые индексные файлы скачать не удалось. Они были проигнорированы, или "
+"вместо них были использованы старые версии."
#: apt-pkg/upgrade.cc
msgid "Calculating upgrade"
@@ -1695,7 +1691,7 @@ msgstr "Игн:%lu %s"
#: apt-private/acqprogress.cc
#, c-format
msgid "Err:%lu %s"
-msgstr "Ошк:%lu %s"
+msgstr "Ошб:%lu %s"
#: apt-private/acqprogress.cc
#, c-format
@@ -1722,6 +1718,7 @@ msgid ""
"Do you want to accept these changes and continue updating from this "
"repository?"
msgstr ""
+"Вы хотите принять эти изменения и продолжить обновление из этого репозитория?"
#: apt-private/private-cachefile.cc
msgid "Correcting dependencies..."
@@ -1733,7 +1730,7 @@ msgstr " не удалось."
#: apt-private/private-cachefile.cc
msgid "Unable to correct dependencies"
-msgstr "Невозможно скорректировать зависимости"
+msgstr "Невозможно исправить зависимости"
#: apt-private/private-cachefile.cc
msgid "Unable to minimize the upgrade set"
@@ -1746,8 +1743,8 @@ msgstr " Готово"
#: apt-private/private-cachefile.cc apt-private/private-install.cc
msgid "You might want to run 'apt --fix-broken install' to correct these."
msgstr ""
-"Возможно, для исправления этих ошибок вы захотите воспользоваться «apt-get -"
-"f install»."
+"Возможно, для исправления этих ошибок вы захотите воспользоваться «apt --fix-"
+"broken install»."
#: apt-private/private-cachefile.cc apt-private/private-install.cc
msgid ""
@@ -1755,7 +1752,7 @@ msgid ""
"specify a solution)."
msgstr ""
"Неудовлетворённые зависимости. Попытайтесь выполнить «apt --fix-broken "
-"install», не указывая имени пакета, (или найдите другое решение)."
+"install», не указывая имени пакета (или указав решение)."
#: apt-private/private-cacheset.cc apt-private/private-search.cc
msgid "Sorting"
@@ -1769,12 +1766,12 @@ msgstr "Заметьте, выбирается «%s» для задачи «%s»
#: apt-private/private-cacheset.cc
#, c-format
msgid "Note, selecting '%s' for glob '%s'\n"
-msgstr "Заметьте, выбирается «%s» для glob «%s»\n"
+msgstr "Заметьте, выбирается «%s» для шаблона «%s»\n"
#: apt-private/private-cacheset.cc
#, c-format
msgid "Note, selecting '%s' for regex '%s'\n"
-msgstr "Заметьте, выбирается «%s» для regex «%s»\n"
+msgstr "Заметьте, выбирается «%s» для регулярного выражения «%s»\n"
#: apt-private/private-cacheset.cc
#, c-format
@@ -1787,7 +1784,7 @@ 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."
@@ -1800,9 +1797,9 @@ msgid ""
"This may mean that the package is missing, has been obsoleted, or\n"
"is only available from another source\n"
msgstr ""
-"Пакет %s недоступен, но упомянут в списке зависимостей другого пакета.\n"
-"Это может означать, что пакет отсутствует, устарел, или доступен из "
-"источников, не упомянутых в sources.list\n"
+"Пакет %s недоступен, но упомянут в списке зависимостей другого\n"
+"пакета. Это может означать, что пакет отсутствует, устарел или\n"
+"доступен из источников, не упомянутых в sources.list\n"
#: apt-private/private-cacheset.cc
msgid "However the following packages replace it:"
@@ -1823,7 +1820,7 @@ msgstr "Виртуальные пакеты, подобные «%s», не мо
#, c-format
msgid "Package '%s' is not installed, so not removed. Did you mean '%s'?\n"
msgstr ""
-"Пакет «%s» не установлен, поэтому не может быть удалён. Возможно имелся в "
+"Пакет «%s» не установлен, поэтому не может быть удалён. Возможно, имелся в "
"виду «%s»?\n"
#: apt-private/private-cacheset.cc apt-private/private-install.cc
@@ -1863,7 +1860,7 @@ msgstr "В APT есть коровья СУПЕРСИЛА."
#: apt-private/private-cmndline.cc
msgid "This APT helper has Super Meep Powers."
-msgstr "В этой программе есть Super Meep Powers."
+msgstr "В этой программе есть мышиная СУПЕРСИЛА."
#: apt-private/private-cmndline.cc
msgid ""
@@ -1884,11 +1881,11 @@ msgstr "ВНИМАНИЕ: Следующие пакеты невозможно
#: apt-private/private-download.cc
msgid "Authentication warning overridden.\n"
-msgstr "Предупреждение об аутентификации не принято в внимание.\n"
+msgstr "Предупреждение об аутентификации не принято во внимание.\n"
#: apt-private/private-download.cc
msgid "Some packages could not be authenticated"
-msgstr "Некоторые пакеты невозможно аутентифицировать"
+msgstr "Некоторые пакеты не удалось аутентифицировать"
#: apt-private/private-download.cc
msgid "Install these packages without verification?"
@@ -1899,8 +1896,8 @@ msgid ""
"There were unauthenticated packages and -y was used without --allow-"
"unauthenticated"
msgstr ""
-"Обнаружены неудостоверенные пакеты и был указан параметр -y без --allow-"
-"unauthenticated."
+"Обнаружены неаутентифицированные пакеты, и был указан параметр -y без --"
+"allow-unauthenticated"
#: apt-private/private-download.cc
#, c-format
@@ -1914,7 +1911,7 @@ msgstr "Недостаточно свободного места в %s."
#: apt-private/private-download.cc
msgid "Unable to lock the download directory"
-msgstr "Невозможно заблокировать каталог, куда складываются скачиваемые файлы"
+msgstr "Невозможно заблокировать каталог загрузки"
#: apt-private/private-install.cc
msgid ""
@@ -1923,9 +1920,9 @@ msgid ""
"distribution that some required packages have not yet been created\n"
"or been moved out of Incoming."
msgstr ""
-"Некоторые пакеты невозможно установить. Возможно, вы просите невозможного,\n"
-"или же используете нестабильную версию дистрибутива, где запрошенные вами\n"
-"пакеты ещё не созданы или были удалены из Incoming."
+"Некоторые пакеты не могут быть установлены. Возможно, то, что вы просите,\n"
+"неосуществимо, или же вы используете нестабильную версию дистрибутива, где\n"
+"запрошенные вами пакеты ещё не созданы или были удалены из Incoming."
#.
#. if (Packages == 1)
@@ -1939,7 +1936,7 @@ msgstr ""
#.
#: apt-private/private-install.cc
msgid "The following information may help to resolve the situation:"
-msgstr "Следующая информация, возможно, поможет вам:"
+msgstr "Следующая информация, возможно, вам поможет:"
#: apt-private/private-install.cc
msgid "Broken packages"
@@ -1950,14 +1947,13 @@ msgid ""
"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
"missing?"
msgstr ""
-"Невозможно получить некоторые архивы, вероятно надо запустить apt-get update "
-"или попытаться повторить запуск с ключом --fix-missing"
+"Не удалось получить некоторые архивы; возможно, нужно запустить apt-get "
+"update или попытаться повторить запуск с ключом --fix-missing?"
#: apt-private/private-install.cc
msgid "Internal error, InstallPackages was called with broken packages!"
msgstr ""
-"Внутренняя ошибка, InstallPackages была вызвана с неработоспособными "
-"пакетами!"
+"Внутренняя ошибка: InstallPackages была вызвана со сломанными пакетами!"
#: apt-private/private-install.cc
msgid "Packages need to be removed but remove is disabled."
@@ -1968,13 +1964,13 @@ msgid ""
"Essential packages were removed and -y was used without --allow-remove-"
"essential."
msgstr ""
-"Удалены пакеты первой необходимости и был указан параметр -y без --allow-"
+"Удалены пакеты первой необходимости, и был указан параметр -y без --allow-"
"remove-essential."
#: apt-private/private-install.cc
msgid "Packages were downgraded and -y was used without --allow-downgrades."
msgstr ""
-"Пакеты заменены на старые версии и был указан параметр -y без --allow-"
+"Пакеты заменены на старые версии, и был указан параметр -y без --allow-"
"downgrades."
#: apt-private/private-install.cc
@@ -1982,12 +1978,12 @@ msgid ""
"Held packages were changed and -y was used without --allow-change-held-"
"packages."
msgstr ""
-"Были изменены зафиксированные пакеты и был указан параметр -y без --allow-"
+"Были изменены зафиксированные пакеты, и был указан параметр -y без --allow-"
"change-held-packages."
#: apt-private/private-install.cc
msgid "Internal error, Ordering didn't finish"
-msgstr "Внутренняя ошибка, Ordering не завершилась"
+msgstr "Внутренняя ошибка: упорядочение пакетов не завершилось"
#: apt-private/private-install.cc
msgid "How odd... The sizes didn't match, email apt@packages.debian.org"
@@ -2013,7 +2009,7 @@ msgstr "Необходимо скачать %sB архивов.\n"
#, c-format
msgid "After this operation, %sB of additional disk space will be used.\n"
msgstr ""
-"После данной операции, объём занятого дискового пространства возрастёт на "
+"После данной операции объём занятого дискового пространства возрастёт на "
"%sB.\n"
#. TRANSLATOR: The required space between number and unit is already included
@@ -2022,7 +2018,7 @@ msgstr ""
#, c-format
msgid "After this operation, %sB disk space will be freed.\n"
msgstr ""
-"После данной операции, объём занятого дискового пространства уменьшится на "
+"После данной операции объём занятого дискового пространства уменьшится на "
"%sB.\n"
#: apt-private/private-install.cc
@@ -2035,7 +2031,7 @@ msgstr ""
#. careful with hard to type or special characters (like non-breaking spaces)
#: apt-private/private-install.cc
msgid "Yes, do as I say!"
-msgstr "Да, делать, как я скажу!"
+msgstr "Да, делать, как я говорю!"
#: apt-private/private-install.cc
#, c-format
@@ -2045,7 +2041,7 @@ msgid ""
" ?] "
msgstr ""
"То, что вы хотите сделать, может иметь нежелательные последствия.\n"
-"Чтобы продолжить, введите фразу: «%s»\n"
+"Чтобы продолжить, введите фразу «%s»\n"
" ?] "
#: apt-private/private-install.cc
@@ -2070,7 +2066,7 @@ msgstr "--fix-missing и смена носителя в данный момен
#: apt-private/private-install.cc
msgid "Unable to correct missing packages."
-msgstr "Невозможно исправить ситуацию с пропущенными пакетами."
+msgstr "Невозможно исправить отсутствие пакетов."
#: apt-private/private-install.cc
msgid "Aborting install."
@@ -2084,14 +2080,14 @@ msgid_plural ""
"The following packages disappeared from your system as\n"
"all files have been overwritten by other packages:"
msgstr[0] ""
-"Следующий пакет исчез из системы, так как все их файлы\n"
-"теперь берутся из других пакетов:"
+"Следующий пакет исчез из системы, так как все его файлы\n"
+"были перезаписаны другими пакетами:"
msgstr[1] ""
-"Следующие пакеты исчез из системы, так как все их файлы\n"
-"теперь берутся из других пакетов:"
+"Следующие пакеты исчезли из системы, так как все их файлы\n"
+"были перезаписаны другими пакетами:"
msgstr[2] ""
-"Следующие пакеты исчез из системы, так как все их файлы\n"
-"теперь берутся из других пакетов:"
+"Следующие пакеты исчезли из системы, так как все их файлы\n"
+"были перезаписаны другими пакетами:"
#: apt-private/private-install.cc
msgid "Note: This is done automatically and on purpose by dpkg."
@@ -2099,19 +2095,19 @@ msgstr "Замечание: это сделано автоматически и
#: apt-private/private-install.cc
msgid "We are not supposed to delete stuff, can't start AutoRemover"
-msgstr "Не предполагалось удалять stuff, невозможно запустить AutoRemover"
+msgstr "Не разрешено ничего удалять — невозможно запустить AutoRemover"
#: apt-private/private-install.cc
msgid ""
"Hmm, seems like the AutoRemover destroyed something which really\n"
"shouldn't happen. Please file a bug report against apt."
msgstr ""
-"Хм, кажется, что AutoRemover был как-то удалён, чего не должно\n"
-"было случиться. Пожалуйста, отправьте сообщение об ошибке в пакете apt."
+"Хм, кажется, AutoRemover что-то сломал, чего не должно было\n"
+"случиться. Пожалуйста, отправьте сообщение об ошибке в пакете apt."
#: apt-private/private-install.cc
msgid "Internal Error, AutoRemover broke stuff"
-msgstr "Внутренняя ошибка, AutoRemover всё поломал"
+msgstr "Внутренняя ошибка: AutoRemover всё поломал"
#: apt-private/private-install.cc
msgid ""
@@ -2132,7 +2128,7 @@ msgid_plural ""
"%lu packages were automatically installed and are no longer required.\n"
msgstr[0] "%lu пакет был установлен автоматически и больше не требуется.\n"
msgstr[1] "%lu пакета было установлено автоматически и больше не требуется.\n"
-msgstr[2] "%lu пакетов было установлены автоматически и больше не требуются.\n"
+msgstr[2] "%lu пакетов было установлено автоматически и больше не требуется.\n"
#: apt-private/private-install.cc
#, c-format
@@ -2157,18 +2153,17 @@ msgstr "Рекомендуемые пакеты:"
#: apt-private/private-install.cc
#, c-format
msgid "Skipping %s, it is already installed and upgrade is not set.\n"
-msgstr "Пропускается %s — пакет уже установлен и нет команды upgrade.\n"
+msgstr "Пропускается %s: пакет уже установлен, а параметр upgrade не задан.\n"
#: apt-private/private-install.cc
#, c-format
msgid "Skipping %s, it is not installed and only upgrades are requested.\n"
-msgstr ""
-"Пропускается %s — пакет не установлен, а запрошено только обновление.\n"
+msgstr "Пропускается %s: пакет не установлен, а запрошено только обновление.\n"
#: apt-private/private-install.cc
#, c-format
msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
-msgstr "Переустановка %s невозможна, он не скачивается.\n"
+msgstr "Переустановка %s невозможна: он не может быть загружен.\n"
#. TRANSLATORS: First string is package name, second is version
#: apt-private/private-install.cc
@@ -2179,7 +2174,7 @@ msgstr "Уже установлен пакет %s самой новой верс
#: apt-private/private-install.cc cmdline/apt-get.cc cmdline/apt-mark.cc
#, c-format
msgid "%s set to manually installed.\n"
-msgstr "%s установлен вручную.\n"
+msgstr "%s помечен как установленный вручную.\n"
#: apt-private/private-install.cc
#, c-format
@@ -2200,9 +2195,9 @@ msgstr "Вывод списка"
msgid "There is %i additional version. Please use the '-a' switch to see it"
msgid_plural ""
"There are %i additional versions. Please use the '-a' switch to see them."
-msgstr[0] "Есть %i дополнительная версия. Используйте «-a» для просмотра"
-msgstr[1] "Есть %i дополнительные версии. Используйте «-a» для их просмотра"
-msgstr[2] "Есть %i дополнительных версий. Используйте «-a» для их просмотра"
+msgstr[0] "Есть %i дополнительная версия. Используйте «-a» для просмотра."
+msgstr[1] "Есть %i дополнительные версии. Используйте «-a» для их просмотра."
+msgstr[2] "Есть %i дополнительных версий. Используйте «-a» для их просмотра."
#. TRANSLATORS: placeholder is a binary name like apt or apt-get
#: apt-private/private-main.cc
@@ -2213,10 +2208,10 @@ msgid ""
" Keep also in mind that locking is deactivated,\n"
" so don't depend on the relevance to the real current situation!\n"
msgstr ""
-"ЗАМЕЧАНИЕ: Производить только имитация работы!\n"
-" Для реальной работы %s требуются права суперпользователя.\n"
-" Учтите, что блокировка не используется,\n"
-" поэтому нет полного соответствия с текущей реальной ситуацией!\n"
+"ЗАМЕЧАНИЕ: Производится только имитация работы!\n"
+" Для реальной работы %s требуются права суперпользователя.\n"
+" Учтите, что блокировка не используется, поэтому нет полного\n"
+" соответствия с текущей реальной ситуацией!\n"
#: apt-private/private-output.cc apt-private/private-show.cc
msgid "unknown"
@@ -2233,7 +2228,7 @@ msgstr "[установлен, локальный]"
#: apt-private/private-output.cc
msgid "[installed,auto-removable]"
-msgstr "[установлен, удаляется автоматически]"
+msgstr "[установлен, может быть удалён автоматически]"
#: apt-private/private-output.cc
msgid "[installed,automatic]"
@@ -2284,32 +2279,31 @@ msgstr " или"
#: apt-private/private-output.cc
msgid "The following packages have unmet dependencies:"
-msgstr "Пакеты, имеющие неудовлетворённые зависимости:"
+msgstr "Следующие пакеты имеют неудовлетворённые зависимости:"
#: apt-private/private-output.cc
msgid "The following NEW packages will be installed:"
-msgstr "НОВЫЕ пакеты, которые будут установлены:"
+msgstr "Следующие НОВЫЕ пакеты будут установлены:"
#: apt-private/private-output.cc
msgid "The following packages will be REMOVED:"
-msgstr "Пакеты, которые будут УДАЛЕНЫ:"
+msgstr "Следующие пакеты будут УДАЛЕНЫ:"
#: apt-private/private-output.cc
msgid "The following packages have been kept back:"
-msgstr "Пакеты, которые будут оставлены в неизменном виде:"
+msgstr "Следующие пакеты будут оставлены в неизменном виде:"
#: apt-private/private-output.cc
msgid "The following packages will be upgraded:"
-msgstr "Пакеты, которые будут обновлены:"
+msgstr "Следующие пакеты будут обновлены:"
#: apt-private/private-output.cc
msgid "The following packages will be DOWNGRADED:"
-msgstr "Пакеты, которые будут заменены на более СТАРЫЕ версии:"
+msgstr "Следующие пакеты будут заменены на СТАРЫЕ версии:"
#: apt-private/private-output.cc
msgid "The following held packages will be changed:"
-msgstr ""
-"Пакеты, которые должны были бы остаться без изменений, но будут заменены:"
+msgstr "Следующие зафиксированные пакеты будут изменены:"
#: apt-private/private-output.cc
#, c-format
@@ -2321,7 +2315,7 @@ msgid ""
"WARNING: The following essential packages will be removed.\n"
"This should NOT be done unless you know exactly what you are doing!"
msgstr ""
-"ВНИМАНИЕ: Эти существенно важные пакеты будут удалены.\n"
+"ВНИМАНИЕ: Следующие пакеты первой необходимости будут удалены.\n"
"НЕ ДЕЛАЙТЕ этого, если вы НЕ представляете себе все возможные последствия!"
#: apt-private/private-output.cc
@@ -2337,7 +2331,7 @@ msgstr "переустановлено %lu пакетов, "
#: apt-private/private-output.cc
#, c-format
msgid "%lu downgraded, "
-msgstr "%lu пакетов заменены на старые версии, "
+msgstr "%lu пакетов заменено на старые версии, "
#: apt-private/private-output.cc
#, c-format
@@ -2377,7 +2371,7 @@ msgstr "Н"
#: apt-private/private-search.cc
msgid "You must give at least one search pattern"
-msgstr "Вы должны задать не менее одно шаблона поиска"
+msgstr "Вы должны задать не менее одного шаблона поиска"
#: apt-private/private-search.cc
msgid "Full Text Search"
@@ -2393,9 +2387,9 @@ msgstr "Список пакетов %s рассинхронизирован."
msgid "There is %i additional record. Please use the '-a' switch to see it"
msgid_plural ""
"There are %i additional records. Please use the '-a' switch to see them."
-msgstr[0] "Есть %i дополнительная запись. Используйте «-a» для просмотра"
-msgstr[1] "Есть %i дополнительные записи. Используйте «-a» для их просмотра"
-msgstr[2] "Есть %i дополнительных записей. Используйте «-a» для их просмотра"
+msgstr[0] "Есть %i дополнительная запись. Используйте «-a» для просмотра."
+msgstr[1] "Есть %i дополнительные записи. Используйте «-a» для их просмотра."
+msgstr[2] "Есть %i дополнительных записей. Используйте «-a» для их просмотра."
#: apt-private/private-show.cc
msgid "not a real package (virtual)"
@@ -2412,7 +2406,7 @@ msgstr "Кэш рассинхронизирован, невозможно обн
#. Show any packages have explicit pins
#: apt-private/private-show.cc
msgid "Pinned packages:"
-msgstr "Зафиксированные пакеты:"
+msgstr "Привязанные пакеты:"
#. Print the package name and the version we are forcing to
#: apt-private/private-show.cc
@@ -2478,7 +2472,8 @@ msgid ""
"NOTICE: '%s' packaging is maintained in the '%s' version control system at:\n"
"%s\n"
msgstr ""
-"ВНИМАНИЕ: упаковка «%s» поддерживается в системе контроля версий «%s»:\n"
+"ВНИМАНИЕ: работа над пакетом «%s» ведётся в системе управления версиями "
+"«%s»:\n"
"%s\n"
#: apt-private/private-source.cc
@@ -2490,12 +2485,12 @@ msgid ""
msgstr ""
"Используйте:\n"
"%s\n"
-"для получения последних (возможно не выпущенных) обновлений пакета.\n"
+"для получения последних (возможно, невыпущенных) обновлений пакета.\n"
#: apt-private/private-source.cc
#, c-format
msgid "Skipping already downloaded file '%s'\n"
-msgstr "Пропускаем уже скачанный файл «%s»\n"
+msgstr "Пропускается уже скачанный файл «%s»\n"
#. TRANSLATOR: The required space between number and unit is already included
#. in the replacement strings, so %sB will be correctly translate in e.g. 1,5 MB
@@ -2542,18 +2537,17 @@ msgstr "Команда сборки «%s» завершилась неудачн
#: apt-private/private-source.cc
#, c-format
msgid "Unable to get build-dependency information for %s"
-msgstr "Невозможно получить информацию о зависимостях для сборки %s"
+msgstr "Невозможно получить информацию о сборочных зависимостях для %s"
#: apt-private/private-source.cc
#, c-format
msgid "%s has no build depends.\n"
-msgstr "%s не имеет зависимостей для сборки.\n"
+msgstr "%s не имеет сборочных зависимостей.\n"
#: apt-private/private-source.cc
msgid "Must specify at least one package to check builddeps for"
msgstr ""
-"Для проверки зависимостей для сборки необходимо указать как минимум один "
-"пакет"
+"Для проверки сборочных зависимостей необходимо указать как минимум один пакет"
#: apt-private/private-source.cc
#, c-format
@@ -2561,27 +2555,29 @@ msgid ""
"No architecture information available for %s. See apt.conf(5) APT::"
"Architectures for setup"
msgstr ""
-"У %s отсутствует информация об архитектуре. Для её настройки смотрите apt."
-"conf(5) APT::Architectures"
+"Отсутствует информация об архитектуре %s. Для её настройки смотрите apt."
+"conf(5) об APT::Architectures"
#: apt-private/private-source.cc
#, c-format
msgid "Note, using directory '%s' to get the build dependencies\n"
-msgstr "Заметим, используется каталог «%s» для получения зависимостей сборки\n"
+msgstr ""
+"Заметьте, используется каталог «%s» для определения сборочных зависимостей\n"
#: apt-private/private-source.cc
#, c-format
msgid "Note, using file '%s' to get the build dependencies\n"
-msgstr "Заметим, используется файл «%s» для получения зависимостей сборки\n"
+msgstr ""
+"Заметьте, используется файл «%s» для определения сборочных зависимостей\n"
#: apt-private/private-source.cc
msgid "Failed to process build dependencies"
-msgstr "Обработка зависимостей для сборки завершилась неудачно"
+msgstr "Обработка сборочных зависимостей завершилась неудачно"
#: apt-private/private-sources.cc
#, c-format
msgid "Failed to parse %s. Edit again? "
-msgstr "Не удалось разобрать «%s». Повторить редактирование? "
+msgstr "Не удалось разобрать содержимое %s. Повторить редактирование? "
#: apt-private/private-sources.cc
#, c-format
@@ -2604,6 +2600,8 @@ msgid ""
"Usage of %s should be preferred over embedding login information directly in "
"the %s entry for '%s'"
msgstr ""
+"Использование %s предпочтительнее, чем встраивание данных для входа "
+"непосредственно в запись %s для «%s»"
#: apt-private/private-update.cc
#, c-format
@@ -2677,7 +2675,7 @@ msgstr "Всего отношений Описание/Файл: "
#: cmdline/apt-cache.cc
msgid "Total Provides mappings: "
-msgstr "Всего отношений Provides: "
+msgstr "Всего отношений Предоставляет: "
#: cmdline/apt-cache.cc
msgid "Total globbed strings: "
@@ -2689,7 +2687,7 @@ msgstr "Пустого места в кэше: "
#: cmdline/apt-cache.cc
msgid "Total space accounted for: "
-msgstr "Полное учтённое пространство: "
+msgstr "Всего учтённого места: "
#: cmdline/apt-cache.cc
msgid "This command is deprecated. Please use 'apt-mark showauto' instead."
@@ -2708,18 +2706,21 @@ msgid ""
"availability of the configured sources (e.g. offline).\n"
msgstr ""
"Использование: apt-cache [параметры] команда\n"
-" apt-cache [параметры] show пакет1 [пакет2 …]\n"
+" apt-cache [параметры] show пакет1 [пакет2 …]\n"
"\n"
-"apt-cache ищет и выдаёт доступную информацию об установленных\n"
-"и неустановленных пакетах. Она работает только с данными локального\n"
-"кэша, созданного командой «update» программы apt-get. В следствие\n"
-"этого отображаемая информация может устаревшей, если обновление\n"
-"долго не выполнялось, но зато apt-cache работает независимо от\n"
-"доступности настроенных источников (например, без сети).\n"
+"apt-cache ищет и отображает имеющуюся информацию об установленных и "
+"доступных\n"
+"для установки пакетах. Она работает исключительно с данными локального "
+"кэша,\n"
+"созданного командой «update», например, программы apt-get. Вследствие этого\n"
+"отображаемая информация может являться устаревшей, если обновление долго не\n"
+"выполнялось, но зато apt-cache работает независимо от доступности "
+"настроенных\n"
+"источников (например, без доступа к сети).\n"
#: cmdline/apt-cache.cc
msgid "Show source records"
-msgstr "показать записи об источниках"
+msgstr "показать информацию о пакете с исходным кодом"
#: cmdline/apt-cache.cc
msgid "Search the package list for a regex pattern"
@@ -2765,11 +2766,11 @@ msgid ""
"See 'man apt-cdrom' for more information about the CD-ROM auto-detection and "
"mount point."
msgstr ""
-"Не удалось автоматически обнаружить CD-ROM и в точке монтирования по "
+"Не удалось автоматически обнаружить CD-ROM, и в точке монтирования по "
"умолчанию\n"
"также ничего нет. Вы можете использовать параметр --cdrom, чтобы указать "
"точку\n"
-"монтирования CD-ROM. Подробней о точке монтирования и автоматическом\n"
+"монтирования CD-ROM. Подробнее о точке монтирования и автоматическом\n"
"обнаружении CD-ROM смотрите в «man apt-cdrom»."
#: cmdline/apt-cdrom.cc
@@ -2786,9 +2787,9 @@ msgid ""
msgstr ""
"Использование: apt-cdrom [параметры] команда\n"
"\n"
-"apt-cdrom используется для добавления CDROM, накопителей USB и других\n"
+"apt-cdrom используется для добавления CD-ROM, накопителей USB и других\n"
"сменных носителей в качестве источников пакетов APT. Точка монтирования и\n"
-"информация об устройстве берётся из apt.conf(5), udev(7) и fstab(5).\n"
+"информация об устройстве берутся из apt.conf(5), udev(7) и fstab(5).\n"
#: cmdline/apt-config.cc
msgid "Arguments not in pairs"
@@ -2804,12 +2805,12 @@ msgstr ""
"Использование: apt-config [параметры] команда\n"
"\n"
"apt-config — интерфейс к параметрам настройки, используемым\n"
-"всеми инструментами APT, в основном, предназначен для отладки и\n"
+"всеми инструментами APT, и в основном предназначен для отладки и\n"
"использования в сценариях оболочки.\n"
#: cmdline/apt-config.cc
msgid "get configuration values via shell evaluation"
-msgstr "получить значения настройки через вычисления оболочки"
+msgstr "получить значения настройки через выполнение кода оболочки"
#: cmdline/apt-config.cc
msgid "show the active configuration setting"
@@ -2822,6 +2823,10 @@ msgid ""
"apt-dump-solver is an interface to store an EDSP scenario in\n"
"a file and optionally forwards it to another solver.\n"
msgstr ""
+"Использование: apt-dump-solver\n"
+"\n"
+"apt-dump-solver — интерфейс для сохранения сценария EDSP\n"
+"в файл и, при желании, передачи его другому решателю.\n"
#: cmdline/apt-extracttemplates.cc
msgid ""
@@ -2833,9 +2838,9 @@ msgid ""
msgstr ""
"Использование: apt-extracttemplates файл1 [файл2 …]\n"
"\n"
-"apt-extracttemplates извлекает из пакетов Debian файлы config и template.\n"
-"В основном, она используется debconf(1) для предложения\n"
-"вопросов настройки перед установкой пакетов.\n"
+"apt-extracttemplates извлекает из пакетов Debian файлы config\n"
+"и template. В основном она используется debconf(1) для вопросов\n"
+"настройки перед установкой пакетов.\n"
#: cmdline/apt-extracttemplates.cc
msgid "Cannot get debconf version. Is debconf installed?"
@@ -2849,7 +2854,7 @@ msgstr "Не удалось найти пакет %s"
#: cmdline/apt-get.cc cmdline/apt-mark.cc
#, c-format
msgid "%s set to automatically installed.\n"
-msgstr "%s выбран для автоматической установки.\n"
+msgstr "%s помечен как установленный автоматически.\n"
#: cmdline/apt-get.cc cmdline/apt-mark.cc
msgid ""
@@ -2861,7 +2866,7 @@ msgstr ""
#: cmdline/apt-get.cc
msgid "Internal error, problem resolver broke stuff"
-msgstr "Внутренняя ошибка, решатель проблем всё поломал"
+msgstr "Внутренняя ошибка: решатель проблем всё поломал"
#: cmdline/apt-get.cc
msgid "Supported modules:"
@@ -2882,8 +2887,8 @@ msgstr ""
" apt-get [параметры] install|remove пакет1 [пакет2…]\n"
" apt-get [параметры] source пакет1 [пакет2…]\n"
"\n"
-"apt-get — интерфейс командной строки для получения пакетов,\n"
-"информации из доверенных источников, а также установки,\n"
+"apt-get — интерфейс командной строки для получения пакетов и\n"
+"информации о них из доверенных источников, а также установки,\n"
"обновления и удаления пакетов вместе с их зависимостями.\n"
#: cmdline/apt-get.cc
@@ -2897,8 +2902,8 @@ msgstr "выполнить обновление"
#: cmdline/apt-get.cc
msgid "Install new packages (pkg is libc6 not libc6.deb)"
msgstr ""
-"установить новые пакеты (на месте пакета указывается имя пакета (libc6, а не "
-"имя файла libc6.deb)"
+"установить новые пакеты (указывается имя пакета libc6, а не имя файла libc6."
+"deb)"
#: cmdline/apt-get.cc
msgid "Remove packages"
@@ -2922,7 +2927,7 @@ msgstr "руководствоваться выбором, сделанным в
#: cmdline/apt-get.cc
msgid "Configure build-dependencies for source packages"
-msgstr "настроить всё необходимое для сборки пакета из исходного кода"
+msgstr "настроить сборочные зависимости для пакета с исходным кодом"
#: cmdline/apt-get.cc
msgid "Erase downloaded archive files"
@@ -2934,7 +2939,7 @@ msgstr "удалить старые скачанные файлы архивов
#: cmdline/apt-get.cc
msgid "Verify that there are no broken dependencies"
-msgstr "проверить наличие нарушенных зависимостей"
+msgstr "проверить отсутствие нарушенных зависимостей"
#: cmdline/apt-get.cc
msgid "Download source archives"
@@ -2946,7 +2951,7 @@ msgstr "скачать двоичный пакет в текущий катал
#: cmdline/apt-get.cc
msgid "Download and display the changelog for the given package"
-msgstr "скачать и показать файл изменений заданного пакета"
+msgstr "скачать и показать журнал изменений заданного пакета"
#: cmdline/apt-helper.cc
msgid "Need one URL as argument"
@@ -2954,7 +2959,7 @@ msgstr "В качестве аргумента требуется URL"
#: cmdline/apt-helper.cc
msgid "Must specify at least one pair url/filename"
-msgstr "Укажите, как минимум, одну пару url/имя файла"
+msgstr "Укажите как минимум одну пару url/имя файла"
#: cmdline/apt-helper.cc
msgid "Download Failed"
@@ -2975,11 +2980,12 @@ msgid ""
"e.g. the same proxy configuration or acquire system as APT would.\n"
msgstr ""
"Использование: apt-helper [параметры] команда\n"
-" apt-helper [параметры] cat-файл файл …\n"
-" apt-helper [параметры] download-file uri target-path\n"
+" apt-helper [параметры] cat-file файл …\n"
+" apt-helper [параметры] download-file uri target-path\n"
"\n"
"apt-helper — набор различных команд для сценариев оболочки,\n"
-"которые используются для обмена настройками между APT и системой.\n"
+"которые используют, например, те же настройки прокси и систему\n"
+"получения, что и APT.\n"
#: cmdline/apt-helper.cc
msgid "download the given uri to the target-path"
@@ -2991,22 +2997,21 @@ msgstr "найти запись типа SRV (например, _http._tcp.ftp.d
#: cmdline/apt-helper.cc
msgid "concatenate files, with automatic decompression"
-msgstr "склеить файлы, с автоматическим разжатием"
+msgstr "объединить файлы, с автоматическим разжатием"
#: cmdline/apt-helper.cc
msgid "detect proxy using apt.conf"
-msgstr "определять прокси с помощью apt.conf"
+msgstr "определить прокси с помощью apt.conf"
#: cmdline/apt-helper.cc
msgid "wait for system to be online"
-msgstr ""
+msgstr "подождать, пока система не будет подключена к сети"
#: cmdline/apt-helper.cc
msgid "drop privileges before running given command"
-msgstr ""
+msgstr "сбросить привилегии перед выполнением заданной команды"
#: cmdline/apt-internal-planner.cc
-#, fuzzy
msgid ""
"Usage: apt-internal-planner\n"
"\n"
@@ -3014,10 +3019,10 @@ msgid ""
"installation planner for the APT family like an external one,\n"
"for debugging or the like.\n"
msgstr ""
-"Использование: apt-internal-solver\n"
+"Использование: apt-internal-planner\n"
"\n"
-"apt-internal-solver — интерфейс к внутреннему решателю, предназначен\n"
-"для отладки, подобен интерфейсу внешнего решателя семейства APT.\n"
+"apt-internal-planner — интерфейс для использования внутреннего\n"
+"планировщика APT как внешнего. Применяется для отладки.\n"
#: cmdline/apt-internal-solver.cc
msgid ""
@@ -3029,13 +3034,13 @@ msgid ""
msgstr ""
"Использование: apt-internal-solver\n"
"\n"
-"apt-internal-solver — интерфейс к внутреннему решателю, предназначен\n"
-"для отладки, подобен интерфейсу внешнего решателя семейства APT.\n"
+"apt-internal-solver — интерфейс для использования внутреннего\n"
+"решателя APT как внешнего. Применяется для отладки.\n"
#: cmdline/apt-mark.cc
#, c-format
msgid "%s can not be marked as it is not installed.\n"
-msgstr "%s не может быть помечен, так он не установлен.\n"
+msgstr "%s не может быть помечен, так как он не установлен.\n"
#: cmdline/apt-mark.cc
#, c-format
@@ -3055,7 +3060,7 @@ msgstr "%s уже помечен как зафиксированный.\n"
#: cmdline/apt-mark.cc
#, 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?"
@@ -3098,18 +3103,18 @@ msgid ""
msgstr ""
"Использование: apt-mark [параметры] {auto|manual} пакет1 [пакет2 …]\n"
"\n"
-"apt-mark — простая программа с интерфейсом командной строки\n"
-"для пометки пакетов, что они установлены вручную или автоматически.\n"
-"Также может использоваться для изменения состояния выбора пакетов dpkg(1) и\n"
-"показывать списки пакетов с или без определённой метки.\n"
+"apt-mark — простая программа с интерфейсом командной строки для\n"
+"пометки пакетов как установленных вручную или автоматически. Также\n"
+"может использоваться для изменения состояния выбора пакетов dpkg(1)\n"
+"и показа списка пакетов с определённой меткой или без неё.\n"
#: cmdline/apt-mark.cc
msgid "Mark the given packages as automatically installed"
-msgstr "пометить указанные пакеты, как установленные автоматически"
+msgstr "пометить указанные пакеты как установленные автоматически"
#: cmdline/apt-mark.cc
msgid "Mark the given packages as manually installed"
-msgstr "пометить указанные пакеты, как установленные вручную"
+msgstr "пометить указанные пакеты как установленные вручную"
#: cmdline/apt-mark.cc
msgid "Mark a package as held back"
@@ -3125,7 +3130,7 @@ msgstr "вывести список автоматически установл
#: cmdline/apt-mark.cc
msgid "Print the list of manually installed packages"
-msgstr "вывести список пакетов установленных вручную"
+msgstr "вывести список пакетов, установленных вручную"
#: cmdline/apt-mark.cc
msgid "Print the list of package on hold"
@@ -3133,7 +3138,7 @@ msgstr "вывести список зафиксированных пакето
#: cmdline/apt-sortpkgs.cc
msgid "Unknown package record!"
-msgstr "Запись о неизвестном пакете!"
+msgstr "Неизвестная запись о пакете!"
#: cmdline/apt-sortpkgs.cc
msgid ""
@@ -3145,8 +3150,8 @@ msgid ""
msgstr ""
"Использование: apt-sortpkgs [параметры] файл1 [файл2 …]\n"
"\n"
-"apt-sortpkgs — простой инструмент для сортировки информационных файлов\n"
-"пакетов. По умолчанию, он сортирует информацию о двоичных пакетах,\n"
+"apt-sortpkgs — простой инструмент для сортировки файлов с информацией\n"
+"о пакетах. По умолчанию он сортирует информацию о двоичных пакетах,\n"
"но можно указать параметр -s, и будет выполняться сортировка пакетов\n"
"с исходным кодом.\n"
@@ -3162,12 +3167,11 @@ msgid ""
msgstr ""
"Использование: apt [параметры] команда\n"
"\n"
-"apt — менеджер пакетов с интерфейсом командной строки, предоставляет "
-"команды\n"
-"для поиска и управления, а также запросов информации о пакетах.\n"
-"Он выполняет те же задачи, что и специализированные инструменты APT,\n"
-"например apt-get и apt-cache, но содержит параметры, которые больше\n"
-"подходят для интерактивного использования по умолчанию.\n"
+"apt — менеджер пакетов с интерфейсом командной строки. Он предоставляет\n"
+"команды для поиска и управления, а также запросов информации о пакетах.\n"
+"apt выполняет те же задачи, что и специализированные инструменты APT,\n"
+"например apt-get и apt-cache, но по умолчанию задействует параметры,\n"
+"которые больше подходят для интерактивного использования.\n"
#. query
#: cmdline/apt.cc
@@ -3227,28 +3231,27 @@ msgstr "Во время распаковки возникли ошибки. Па
#: dselect/install
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"
msgstr ""
-"или возникновению новых из-за неудовлетворённых зависимостей. Это нормально, "
-"важны"
+"новых из-за неудовлетворённых зависимостей. Это нормально, важны только"
#: dselect/install
msgid ""
"above this message are important. Please fix them and run [I]nstall again"
msgstr ""
-"только ошибки, указанные в этом сообщении. Исправьте их и выполните "
-"установку ещё раз"
+"ошибки выше данного сообщения. Исправьте их и выполните установку ещё раз"
#: dselect/update
msgid "Merging available information"
-msgstr "Слияние доступной информации"
+msgstr "Объединение доступной информации"
#: ftparchive/apt-ftparchive.cc
msgid "Package extension list is too long"
-msgstr "Список расширений, допустимых для пакетов, слишком длинен"
+msgstr "Список расширений пакетов слишком длинный"
#: ftparchive/apt-ftparchive.cc
#, c-format
@@ -3257,7 +3260,7 @@ msgstr "Ошибка обработки каталога %s"
#: ftparchive/apt-ftparchive.cc
msgid "Source extension list is too long"
-msgstr "Список расширений источников слишком длинен"
+msgstr "Список расширений пакетов с исходным кодом слишком длинный"
#: ftparchive/apt-ftparchive.cc
msgid "Error writing header to contents file"
@@ -3267,7 +3270,7 @@ msgstr ""
#: ftparchive/apt-ftparchive.cc
#, c-format
msgid "Error processing contents %s"
-msgstr "ошибка обработки полного перечня содержимого пакетов (Contents) %s"
+msgstr "Ошибка обработки полного перечня содержимого пакетов (Contents) %s"
#: ftparchive/apt-ftparchive.cc
msgid ""
@@ -3318,20 +3321,22 @@ msgstr ""
" generate config [groups]\n"
" clean config\n"
"\n"
-"apt-ftparchive генерирует индексные файлы архивов Debian. Он поддерживает\n"
-"множество стилей генерации: от полностью автоматического до функциональной "
-"замены\n"
-"программ dpkg-scanpackages и dpkg-scansources\n"
+"apt-ftparchive создаёт индексные файлы архивов Debian. Он поддерживает\n"
+"множество стилей создания: от полностью автоматического до функциональной\n"
+"замены программ dpkg-scanpackages и dpkg-scansources\n"
"\n"
-"apt-ftparchive генерирует файлы Package (списки пакетов) для дерева\n"
-"каталогов, содержащих файлы .deb. Файл Package включает в себя управляющие\n"
-"поля каждого пакета, а также хеш MD5 и размер файла. Значения управляющих\n"
-"полей «приоритет» (Priority) и «секция» (Section) могут быть изменены с\n"
-"помощью файла override.\n"
+"apt-ftparchive создаёт файлы Package (списки пакетов) для дерева каталогов,\n"
+"содержащих файлы .deb. Файл Package включает в себя управляющие поля "
+"каждого\n"
+"пакета, а также хеш MD5 и размер файла. Значения управляющих полей "
+"«приоритет»\n"
+"(Priority) и «секция» (Section) могут быть изменены с помощью файла "
+"override.\n"
"\n"
-"Кроме того, apt-ftparchive может генерировать файлы Sources из дерева\n"
-"каталогов, содержащих файлы .dsc. Для указания файла override в этом \n"
-"режиме можно использовать параметр --source-override.\n"
+"Кроме того, apt-ftparchive может создавать файлы Sources из дерева "
+"каталогов,\n"
+"содержащих файлы .dsc. Для указания файла override в этом режиме необходимо\n"
+"использовать параметр --source-override.\n"
"\n"
"Команды «packages» и «sources» надо выполнять, находясь в корневом каталоге\n"
"дерева, которое вы хотите обработать. BinaryPath должен указывать на место,\n"
@@ -3344,16 +3349,16 @@ msgstr ""
" dists/potato/main/binary-i386/Packages\n"
"\n"
"Параметры:\n"
-" -h Этот текст\n"
-" --md5 Управление генерацией MD5-хешей\n"
-" -s=? Указать файл переназначений (override) для источников\n"
-" -q Не выводить сообщения в процессе работы\n"
-" -d=? Указать кэширующую базу данных (не обязательно)\n"
-" --no-delink Включить режим отладки процесса удаления файлов\n"
-" --contents Управление генерацией полного перечня содержимого пакетов\n"
+" -h этот текст\n"
+" --md5 управление созданием MD5-хешей\n"
+" -s=? указать файл переназначений (override) для файла Sources\n"
+" -q не выводить сообщения в процессе работы\n"
+" -d=? указать кэширующую базу данных (необязательно)\n"
+" --no-delink включить режим отладки процесса DeLink\n"
+" --contents управление созданием полного перечня содержимого пакетов\n"
" (файла Contents)\n"
-" -c=? Использовать указанный файл настройки\n"
-" -o=? Задать значение произвольному параметру настройки"
+" -c=? использовать указанный файл настройки\n"
+" -o=? задать значение произвольному параметру настройки"
#: ftparchive/apt-ftparchive.cc
msgid "No selections matched"
@@ -3367,25 +3372,25 @@ msgstr "В группе пакетов «%s» отсутствуют некот
#: ftparchive/cachedb.cc
#, c-format
msgid "DB was corrupted, file renamed to %s.old"
-msgstr "БД была повреждена, файл переименован в %s.old"
+msgstr "База данных повреждена, файл переименован в %s.old"
#: ftparchive/cachedb.cc
#, c-format
msgid "DB is old, attempting to upgrade %s"
-msgstr "DB устарела, попытка обновить %s"
+msgstr "База данных устарела, попытка обновить %s"
#: ftparchive/cachedb.cc
msgid ""
"DB format is invalid. If you upgraded from an older version of apt, please "
"remove and re-create the database."
msgstr ""
-"Некорректный формат базы данных (DB). Если вы обновляли версию apt, удалите "
-"и создайте базу данных заново."
+"Некорректный формат базы данных. Если вы обновляли версию apt, то удалите и "
+"создайте базу данных заново."
#: ftparchive/cachedb.cc
#, c-format
msgid "Unable to open DB file %s: %s"
-msgstr "Не удалось открыть DB файл %s: %s"
+msgstr "Невозможно открыть файл базы данных %s: %s"
#: ftparchive/cachedb.cc
msgid "Failed to read .dsc"
@@ -3412,7 +3417,7 @@ msgstr "Неизвестный алгоритм сжатия «%s»"
#, c-format
msgid "Compressed output %s needs a compression set"
msgstr ""
-"Для получения сжатого вывода %s необходимо включить использования сжатия"
+"Для получения сжатого вывода %s необходимо указать набор алгоритмов сжатия"
#: ftparchive/multicompress.cc methods/rsh.cc
msgid "Failed to create IPC pipe to subprocess"
@@ -3429,7 +3434,7 @@ msgstr "Процесс-потомок, производящий сжатие"
#: ftparchive/multicompress.cc
#, c-format
msgid "Internal error, failed to create %s"
-msgstr "Внутренняя ошибка, не удалось создать %s"
+msgstr "Внутренняя ошибка: не удалось создать %s"
#: ftparchive/multicompress.cc
msgid "IO to subprocess/file failed"
@@ -3442,7 +3447,7 @@ msgstr "Ошибка чтения во время вычисления MD5"
#: ftparchive/override.cc
#, c-format
msgid "Unable to open %s"
-msgstr "Не удалось открыть %s"
+msgstr "Невозможно открыть %s"
#. skip spaces
#. find end of word
@@ -3474,12 +3479,12 @@ msgstr "Неправильная запись о переназначении (o
#: ftparchive/writer.cc
#, c-format
msgid "W: Unable to read directory %s\n"
-msgstr "W: Не удалось прочитать каталог %s\n"
+msgstr "W: Невозможно прочитать каталог %s\n"
#: ftparchive/writer.cc
#, c-format
msgid "W: Unable to stat %s\n"
-msgstr "W: Не удалось прочитать атрибуты %s\n"
+msgstr "W: Невозможно прочитать атрибуты %s\n"
#: ftparchive/writer.cc
msgid "E: "
@@ -3496,7 +3501,7 @@ msgstr "E: Ошибки относятся к файлу "
#: ftparchive/writer.cc
#, c-format
msgid "Failed to resolve %s"
-msgstr "Не удалось проследовать по ссылке %s"
+msgstr "Не удалось привести %s к каноническому виду"
#: ftparchive/writer.cc
msgid "Tree walking failed"
@@ -3510,17 +3515,17 @@ msgstr "Не удалось открыть %s"
#: ftparchive/writer.cc
#, c-format
msgid " DeLink %s [%s]\n"
-msgstr "DeLink %s [%s]\n"
+msgstr " DeLink %s [%s]\n"
#: ftparchive/writer.cc
#, c-format
msgid "*** Failed to link %s to %s"
-msgstr "*** Не удалось создать ссылку %s на %s"
+msgstr "*** Не удалось создать ссылку %2$s на %1$s"
#: ftparchive/writer.cc
#, c-format
msgid " DeLink limit of %sB hit.\n"
-msgstr " Превышен лимит в %sB в DeLink.\n"
+msgstr " Превышено ограничение в %sB для DeLink.\n"
#: ftparchive/writer.cc
msgid "Archive had no package field"
@@ -3534,17 +3539,21 @@ msgstr " Нет записи о переназначении (override) для
#: ftparchive/writer.cc
#, c-format
msgid " %s maintainer is %s not %s\n"
-msgstr " пакет %s сопровождает %s, а не %s\n"
+msgstr " Пакет %s сопровождает %s, а не %s\n"
#: ftparchive/writer.cc
#, c-format
msgid " %s has no source override entry\n"
-msgstr " Нет записи source override для %s\n"
+msgstr ""
+" Нет записи о переназначении пакетов с исходным кодом (source override) для "
+"%s\n"
#: ftparchive/writer.cc
#, c-format
msgid " %s has no binary override entry either\n"
-msgstr " Нет записи binary override для %s\n"
+msgstr ""
+" Также нет записи о переназначении двоичных пакетов (binary override) для "
+"%s\n"
#: methods/basehttp.cc
msgid "Waiting for headers"
@@ -3552,31 +3561,32 @@ msgstr "Ожидание заголовков"
#: methods/basehttp.cc
msgid "The HTTP server sent an invalid reply header"
-msgstr "Http-сервер послал неверный заголовок"
+msgstr "HTTP-сервер послал неверный заголовок"
#: methods/basehttp.cc
msgid "Bad header line"
-msgstr "Неверный заголовок"
+msgstr "Неверная строка заголовка"
#: methods/basehttp.cc
msgid "The HTTP server sent an invalid Content-Length header"
-msgstr "Http сервер послал неверный заголовок Content-Length"
+msgstr "HTTP-сервер послал неверный заголовок Content-Length"
#: methods/basehttp.cc
msgid "The HTTP server sent an invalid Content-Range header"
-msgstr "Http-сервер послал неверный заголовок Content-Range"
+msgstr "HTTP-сервер послал неверный заголовок Content-Range"
#: methods/basehttp.cc
msgid "This HTTP server has broken range support"
-msgstr "Этот HTTP-сервер не поддерживает скачивание фрагментов файлов"
+msgstr ""
+"Поддержка байтовых диапазонов в данном HTTP-сервере реализована некорректно"
#: methods/basehttp.cc
msgid "Unknown date format"
-msgstr "Неизвестный формат данных"
+msgstr "Неизвестный формат даты"
#: methods/basehttp.cc
msgid "Bad header data"
-msgstr "Неверный заголовок данных"
+msgstr "Неверные данные заголовка"
#: methods/basehttp.cc
msgid "Connection failed"
@@ -3586,6 +3596,8 @@ msgstr "Соединение разорвано"
#, c-format
msgid "File has unexpected size (%llu != %llu). Mirror sync in progress?"
msgstr ""
+"Файл имеет неожиданный размер (%llu != %llu). Возможно, выполняется "
+"синхронизация зеркала?"
#: methods/basehttp.cc
#, c-format
@@ -3593,8 +3605,8 @@ msgid ""
"Automatically disabled %s due to incorrect response from server/proxy. (man "
"5 apt.conf)"
msgstr ""
-"Автоматическое отключение %s из-за некорректного ответа сервера/прокси (man "
-"5 apt.conf)."
+"Автоматическое отключение %s из-за некорректного ответа сервера/прокси. (man "
+"5 apt.conf)"
#: methods/basehttp.cc
msgid "Internal error"
@@ -3603,24 +3615,24 @@ msgstr "Внутренняя ошибка"
#: methods/cdrom.cc
#, c-format
msgid "Unable to read the cdrom database %s"
-msgstr "Невозможно прочесть базу %s с CD"
+msgstr "Невозможно прочесть базу данных CD-ROM %s"
#: methods/cdrom.cc
msgid ""
"Please use apt-cdrom to make this CD-ROM recognized by APT. apt-get update "
"cannot be used to add new CD-ROMs"
msgstr ""
-"Пожалуйста, используйте apt-cdrom, чтобы APT смог распознать данный CD. apt-"
-"get update не используется для добавления нового CD"
+"Используйте apt-cdrom, чтобы APT смог распознать данный CD-ROM. apt-get "
+"update не используется для добавления новых CD-ROM"
#: methods/cdrom.cc
msgid "Wrong CD-ROM"
-msgstr "Ошибочный CD"
+msgstr "Неверный CD-ROM"
#: methods/cdrom.cc
#, c-format
msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
-msgstr "Невозможно размонтировать CD-ROM в %s, возможно он ещё используется."
+msgstr "Не удалось размонтировать CD-ROM в %s; возможно, он ещё используется."
#: methods/cdrom.cc
msgid "Disk not found."
@@ -3634,7 +3646,7 @@ msgstr "Файл не найден"
#: methods/connect.cc
#, c-format
msgid "Direct connection to %s domains is blocked by default."
-msgstr ""
+msgstr "Прямое подключение к домену %s по умолчанию заблокировано."
#: methods/connect.cc
#, c-format
@@ -3642,10 +3654,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
@@ -3655,7 +3666,7 @@ msgstr "Соединение с %s (%s)"
#: methods/connect.cc
#, c-format
msgid "Could not create a socket for %s (f=%u t=%u p=%u)"
-msgstr "Не удаётся создать сокет для %s (f=%u t=%u p=%u)"
+msgstr "Не удалось создать сокет для %s (f=%u t=%u p=%u)"
#: methods/connect.cc
#, c-format
@@ -3669,12 +3680,13 @@ msgstr "Неудачно"
#: methods/connect.cc
#, c-format
msgid "Could not connect to %s:%s (%s)."
-msgstr "Не удаётся соединиться с %s:%s (%s)."
+msgstr "Не удалось соединиться с %s:%s (%s)."
#: methods/connect.cc
#, c-format
msgid "Could not connect to %s:%s (%s), connection timed out"
-msgstr "Не удаётся соединиться с %s:%s (%s), connection timed out"
+msgstr ""
+"Не удалось соединиться с %s:%s (%s): время ожидания для соединения истекло"
#. We say this mainly because the pause here is for the
#. ssh connection that is still going
@@ -3686,27 +3698,27 @@ msgstr "Соединение с %s"
#: methods/connect.cc
#, c-format
msgid "Could not resolve '%s'"
-msgstr "Не удалось найти IP-адрес для «%s»"
+msgstr "Не удалось разрешить «%s»"
#: methods/connect.cc
#, c-format
msgid "Temporary failure resolving '%s'"
-msgstr "Временная ошибка при попытке получить IP-адрес «%s»"
+msgstr "Временная ошибка при разрешении «%s»"
#: methods/connect.cc
#, c-format
msgid "System error resolving '%s:%s'"
-msgstr "Системная ошибка при определении «%s:%s»"
+msgstr "Системная ошибка при разрешении «%s:%s»"
#: methods/connect.cc
#, c-format
msgid "Something wicked happened resolving '%s:%s' (%i - %s)"
-msgstr "Что-то странное произошло при определении «%s:%s» (%i - %s)"
+msgstr "Что-то странное произошло при разрешении «%s:%s» (%i - %s)"
#: methods/connect.cc
#, c-format
msgid "Unable to connect to %s:%s:"
-msgstr "Невозможно соединиться с %s: %s:"
+msgstr "Невозможно соединиться с %s:%s:"
#: methods/copy.cc
msgid "Failed to stat"
@@ -3714,7 +3726,7 @@ msgstr "Не удалось получить атрибуты"
#: methods/file.cc
msgid "Invalid URI, local URIS must not start with //"
-msgstr "Неправильный URI, локальный URI не должен начинаться с //"
+msgstr "Неправильный URI: локальный URI не должен начинаться с //"
#. Login must be before getpeername otherwise dante won't work.
#: methods/ftp.cc
@@ -3723,7 +3735,7 @@ msgstr "Вход в систему"
#: methods/ftp.cc
msgid "Unable to determine the peer name"
-msgstr "Невозможно определить имя удалённого сервера"
+msgstr "Невозможно определить имя удалённого узла"
#: methods/ftp.cc
msgid "Unable to determine the local name"
@@ -3749,7 +3761,7 @@ msgid ""
"A proxy server was specified but no login script, Acquire::ftp::ProxyLogin "
"is empty."
msgstr ""
-"Proxy-сервер указан, однако нет сценария входа в систему, Acquire::ftp::"
+"Прокси-сервер указан, однако нет сценария входа в систему: Acquire::ftp::"
"ProxyLogin пуст."
#: methods/ftp.cc
@@ -3787,12 +3799,11 @@ msgstr "Не удалось создать сокет"
#: methods/ftp.cc
msgid "Could not connect data socket, connection timed out"
msgstr ""
-"Не удалось присоединиться к сокету данных, время на установление соединения "
-"истекло"
+"Не удалось присоединить сокет данных: время ожидания для соединения истекло"
#: methods/ftp.cc
msgid "Could not connect passive socket."
-msgstr "Невозможно присоединить пассивный сокет"
+msgstr "Не удалось присоединить пассивный сокет"
#: methods/ftp.cc
msgid "getaddrinfo was unable to get a listening socket"
@@ -3800,7 +3811,7 @@ msgstr "Вызов getaddrinfo не смог получить сокет"
#: methods/ftp.cc
msgid "Could not bind a socket"
-msgstr "Невозможно присоединиться к сокету"
+msgstr "Не удалось привязать сокет"
#: methods/ftp.cc
msgid "Could not listen on the socket"
@@ -3826,7 +3837,7 @@ msgstr "Команда EPRT не выполнена, сервер сообщил
#: methods/ftp.cc
msgid "Data socket connect timed out"
-msgstr "Время установления соединения для сокета данных истекло"
+msgstr "Время на установление соединения для сокета данных истекло"
#: methods/ftp.cc
msgid "Unable to accept connection"
@@ -3843,7 +3854,7 @@ msgstr "Невозможно получить файл, сервер сообщ
#: methods/ftp.cc methods/rsh.cc
msgid "Data socket timed out"
-msgstr "Время ожидания соединения для сокета данных истекло"
+msgstr "Время ожидания для сокета данных истекло"
#: methods/ftp.cc
#, c-format
@@ -3865,7 +3876,7 @@ msgstr "Невозможно вызвать "
msgid ""
"Signed file isn't valid, got '%s' (does the network require authentication?)"
msgstr ""
-"Подписанный файл некорректен, получено «%s» (возможно в сети требуется "
+"Некорректный подписанный файл: получено «%s» (возможно, в сети требуется "
"аутентификация?)"
#: methods/gpgv.cc
@@ -3876,13 +3887,14 @@ msgstr "Найдена как минимум одна неправильная
msgid ""
"Internal error: Good signature, but could not determine key fingerprint?!"
msgstr ""
-"Внутренняя ошибка: Правильная подпись, но не удалось определить отпечаток "
+"Внутренняя ошибка: правильная подпись, но не удалось определить отпечаток "
"ключа?!"
#: methods/gpgv.cc
msgid "Could not execute 'apt-key' to verify signature (is gnupg installed?)"
msgstr ""
-"Не удалось выполнить «apt-key» для проверки подписи (gnupg установлена?)"
+"Не удалось выполнить «apt-key» для проверки подписи (программа gnupg "
+"установлена?)"
#: methods/gpgv.cc
msgid "Unknown error executing apt-key"
@@ -3896,7 +3908,7 @@ msgstr "При подписи ключом %s используется нест
#: methods/gpgv.cc
msgid "The following signatures were invalid:\n"
-msgstr "Следующие подписи неверные:\n"
+msgstr "Следующие подписи неверны:\n"
#: methods/gpgv.cc
msgid ""
@@ -3912,7 +3924,7 @@ msgstr "Ошибка записи в файл"
#: methods/http.cc
msgid "Error reading from server. Remote end closed connection"
-msgstr "Ошибка чтения, удалённый сервер прервал соединение"
+msgstr "Ошибка чтения: удалённый сервер прервал соединение"
#: methods/http.cc
msgid "Error reading from server"
diff --git a/test/integration/test-apt-get-autoremove b/test/integration/test-apt-get-autoremove
index 6f3452fbd..4dba4f164 100755
--- a/test/integration/test-apt-get-autoremove
+++ b/test/integration/test-apt-get-autoremove
@@ -9,6 +9,12 @@ configarchitecture 'i386'
buildsimplenativepackage 'unrelated' 'all' '1' 'unstable'
buildsimplenativepackage 'po-debconf' 'all' '1.0.16' 'unstable'
buildsimplenativepackage 'debhelper' 'all' '8.0.0' 'unstable' 'Depends: po-debconf'
+buildsimplenativepackage 'base-files' 'all' '10' 'unstable' 'Essential: yes'
+buildsimplenativepackage 'fdisk' 'all' '2.30.2' 'unstable' 'XB-Important: yes'
+buildsimplenativepackage 'linux-image' 'all' '4.9.80' 'unstable'
+buildsimplenativepackage 'hold-me' 'all' '1.0' 'unstable'
+buildsimplenativepackage 'remove-me' 'all' '1.0' 'unstable'
+buildsimplenativepackage 'system-base' 'all' '1.0' 'unstable' 'Depends: unrelated, base-files, fdisk, linux-image, hold-me, remove-me'
setupaptarchive
testsuccess aptget install unrelated debhelper -y
@@ -158,6 +164,25 @@ testsuccess aptget install debhelper --solver apt -y -o Debug::pkgDepCache::Mark
testmarkedauto 'po-debconf'
testdpkgstatus 'pi' '1' 'unrelated'
+testsuccess aptget install system-base debhelper -y
+testdpkginstalled 'debhelper' 'po-debconf' 'system-base' 'base-files' 'fdisk' 'linux-image' 'hold-me' 'remove-me'
+testsuccess aptmark hold 'hold-me'
+echo 'APT::NeverAutoRemove { "^linux-image$"; };' > rootdir/etc/apt/apt.conf.d/00autoremove
+testsuccess aptget remove system-base -y
+testsuccess aptget autoremove -y -o Debug::pkgAutoRemove=yes
+DEBUGLOG=${TMPWORKINGDIRECTORY}/rootdir/tmp/autoremove.debuglog
+cp "${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output" "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: fdisk:i386 2.30.2 (Important)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: base-files:i386 10 (Essential)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: unrelated:i386 1 (Manual-Installed)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: hold-me:i386 1.0 (Hold)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: po-debconf:i386 1.0.16 (Dependency)' "$DEBUGLOG"
+testsuccess grep -Fx 'Marking: linux-image:i386 4.9.80 (Blacklisted [APT::NeverAutoRemove])' "$DEBUGLOG"
+testdpkginstalled 'debhelper' 'po-debconf' 'base-files' 'fdisk' 'linux-image'
+testdpkgstatus 'hi' '1' 'hold-me'
+testdpkgnotinstalled 'remove-me'
+testdpkgstatus 'pi' '1' 'unrelated'
+
insertinstalledpackage 'bar' 'all' '1' 'Depends: foo-provider'
insertinstalledpackage 'foo-multi1-1' 'all' '1' 'Provides: foo-provider
Source: foo-multi (1)'
diff --git a/test/integration/test-bug-611729-mark-as-manual b/test/integration/test-bug-611729-mark-as-manual
index 97ef846e3..63f8245a7 100755
--- a/test/integration/test-bug-611729-mark-as-manual
+++ b/test/integration/test-bug-611729-mark-as-manual
@@ -56,7 +56,7 @@ testdpkginstalled b c
testmarkedauto 'b'
sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d'
-if [ -n "$SUDO_USER" ]; then
+if [ -n "$SUDO_USER" ] && [ "$(id -u "$SUDO_USER")" -gt 0 ]; then
testfileequal 'rootdir/var/log/apt/history.log' "
Requested-By: $SUDO_USER ($(id -u "$SUDO_USER"))
Reinstall: b:i386 (1.0)"
diff --git a/test/integration/test-disappearing-packages b/test/integration/test-disappearing-packages
index e8748e6bc..f3fed04f3 100755
--- a/test/integration/test-disappearing-packages
+++ b/test/integration/test-disappearing-packages
@@ -60,7 +60,7 @@ all files have been overwritten by other packages:
Note: This is done automatically and on purpose by dpkg.' tail -n 4 disappear.output
sed -i rootdir/var/log/apt/history.log -e '/^Commandline: / d' -e '/^Start-Date: / d' -e '/^End-Date: / d' -e "s#:$(getarchitecture 'native') #:native #"
-if [ -n "$SUDO_USER" ]; then
+if [ -n "$SUDO_USER" ] && [ "$(id -u "$SUDO_USER")" -gt 0 ]; then
testfileequal 'rootdir/var/log/apt/history.log' "
Requested-By: $SUDO_USER ($(id -u "$SUDO_USER"))
Install: old-pkg:native (1)
diff --git a/test/integration/test-partial-file-support b/test/integration/test-partial-file-support
index 9b5eed1e5..88fa91324 100755
--- a/test/integration/test-partial-file-support
+++ b/test/integration/test-partial-file-support
@@ -24,7 +24,7 @@ testdownloadfile() {
else
msgpass
fi
- sed -e '/^ <- / s#%20# #g' -e '/^ <- / s#%0a#\n#g' "$DOWNLOADLOG" | grep '^.*-Hash: ' > receivedhashes.log
+ sed -e '/^ <- / s#%20# #g' -e '/^ <- / s#%0a#\n#g' "$DOWNLOADLOG" | grep '^.*-Hash: ' > receivedhashes.log || true
testsuccess test -s receivedhashes.log
local HASHES_OK=0
local HASHES_BAD=0
diff --git a/test/integration/test-pdiff-usage b/test/integration/test-pdiff-usage
index 5a650ad83..7cda2ee45 100755
--- a/test/integration/test-pdiff-usage
+++ b/test/integration/test-pdiff-usage
@@ -138,6 +138,8 @@ SHA256-Download:
mkdir -p "${BYHASH}"
find "${NORMAL}/" -maxdepth 1 -name "Index*" -exec mv '{}' "$BYHASH" \;
ln -s "${BYHASH}/Index.gz" "${BYHASH}/$(sha256sum "${BYHASH}/Index.gz" | cut -f1 -d' ')"
+ echo 'foobar' > "${BYHASH}/$(sha256sum "$PATCHFILE" | cut -f1 -d' ')"
+ echo 'foobar' > "${BYHASH}/$(sha256sum "${PATCHFILE}.gz" | cut -f1 -d' ')"
rm -rf rootdir/var/lib/apt/lists
cp -a rootdir/var/lib/apt/lists-bak rootdir/var/lib/apt/lists
wasmergeused "$@" -o Acquire::By-Hash=force
@@ -398,7 +400,8 @@ testcase -o Acquire::IndexTargets::deb::Packages::KeepCompressed=true
partialleftovers() { generatepartialleftovers "redirectme_Packages.${LOWCOSTEXT}" "redirectme_Packages-patched.${LOWCOSTEXT}"; }
-webserverconfig 'aptwebserver::redirect::replace::/redirectme/' "http://0.0.0.0:${APTHTTPPORT}/"
+# redirect the InRelease file only – the other files are auto-redirected by apt
+webserverconfig 'aptwebserver::redirect::replace::/redirectme/I' "http://0.0.0.0:${APTHTTPPORT}/I"
rewritesourceslist "http://localhost:${APTHTTPPORT}/redirectme"
aptautotest_apt_update() {
aptautotest_aptget_update "$@"