X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/e93b4028825648bb29074a1422287e2cb435b0de..ec6a4a831e57834bf4d7abb91fc8b298c2fbfcc2:/apt-pkg/aptconfiguration.cc diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc index 69f6f6f8d..01ae5a642 100644 --- a/apt-pkg/aptconfiguration.cc +++ b/apt-pkg/aptconfiguration.cc @@ -16,6 +16,7 @@ #include #include #include +#include #include #include @@ -36,12 +37,13 @@ static void setDefaultConfigurationForCompressors() { // Set default application paths to check for optional compression types _config->CndSet("Dir::Bin::bzip2", "/bin/bzip2"); _config->CndSet("Dir::Bin::xz", "/usr/bin/xz"); + _config->CndSet("Dir::Bin::lz4", "/usr/bin/lz4"); if (FileExists(_config->FindFile("Dir::Bin::xz")) == true) { _config->Set("Dir::Bin::lzma", _config->FindFile("Dir::Bin::xz")); _config->Set("APT::Compressor::lzma::Binary", "xz"); if (_config->Exists("APT::Compressor::lzma::CompressArg") == false) { _config->Set("APT::Compressor::lzma::CompressArg::", "--format=lzma"); - _config->Set("APT::Compressor::lzma::CompressArg::", "-9"); + _config->Set("APT::Compressor::lzma::CompressArg::", "-6"); } if (_config->Exists("APT::Compressor::lzma::UncompressArg") == false) { _config->Set("APT::Compressor::lzma::UncompressArg::", "--format=lzma"); @@ -51,7 +53,7 @@ static void setDefaultConfigurationForCompressors() { _config->CndSet("Dir::Bin::lzma", "/usr/bin/lzma"); if (_config->Exists("APT::Compressor::lzma::CompressArg") == false) { _config->Set("APT::Compressor::lzma::CompressArg::", "--suffix="); - _config->Set("APT::Compressor::lzma::CompressArg::", "-9"); + _config->Set("APT::Compressor::lzma::CompressArg::", "-6"); } if (_config->Exists("APT::Compressor::lzma::UncompressArg") == false) { _config->Set("APT::Compressor::lzma::UncompressArg::", "--suffix="); @@ -78,6 +80,7 @@ const Configuration::getCompressionTypes(bool const &Cached) { _config->CndSet("Acquire::CompressionTypes::bz2","bzip2"); _config->CndSet("Acquire::CompressionTypes::lzma","lzma"); _config->CndSet("Acquire::CompressionTypes::gz","gzip"); + _config->CndSet("Acquire::CompressionTypes::lz4","lz4"); setDefaultConfigurationForCompressors(); std::vector const compressors = getCompressors(); @@ -320,87 +323,8 @@ std::vector const Configuration::getArchitectures(bool const &Cache string const arch = _config->Find("APT::Architecture"); archs = _config->FindVector("APT::Architectures"); - if (unlikely(arch.empty() == true)) - return archs; - - // FIXME: It is a bit unclean to have debian specific code here… - if (archs.empty() == true) { - archs.push_back(arch); - - // Generate the base argument list for dpkg - std::vector Args; - string Tmp = _config->Find("Dir::Bin::dpkg","dpkg"); - { - string const dpkgChrootDir = _config->FindDir("DPkg::Chroot-Directory", "/"); - size_t dpkgChrootLen = dpkgChrootDir.length(); - if (dpkgChrootDir != "/" && Tmp.find(dpkgChrootDir) == 0) { - if (dpkgChrootDir[dpkgChrootLen - 1] == '/') - --dpkgChrootLen; - Tmp = Tmp.substr(dpkgChrootLen); - } - } - Args.push_back(Tmp.c_str()); - - // Stick in any custom dpkg options - ::Configuration::Item const *Opts = _config->Tree("DPkg::Options"); - if (Opts != 0) { - Opts = Opts->Child; - for (; Opts != 0; Opts = Opts->Next) - { - if (Opts->Value.empty() == true) - continue; - Args.push_back(Opts->Value.c_str()); - } - } - - Args.push_back("--print-foreign-architectures"); - Args.push_back(NULL); - - int external[2] = {-1, -1}; - if (pipe(external) != 0) - { - _error->WarningE("getArchitecture", "Can't create IPC pipe for dpkg --print-foreign-architectures"); - return archs; - } - - pid_t dpkgMultiArch = ExecFork(); - if (dpkgMultiArch == 0) { - close(external[0]); - std::string const chrootDir = _config->FindDir("DPkg::Chroot-Directory"); - int const nullfd = open("/dev/null", O_RDONLY); - dup2(nullfd, STDIN_FILENO); - dup2(external[1], STDOUT_FILENO); - dup2(nullfd, STDERR_FILENO); - if (chrootDir != "/" && chroot(chrootDir.c_str()) != 0 && chdir("/") != 0) - _error->WarningE("getArchitecture", "Couldn't chroot into %s for dpkg --print-foreign-architectures", chrootDir.c_str()); - execvp(Args[0], (char**) &Args[0]); - _error->WarningE("getArchitecture", "Can't detect foreign architectures supported by dpkg!"); - _exit(100); - } - close(external[1]); - - FILE *dpkg = fdopen(external[0], "r"); - if(dpkg != NULL) { - char buf[1024]; - while (fgets(buf, sizeof(buf), dpkg) != NULL) { - char* arch = strtok(buf, " "); - while (arch != NULL) { - for (; isspace(*arch) != 0; ++arch); - if (arch[0] != '\0') { - char const* archend = arch; - for (; isspace(*archend) == 0 && *archend != '\0'; ++archend); - string a(arch, (archend - arch)); - if (std::find(archs.begin(), archs.end(), a) == archs.end()) - archs.push_back(a); - } - arch = strtok(NULL, " "); - } - } - fclose(dpkg); - } - ExecWait(dpkgMultiArch, "dpkg --print-foreign-architectures", true); - return archs; - } + if (archs.empty() == true) + archs = _system->ArchitecturesSupported(); if (archs.empty() == true || std::find(archs.begin(), archs.end(), arch) == archs.end()) @@ -442,30 +366,36 @@ const Configuration::getCompressors(bool const Cached) { setDefaultConfigurationForCompressors(); - compressors.push_back(Compressor(".", "", "", NULL, NULL, 1)); + compressors.push_back(Compressor(".", "", "", NULL, NULL, 0)); + if (_config->Exists("Dir::Bin::lz4") == false || FileExists(_config->FindFile("Dir::Bin::lz4")) == true) + compressors.push_back(Compressor("lz4",".lz4","lz4","-1","-d",50)); +#ifdef HAVE_LZ4 + else + compressors.push_back(Compressor("lz4",".lz4","false", NULL, NULL, 50)); +#endif if (_config->Exists("Dir::Bin::gzip") == false || FileExists(_config->FindFile("Dir::Bin::gzip")) == true) - compressors.push_back(Compressor("gzip",".gz","gzip","-9n","-d",2)); + compressors.push_back(Compressor("gzip",".gz","gzip","-6n","-d",100)); #ifdef HAVE_ZLIB else - compressors.push_back(Compressor("gzip",".gz","false", NULL, NULL, 2)); + compressors.push_back(Compressor("gzip",".gz","false", NULL, NULL, 100)); #endif if (_config->Exists("Dir::Bin::xz") == false || FileExists(_config->FindFile("Dir::Bin::xz")) == true) - compressors.push_back(Compressor("xz",".xz","xz","-6","-d",3)); + compressors.push_back(Compressor("xz",".xz","xz","-6","-d",200)); #ifdef HAVE_LZMA else - compressors.push_back(Compressor("xz",".xz","false", NULL, NULL, 3)); + compressors.push_back(Compressor("xz",".xz","false", NULL, NULL, 200)); #endif if (_config->Exists("Dir::Bin::bzip2") == false || FileExists(_config->FindFile("Dir::Bin::bzip2")) == true) - compressors.push_back(Compressor("bzip2",".bz2","bzip2","-9","-d",4)); + compressors.push_back(Compressor("bzip2",".bz2","bzip2","-6","-d",300)); #ifdef HAVE_BZ2 else - compressors.push_back(Compressor("bzip2",".bz2","false", NULL, NULL, 4)); + compressors.push_back(Compressor("bzip2",".bz2","false", NULL, NULL, 300)); #endif if (_config->Exists("Dir::Bin::lzma") == false || FileExists(_config->FindFile("Dir::Bin::lzma")) == true) - compressors.push_back(Compressor("lzma",".lzma","lzma","-9","-d",5)); + compressors.push_back(Compressor("lzma",".lzma","lzma","-6","-d",400)); #ifdef HAVE_LZMA else - compressors.push_back(Compressor("lzma",".lzma","false", NULL, NULL, 5)); + compressors.push_back(Compressor("lzma",".lzma","false", NULL, NULL, 400)); #endif std::vector const comp = _config->FindVector("APT::Compressor");