Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

binary packages install are failing when download method gets source #367

Open
averissimo opened this issue Jun 3, 2024 · 0 comments
Open

Comments

@averissimo
Copy link

averissimo commented Jun 3, 2024

ip$install() call fails on verifying the binary package after the installation proposal download call (see below for an example)

  • Fail is random, as it may use the resolution$sources item that is not Archive most of the time
  • Fail sometimes happens if non-archive source is downloaded
    • can be mitigated with another download

This was detected when installing insightsengineering/teal.modules.clinical with 2 problematic binary packages nloptr and urltools (using ppm snapshot or latest).

  • Is there an option to disable resolving the Archive URL?
    • doesn't happen only on Archive URL (however, this one always downloads source packages)
  • Could the method fall back to installing a source package or re-downloading again?

Reproducible example

note: I think this results from a race condition when downloading the file with pkgcache::download_one_of(...) and it downloads a source archive.

config <- list(
  cran_mirror = "https://packagemanager.posit.co/cran/__linux__/noble/2024-04-19", 
  library = tempfile()
)

ip <- pkgdepends::new_pkg_installation_proposal("tern", config = config)

ip$solve()

res <- ip$get_resolution()

# Keep only Archive sources (force failure)
new_sources <- lapply(
  res$sources,
  function(x) {
    if (length(x) > 1 && any(grepl("src/contrib/Archive", x))) {
      x[grepl("src/contrib/Archive", x)]
    } else {
      x
    }
  }
)

ip$.__enclos_env__$private$plan$.__enclos_env__$private$resolution$result$sources <- new_sources

ip$download()
ip$install()
.Last.error
#> <install_input_error/rlib_error_3_0/rlib_error/error>
#> Error in `verify_extracted_package(filename, pkg_cache)` at install-binary.R:5:3:
#> ! 
#> /tmp/Rtmpaxpmb1/file4cf621cf4b41/src/contrib/x86_64-pc-linux-gnu-ubuntu-24.04/4.4/nloptr_2.0.3.tar.gz
#> is not a valid binary, it is missing nloptr/Meta/package.rds.
#> ---
#> Backtrace:
#>  1. ip$install()
#>  2. pkgdepends::install_package_plan(plan, lib = private$library, num_workers = nw, … at pkg-installation.R:466:7
#>  3. base::withCallingHandlers({ … at install-plan.R:107:3
#>  4. pkgdepends:::handle_events(state, events) at install-plan.R:120:7
#>  5. pkgdepends:::handle_event(state, i) at install-plan.R:210:3
#>  6. proc$get_result() at install-plan.R:239:3
#>  7. processx:::process_get_result(self, private) at process.R:576:18
#>  8. private$post_process() at process.R:784:5
#>  9. pkgdepends:::install_extracted_binary(filename, lib_cache, pkg_cache, lib, … at install-binary.R:140:4
#> 10. pkgdepends:::verify_extracted_package(filename, pkg_cache) at install-binary.R:5:3
#> 11. pkgdepends:::throw(pkg_error("{.path {filename}} is not a valid binary, it is missing {miss}."… at install-verify-binary.R:30:5
@averissimo averissimo changed the title "Archive" url is being used to download binary packages binary packages install are failing when download method gets source Jun 4, 2024
averissimo added a commit to insightsengineering/verdepcheck that referenced this issue Jun 6, 2024
# Pull Request

- Closes #44 

Part of insightsengineering/coredev-tasks#546

Upstream bug: r-lib/pkgdepends#367

#### Changes description:

- Removes sources links that include "src/contrib/Archive"
- When `{pkgdepends}` attempts to download the tarball, it will try all
sources and archive-based sources are only source-code
- Re-downloads tarball using mirror.
  - Last attempt to explicitly use `ppm` snapshot mirror

#### Testing

1. Install or load this branch
-
`renv::install("insightsengineering/verdepcheck@fix-random-download%40main")`
3. Clone
[`{tmc}`](https://github.com/insightsengineering/teal.modules.clinical)
    - checkout `546-fix-verdepcheck@main` branch
5. Run all strategies:
    - `verdepcheck::min_cohort_deps_check("/path/to/tmc")`
    - `verdepcheck::min_isolated_deps_check("/path/to/tmc")`
    - `verdepcheck::release_deps_check("/path/to/tmc")`
    - `verdepcheck::max_deps_check("/path/to/tmc")`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant