From 9169c8714c7f6f7126a8d87265897d510e5422f3 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 18 Dec 2009 10:25:34 +0100 Subject: add /var/log/apt/history.log file --- apt-pkg/deb/dpkgpm.cc | 84 ++++++++++++++++++++++++++++++++++++++++++--------- apt-pkg/deb/dpkgpm.h | 4 ++- apt-pkg/init.cc | 1 + 3 files changed, 73 insertions(+), 16 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 6eb3b40ac..480ffd169 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -556,39 +556,90 @@ bool pkgDPkgPM::OpenLog() string logdir = _config->FindDir("Dir::Log"); if(not FileExists(logdir)) return _error->Error(_("Directory '%s' missing"), logdir.c_str()); + + // get current time + char timestr[200]; + time_t t = time(NULL); + struct tm *tmp = localtime(&t); + strftime(timestr, sizeof(timestr), "%F %T", tmp); + + // open terminal log string logfile_name = flCombine(logdir, _config->Find("Dir::Log::Terminal")); if (!logfile_name.empty()) { term_out = fopen(logfile_name.c_str(),"a"); chmod(logfile_name.c_str(), 0600); - // output current time - char outstr[200]; - time_t t = time(NULL); - struct tm *tmp = localtime(&t); - strftime(outstr, sizeof(outstr), "%F %T", tmp); - fprintf(term_out, "\nLog started: "); - fprintf(term_out, "%s", outstr); + fprintf(term_out, "\n\nLog started: "); + fprintf(term_out, "%s", timestr); fprintf(term_out, "\n"); } + + // write + string history_name = flCombine(logdir, + _config->Find("Dir::Log::History")); + if (!history_name.empty()) + { + history_out = fopen(history_name.c_str(),"a"); + chmod(history_name.c_str(), 0644); + fprintf(history_out, "\nStart-Date: %s\n", timestr); + string remove, purge, install, upgrade, downgrade; + for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) + { + if (Cache[I].Install()) + install += I.Name() + string(" (") + Cache[I].CandVersion + string(") "); + else if (Cache[I].Delete()) + { + if ((Cache[I].iFlags & pkgDepCache::Purge) == pkgDepCache::Purge) + purge += I.Name() + string(" (") + Cache[I].CurVersion + string(") "); + else + remove += I.Name() + string(" (") + Cache[I].CurVersion + string(") "); + } + else if (Cache[I].Upgrade()) + upgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); + else if (Cache[I].Downgrade()) + downgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); + } + if (install.size() > 0) + fprintf(history_out, "Install: %s\n", install.c_str()); + if (upgrade.size() > 0) + fprintf(history_out, "Upgrade: %s\n", upgrade.c_str()); + if (downgrade.size() > 0) + fprintf(history_out, "Downgrade: %s\n", downgrade.c_str()); + if (remove.size() > 0) + fprintf(history_out, "Remove: %s\n", remove.c_str()); + if (purge.size() > 0) + fprintf(history_out, "Purge: %s\n", purge.c_str()); + } + return true; } /*}}}*/ // DPkg::CloseLog /*{{{*/ bool pkgDPkgPM::CloseLog() { + char timestr[200]; + time_t t = time(NULL); + struct tm *tmp = localtime(&t); + strftime(timestr, sizeof(timestr), "%F %T", tmp); + if(term_out) { - char outstr[200]; - time_t t = time(NULL); - struct tm *tmp = localtime(&t); - strftime(outstr, sizeof(outstr), "%F %T", tmp); fprintf(term_out, "Log ended: "); - fprintf(term_out, "%s", outstr); + fprintf(term_out, "%s", timestr); fprintf(term_out, "\n"); fclose(term_out); } term_out = NULL; + + if(history_out) + { + if (dpkg_error.size() > 0) + fprintf(history_out, "Error: %s\n", dpkg_error.c_str()); + fprintf(history_out, "End-Date: %s\n", timestr); + fclose(history_out); + } + return true; } /*}}}*/ @@ -1057,11 +1108,14 @@ bool pkgDPkgPM::Go(int OutStatusFd) RunScripts("DPkg::Post-Invoke"); if (WIFSIGNALED(Status) != 0 && WTERMSIG(Status) == SIGSEGV) - _error->Error("Sub-process %s received a segmentation fault.",Args[0]); + strprintf(dpkg_error, "Sub-process %s received a segmentation fault.",Args[0]); else if (WIFEXITED(Status) != 0) - _error->Error("Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status)); + strprintf(dpkg_error, "Sub-process %s returned an error code (%u)",Args[0],WEXITSTATUS(Status)); else - _error->Error("Sub-process %s exited unexpectedly",Args[0]); + strprintf(dpkg_error, "Sub-process %s exited unexpectedly",Args[0]); + + if(dpkg_error.size() > 0) + _error->Error(dpkg_error.c_str()); if(stopOnError) { diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index 43e5c7d45..67f1430be 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -29,7 +29,9 @@ class pkgDPkgPM : public pkgPackageManager char dpkgbuf[1024]; int dpkgbuf_pos; FILE *term_out; - + FILE *history_out; + string dpkg_error; + protected: // progress reporting diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index a54c09a36..2544b8025 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -74,6 +74,7 @@ bool pkgInitConfig(Configuration &Cnf) // State Cnf.Set("Dir::Log","var/log/apt"); Cnf.Set("Dir::Log::Terminal","term.log"); + Cnf.Set("Dir::Log::History","history.log"); // Translation Cnf.Set("APT::Acquire::Translation", "environment"); -- cgit v1.2.3-70-g09d2 From 9c59aadaae0b6c1286608ad87b468e7463adf8d9 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 18 Dec 2009 10:45:24 +0100 Subject: fix order of upgrade, install check because for a upgrade "Install()" returns True as well --- apt-pkg/deb/dpkgpm.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 480ffd169..6984c64c1 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -586,7 +586,11 @@ bool pkgDPkgPM::OpenLog() string remove, purge, install, upgrade, downgrade; for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { - if (Cache[I].Install()) + if (Cache[I].Upgrade()) + upgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); + else if (Cache[I].Downgrade()) + downgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); + else if (Cache[I].Install()) install += I.Name() + string(" (") + Cache[I].CandVersion + string(") "); else if (Cache[I].Delete()) { @@ -595,10 +599,6 @@ bool pkgDPkgPM::OpenLog() else remove += I.Name() + string(" (") + Cache[I].CurVersion + string(") "); } - else if (Cache[I].Upgrade()) - upgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); - else if (Cache[I].Downgrade()) - downgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); } if (install.size() > 0) fprintf(history_out, "Install: %s\n", install.c_str()); -- cgit v1.2.3-70-g09d2 From 06d5520f0787f5fdb3fe0def435709054a26dbda Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 18 Dec 2009 10:58:07 +0100 Subject: apt-pkg/deb/dpkgpm.cc: fflush early --- apt-pkg/deb/dpkgpm.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 6984c64c1..8162405c7 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -610,6 +610,7 @@ bool pkgDPkgPM::OpenLog() fprintf(history_out, "Remove: %s\n", remove.c_str()); if (purge.size() > 0) fprintf(history_out, "Purge: %s\n", purge.c_str()); + fflush(history_out); } return true; -- cgit v1.2.3-70-g09d2 From d7a4ffd6525524000b6e529afa6e3ca63bd76c01 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 18 Dec 2009 15:43:49 +0100 Subject: apt-pkg/deb/dpkgpm.{cc,h}: refactor writing of the history tag, add "," --- apt-pkg/deb/dpkgpm.cc | 40 +++++++++++++++++++++++----------------- apt-pkg/deb/dpkgpm.h | 1 + 2 files changed, 24 insertions(+), 17 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/deb/dpkgpm.cc b/apt-pkg/deb/dpkgpm.cc index 8162405c7..4b118bc14 100644 --- a/apt-pkg/deb/dpkgpm.cc +++ b/apt-pkg/deb/dpkgpm.cc @@ -550,6 +550,17 @@ void pkgDPkgPM::DoDpkgStatusFd(int statusfd, int OutStatusFd) dpkgbuf_pos = dpkgbuf+dpkgbuf_pos-p; } /*}}}*/ +// DPkgPM::WriteHistoryTag /*{{{*/ +void pkgDPkgPM::WriteHistoryTag(string tag, string value) +{ + if (value.size() > 0) + { + // poor mans rstrip(", ") + if (value[value.size()-2] == ',' && value[value.size()-1] == ' ') + value.erase(value.size() - 2, 2); + fprintf(history_out, "%s: %s\n", tag.c_str(), value.c_str()); + } +} /*}}}*/ // DPkgPM::OpenLog /*{{{*/ bool pkgDPkgPM::OpenLog() { @@ -586,30 +597,25 @@ bool pkgDPkgPM::OpenLog() string remove, purge, install, upgrade, downgrade; for (pkgCache::PkgIterator I = Cache.PkgBegin(); I.end() == false; I++) { - if (Cache[I].Upgrade()) - upgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); + if (Cache[I].NewInstall()) + install += I.Name() + string(" (") + Cache[I].CandVersion + string("), "); + else if (Cache[I].Upgrade()) + upgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string("), "); else if (Cache[I].Downgrade()) - downgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string(") "); - else if (Cache[I].Install()) - install += I.Name() + string(" (") + Cache[I].CandVersion + string(") "); + downgrade += I.Name() + string(" (") + Cache[I].CurVersion + string(", ") + Cache[I].CandVersion + string("), "); else if (Cache[I].Delete()) { if ((Cache[I].iFlags & pkgDepCache::Purge) == pkgDepCache::Purge) - purge += I.Name() + string(" (") + Cache[I].CurVersion + string(") "); + purge += I.Name() + string(" (") + Cache[I].CurVersion + string("), "); else - remove += I.Name() + string(" (") + Cache[I].CurVersion + string(") "); + remove += I.Name() + string(" (") + Cache[I].CurVersion + string("), "); } } - if (install.size() > 0) - fprintf(history_out, "Install: %s\n", install.c_str()); - if (upgrade.size() > 0) - fprintf(history_out, "Upgrade: %s\n", upgrade.c_str()); - if (downgrade.size() > 0) - fprintf(history_out, "Downgrade: %s\n", downgrade.c_str()); - if (remove.size() > 0) - fprintf(history_out, "Remove: %s\n", remove.c_str()); - if (purge.size() > 0) - fprintf(history_out, "Purge: %s\n", purge.c_str()); + WriteHistoryTag("Install", install); + WriteHistoryTag("Upgrade", upgrade); + WriteHistoryTag("Downgrade",downgrade); + WriteHistoryTag("Remove",remove); + WriteHistoryTag("Purge",purge); fflush(history_out); } diff --git a/apt-pkg/deb/dpkgpm.h b/apt-pkg/deb/dpkgpm.h index 67f1430be..330c788a2 100644 --- a/apt-pkg/deb/dpkgpm.h +++ b/apt-pkg/deb/dpkgpm.h @@ -68,6 +68,7 @@ class pkgDPkgPM : public pkgPackageManager // Helpers bool RunScriptsWithPkgs(const char *Cnf); bool SendV2Pkgs(FILE *F); + void WriteHistoryTag(string tag, string value); // dpkg log bool OpenLog(); -- cgit v1.2.3-70-g09d2 From 5ae004ce7a925426808635b92ec1cbaa5443bb4e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 22 Jan 2010 20:05:11 +0100 Subject: * apt-pkg/contrib/cdromutl.cc: - fix UnmountCdrom() fails, give it a bit more time and try the umount again --- apt-pkg/contrib/cdromutl.cc | 51 ++++++++++++++++++++++++++------------------- debian/changelog | 3 +++ 2 files changed, 33 insertions(+), 21 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/cdromutl.cc b/apt-pkg/contrib/cdromutl.cc index 0cf9697ac..6dce82fe1 100644 --- a/apt-pkg/contrib/cdromutl.cc +++ b/apt-pkg/contrib/cdromutl.cc @@ -64,35 +64,44 @@ bool UnmountCdrom(string Path) { if (IsMounted(Path) == false) return true; - - int Child = ExecFork(); - // The child - if (Child == 0) + for (int i=0;i<3;i++) { - // Make all the fds /dev/null - for (int I = 0; I != 3; I++) - dup2(open("/dev/null",O_RDWR),I); + + int Child = ExecFork(); - if (_config->Exists("Acquire::cdrom::"+Path+"::UMount") == true) + // The child + if (Child == 0) { - if (system(_config->Find("Acquire::cdrom::"+Path+"::UMount").c_str()) != 0) + // Make all the fds /dev/null + for (int I = 0; I != 3; I++) + dup2(open("/dev/null",O_RDWR),I); + + if (_config->Exists("Acquire::cdrom::"+Path+"::UMount") == true) + { + if (system(_config->Find("Acquire::cdrom::"+Path+"::UMount").c_str()) != 0) + _exit(100); + _exit(0); + } + else + { + const char *Args[10]; + Args[0] = "umount"; + Args[1] = Path.c_str(); + Args[2] = 0; + execvp(Args[0],(char **)Args); _exit(100); - _exit(0); + } } - else - { - const char *Args[10]; - Args[0] = "umount"; - Args[1] = Path.c_str(); - Args[2] = 0; - execvp(Args[0],(char **)Args); - _exit(100); - } + + // if it can not be umounted, give it a bit more time + // this can happen when auto-mount magic or fs/cdrom prober attack + if (ExecWait(Child,"umount",true) == true) + return true; + sleep(1); } - // Wait for mount - return ExecWait(Child,"umount",true); + return false; } /*}}}*/ // MountCdrom - Mount a cdrom /*{{{*/ diff --git a/debian/changelog b/debian/changelog index 03a467cfa..5bb90cc1d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,9 @@ apt (0.7.25.1) UNRELEASED; urgency=low from the transaction (complements term.log) * cmdline/apt-get.cc: - fix apt-get source pkg=version regression (closes: #561971) + * apt-pkg/contrib/cdromutl.cc: + - fix UnmountCdrom() fails, give it a bit more time and try + the umount again -- Michael Vogt Fri, 18 Dec 2009 16:54:18 +0100 -- cgit v1.2.3-70-g09d2 From 169413dcf101ca39aebc2bf46991c27c1e439259 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 26 Jan 2010 16:43:20 +0100 Subject: cmdline/apt-cdrom.cc: add --auto-detect --- apt-pkg/cdrom.cc | 3 ++- cmdline/apt-cdrom.cc | 67 +++++++++++++++++++++++++++++++++++++++++++++++++--- debian/apt.dirs | 1 + 3 files changed, 67 insertions(+), 4 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 72d8e4d41..3467f49d7 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -921,6 +921,7 @@ pkgUdevCdromDevices::Scan() /*{{{*/ pkgUdevCdromDevices::~pkgUdevCdromDevices() /*{{{*/ { - dlclose(libudev_handle); + if (libudev_handle != NULL) + dlclose(libudev_handle); } /*}}}*/ diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc index d804c55e5..fc949ce7b 100644 --- a/cmdline/apt-cdrom.cc +++ b/cmdline/apt-cdrom.cc @@ -98,6 +98,39 @@ OpProgress* pkgCdromTextStatus::GetOpProgress() return &Progress; }; /*}}}*/ +// SetupAutoDetect /*{{{*/ +bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, int &i) +{ + bool Debug = _config->FindB("Debug::Acquire::cdrom", false); + + vector v = UdevCdroms.Scan(); + if (i >= v.size()) + return false; + + if (Debug) + clog << "Looking at devce " << i + << " DeviveName: " << v[i].DeviceName + << " IsMounted: '" << v[i].Mounted << "'" + << " MountPoint: '" << v[i].MountPath << "'" + << endl; + + if (v[i].Mounted) + { + // set the right options + _config->Set("Acquire::cdrom::mount", v[i].MountPath); + _config->Set("APT::CDROM::NoMount", true); + } else { + MountCdrom("/var/lib/apt/media", v[i].DeviceName); + MountCdrom("/var/lib/apt/media", v[i].DeviceName); + _config->Set("Acquire::cdrom::mount", "/var/lib/apt/media"); + _config->Set("APT::CDROM::NoMount", true); + } + i++; + + return true; +} + /*}}}*/ + // DoAdd - Add a new CDROM /*{{{*/ // --------------------------------------------------------------------- /* This does the main add bit.. We show some status and things. The @@ -106,12 +139,25 @@ OpProgress* pkgCdromTextStatus::GetOpProgress() verify them. Then rewrite the database files */ bool DoAdd(CommandLine &) { - bool res = false; + pkgUdevCdromDevices UdevCdroms; pkgCdromTextStatus log; pkgCdrom cdrom; - res = cdrom.Add(&log); + bool res = false; + + bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect"); + int count = 0; + + if (AutoDetect && UdevCdroms.Dlopen()) + { + while (AutoDetectCdrom(UdevCdroms, count)) + res &= cdrom.Add(&log); + } else { + res = cdrom.Add(&log); + } + if(res) cout << _("Repeat this process for the rest of the CDs in your set.") << endl; + return res; } /*}}}*/ @@ -120,10 +166,24 @@ bool DoAdd(CommandLine &) /* */ bool DoIdent(CommandLine &) { + pkgUdevCdromDevices UdevCdroms; string ident; pkgCdromTextStatus log; pkgCdrom cdrom; - return cdrom.Ident(ident, &log); + bool res = true; + + bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect"); + int count = 0; + + if (AutoDetect && UdevCdroms.Dlopen()) + { + while (AutoDetectCdrom(UdevCdroms, count)) + res &= cdrom.Ident(ident, &log); + } else { + return cdrom.Ident(ident, &log); + } + + return res; } /*}}}*/ // ShowHelp - Show the help screen /*{{{*/ @@ -164,6 +224,7 @@ int main(int argc,const char *argv[]) /*{{{*/ { CommandLine::Args Args[] = { {'h',"help","help",0}, + {'a',"auto-detect","Acquire::cdrom::AutoDetect",0}, {'v',"version","version",0}, {'d',"cdrom","Acquire::cdrom::mount",CommandLine::HasArg}, {'r',"rename","APT::CDROM::Rename",0}, diff --git a/debian/apt.dirs b/debian/apt.dirs index fb6716c35..b812f116b 100644 --- a/debian/apt.dirs +++ b/debian/apt.dirs @@ -9,6 +9,7 @@ etc/logrotate.d var/cache/apt/archives/partial var/lib/apt/lists/partial var/lib/apt/periodic +var/lib/apt/media var/log/apt usr/share/bug/apt usr/share/lintian/overrides -- cgit v1.2.3-70-g09d2 From fb503892e3e05132bb7db369440402ff81ea5f8d Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 26 Jan 2010 20:36:13 +0100 Subject: * cmdline/apt-cdrom.cc: - fixed signed/unsigned warning - create /media mount point if needed - fix initialization for res in DoAdd() * methods/cdrom.cc: - make AptMountPoint a variable --- apt-pkg/cdrom.cc | 2 -- cmdline/apt-cdrom.cc | 17 ++++++++++------- methods/cdrom.cc | 13 +++++++------ 3 files changed, 17 insertions(+), 15 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/cdrom.cc b/apt-pkg/cdrom.cc index 3467f49d7..96d4e9c91 100644 --- a/apt-pkg/cdrom.cc +++ b/apt-pkg/cdrom.cc @@ -829,8 +829,6 @@ bool pkgCdrom::Add(pkgCdromStatus *log) /*{{{*/ } } - - // Unmount and finish if (_config->FindB("APT::CDROM::NoMount",false) == false) { log->Update(_("Unmounting CD-ROM...\n"), STEP_LAST); diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc index fc949ce7b..494a7d8df 100644 --- a/cmdline/apt-cdrom.cc +++ b/cmdline/apt-cdrom.cc @@ -99,7 +99,7 @@ OpProgress* pkgCdromTextStatus::GetOpProgress() }; /*}}}*/ // SetupAutoDetect /*{{{*/ -bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, int &i) +bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, unsigned int &i) { bool Debug = _config->FindB("Debug::Acquire::cdrom", false); @@ -120,9 +120,12 @@ bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, int &i) _config->Set("Acquire::cdrom::mount", v[i].MountPath); _config->Set("APT::CDROM::NoMount", true); } else { - MountCdrom("/var/lib/apt/media", v[i].DeviceName); - MountCdrom("/var/lib/apt/media", v[i].DeviceName); - _config->Set("Acquire::cdrom::mount", "/var/lib/apt/media"); + const char* AptMountPoint = "/media/apt"; + if (!FileExists(AptMountPoint)) + mkdir(AptMountPoint, 0750); + if(MountCdrom(AptMountPoint, v[i].DeviceName) == false) + _error->Warning(_("Failed to mount '%s' to '%s'"), v[i].DeviceName.c_str(), AptMountPoint); + _config->Set("Acquire::cdrom::mount", AptMountPoint); _config->Set("APT::CDROM::NoMount", true); } i++; @@ -142,10 +145,10 @@ bool DoAdd(CommandLine &) pkgUdevCdromDevices UdevCdroms; pkgCdromTextStatus log; pkgCdrom cdrom; - bool res = false; + bool res = true; bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect"); - int count = 0; + unsigned int count = 0; if (AutoDetect && UdevCdroms.Dlopen()) { @@ -173,7 +176,7 @@ bool DoIdent(CommandLine &) bool res = true; bool AutoDetect = _config->FindB("Acquire::cdrom::AutoDetect"); - int count = 0; + unsigned int count = 0; if (AutoDetect && UdevCdroms.Dlopen()) { diff --git a/methods/cdrom.cc b/methods/cdrom.cc index 0e78851ff..c8ec322ee 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -116,23 +116,24 @@ bool CDROMMethod::AutoDetectAndMount(URI Get, string &NewID) return false; // check if we have the mount point - if (!FileExists("/media/apt")) - mkdir("/media/apt", 0755); + const char* AptMountPoint = "/media/apt"; + if (!FileExists(AptMountPoint)) + mkdir(AptMountPoint, 0750); // now try mounting for (unsigned int i=0; i < v.size(); i++) { if (!v[i].Mounted) { - if(MountCdrom("/media/apt", v[i].DeviceName)) + if(MountCdrom(AptMountPoint, v[i].DeviceName)) { - if (IsCorrectCD(Get, "/media/apt", NewID)) + if (IsCorrectCD(Get, AptMountPoint, NewID)) { MountedByApt = true; - CDROM = "/media/apt"; + CDROM = AptMountPoint; return true; } else { - UnmountCdrom("/media/apt"); + UnmountCdrom(AptMountPoint); } } } -- cgit v1.2.3-70-g09d2 From ffee221b8d1df28768d30762d72a11289ae747dc Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 26 Jan 2010 21:08:41 +0100 Subject: add Dir::Media::MountPath config option --- apt-pkg/init.cc | 3 ++- cmdline/apt-cdrom.cc | 6 +++--- doc/examples/configure-index | 7 +++++++ methods/cdrom.cc | 4 ++-- 4 files changed, 14 insertions(+), 6 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 2544b8025..6310aff11 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -65,11 +65,12 @@ bool pkgInitConfig(Configuration &Cnf) Cnf.Set("Dir::Etc::vendorlist","vendors.list"); Cnf.Set("Dir::Etc::vendorparts","vendors.list.d"); Cnf.Set("Dir::Etc::main","apt.conf"); - Cnf.Set("Dir::ETc::netrc", "auth.conf"); + Cnf.Set("Dir::Etc::netrc", "auth.conf"); Cnf.Set("Dir::Etc::parts","apt.conf.d"); Cnf.Set("Dir::Etc::preferences","preferences"); Cnf.Set("Dir::Etc::preferencesparts","preferences.d"); Cnf.Set("Dir::Bin::methods","/usr/lib/apt/methods"); + Cnf.Set("Dir::Media::MountPath","/media/apt"); // State Cnf.Set("Dir::Log","var/log/apt"); diff --git a/cmdline/apt-cdrom.cc b/cmdline/apt-cdrom.cc index 494a7d8df..988a58f20 100644 --- a/cmdline/apt-cdrom.cc +++ b/cmdline/apt-cdrom.cc @@ -120,11 +120,11 @@ bool AutoDetectCdrom(pkgUdevCdromDevices &UdevCdroms, unsigned int &i) _config->Set("Acquire::cdrom::mount", v[i].MountPath); _config->Set("APT::CDROM::NoMount", true); } else { - const char* AptMountPoint = "/media/apt"; + string AptMountPoint = _config->FindDir("Dir::Media::MountPath"); if (!FileExists(AptMountPoint)) - mkdir(AptMountPoint, 0750); + mkdir(AptMountPoint.c_str(), 0750); if(MountCdrom(AptMountPoint, v[i].DeviceName) == false) - _error->Warning(_("Failed to mount '%s' to '%s'"), v[i].DeviceName.c_str(), AptMountPoint); + _error->Warning(_("Failed to mount '%s' to '%s'"), v[i].DeviceName.c_str(), AptMountPoint.c_str()); _config->Set("Acquire::cdrom::mount", AptMountPoint); _config->Set("APT::CDROM::NoMount", true); } diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 317acddf6..0b0025fca 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -331,6 +331,13 @@ Dir "/" Terminal "term.log"; History "history.log"; }; + + // Media + Media + { + // Media AutoDetect mount path + MountPath "/media/apt"; + }; }; // Things that effect the APT dselect method diff --git a/methods/cdrom.cc b/methods/cdrom.cc index c8ec322ee..4bbc01c2c 100644 --- a/methods/cdrom.cc +++ b/methods/cdrom.cc @@ -116,9 +116,9 @@ bool CDROMMethod::AutoDetectAndMount(URI Get, string &NewID) return false; // check if we have the mount point - const char* AptMountPoint = "/media/apt"; + string AptMountPoint = _config->FindDir("Dir::Media::MountPath"); if (!FileExists(AptMountPoint)) - mkdir(AptMountPoint, 0750); + mkdir(AptMountPoint.c_str(), 0750); // now try mounting for (unsigned int i=0; i < v.size(); i++) -- cgit v1.2.3-70-g09d2 From 5e02df826dc8e1f2a1d687f2cc4e55daba4c5452 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 18 Feb 2010 11:22:26 +0100 Subject: Change the package index Info methods to allow apt-cache policy to be useful when using several different archives on the same host. (Closes: #329814, LP: #22354) --- apt-pkg/contrib/strutl.cc | 12 ++++++++++++ apt-pkg/contrib/strutl.h | 1 + apt-pkg/deb/debindexfile.cc | 12 ++++++------ debian/changelog | 5 +++++ 4 files changed, 24 insertions(+), 6 deletions(-) (limited to 'apt-pkg') diff --git a/apt-pkg/contrib/strutl.cc b/apt-pkg/contrib/strutl.cc index 2913fbf44..8e8820949 100644 --- a/apt-pkg/contrib/strutl.cc +++ b/apt-pkg/contrib/strutl.cc @@ -1323,3 +1323,15 @@ string URI::SiteOnly(const string &URI) return U; } /*}}}*/ +// URI::NoUserPassword - Return the schema, site and path for the URI /*{{{*/ +// --------------------------------------------------------------------- +/* */ +string URI::NoUserPassword(const string &URI) +{ + ::URI U(URI); + U.User.clear(); + U.Password.clear(); + U.Port = 0; + return U; +} + /*}}}*/ diff --git a/apt-pkg/contrib/strutl.h b/apt-pkg/contrib/strutl.h index 2b2e147fb..a1e7f3934 100644 --- a/apt-pkg/contrib/strutl.h +++ b/apt-pkg/contrib/strutl.h @@ -120,6 +120,7 @@ class URI inline void operator =(const string &From) {CopyFrom(From);}; inline bool empty() {return Access.empty();}; static string SiteOnly(const string &URI); + static string NoUserPassword(const string &URI); URI(string Path) {CopyFrom(Path);}; URI() : Port(0) {}; diff --git a/apt-pkg/deb/debindexfile.cc b/apt-pkg/deb/debindexfile.cc index be8175e31..3b11ad2eb 100644 --- a/apt-pkg/deb/debindexfile.cc +++ b/apt-pkg/deb/debindexfile.cc @@ -35,12 +35,12 @@ debSourcesIndex::debSourcesIndex(string URI,string Dist,string Section,bool Trus // SourcesIndex::SourceInfo - Short 1 liner describing a source /*{{{*/ // --------------------------------------------------------------------- /* The result looks like: - http://foo/ stable/main src 1.1.1 (dsc) */ + http://foo/debian/ stable/main src 1.1.1 (dsc) */ string debSourcesIndex::SourceInfo(pkgSrcRecords::Parser const &Record, pkgSrcRecords::File const &File) const { string Res; - Res = ::URI::SiteOnly(URI) + ' '; + Res = ::URI::NoUserPassword(URI) + ' '; if (Dist[Dist.size() - 1] == '/') { if (Dist != "/") @@ -88,7 +88,7 @@ string debSourcesIndex::Describe(bool Short) const /* */ string debSourcesIndex::Info(const char *Type) const { - string Info = ::URI::SiteOnly(URI) + ' '; + string Info = ::URI::NoUserPassword(URI) + ' '; if (Dist[Dist.size() - 1] == '/') { if (Dist != "/") @@ -159,7 +159,7 @@ debPackagesIndex::debPackagesIndex(string URI,string Dist,string Section,bool Tr /* This is a shorter version that is designed to be < 60 chars or so */ string debPackagesIndex::ArchiveInfo(pkgCache::VerIterator Ver) const { - string Res = ::URI::SiteOnly(URI) + ' '; + string Res = ::URI::NoUserPassword(URI) + ' '; if (Dist[Dist.size() - 1] == '/') { if (Dist != "/") @@ -195,7 +195,7 @@ string debPackagesIndex::Describe(bool Short) const /* */ string debPackagesIndex::Info(const char *Type) const { - string Info = ::URI::SiteOnly(URI) + ' '; + string Info = ::URI::NoUserPassword(URI) + ' '; if (Dist[Dist.size() - 1] == '/') { if (Dist != "/") @@ -394,7 +394,7 @@ string debTranslationsIndex::Describe(bool Short) const /* */ string debTranslationsIndex::Info(const char *Type) const { - string Info = ::URI::SiteOnly(URI) + ' '; + string Info = ::URI::NoUserPassword(URI) + ' '; if (Dist[Dist.size() - 1] == '/') { if (Dist != "/") diff --git a/debian/changelog b/debian/changelog index c2c3524a6..a900cdec4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,6 +15,11 @@ apt (0.7.25.4) UNRELEASED; urgency=low proxy configuration and return it to apt via stdout (this is a step towards WPAD and zeroconf/avahi support) + [ Robert Collins ] + * Change the package index Info methods to allow apt-cache policy to be + useful when using several different archives on the same host. + (Closes: #329814, LP: #22354) + -- Michael Vogt Fri, 18 Dec 2009 16:54:18 +0100 apt (0.7.25.3) unstable; urgency=low -- cgit v1.2.3-70-g09d2