pak icon indicating copy to clipboard operation
pak copied to clipboard

Error: 'C:\\Users.../data.table_1.14.0.zip' is not a valid R package, it is an empty archive

Open etiennebacher opened this issue 3 years ago • 11 comments

Hello, I just started using R on a server at work, and I tried to install packages with pak but I always get the same error, whatever the package. Here, with data.table for instance:

> pak::pkg_install(c("data.table"))
v Loading metadata database ... done
                                                                          
> Will install 1 package.
> Will download 1 CRAN package (2.60 MB).
+ data.table   1.14.0 [dl] (2.60 MB)
i Getting 1 pkg (2.60 MB)
v Cached copy of data.table 1.14.0 (windows) is the latest build   
v No downloads needed, all packages are cached                     
Erreur : 'C:\\Users\\etienne\\AppData\\Local\\Temp\\37\\Rtmp67Ykij\\file171c13c23b9f/bin/windows/contrib/4.1/data.table_1.14.0.zip' is not a valid R package, it is an empty archive
Type .Last.error.trace to see where the error occurred

I only get this with pak. If I use install.packages("data.table"), everything works fine. I am using GitHub version (‘0.1.2.9001’). I tried to manually clear C:\\Users\\etienne\\AppData\\Local\\Temp\\37 but it doesn't change anything.

Session info
R version 4.1.0 (2021-05-18)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows Server x64 (build 17763)

Matrix products: default

locale: [1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252
[3] LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=French_France.1252

attached base packages: [1] stats graphics grDevices utils datasets methods
[7] base

loaded via a namespace (and not attached): [1] processx_3.5.2 compiler_4.1.0 R6_2.5.0
[4] cli_3.0.0 tools_4.1.0 glue_1.4.2
[7] data.table_1.14.0 callr_3.7.0 ps_1.6.0
[10] pak_0.1.2.9001

etiennebacher avatar Jul 14 '21 15:07 etiennebacher

I am sorry for the slow response. Do you still have this issue?

gaborcsardi avatar Nov 26 '21 12:11 gaborcsardi

Hello, thank you for coming back to this issue. I still have the same problem, here's the output of .Last.error.trace:

> .Last.error.trace

 Stack trace:

 12. (function (...)  ...
 13. base:::withCallingHandlers(cli_message = function(msg) { ...
 14. get("pkg_install_do_plan", asNamespace("pak"))(...)
 15. pkgdepends::install_package_plan(plan = plan, lib = lib, num_ ...
 16. base:::withCallingHandlers({ ...
 17. pkgdepends:::handle_events(state, events)
 18. pkgdepends:::handle_event(state, i)
 19. proc$get_result()
 20. processx:::process_get_result(self, private)
 21. private$post_process()
 22. pkgdepends:::install_extracted_binary(filename, lib_cache, pk ...
 23. pkgdepends:::verify_extracted_package(filename, pkg_cache)
 24. base:::throw(new_input_error("{filename} is not a valid R pac ...
 25. base:::signalCondition(cond)
 26. (function (e)  ...
 27. base:::stop(e)
 28. (function (e)  ...

 x 'C:\\Users\\etienne\\AppData\\Local\\Temp\\300\\RtmpaAiexJ\\file68dc6538560/bin/windows/contrib/4.1/data.table_1.14.2.zip' is not a valid R package, it is an empty archive 

I checked the zip file indicated in the error message, it is not empty.

etiennebacher avatar Nov 26 '21 13:11 etiennebacher

How did you install pak? Can you try the devel version? You can install it like this:

install.packages("pak", repos = "https://r-lib.github.io/p/pak/devel")

Also, what's the output of

getOption("repos")
pak::repo_get()

gaborcsardi avatar Nov 26 '21 13:11 gaborcsardi

Reinstalled pak as you indicated, same error. Also tried to install data.table after deleting pak cache, but same error.

Here are the outputs you asked:

> getOption("repos")
                       CRAN 
"https://cran.rstudio.com/" 
attr(,"RStudio")
[1] TRUE

> pak::repo_get()
# A tibble: 5 x 5
  name          url                             type  r_version bioc_version
  <chr>         <chr>                           <chr> <chr>     <chr>       
1 CRAN          https://cran.rstudio.com/       cran  *         NA          
2 BioCsoft      https://bioconductor.org/packa~ bioc  4.1.1     3.14        
3 BioCann       https://bioconductor.org/packa~ bioc  4.1.1     3.14        
4 BioCexp       https://bioconductor.org/packa~ bioc  4.1.1     3.14        
5 BioCworkflows https://bioconductor.org/packa~ bioc  4.1.1     3.14 

etiennebacher avatar Nov 26 '21 13:11 etiennebacher

Can you please try a simple source package?

pak::pkg_install("pkgconfig?source")

Can you also try to run these?

system2(system.file(package = "pak", "library", "zip", "bin", "x64", "zip.exe"), "--help")
system2(system.file(package = "pak", "library", "zip", "bin", "x64", "cmdunzip.exe"))

Thanks!

gaborcsardi avatar Nov 26 '21 13:11 gaborcsardi

> pak::pkg_install("pkgconfig?source")
 
> Will install 1 package.
> Will download 1 CRAN package (6.08 kB).
+ pkgconfig   2.0.3 [bld][dl] (6.08 kB)

! pkgconfig is loaded in the current R session, you probably need to restart R
after the installation.

i Getting 1 pkg (6.08 kB)
v Got pkgconfig 2.0.3 (source) (6.08 kB)                                
v Downloaded 1 package (6.08 kB)in 494ms                                         
i Building pkgconfig 2.0.3
v Built pkgconfig 2.0.3 (6.9s)                                         
Erreur : 'C:\\Users\\etienne\\AppData\\Local\\Temp\\300\\RtmpURDvy9\\file69845cd73a29/pkgconfig_2.0.3.zip' is not a valid R package, it is an empty archive
Type .Last.error.trace to see where the error occurred
> system2(system.file(package = "pak", "library", "zip", "bin", "x64", "zip.exe"), "--help")
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -!   use privileges (if granted) to obtain all aspects of WinNT security
  -$   include volume label         -S   include system and hidden files
  -e   encrypt                      -n   don't compress these suffixes
  -h2  show more help
  
> system2(system.file(package = "pak", "library", "zip", "bin", "x64", "cmdunzip.exe"))
Usage: \\crc\users\etienne\My Documents\R\R-4.1.1\library\pak\library\zip\bin\x64\cmdunzip.exe zip-file target-dir

etiennebacher avatar Nov 26 '21 14:11 etiennebacher

One more shot in the dark:

Sys.which("zip")
Sys.which("unzip")

gaborcsardi avatar Nov 26 '21 14:11 gaborcsardi

> Sys.which("zip")
zip 
 "" 
> Sys.which("unzip")
unzip 
   "" 

Is it helpful?

etiennebacher avatar Nov 26 '21 14:11 etiennebacher

I am sorry, I have no clue what is going on. What is your exact OS? Do you have rtools40 installed?

gaborcsardi avatar Nov 26 '21 20:11 gaborcsardi

I'm using Windows Server 2016 Standard, v. 1607, build 14393.4704. rtools40 is installed.

It's not so important, pak::pkg_install doesn't work but install.packages does so I'm not completely blocked. Thanks for your help anyway. I don't know if I should let this issue open since it isn't solved, so I'll let you close it if necessary

etiennebacher avatar Nov 27 '21 18:11 etiennebacher

I would like to understand what is happening here, so thank you for the help! I'll send you a couple of more commands to run soon, if you don't mind.

gaborcsardi avatar Nov 28 '21 21:11 gaborcsardi

In case this is useful - I encountered the same "empty archive" error message just now. I had specified lib with a path to a directory, but I didn't have write permissions on that directory.

After granting write permissions on that directory, pkg_install() worked without issue 😇

owenjonesuob avatar Mar 23 '23 18:03 owenjonesuob

I am getting a similar error in a workflow, here for installing brio: https://github.com/cynkra/cynkrablog/actions/runs/6770789485/job/18399890155?pr=23#step:4:1151 but before that the error was on base64enc installation.

maelle avatar Nov 06 '23 13:11 maelle

I come back to this issue thanks to @maelle's comment. After updating pak, I don't see this issue anymore. I can't tell if this is due to the upgrade or a change on the server I'm using but in any case this is resolved for me.

etiennebacher avatar Nov 06 '23 14:11 etiennebacher

@maelle Your default package library is not writeable.

gaborcsardi avatar Nov 06 '23 14:11 gaborcsardi

thank you, but what I don't get is why, I haven't tweaked anything I know of. :thinking:

maelle avatar Nov 06 '23 14:11 maelle

There is nothing to tweak, on GHA there is no user package library by default, and the site and system libraries are not writeable for the default user. AFAICT.

gaborcsardi avatar Nov 06 '23 15:11 gaborcsardi

We should certainly give a better error message, possibly check that the library is writeable before starting the installation.

gaborcsardi avatar Nov 06 '23 15:11 gaborcsardi

Ok, so I'll look into the r-lib/actions examples to see where I need to set the package library. Thank you!!

maelle avatar Nov 06 '23 15:11 maelle

Those examples use r-lib/actions/setup-r which configures a writeable library for you. So there is no need to do anything in the examples there.

gaborcsardi avatar Nov 06 '23 15:11 gaborcsardi

How embarrassing is it that my workflow didn't have the R setup step :woman_facepalming: Thanks so much!

maelle avatar Nov 06 '23 16:11 maelle

Well, GHA machines have R installed, so if that version is OK, you don't to install another one. But then you need to do

dir.create(Sys.getenv("R_LIBS_USER"), recursive = TRUE)

or something like that, first.

gaborcsardi avatar Nov 06 '23 17:11 gaborcsardi

Closing since it looks like @maelle fixed her issue

etiennebacher avatar Nov 07 '23 12:11 etiennebacher