--- /dev/null
+
+You can build apt from arch, but this needs the following additional
+packages (in addtion to the usual build-depends):
+xmlto perlsgml sgml2x sgmlspl docbook
+
+then run:
+
+$ debian/rules arch-build
+
+that will build packages in the "debian/arch-build" directory. It will
+honor "DEB_BUILD_PROG_OPTS" as options that are passed to debuild (e.g. -S
+may be usefull).
reports to that fd. The status information is seperated with a ':',
there are the following status conditions:
-status = {"pmstatus", "dlstatus", "conffile-prompt", "error" }
+status = {"pmstatus", "dlstatus", "conffile-prompt", "error", "media-change" }
The reason for using a fd instead of a OpProgress class is that many
apt frontend fork a (vte) terminal for the actual installation.
pmconffile:conffile:percent:'current-conffile' 'new-conffile' useredited distedited
+media-change
+------------
+media-change:medium:drive:human-readable string
+
+example:
+media-change: Ubuntu 5.10 _Breezy Badger_ - Alpha i386 (20050830):/cdrom/:Please insert the disc labeled: 'Ubuntu 5.10 _Breezy Badger_ - Alpha i386 (20050830)' in the drive '/cdrom/' and press enter.
+
dlstatus
--------
{
Decompression = false;
Erase = false;
-
+
DestFile = _config->FindDir("Dir::State::lists") + "partial/";
DestFile += URItoFileName(URI);
if(comprExt.empty())
{
- // autoselect
- if(FileExists("/usr/bin/bzip2"))
- Desc.URI = URI + ".bz2";
- else
- Desc.URI = URI + ".gz";
+ // autoselect the compression method
+ if(FileExists("/usr/bin/bzip2"))
+ CompressionExtension = ".bz2";
+ else
+ CompressionExtension = ".gz";
} else {
- Desc.URI = URI + comprExt;
+ CompressionExtension = comprExt;
}
+ Desc.URI = URI + CompressionExtension;
Desc.Description = URIDesc;
Desc.Owner = this;
string Final = _config->FindDir("Dir::State::lists") + URItoFileName(RealURI);
unlink(Final.c_str());
+ // if we get a timeout if fail
+ if(LookupTag(Message,"FailReason") == "Timeout" ||
+ LookupTag(Message,"FailReason") == "TmpResolveFailure") {
+ Item::Failed(Message,Cnf);
+ return;
+ }
+
// queue a pkgAcqMetaIndex with no sigfile
new pkgAcqMetaIndex(Owner, MetaIndexURI, MetaIndexURIDesc, MetaIndexShortDesc,
"", IndexTargets, MetaIndexParser);
{
Status = StatError;
ErrorText = _("MD5Sum mismatch");
- Rename(DestFile,DestFile + ".FAILED");
+ if(FileExists(DestFile))
+ Rename(DestFile,DestFile + ".FAILED");
return;
}
}
pkgAcquire::ItemDesc Desc;
string RealURI;
string ExpectedMD5;
-
+ string CompressionExtension;
+
public:
// Specialized action members
virtual void Done(string Message,unsigned long Size,string Md5Hash,
pkgAcquire::MethodConfig *Cnf);
virtual string Custom600Headers();
- virtual string DescURI() {return RealURI + ".gz";};
+ virtual string DescURI() {return RealURI + CompressionExtension;};
pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc,
string ShortDesct, string ExpectedMD5, string compressExt="");
MyMessages.erase(MyMessages.begin());
}
- return !StringToBool(LookupTag(Message,"Fail"),false);
+ return !StringToBool(LookupTag(Message,"Failed"),false);
}
Messages.push_back(Message);
#include <apti18n.h>
#include <iostream>
+#include <sstream>
#include <fstream>
#include <sys/stat.h>
/* */
bool pkgAcquire::Worker::MediaChange(string Message)
{
+ int status_fd = _config->FindI("APT::Status-Fd",-1);
+ if(status_fd > 0)
+ {
+ string Media = LookupTag(Message,"Media");
+ string Drive = LookupTag(Message,"Drive");
+ ostringstream msg,status;
+ ioprintf(msg,_("Please insert the disc labeled: "
+ "'%s' "
+ "in the drive '%s' and press enter."),
+ Media.c_str(),Drive.c_str());
+ status << "media-change: " // message
+ << Media << ":" // media
+ << Drive << ":" // drive
+ << msg.str() // l10n message
+ << endl;
+ write(status_fd, status.str().c_str(), status.str().size());
+ }
+
if (Log == 0 || Log->MediaChange(LookupTag(Message,"Media"),
LookupTag(Message,"Drive")) == false)
{
// Try to resolve problems only by using keep
bool ResolveByKeep();
-
+
+ // Install all protected packages
void InstallProtect();
pkgProblemResolver(pkgDepCache *Cache);
void operator ++(int) {if (Prv != Owner->ProvideP) Prv = Owner->ProvideP +
(Type == PrvVer?Prv->NextPkgProv:Prv->NextProvides);};
inline void operator ++() {operator ++(0);};
- inline bool end() const {return Prv == Owner->ProvideP?true:false;};
+ inline bool end() const {return Owner == 0 || Prv == Owner->ProvideP?true:false;};
// Comparison
inline bool operator ==(const PrvIterator &B) const {return Prv == B.Prv;};
inline PkgIterator OwnerPkg() {return PkgIterator(*Owner,Owner->PkgP + Owner->VerP[Prv->Version].ParentPkg);};
inline unsigned long Index() const {return Prv - Owner->ProvideP;};
+ inline PrvIterator() : Prv(0), Type(PrvVer), Owner(0) {};
+
inline PrvIterator(pkgCache &Owner,Provides *Trg,Version *) :
Prv(Trg), Type(PrvVer), Owner(&Owner)
{
{
F.getline(Buffer,sizeof(Buffer));
CurLine++;
+ if (F.fail() && !F.eof())
+ return _error->Error(_("Line %u too long in source list %s."),
+ CurLine,File.c_str());
_strtabexpand(Buffer,sizeof(Buffer));
_strstrip(Buffer);
string DFile = _config->FindFile("Dir::State::cdroms");
if (FileExists(DFile) == true)
{
- if (ReadConfigFile(Database,DFile) == false)
+ if (ReadConfigFile(Database,DFile) == false)
return _error->Error("Unable to read the cdrom database %s",
DFile.c_str());
}
log->Update(msg.str(), STEP_SCAN);
}
- if (List.size() == 0 && SourceList.size() == 0)
+ if (List.size() == 0 && SourceList.size() == 0)
+ {
+ UnmountCdrom(CDROM);
return _error->Error("Unable to locate any package files, perhaps this is not a Debian Disc");
+ }
// Check if the CD is in the database
string Name;
Name.empty() == true)
{
if(!log)
+ {
+ UnmountCdrom(CDROM);
return _error->Error("No disc name found and no way to ask for it");
+ }
while(true) {
if(!log->AskCdromName(Name)) {
{
string::size_type Space = (*I).find(' ');
if (Space == string::npos)
+ {
+ UnmountCdrom(CDROM);
return _error->Error("Internal error");
+ }
if(log) {
msg.str("");
{
string::size_type Space = (*I).find(' ');
if (Space == string::npos)
+ {
+ UnmountCdrom(CDROM);
return _error->Error("Internal error");
+ }
if(log) {
msg.str("");
Cnf.CndSet("Dir::State::userstatus","status.user"); // Defunct
Cnf.CndSet("Dir::State::status","/var/lib/dpkg/status");
Cnf.CndSet("Dir::Bin::dpkg","/usr/bin/dpkg");
-
+
+ if (StatusFile) {
+ delete StatusFile;
+ StatusFile = 0;
+ }
+
return true;
}
/*}}}*/
if (Files[I->ID] == 0)
return;
}
+ // We store that to make sure that the destructor won't segfault,
+ // even if the Cache object was destructed before this instance.
+ PackageFileCount = Cache.HeaderP->PackageFileCount;
}
/*}}}*/
// Records::~pkgRecords - Destructor /*{{{*/
/* */
pkgRecords::~pkgRecords()
{
- for (unsigned I = 0; I != Cache.HeaderP->PackageFileCount; I++)
+ for (unsigned I = 0; I != PackageFileCount; I++)
delete Files[I];
delete [] Files;
}
pkgCache &Cache;
Parser **Files;
+ int PackageFileCount;
public:
class pkgPolicy : public pkgDepCache::Policy
{
+ protected:
+
struct Pin
{
pkgVersionMatch::MatchType Type;
string Pkg;
};
- protected:
-
Pin *Pins;
signed short *PFPriority;
vector<Pin> Defaults;
Media.c_str(),Drive.c_str());
char C = 0;
+ bool bStatus = true;
while (C != '\n' && C != '\r')
- read(STDIN_FILENO,&C,1);
-
- Update = true;
- return true;
+ {
+ int len = read(STDIN_FILENO,&C,1);
+ if(C == 'c' || len <= 0)
+ bStatus = false;
+ }
+
+ if(bStatus)
+ Update = true;
+ return bStatus;
}
/*}}}*/
// See if we need to prompt
if (Cache->InstCount() == ExpectedInst && Cache->DelCount() == 0)
return InstallPackages(Cache,false,false);
-
+
return InstallPackages(Cache,false);
}
/*}}}*/
if (system(S) != 0)
{
fprintf(stderr,_("Unpack command '%s' failed.\n"),S);
+ fprintf(stderr,_("Check if the 'dpkg-dev' package is installed.\n"));
_exit(1);
}
}
AC_CONFIG_HEADER(include/config.h:buildlib/config.h.in include/apti18n.h:buildlib/apti18n.h.in)
dnl -- SET THIS TO THE RELEASE VERSION --
-AC_DEFINE_UNQUOTED(VERSION,"0.6.40.2")
+AC_DEFINE_UNQUOTED(VERSION,"0.6.41.1")
PACKAGE="apt"
AC_DEFINE_UNQUOTED(PACKAGE,"$PACKAGE")
AC_SUBST(PACKAGE)
dnl Check for the XML tools needed to build man pages
AC_PATH_PROG(XMLTO,xmlto)
-dnl Check for the XML tools needed to build man pages
-AC_PATH_PROG(XMLTO,xmlto)
-
dnl Check for YODL
dnl AC_CHECK_PROG(YODL_MAN,yodl2man,"yes","")
--- /dev/null
+doc/examples/apt-ftparchive.conf
\ No newline at end of file
# check age
if [ ! $MaxAge -eq 0 ] && [ ! $MinAge -eq 0 ]; then
- find $Cache -name "*.deb" -mtime +$MaxAge -and -not -mtime -$MinAge -print0 | xargs -r -0 rm -f
+ find $Cache -name "*.deb" \( -mtime +$MaxAge -and -ctime +$MaxAge \) -and -not \( -mtime -$MinAge -or -ctime -$MinAge \) -print0 | xargs -r -0 rm -f
elif [ ! $MaxAge -eq 0 ]; then
- find $Cache -name "*.deb" -mtime +$MaxAge -print0 | xargs -r -0 rm -f
+ find $Cache -name "*.deb" -ctime +$MaxAge -and -mtime +$MaxAge -print0 | xargs -r -0 rm -f
fi
# check size
# check for MinAge of the file
if [ ! $MinAge -eq 0 ]; then
- mtime=$(date --date=$(date -r $file --iso-8601) +%s)
- delta=$(($now-$mtime))
+ # check both ctime and mtime
+ mtime=$(stat -c %Y $file)
+ ctime=$(stat -c %Z $file)
+ if [ $mtime -gt $ctime ]; then
+ delta=$(($now-$mtime))
+ else
+ delta=$(($now-$ctime))
+ fi
#echo "$file ($delta), $MinAge"
if [ $delta -le $MinAge ]; then
#echo "Skiping $file (delta=$delta)"
doc/apt-config.8
doc/apt-get.8
doc/apt-key.8
+doc/apt-secure.8
doc/apt.8
doc/apt.conf.5
doc/apt_preferences.5
-apt (0.6.40.2) unstable; urgency=low
+apt (0.6.41.1) unstable; urgency=low
+
+ * apt-pkg/cdrom.cc:
+ - unmount the cdrom when apt failed to locate any package files
+ * allow cdrom failures and fallback to other sources in that case
+ (closes: #44135)
+ * better error text when dpkg-source fails
+
+ -- Michael Vogt <michael.vogt@ubuntu.com> Mon, 12 Sep 2005 13:45:53 +0200
+
+apt (0.6.41) unstable; urgency=low
* improved the support for "error" and "conffile" reporting from
dpkg, added the format to README.progress-reporting
* added README.progress-reporting to the apt-doc package
-
- --
+ * improved the network timeout handling, if a index file from a
+ sources.list times out or EAI_AGAIN is returned from getaddrinfo,
+ don't try to get the other files from that entry
+ * Support architecture-specific extra overrides
+ (closes: #225947). Thanks to Anthony Towns for idea and
+ the patch, thanks to Colin Watson for testing it.
+ * Javier Fernandez-Sanguino Pen~a:
+ - Added a first version of an apt-secure.8 manpage, and modified
+ apt-key and apt.end accordingly. Also added the 'update'
+ argument to apt-key which was previously not documented
+ (Closes: #322120)
+ * Andreas Pakulat:
+ - added example apt-ftparchive.conf file to doc/examples
+ (closes: #322483)
+ * Fix a incorrect example in the man-page (closes: #282918)
+ * Fix a bug for very long lines in the apt-cdrom code (closes: #280356)
+ * Fix a manual page bug (closes: #316314)
+ * Do md5sum checking for file and cdrom method (closes: #319142)
+ * Change pkgPolicy::Pin from private to protected to let subclasses
+ access it too (closes: #321799)
+ * add default constructor for PrvIterator (closes: #322267)
+ * Reread status configuration on debSystem::Initialize()
+ (needed for apt-proxy, thanks to Otavio for this patch)
+
+ -- Michael Vogt <mvo@debian.org> Mon, 5 Sep 2005 22:59:03 +0200
apt (0.6.40.1) unstable; urgency=low
cp $(addprefix $(BLD)/bin/apt-,$(APT_UTILS)) debian/$@/usr/bin/
dh_installdocs -p$@
+ dh_installexamples -p$@
# Install the man pages..
dh_installman -p$@
<para>
List trusted keys.
+
</para>
</listitem>
</varlistentry>
+
+ <varlistentry><term>update</term>
+ <listitem>
+ <para>
+
+ Update the local keyring with the keyring of Debian archive
+ keys and removes from the keyring the archive keys which are no
+ longer valid.
+
+ </para>
+
+ </listitem>
+ </varlistentry>
+ </variablelist>
+</refsect1>
+
+ <refsect1><title>Files</title>
+ <variablelist>
+ <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>
+ <listitem><para>Keyring of local trusted keys, new keys will be added here.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/etc/apt/trustdb.gpg</filename></term>
+ <listitem><para>Local trust database of archive keys.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/usr/share/keyrings/debian-archive-keyring.gpg</filename></term>
+ <listitem><para>Keyring of Debian archive trusted keys.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term><filename>/usr/share/keyrings/debian-archive-removed-keys.gpg</filename></term>
+ <listitem><para>Keyring of Debian archive removed trusted keys.</para></listitem>
+ </varlistentry>
+
+
+
</variablelist>
+
</refsect1>
-<!-- <refsect1><title>See Also</title> -->
-<!-- <para> -->
-<!-- &apt-conf;, &apt-get;, &sources-list; -->
-<!-- </refsect1> -->
+<refsect1><title>See Also</title>
+<para>
+&apt-get;, &apt-secure;
+</para>
+</refsect1>
&manbugs;
&manauthor;
--- /dev/null
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
+
+<!ENTITY % aptent SYSTEM "apt.ent">
+%aptent;
+
+]>
+
+<refentry>
+ &apt-docinfo;
+
+ <refmeta>
+ <refentrytitle>apt-secure</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </refmeta>
+
+<!-- NOTE: This manpage has been written based on the
+ Securing Debian Manual ("Debian Security
+ Infrastructure" chapter) and on documentation
+ available at the following sites:
+ http://wiki.debian.net/?apt06
+ http://www.syntaxpolice.org/apt-secure/
+ http://www.enyo.de/fw/software/apt-secure/
+-->
+<!-- TODO: write a more verbose example of how it works with
+ a sample similar to
+ http://www.debian-administration.org/articles/174
+ ?
+-->
+
+
+ <!-- Man page title -->
+ <refnamediv>
+ <refname>apt-secure</refname>
+ <refpurpose>Archive authentication support for APT</refpurpose>
+ </refnamediv>
+
+ <refsect1><title>Description</title>
+ <para>
+ Starting with version 0.6, <command>apt</command> contains code
+ that does signature checking of the Release file for all
+ archives. This ensures that packages in the archive can't be
+ modified by people who have no access to the Release file signing
+ key.
+ </para>
+
+ <para>
+ If a package comes from a archive without a signature or with a
+ signature that apt does not have a key for that package is
+ considered untrusted and installing it will result in a big
+ warning. <command>apt-get</command> will currently only warn
+ for unsigned archives, future releases might force all sources
+ to be verified before downloading packages from them.
+ </para>
+
+ <para>
+ The package frontends &apt-get;, &aptitude; and &synaptic; support this new
+ authentication feature.
+ </para>
+</refsect1>
+
+ <refsect1><title>Trusted archives</title>
+
+ <para>
+ The chain of trust from an apt archive to the end user is made up of
+ different steps. <command>apt-secure</command> is the last step in
+ this chain, trusting an archive does not mean that the packages
+ that you trust it do not contain malicious code but means that you
+ trust the archive maintainer. Its the archive maintainer
+ responsibility to ensure that the archive integrity is correct.
+ </para>
+
+ <para>apt-secure does not review signatures at a
+ package level. If you require tools to do this you should look at
+ <command>debsig-verify</command> and
+ <command>debsign</command> (provided in the debsig-verify and
+ devscripts packages respectively).</para>
+
+ <para>
+ The chain of trust in Debian starts when a maintainer uploads a new
+ package or a new version of a package to the Debian archive. This
+ upload in order to become effective needs to be signed by a key of
+ a maintainer within the Debian maintainer's keyring (available in
+ the debian-keyring package). Maintainer's keys are signed by
+ other maintainers following pre-established procedures to
+ ensure the identity of the key holder.
+ </para>
+
+ <para>
+ Once the uploaded package is verified and included in the archive,
+ the maintainer signature is stripped off, an MD5 sum of the package
+ is computed and put in the Packages file. The MD5 sum of all of the
+ packages files are then computed and put into the Release file. The
+ Release file is then signed by the archive key (which is created
+ once a year and distributed through the FTP server. This key is
+ also on the Debian keyring.
+ </para>
+
+ <para>
+ Any end user can check the signature of the Release file, extract the MD5
+ sum of a package from it and compare it with the MD5 sum of the
+ package he downloaded. Prior to version 0.6 only the MD5 sum of the
+ downloaded Debian package was checked. Now both the MD5 sum and the
+ signature of the Release file are checked.
+ </para>
+
+ <para>Notice that this is distinct from checking signatures on a
+ per package basis. It is designed to prevent two possible attacks:
+ </para>
+
+ <itemizedlist>
+ <listitem><para><literal>Network "man in the middle"
+ attacks</literal>. Without signature checking, a malicious
+ agent can introduce himself in the package download process and
+ provide malicious software either by controlling a network
+ element (router, switch, etc.) or by redirecting traffic to a
+ rogue server (through arp or DNS spoofing
+ attacks).</para></listitem>
+
+ <listitem><para><literal>Mirror network compromise</literal>.
+ Without signature checking, a malicious agent can compromise a
+ mirror host and modify the files in it to propage malicious
+ software to all users downloading packages from that
+ host.</para></listitem>
+ </itemizedlist>
+
+ <para>However, it does not defend against a compromise of the
+ Debian master server itself (which signs the packages) or against a
+ compromise of the key used to sign the Release files. In any case,
+ this mechanism can complement a per-package signature.</para>
+</refsect1>
+
+ <refsect1><title>User configuration</title>
+ <para>
+ <command>apt-key</command> is the program that manages the list
+ of keys used by apt. It can be used to add or remove keys although
+ an installation of this release will automatically provide the
+ default Debian archive signing keys used in the Debian package
+ repositories.
+ </para>
+ <para>
+ In order to add a new key you need to first download it
+ (you should make sure you are using a trusted communication channel
+ when retrieving it), add it with <command>apt-key</command> and
+ then run <command>apt-get update</command> so that apt can download
+ and verify the <filename>Release.gpg</filename> files from the archives you
+ have configured.
+ </para>
+</refsect1>
+
+<refsect1><title>Archive configuration</title>
+ <para>
+ If you want to provide archive signatures in an archive under your
+ maintenance you have to:
+ </para>
+
+ <itemizedlist>
+ <listitem><para><literal>Create a toplevel Release
+ file</literal>. if it does not exist already. You can do this
+ by running <command>apt-ftparchive release</command>
+ (provided inftp apt-utils).</para></listitem>
+
+ <listitem><para><literal>Sign it</literal>. You can do this by running
+ <command>gpg -abs -o Release.gpg Release</command>.</para></listitem>
+
+ <listitem><para><literal>Publish the key fingerprint</literal>,
+ that way your users will know what key they need to import in
+ order to authenticate the files in the
+ archive.</para></listitem>
+
+ </itemizedlist>
+
+ <para>Whenever the contents of the archive changes (new packages
+ are added or removed) the archive maintainer has to follow the
+ first two steps previously outlined.</para>
+
+</refsect1>
+
+<refsect1><title>See Also</title>
+<para>
+&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-archive;,
+&debsign; &debsig-verify;, &gpg;
+</para>
+
+<para>For more backgound information you might want to review the
+<ulink
+url="http://www.debian.org/doc/manuals/securing-debian-howto/ch7.en.html">Debian
+Security Infrastructure</ulink> chapter of the Securing Debian Manual
+(available also in the harden-doc package) and the
+<ulink url="http://www.cryptnet.net/fdp/crypto/strong_distro.html"
+>Strong Distribution HOWTO</ulink> by V. Alex Brennen. </para>
+
+</refsect1>
+
+ &manbugs;
+ &manauthor;
+
+<refsect1><title>Manpage Authors</title>
+
+<para>This man-page is based on the work of Javier Fernández-Sanguino
+Peña, Isaac Jones, Colin Walters, Florian Weimer and Michael Vogt.
+</para>
+
+</refsect1>
+
+
+</refentry>
+
<literal>sourcelist</literal> gives the location of the sourcelist and
<literal>main</literal> is the default configuration file (setting has no effect,
unless it is done from the config file specified by
- <envar>APT_CONFIG</envar>.</para>
+ <envar>APT_CONFIG</envar>).</para>
<para>The <literal>Dir::Parts</literal> setting reads in all the config fragments in
lexical order from the directory specified. After this is done then the
</citerefentry>"
>
+<!ENTITY apt-key "<citerefentry>
+ <refentrytitle><command>apt-key</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-secure "<citerefentry>
+ <refentrytitle>apt-secure</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY apt-archive "<citerefentry>
+ <refentrytitle><filename>apt-archive</filename></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+
<!ENTITY sources-list "<citerefentry>
<refentrytitle><filename>sources.list</filename></refentrytitle>
<manvolnum>5</manvolnum>
<manvolnum>8</manvolnum>
</citerefentry>"
>
+
+<!ENTITY aptitude "<citerefentry>
+ <refentrytitle><command>aptitude</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY synaptic "<citerefentry>
+ <refentrytitle><command>synaptic</command></refentrytitle>
+ <manvolnum>8</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY debsign "<citerefentry>
+ <refentrytitle><command>debsign</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY debsig-verify "<citerefentry>
+ <refentrytitle><command>debsig-verify</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
+
+<!ENTITY gpg "<citerefentry>
+ <refentrytitle><command>gpg</command></refentrytitle>
+ <manvolnum>1</manvolnum>
+ </citerefentry>"
+>
<!-- Boiler plate docinfo section -->
<!ENTITY apt-docinfo "
<programlisting>
Package: *
Pin: release a=unstable
-Pin-Priority: 50
+Pin-Priority: 500
</programlisting>
<simpara>The following record assigns a high priority to all package versions
--- /dev/null
+// This config is for use with the pool-structure for the packages, thus we
+// don't use a Tree Section in here
+
+// The debian archive should be in the current working dir
+Dir {
+ ArchiveDir ".";
+ CacheDir ".";
+};
+
+// Create Packages, Packages.gz and Packages.bz2, remove what you don't need
+Default {
+ Packages::Compress ". gzip bzip2";
+ Sources::Compress ". gzip bzip2";
+ Contents::Compress ". gzip bzip2";
+};
+
+// Includes the main section. You can structure the directory tree under
+// ./pool/main any way you like, apt-ftparchive will take any deb (and
+// source package) it can find. This creates a Packages a Sources and a
+// Contents file for these in the main section of the sid release
+BinDirectory "pool/main" {
+ Packages "dists/sid/main/binary-i386/Packages";
+ SrcPackages "dists/sid/main/source/Sources";
+ Contents "dists/sid/Contents-i386";
+}
+
+// This is the same for the contrib section
+BinDirectory "pool/contrib" {
+ Packages "dists/sid/contrib/binary-i386/Packages";
+ SrcPackages "dists/sid/contrib/source/Sources";
+ Contents "dists/sid/Contents-i386";
+}
+
+// This is the same for the non-free section
+BinDirectory "pool/non-free" {
+ Packages "dists/sid/non-free/binary-i386/Packages";
+ SrcPackages "dists/sid/non-free/source/Sources";
+ Contents "dists/sid/Contents-i386";
+};
+
+// By default all Packages should have the extension ".deb"
+Default {
+ Packages {
+ Extensions ".deb";
+ };
+};
# XML man pages
SOURCE = apt-cache.8 apt-get.8 apt-cdrom.8 apt.conf.5 sources.list.5 \
apt-config.8 apt_preferences.5 \
- apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 apt-key.8
+ apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 \
+ apt-key.8 apt-secure.8
INCLUDES = apt.ent
include $(XML_MANPAGE_H)
string BinCacheDB;
string BinOverride;
string ExtraOverride;
+
+ // We generate for this given arch
+ string Arch;
// Stuff for the Source File
string SrcFile;
// Create a package writer object.
PackagesWriter Packages(flCombine(CacheDir,BinCacheDB),
flCombine(OverrideDir,BinOverride),
- flCombine(OverrideDir,ExtraOverride));
+ flCombine(OverrideDir,ExtraOverride),
+ Arch);
if (PkgExt.empty() == false && Packages.SetExts(PkgExt) == false)
return _error->Error(_("Package extension list is too long"));
if (_error->PendingError() == true)
Itm.BaseDir = SubstVar(Block.Find("Directory",DDir.c_str()),Vars);
Itm.PkgFile = SubstVar(Block.Find("Packages",DPkg.c_str()),Vars);
Itm.Tag = SubstVar("$(DIST)/$(SECTION)/$(ARCH)",Vars);
+ Itm.Arch = Arch;
Itm.Contents = SubstVar(Block.Find("Contents",DContents.c_str()),Vars);
Itm.ContentsHead = SubstVar(Block.Find("Contents::Header",DContentsH.c_str()),Vars);
Itm.FLFile = SubstVar(Block.Find("FileList",DFLFile.c_str()),Vars);
return true;
}
/*}}}*/
+
+// Override::GetItem - Get a architecture specific item /*{{{*/
+// ---------------------------------------------------------------------
+/* Returns a override item for the given package and the given architecture.
+ * Treats "all" special
+ */
+Override::Item* Override::GetItem(string Package, string Architecture)
+{
+ map<string,Item>::iterator I = Mapping.find(Package);
+ map<string,Item>::iterator J = Mapping.find(Package + "/" + Architecture);
+
+ if (I == Mapping.end() && J == Mapping.end())
+ {
+ return 0;
+ }
+
+ Item *result = new Item;
+ if (I == Mapping.end()) *result = J->second;
+ else
+ {
+ *result = I->second;
+ if (J != Mapping.end())
+ {
+ Item *R = &J->second;
+ if (R->Priority != "") result->Priority = R->Priority;
+ if (R->OldMaint != "") result->OldMaint = R->OldMaint;
+ if (R->NewMaint != "") result->NewMaint = R->NewMaint;
+ for (map<string,string>::iterator foI = R->FieldOverride.begin();
+ foI != R->FieldOverride.end(); foI++)
+ {
+ result->FieldOverride[foI->first] = foI->second;
+ }
+ }
+ }
+ return result;
+};
+
+
// Override::Item::SwapMaint - Swap the maintainer field if necessary /*{{{*/
// ---------------------------------------------------------------------
/* Returns the new maintainer string after evaluating the rewriting rule. If
map<string,string> FieldOverride;
string SwapMaint(string Orig,bool &Failed);
+ ~Item() {};
};
map<string,Item> Mapping;
inline Item *GetItem(string Package)
{
- map<string,Item>::iterator I = Mapping.find(Package);
- if (I == Mapping.end())
- return 0;
- return &I->second;
- };
+ return GetItem(Package, "");
+ }
+ Item *GetItem(string Package, string Architecture);
bool ReadOverride(string File,bool Source = false);
bool ReadExtraOverride(string File,bool Source = false);
#include "apt-ftparchive.h"
#include "multicompress.h"
/*}}}*/
-
using namespace std;
FTWScanner *FTWScanner::Owner;
// PackagesWriter::PackagesWriter - Constructor /*{{{*/
// ---------------------------------------------------------------------
/* */
-PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides) :
- Db(DB),Stats(Db.Stats)
+PackagesWriter::PackagesWriter(string DB,string Overrides,string ExtOverrides,
+ string aArch) :
+ Db(DB),Stats(Db.Stats), Arch(aArch)
{
Output = stdout;
SetExts(".deb .udeb .foo .bar .baz");
// Lookup the overide information
pkgTagSection &Tags = Db.Control.Section;
string Package = Tags.FindS("Package");
- Override::Item Tmp;
- Override::Item *OverItem = Over.GetItem(Package);
+ string Architecture;
+ // if we generate a Packages file for a given arch, we use it to
+ // look for overrides. if we run in "simple" mode without the
+ // "Architecures" variable in the config we use the architecure value
+ // from the deb file
+ if(Arch != "")
+ Architecture = Arch;
+ else
+ Architecture = Tags.FindS("Architecture");
+ auto_ptr<Override::Item> OverItem(Over.GetItem(Package,Architecture));
if (Package.empty() == true)
return _error->Error(_("Archive had no package field"));
-
+
// If we need to do any rewriting of the header do it now..
- if (OverItem == 0)
+ if (OverItem.get() == 0)
{
if (NoOverride == false)
{
ioprintf(c1out, _(" %s has no override entry\n"), Package.c_str());
}
- OverItem = &Tmp;
- Tmp.FieldOverride["Section"] = Tags.FindS("Section");
- Tmp.Priority = Tags.FindS("Priority");
+ OverItem = auto_ptr<Override::Item>(new Override::Item);
+ OverItem->FieldOverride["Section"] = Tags.FindS("Section");
+ OverItem->Priority = Tags.FindS("Priority");
}
char Size[40];
string BestPrio;
string Bins = Tags.FindS("Binary");
char Buffer[Bins.length() + 1];
- Override::Item *OverItem = 0;
+ auto_ptr<Override::Item> OverItem(0);
if (Bins.empty() == false)
{
strcpy(Buffer,Bins.c_str());
unsigned char BestPrioV = pkgCache::State::Extra;
for (unsigned I = 0; BinList[I] != 0; I++)
{
- Override::Item *Itm = BOver.GetItem(BinList[I]);
- if (Itm == 0)
+ auto_ptr<Override::Item> Itm(BOver.GetItem(BinList[I]));
+ if (Itm.get() == 0)
continue;
- if (OverItem == 0)
+ if (OverItem.get() == 0)
OverItem = Itm;
unsigned char NewPrioV = debListParser::GetPrio(Itm->Priority);
}
// If we need to do any rewriting of the header do it now..
- Override::Item Tmp;
- if (OverItem == 0)
+ if (OverItem.get() == 0)
{
if (NoOverride == false)
{
ioprintf(c1out, _(" %s has no override entry\n"), Tags.FindS("Source").c_str());
}
- OverItem = &Tmp;
+ OverItem = auto_ptr<Override::Item>(new Override::Item);
}
- Override::Item *SOverItem = SOver.GetItem(Tags.FindS("Source"));
- if (SOverItem == 0)
+ auto_ptr<Override::Item> SOverItem(SOver.GetItem(Tags.FindS("Source")));
+ const auto_ptr<Override::Item> autoSOverItem(SOverItem);
+ if (SOverItem.get() == 0)
{
- SOverItem = BOver.GetItem(Tags.FindS("Source"));
- if (SOverItem == 0)
- SOverItem = OverItem;
+ SOverItem = auto_ptr<Override::Item>(BOver.GetItem(Tags.FindS("Source")));
+ if (SOverItem.get() == 0)
+ {
+ SOverItem = auto_ptr<Override::Item>(new Override::Item);
+ *SOverItem = *OverItem;
+ }
}
// Add the dsc to the files hash list
string DirStrip;
FILE *Output;
struct CacheDB::Stats &Stats;
-
+ string Arch;
+
inline bool ReadOverride(string File) {return Over.ReadOverride(File);};
inline bool ReadExtraOverride(string File)
{return Over.ReadExtraOverride(File);};
virtual bool DoPackage(string FileName);
- PackagesWriter(string DB,string Overrides,string ExtOverrides=string());
+ PackagesWriter(string DB,string Overrides,string ExtOverrides=string(),
+ string Arch=string());
virtual ~PackagesWriter() {};
};
string SHA1;
// Limited by FileFd::Size()
unsigned long size;
+ ~CheckSum() {};
};
map<string,struct CheckSum> CheckSums;
};
#include <apt-pkg/error.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/fileutl.h>
+#include <apt-pkg/hashes.h>
#include <sys/stat.h>
#include <unistd.h>
if (MediaFail(Get.Host,CDROM) == false)
{
CurrentID = "FAIL";
- Fail(_("Wrong CD-ROM"),true);
- return true;
+ return _error->Error(_("Disk not found."));
}
}
CurrentID = NewID;
Res.LastModified = Buf.st_mtime;
Res.Size = Buf.st_size;
+
+ Hashes Hash;
+ FileFd Fd(Res.Filename, FileFd::ReadOnly);
+ Hash.AddFD(Fd.Fd(), Fd.Size());
+ Res.TakeHashes(Hash);
+
URIDone(Res);
return true;
}
/* This implements a timeout for connect by opening the connection
nonblocking */
- if (WaitFd(Fd,true,TimeOut) == false)
+ if (WaitFd(Fd,true,TimeOut) == false) {
+ Owner->SetFailExtraMsg("\nFailReason: Timeout");
return _error->Error(_("Could not connect to %s:%s (%s), "
"connection timed out"),Host.c_str(),Service,Name);
+ }
// Check the socket for an error condition
unsigned int Err;
}
if (Res == EAI_AGAIN)
+ {
+ Owner->SetFailExtraMsg("\nFailReason: TmpResolveFailure");
return _error->Error(_("Temporary failure resolving '%s'"),
Host.c_str());
+ }
return _error->Error(_("Something wicked happened resolving '%s:%s' (%i)"),
Host.c_str(),ServStr,Res);
}
// Include Files /*{{{*/
#include <apt-pkg/acquire-method.h>
#include <apt-pkg/error.h>
+#include <apt-pkg/hashes.h>
+#include <apt-pkg/fileutl.h>
#include <sys/stat.h>
#include <unistd.h>
if (Res.Filename.empty() == true)
return _error->Error(_("File not found"));
-
+
+ Hashes Hash;
+ FileFd Fd(Res.Filename, FileFd::ReadOnly);
+ Hash.AddFD(Fd.Fd(), Fd.Size());
+ Res.TakeHashes(Hash);
URIDone(Res);
return true;
}
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-06-06 14:00+0200\n"
+"POT-Creation-Date: 2005-08-23 09:45+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
msgstr ""
#: cmdline/apt-cache.cc:1651 cmdline/apt-cdrom.cc:138 cmdline/apt-config.cc:70
-#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:545
-#: cmdline/apt-get.cc:2322 cmdline/apt-sortpkgs.cc:144
+#: cmdline/apt-extracttemplates.cc:225 ftparchive/apt-ftparchive.cc:550
+#: cmdline/apt-get.cc:2324 cmdline/apt-sortpkgs.cc:144
#, c-format
msgid "%s %s for %s %s compiled on %s %s\n"
msgstr ""
msgid "Cannot get debconf version. Is debconf installed?"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:163 ftparchive/apt-ftparchive.cc:337
+#: ftparchive/apt-ftparchive.cc:167 ftparchive/apt-ftparchive.cc:341
msgid "Package extension list is too long"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:165 ftparchive/apt-ftparchive.cc:179
-#: ftparchive/apt-ftparchive.cc:202 ftparchive/apt-ftparchive.cc:252
-#: ftparchive/apt-ftparchive.cc:266 ftparchive/apt-ftparchive.cc:288
+#: ftparchive/apt-ftparchive.cc:169 ftparchive/apt-ftparchive.cc:183
+#: ftparchive/apt-ftparchive.cc:206 ftparchive/apt-ftparchive.cc:256
+#: ftparchive/apt-ftparchive.cc:270 ftparchive/apt-ftparchive.cc:292
#, c-format
msgid "Error processing directory %s"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:250
+#: ftparchive/apt-ftparchive.cc:254
msgid "Source extension list is too long"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:367
+#: ftparchive/apt-ftparchive.cc:371
msgid "Error writing header to contents file"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:397
+#: ftparchive/apt-ftparchive.cc:401
#, c-format
msgid "Error processing contents %s"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:551
+#: ftparchive/apt-ftparchive.cc:556
msgid ""
"Usage: apt-ftparchive [options] command\n"
"Commands: packages binarypath [overridefile [pathprefix]]\n"
" -o=? Set an arbitrary configuration option"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:757
+#: ftparchive/apt-ftparchive.cc:762
msgid "No selections matched"
msgstr ""
-#: ftparchive/apt-ftparchive.cc:830
+#: ftparchive/apt-ftparchive.cc:835
#, c-format
msgid "Some files are missing in the package file group `%s'"
msgstr ""
msgid "Unable to get a cursor"
msgstr ""
-#: ftparchive/writer.cc:79
+#: ftparchive/writer.cc:78
#, c-format
msgid "W: Unable to read directory %s\n"
msgstr ""
-#: ftparchive/writer.cc:84
+#: ftparchive/writer.cc:83
#, c-format
msgid "W: Unable to stat %s\n"
msgstr ""
-#: ftparchive/writer.cc:126
+#: ftparchive/writer.cc:125
msgid "E: "
msgstr ""
-#: ftparchive/writer.cc:128
+#: ftparchive/writer.cc:127
msgid "W: "
msgstr ""
-#: ftparchive/writer.cc:135
+#: ftparchive/writer.cc:134
msgid "E: Errors apply to file "
msgstr ""
-#: ftparchive/writer.cc:152 ftparchive/writer.cc:182
+#: ftparchive/writer.cc:151 ftparchive/writer.cc:181
#, c-format
msgid "Failed to resolve %s"
msgstr ""
-#: ftparchive/writer.cc:164
+#: ftparchive/writer.cc:163
msgid "Tree walking failed"
msgstr ""
-#: ftparchive/writer.cc:189
+#: ftparchive/writer.cc:188
#, c-format
msgid "Failed to open %s"
msgstr ""
-#: ftparchive/writer.cc:246
+#: ftparchive/writer.cc:245
#, c-format
msgid " DeLink %s [%s]\n"
msgstr ""
-#: ftparchive/writer.cc:254
+#: ftparchive/writer.cc:253
#, c-format
msgid "Failed to readlink %s"
msgstr ""
-#: ftparchive/writer.cc:258
+#: ftparchive/writer.cc:257
#, c-format
msgid "Failed to unlink %s"
msgstr ""
-#: ftparchive/writer.cc:265
+#: ftparchive/writer.cc:264
#, c-format
msgid "*** Failed to link %s to %s"
msgstr ""
-#: ftparchive/writer.cc:275
+#: ftparchive/writer.cc:274
#, c-format
msgid " DeLink limit of %sB hit.\n"
msgstr ""
#: ftparchive/writer.cc:358 apt-inst/extract.cc:181 apt-inst/extract.cc:193
-#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121
+#: apt-inst/extract.cc:210 apt-inst/deb/dpkgdb.cc:121 methods/gpgv.cc:256
#, c-format
msgid "Failed to stat %s"
msgstr ""
-#: ftparchive/writer.cc:378
+#: ftparchive/writer.cc:386
msgid "Archive had no package field"
msgstr ""
-#: ftparchive/writer.cc:386 ftparchive/writer.cc:595
+#: ftparchive/writer.cc:394 ftparchive/writer.cc:602
#, c-format
msgid " %s has no override entry\n"
msgstr ""
-#: ftparchive/writer.cc:429 ftparchive/writer.cc:677
+#: ftparchive/writer.cc:437 ftparchive/writer.cc:688
#, c-format
msgid " %s maintainer is %s not %s\n"
msgstr ""
msgid "Y"
msgstr ""
-#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1484
+#: cmdline/apt-get.cc:140 cmdline/apt-get.cc:1486
#, c-format
msgid "Regex compilation error - %s"
msgstr ""
msgid "WARNING: The following packages cannot be authenticated!"
msgstr ""
+#: cmdline/apt-get.cc:691
+msgid "Authentication warning overridden.\n"
+msgstr ""
+
#: cmdline/apt-get.cc:698
msgid "Install these packages without verification [y/N]? "
msgstr ""
msgid "Some packages could not be authenticated"
msgstr ""
-#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:855
+#: cmdline/apt-get.cc:709 cmdline/apt-get.cc:856
msgid "There are problems and -y was used without --force-yes"
msgstr ""
+#: cmdline/apt-get.cc:753
+msgid "Internal error, InstallPackages was called with broken packages!"
+msgstr ""
+
#: cmdline/apt-get.cc:762
msgid "Packages need to be removed but remove is disabled."
msgstr ""
-#: cmdline/apt-get.cc:788 cmdline/apt-get.cc:1778 cmdline/apt-get.cc:1811
+#: cmdline/apt-get.cc:773
+msgid "Internal error, Ordering didn't finish"
+msgstr ""
+
+#: cmdline/apt-get.cc:789 cmdline/apt-get.cc:1780 cmdline/apt-get.cc:1813
msgid "Unable to lock the download directory"
msgstr ""
-#: cmdline/apt-get.cc:798 cmdline/apt-get.cc:1859 cmdline/apt-get.cc:2070
+#: cmdline/apt-get.cc:799 cmdline/apt-get.cc:1861 cmdline/apt-get.cc:2072
#: apt-pkg/cachefile.cc:67
msgid "The list of sources could not be read."
msgstr ""
-#: cmdline/apt-get.cc:818
+#: cmdline/apt-get.cc:814
+msgid "How odd.. The sizes didn't match, email apt@packages.debian.org"
+msgstr ""
+
+#: cmdline/apt-get.cc:819
#, c-format
msgid "Need to get %sB/%sB of archives.\n"
msgstr ""
-#: cmdline/apt-get.cc:821
+#: cmdline/apt-get.cc:822
#, c-format
msgid "Need to get %sB of archives.\n"
msgstr ""
-#: cmdline/apt-get.cc:826
+#: cmdline/apt-get.cc:827
#, c-format
msgid "After unpacking %sB of additional disk space will be used.\n"
msgstr ""
-#: cmdline/apt-get.cc:829
+#: cmdline/apt-get.cc:830
#, c-format
msgid "After unpacking %sB disk space will be freed.\n"
msgstr ""
-#: cmdline/apt-get.cc:846
+#: cmdline/apt-get.cc:844 cmdline/apt-get.cc:1927
+#, c-format
+msgid "Couldn't determine free space in %s"
+msgstr ""
+
+#: cmdline/apt-get.cc:847
#, c-format
msgid "You don't have enough free space in %s."
msgstr ""
-#: cmdline/apt-get.cc:861 cmdline/apt-get.cc:881
+#: cmdline/apt-get.cc:862 cmdline/apt-get.cc:882
msgid "Trivial Only specified but this is not a trivial operation."
msgstr ""
-#: cmdline/apt-get.cc:863
+#: cmdline/apt-get.cc:864
msgid "Yes, do as I say!"
msgstr ""
-#: cmdline/apt-get.cc:865
+#: cmdline/apt-get.cc:866
#, c-format
msgid ""
"You are about to do something potentially harmful.\n"
" ?] "
msgstr ""
-#: cmdline/apt-get.cc:871 cmdline/apt-get.cc:890
+#: cmdline/apt-get.cc:872 cmdline/apt-get.cc:891
msgid "Abort."
msgstr ""
-#: cmdline/apt-get.cc:886
+#: cmdline/apt-get.cc:887
msgid "Do you want to continue [Y/n]? "
msgstr ""
-#: cmdline/apt-get.cc:958 cmdline/apt-get.cc:1334 cmdline/apt-get.cc:1968
+#: cmdline/apt-get.cc:959 cmdline/apt-get.cc:1336 cmdline/apt-get.cc:1970
#, c-format
msgid "Failed to fetch %s %s\n"
msgstr ""
-#: cmdline/apt-get.cc:976
+#: cmdline/apt-get.cc:977
msgid "Some files failed to download"
msgstr ""
-#: cmdline/apt-get.cc:977 cmdline/apt-get.cc:1977
+#: cmdline/apt-get.cc:978 cmdline/apt-get.cc:1979
msgid "Download complete and in download only mode"
msgstr ""
-#: cmdline/apt-get.cc:983
+#: cmdline/apt-get.cc:984
msgid ""
"Unable to fetch some archives, maybe run apt-get update or try with --fix-"
"missing?"
msgstr ""
-#: cmdline/apt-get.cc:987
+#: cmdline/apt-get.cc:988
msgid "--fix-missing and media swapping is not currently supported"
msgstr ""
-#: cmdline/apt-get.cc:992
+#: cmdline/apt-get.cc:993
msgid "Unable to correct missing packages."
msgstr ""
-#: cmdline/apt-get.cc:993
+#: cmdline/apt-get.cc:994
msgid "Aborting install."
msgstr ""
-#: cmdline/apt-get.cc:1026
+#: cmdline/apt-get.cc:1028
#, c-format
msgid "Note, selecting %s instead of %s\n"
msgstr ""
-#: cmdline/apt-get.cc:1036
+#: cmdline/apt-get.cc:1038
#, c-format
msgid "Skipping %s, it is already installed and upgrade is not set.\n"
msgstr ""
-#: cmdline/apt-get.cc:1054
+#: cmdline/apt-get.cc:1056
#, c-format
msgid "Package %s is not installed, so not removed\n"
msgstr ""
-#: cmdline/apt-get.cc:1065
+#: cmdline/apt-get.cc:1067
#, c-format
msgid "Package %s is a virtual package provided by:\n"
msgstr ""
-#: cmdline/apt-get.cc:1077
+#: cmdline/apt-get.cc:1079
msgid " [Installed]"
msgstr ""
-#: cmdline/apt-get.cc:1082
+#: cmdline/apt-get.cc:1084
msgid "You should explicitly select one to install."
msgstr ""
-#: cmdline/apt-get.cc:1087
+#: cmdline/apt-get.cc:1089
#, c-format
msgid ""
"Package %s is not available, but is referred to by another package.\n"
"is only available from another source\n"
msgstr ""
-#: cmdline/apt-get.cc:1106
+#: cmdline/apt-get.cc:1108
msgid "However the following packages replace it:"
msgstr ""
-#: cmdline/apt-get.cc:1109
+#: cmdline/apt-get.cc:1111
#, c-format
msgid "Package %s has no installation candidate"
msgstr ""
-#: cmdline/apt-get.cc:1129
+#: cmdline/apt-get.cc:1131
#, c-format
msgid "Reinstallation of %s is not possible, it cannot be downloaded.\n"
msgstr ""
-#: cmdline/apt-get.cc:1137
+#: cmdline/apt-get.cc:1139
#, c-format
msgid "%s is already the newest version.\n"
msgstr ""
-#: cmdline/apt-get.cc:1164
+#: cmdline/apt-get.cc:1166
#, c-format
msgid "Release '%s' for '%s' was not found"
msgstr ""
-#: cmdline/apt-get.cc:1166
+#: cmdline/apt-get.cc:1168
#, c-format
msgid "Version '%s' for '%s' was not found"
msgstr ""
-#: cmdline/apt-get.cc:1172
+#: cmdline/apt-get.cc:1174
#, c-format
msgid "Selected version %s (%s) for %s\n"
msgstr ""
-#: cmdline/apt-get.cc:1282
+#: cmdline/apt-get.cc:1284
msgid "The update command takes no arguments"
msgstr ""
-#: cmdline/apt-get.cc:1295 cmdline/apt-get.cc:1389
+#: cmdline/apt-get.cc:1297 cmdline/apt-get.cc:1391
msgid "Unable to lock the list directory"
msgstr ""
-#: cmdline/apt-get.cc:1353
+#: cmdline/apt-get.cc:1355
msgid ""
"Some index files failed to download, they have been ignored, or old ones "
"used instead."
msgstr ""
-#: cmdline/apt-get.cc:1372
+#: cmdline/apt-get.cc:1374
msgid "Internal error, AllUpgrade broke stuff"
msgstr ""
-#: cmdline/apt-get.cc:1471 cmdline/apt-get.cc:1507
+#: cmdline/apt-get.cc:1473 cmdline/apt-get.cc:1509
#, c-format
msgid "Couldn't find package %s"
msgstr ""
-#: cmdline/apt-get.cc:1494
+#: cmdline/apt-get.cc:1496
#, c-format
msgid "Note, selecting %s for regex '%s'\n"
msgstr ""
-#: cmdline/apt-get.cc:1524
+#: cmdline/apt-get.cc:1526
msgid "You might want to run `apt-get -f install' to correct these:"
msgstr ""
-#: cmdline/apt-get.cc:1527
+#: cmdline/apt-get.cc:1529
msgid ""
"Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a "
"solution)."
msgstr ""
-#: cmdline/apt-get.cc:1539
+#: cmdline/apt-get.cc:1541
msgid ""
"Some packages could not be installed. This may mean that you have\n"
"requested an impossible situation or if you are using the unstable\n"
"or been moved out of Incoming."
msgstr ""
-#: cmdline/apt-get.cc:1547
+#: cmdline/apt-get.cc:1549
msgid ""
"Since you only requested a single operation it is extremely likely that\n"
"the package is simply not installable and a bug report against\n"
"that package should be filed."
msgstr ""
-#: cmdline/apt-get.cc:1552
+#: cmdline/apt-get.cc:1554
msgid "The following information may help to resolve the situation:"
msgstr ""
-#: cmdline/apt-get.cc:1555
+#: cmdline/apt-get.cc:1557
msgid "Broken packages"
msgstr ""
-#: cmdline/apt-get.cc:1581
+#: cmdline/apt-get.cc:1583
msgid "The following extra packages will be installed:"
msgstr ""
-#: cmdline/apt-get.cc:1652
+#: cmdline/apt-get.cc:1654
msgid "Suggested packages:"
msgstr ""
-#: cmdline/apt-get.cc:1653
+#: cmdline/apt-get.cc:1655
msgid "Recommended packages:"
msgstr ""
-#: cmdline/apt-get.cc:1673
+#: cmdline/apt-get.cc:1675
msgid "Calculating upgrade... "
msgstr ""
-#: cmdline/apt-get.cc:1676 methods/ftp.cc:702 methods/connect.cc:99
+#: cmdline/apt-get.cc:1678 methods/ftp.cc:702 methods/connect.cc:101
msgid "Failed"
msgstr ""
-#: cmdline/apt-get.cc:1681
+#: cmdline/apt-get.cc:1683
msgid "Done"
msgstr ""
-#: cmdline/apt-get.cc:1854
+#: cmdline/apt-get.cc:1748 cmdline/apt-get.cc:1756
+msgid "Internal error, problem resolver broke stuff"
+msgstr ""
+
+#: cmdline/apt-get.cc:1856
msgid "Must specify at least one package to fetch source for"
msgstr ""
-#: cmdline/apt-get.cc:1881 cmdline/apt-get.cc:2088
+#: cmdline/apt-get.cc:1883 cmdline/apt-get.cc:2090
#, c-format
msgid "Unable to find a source package for %s"
msgstr ""
-#: cmdline/apt-get.cc:1928
+#: cmdline/apt-get.cc:1930
#, c-format
msgid "You don't have enough free space in %s"
msgstr ""
-#: cmdline/apt-get.cc:1933
+#: cmdline/apt-get.cc:1935
#, c-format
msgid "Need to get %sB/%sB of source archives.\n"
msgstr ""
-#: cmdline/apt-get.cc:1936
+#: cmdline/apt-get.cc:1938
#, c-format
msgid "Need to get %sB of source archives.\n"
msgstr ""
-#: cmdline/apt-get.cc:1942
+#: cmdline/apt-get.cc:1944
#, c-format
msgid "Fetch source %s\n"
msgstr ""
-#: cmdline/apt-get.cc:1973
+#: cmdline/apt-get.cc:1975
msgid "Failed to fetch some archives."
msgstr ""
-#: cmdline/apt-get.cc:2001
+#: cmdline/apt-get.cc:2003
#, c-format
msgid "Skipping unpack of already unpacked source in %s\n"
msgstr ""
-#: cmdline/apt-get.cc:2013
+#: cmdline/apt-get.cc:2015
#, c-format
msgid "Unpack command '%s' failed.\n"
msgstr ""
-#: cmdline/apt-get.cc:2030
+#: cmdline/apt-get.cc:2032
#, c-format
msgid "Build command '%s' failed.\n"
msgstr ""
-#: cmdline/apt-get.cc:2049
+#: cmdline/apt-get.cc:2051
msgid "Child process failed"
msgstr ""
-#: cmdline/apt-get.cc:2065
+#: cmdline/apt-get.cc:2067
msgid "Must specify at least one package to check builddeps for"
msgstr ""
-#: cmdline/apt-get.cc:2093
+#: cmdline/apt-get.cc:2095
#, c-format
msgid "Unable to get build-dependency information for %s"
msgstr ""
-#: cmdline/apt-get.cc:2113
+#: cmdline/apt-get.cc:2115
#, c-format
msgid "%s has no build depends.\n"
msgstr ""
-#: cmdline/apt-get.cc:2165
+#: cmdline/apt-get.cc:2167
#, c-format
msgid ""
"%s dependency for %s cannot be satisfied because the package %s cannot be "
"found"
msgstr ""
-#: cmdline/apt-get.cc:2217
+#: cmdline/apt-get.cc:2219
#, c-format
msgid ""
"%s dependency for %s cannot be satisfied because no available versions of "
"package %s can satisfy version requirements"
msgstr ""
-#: cmdline/apt-get.cc:2252
+#: cmdline/apt-get.cc:2254
#, c-format
msgid "Failed to satisfy %s dependency for %s: Installed package %s is too new"
msgstr ""
-#: cmdline/apt-get.cc:2277
+#: cmdline/apt-get.cc:2279
#, c-format
msgid "Failed to satisfy %s dependency for %s: %s"
msgstr ""
-#: cmdline/apt-get.cc:2291
+#: cmdline/apt-get.cc:2293
#, c-format
msgid "Build-dependencies for %s could not be satisfied."
msgstr ""
-#: cmdline/apt-get.cc:2295
+#: cmdline/apt-get.cc:2297
msgid "Failed to process build dependencies"
msgstr ""
-#: cmdline/apt-get.cc:2327
+#: cmdline/apt-get.cc:2329
msgid "Supported modules:"
msgstr ""
-#: cmdline/apt-get.cc:2368
+#: cmdline/apt-get.cc:2370
msgid ""
"Usage: apt-get [options] command\n"
" apt-get [options] install|remove pkg1 [pkg2 ...]\n"
msgid "File %s/%s overwrites the one in the package %s"
msgstr ""
-#: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:709
-#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:416 apt-pkg/clean.cc:38
+#: apt-inst/extract.cc:467 apt-pkg/contrib/configuration.cc:750
+#: apt-pkg/contrib/cdromutl.cc:153 apt-pkg/acquire.cc:417 apt-pkg/clean.cc:38
#, c-format
msgid "Unable to read %s"
msgstr ""
msgid "Unparsable control file"
msgstr ""
-#: methods/cdrom.cc:113
+#: methods/cdrom.cc:114
#, c-format
msgid "Unable to read the cdrom database %s"
msgstr ""
-#: methods/cdrom.cc:122
+#: methods/cdrom.cc:123
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 ""
-#: methods/cdrom.cc:130 methods/cdrom.cc:168
+#: methods/cdrom.cc:131 methods/cdrom.cc:169
msgid "Wrong CD-ROM"
msgstr ""
-#: methods/cdrom.cc:163
+#: methods/cdrom.cc:164
#, c-format
msgid "Unable to unmount the CD-ROM in %s, it may still be in use."
msgstr ""
-#: methods/cdrom.cc:177 methods/file.cc:77 methods/rsh.cc:264
+#: methods/cdrom.cc:178 methods/file.cc:79 methods/rsh.cc:264
msgid "File not found"
msgstr ""
-#: methods/copy.cc:42 methods/gzip.cc:133 methods/gzip.cc:142
+#: methods/copy.cc:42 methods/gpgv.cc:265 methods/gzip.cc:133
+#: methods/gzip.cc:142
msgid "Failed to stat"
msgstr ""
-#: methods/copy.cc:79 methods/gzip.cc:139
+#: methods/copy.cc:79 methods/gpgv.cc:262 methods/gzip.cc:139
msgid "Failed to set modification time"
msgstr ""
-#: methods/file.cc:42
+#: methods/file.cc:44
msgid "Invalid URI, local URIS must not start with //"
msgstr ""
msgid "Server closed the connection"
msgstr ""
-#: methods/ftp.cc:338 methods/rsh.cc:190 apt-pkg/contrib/fileutl.cc:453
+#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:471 methods/rsh.cc:190
msgid "Read error"
msgstr ""
msgid "Protocol corruption"
msgstr ""
-#: methods/ftp.cc:446 methods/rsh.cc:232 apt-pkg/contrib/fileutl.cc:492
+#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:510 methods/rsh.cc:232
msgid "Write error"
msgstr ""
msgid "Cannot initiate the connection to %s:%s (%s)."
msgstr ""
-#: methods/connect.cc:92
+#: methods/connect.cc:93
#, c-format
msgid "Could not connect to %s:%s (%s), connection timed out"
msgstr ""
-#: methods/connect.cc:104
+#: methods/connect.cc:106
#, c-format
msgid "Could not connect to %s:%s (%s)."
msgstr ""
#. We say this mainly because the pause here is for the
#. ssh connection that is still going
-#: methods/connect.cc:132 methods/rsh.cc:425
+#: methods/connect.cc:134 methods/rsh.cc:425
#, c-format
msgid "Connecting to %s"
msgstr ""
-#: methods/connect.cc:163
+#: methods/connect.cc:165
#, c-format
msgid "Could not resolve '%s'"
msgstr ""
-#: methods/connect.cc:167
+#: methods/connect.cc:171
#, c-format
msgid "Temporary failure resolving '%s'"
msgstr ""
-#: methods/connect.cc:169
+#: methods/connect.cc:174
#, c-format
msgid "Something wicked happened resolving '%s:%s' (%i)"
msgstr ""
-#: methods/connect.cc:216
+#: methods/connect.cc:221
#, c-format
msgid "Unable to connect to %s %s:"
msgstr ""
+#: methods/gpgv.cc:92
+msgid "E: Argument list from Acquire::gpgv::Options too long. Exiting."
+msgstr ""
+
+#: methods/gpgv.cc:191
+msgid ""
+"Internal error: Good signature, but could not determine key fingerprint?!"
+msgstr ""
+
+#: methods/gpgv.cc:196
+msgid "At least one invalid signature was encountered."
+msgstr ""
+
+#. FIXME String concatenation considered harmful.
+#: methods/gpgv.cc:201
+msgid "Could not execute "
+msgstr ""
+
+#: methods/gpgv.cc:202
+msgid " to verify signature (is gnupg installed?)"
+msgstr ""
+
+#: methods/gpgv.cc:206
+msgid "Unknown error executing gpgv"
+msgstr ""
+
+#: methods/gpgv.cc:237
+msgid "The following signatures were invalid:\n"
+msgstr ""
+
+#: methods/gpgv.cc:244
+msgid ""
+"The following signatures couldn't be verified because the public key is not "
+"available:\n"
+msgstr ""
+
#: methods/gzip.cc:57
#, c-format
msgid "Couldn't open pipe for %s"
msgid "Internal error"
msgstr ""
-#: methods/rsh.cc:330
-msgid "Connection closed prematurely"
-msgstr ""
-
#: apt-pkg/contrib/mmap.cc:82
msgid "Can't mmap an empty file"
msgstr ""
msgid "Selection %s not found"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:395
+#: apt-pkg/contrib/configuration.cc:436
#, c-format
msgid "Unrecognized type abbreviation: '%c'"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:453
+#: apt-pkg/contrib/configuration.cc:494
#, c-format
msgid "Opening configuration file %s"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:471
+#: apt-pkg/contrib/configuration.cc:512
#, c-format
msgid "Line %d too long (max %d)"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:567
+#: apt-pkg/contrib/configuration.cc:608
#, c-format
msgid "Syntax error %s:%u: Block starts with no name."
msgstr ""
-#: apt-pkg/contrib/configuration.cc:586
+#: apt-pkg/contrib/configuration.cc:627
#, c-format
msgid "Syntax error %s:%u: Malformed tag"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:603
+#: apt-pkg/contrib/configuration.cc:644
#, c-format
msgid "Syntax error %s:%u: Extra junk after value"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:643
+#: apt-pkg/contrib/configuration.cc:684
#, c-format
msgid "Syntax error %s:%u: Directives can only be done at the top level"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:650
+#: apt-pkg/contrib/configuration.cc:691
#, c-format
msgid "Syntax error %s:%u: Too many nested includes"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:654 apt-pkg/contrib/configuration.cc:659
+#: apt-pkg/contrib/configuration.cc:695 apt-pkg/contrib/configuration.cc:700
#, c-format
msgid "Syntax error %s:%u: Included from here"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:663
+#: apt-pkg/contrib/configuration.cc:704
#, c-format
msgid "Syntax error %s:%u: Unsupported directive '%s'"
msgstr ""
-#: apt-pkg/contrib/configuration.cc:697
+#: apt-pkg/contrib/configuration.cc:738
#, c-format
msgid "Syntax error %s:%u: Extra junk at end of file"
msgstr ""
msgid "Unable to stat the mount point %s"
msgstr ""
-#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:422 apt-pkg/clean.cc:44
+#: apt-pkg/contrib/cdromutl.cc:149 apt-pkg/acquire.cc:423 apt-pkg/clean.cc:44
#, c-format
msgid "Unable to change to %s"
msgstr ""
msgid "Failed to stat the cdrom"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:80
+#: apt-pkg/contrib/fileutl.cc:82
#, c-format
msgid "Not using locking for read only lock file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:85
+#: apt-pkg/contrib/fileutl.cc:87
#, c-format
msgid "Could not open lock file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:103
+#: apt-pkg/contrib/fileutl.cc:105
#, c-format
msgid "Not using locking for nfs mounted lock file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:107
+#: apt-pkg/contrib/fileutl.cc:109
#, c-format
msgid "Could not get lock %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:359
+#: apt-pkg/contrib/fileutl.cc:377
#, c-format
msgid "Waited for %s but it wasn't there"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:369
+#: apt-pkg/contrib/fileutl.cc:387
#, c-format
msgid "Sub-process %s received a segmentation fault."
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:372
+#: apt-pkg/contrib/fileutl.cc:390
#, c-format
msgid "Sub-process %s returned an error code (%u)"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:374
+#: apt-pkg/contrib/fileutl.cc:392
#, c-format
msgid "Sub-process %s exited unexpectedly"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:418
+#: apt-pkg/contrib/fileutl.cc:436
#, c-format
msgid "Could not open file %s"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:474
+#: apt-pkg/contrib/fileutl.cc:492
#, c-format
msgid "read, still have %lu to read but none left"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:504
+#: apt-pkg/contrib/fileutl.cc:522
#, c-format
msgid "write, still have %lu to write but couldn't"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:579
+#: apt-pkg/contrib/fileutl.cc:597
msgid "Problem closing the file"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:585
+#: apt-pkg/contrib/fileutl.cc:603
msgid "Problem unlinking the file"
msgstr ""
-#: apt-pkg/contrib/fileutl.cc:596
+#: apt-pkg/contrib/fileutl.cc:614
msgid "Problem syncing the file"
msgstr ""
msgid "Opening %s"
msgstr ""
-#: apt-pkg/sourcelist.cc:170
+#: apt-pkg/sourcelist.cc:170 apt-pkg/cdrom.cc:426
#, c-format
msgid "Line %u too long in source list %s."
msgstr ""
msgid "Unable to correct problems, you have held broken packages."
msgstr ""
-#: apt-pkg/acquire.cc:61
+#: apt-pkg/acquire.cc:62
#, c-format
msgid "Lists directory %spartial is missing."
msgstr ""
-#: apt-pkg/acquire.cc:65
+#: apt-pkg/acquire.cc:66
#, c-format
msgid "Archive directory %spartial is missing."
msgstr ""
+#: apt-pkg/acquire.cc:817
+#, c-format
+msgid "Downloading file %li of %li (%s remaining)"
+msgstr ""
+
#: apt-pkg/acquire-worker.cc:112
#, c-format
msgid "The method driver %s could not be found."
msgid "rename failed, %s (%s -> %s)."
msgstr ""
-#: apt-pkg/acquire-item.cc:235 apt-pkg/acquire-item.cc:900
+#: apt-pkg/acquire-item.cc:236 apt-pkg/acquire-item.cc:908
msgid "MD5Sum mismatch"
msgstr ""
-#: apt-pkg/acquire-item.cc:714
+#: apt-pkg/acquire-item.cc:722
#, c-format
msgid ""
"I wasn't able to locate a file for the %s package. This might mean you need "
"to manually fix this package. (due to missing arch)"
msgstr ""
-#: apt-pkg/acquire-item.cc:767
+#: apt-pkg/acquire-item.cc:775
#, c-format
msgid ""
"I wasn't able to locate file for the %s package. This might mean you need to "
"manually fix this package."
msgstr ""
-#: apt-pkg/acquire-item.cc:803
+#: apt-pkg/acquire-item.cc:811
#, c-format
msgid ""
"The package index files are corrupted. No Filename: field for package %s."
msgstr ""
-#: apt-pkg/acquire-item.cc:890
+#: apt-pkg/acquire-item.cc:898
msgid "Size mismatch"
msgstr ""
msgid "Vendor block %s contains no fingerprint"
msgstr ""
-#: apt-pkg/cdrom.cc:504
+#: apt-pkg/cdrom.cc:507
#, c-format
msgid ""
"Using CD-ROM mount point %s\n"
"Mounting CD-ROM\n"
msgstr ""
-#: apt-pkg/cdrom.cc:513 apt-pkg/cdrom.cc:595
+#: apt-pkg/cdrom.cc:516 apt-pkg/cdrom.cc:598
msgid "Identifying.. "
msgstr ""
-#: apt-pkg/cdrom.cc:538
+#: apt-pkg/cdrom.cc:541
#, c-format
msgid "Stored label: %s \n"
msgstr ""
-#: apt-pkg/cdrom.cc:558
+#: apt-pkg/cdrom.cc:561
#, c-format
msgid "Using CD-ROM mount point %s\n"
msgstr ""
-#: apt-pkg/cdrom.cc:576
+#: apt-pkg/cdrom.cc:579
msgid "Unmounting CD-ROM\n"
msgstr ""
-#: apt-pkg/cdrom.cc:580
+#: apt-pkg/cdrom.cc:583
msgid "Waiting for disc...\n"
msgstr ""
#. Mount the new CDROM
-#: apt-pkg/cdrom.cc:588
+#: apt-pkg/cdrom.cc:591
msgid "Mounting CD-ROM...\n"
msgstr ""
-#: apt-pkg/cdrom.cc:606
+#: apt-pkg/cdrom.cc:609
msgid "Scanning disc for index files..\n"
msgstr ""
-#: apt-pkg/cdrom.cc:644
+#: apt-pkg/cdrom.cc:647
#, c-format
msgid "Found %i package indexes, %i source indexes and %i signatures\n"
msgstr ""
-#: apt-pkg/cdrom.cc:701
+#: apt-pkg/cdrom.cc:704
msgid "That is not a valid name, try again.\n"
msgstr ""
-#: apt-pkg/cdrom.cc:717
+#: apt-pkg/cdrom.cc:720
#, c-format
msgid ""
"This disc is called: \n"
"'%s'\n"
msgstr ""
-#: apt-pkg/cdrom.cc:721
+#: apt-pkg/cdrom.cc:724
msgid "Copying package lists..."
msgstr ""
-#: apt-pkg/cdrom.cc:745
+#: apt-pkg/cdrom.cc:748
msgid "Writing new source list\n"
msgstr ""
-#: apt-pkg/cdrom.cc:754
+#: apt-pkg/cdrom.cc:757
msgid "Source list entries for this disc are:\n"
msgstr ""
-#: apt-pkg/cdrom.cc:788
+#: apt-pkg/cdrom.cc:791
msgid "Unmounting CD-ROM..."
msgstr ""
#, c-format
msgid "Wrote %i records with %i missing files and %i mismatched files\n"
msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:358
+#, c-format
+msgid "Preparing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:359
+#, c-format
+msgid "Unpacking %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:364
+#, c-format
+msgid "Preparing to configure %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:365
+#, c-format
+msgid "Configuring %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:366
+#, c-format
+msgid "Installed %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:371
+#, c-format
+msgid "Preparing for removal of %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:372
+#, c-format
+msgid "Removing %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:373
+#, c-format
+msgid "Removed %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:378
+#, c-format
+msgid "Preparing for remove with config %s"
+msgstr ""
+
+#: apt-pkg/deb/dpkgpm.cc:379
+#, c-format
+msgid "Removed with config %s"
+msgstr ""
+
+#: methods/rsh.cc:330
+msgid "Connection closed prematurely"
+msgstr ""