From jon.skoien at jrc.ec.europa.eu  Fri Oct 11 10:38:26 2013
From: jon.skoien at jrc.ec.europa.eu (Jon Olav Skoien)
Date: Fri, 11 Oct 2013 10:38:26 +0200
Subject: [Rd] install.packages() removes package on Windows
In-Reply-To: <CAFDcVCTvhokihvGs+--c0y+EYbOYyq465KOHYXEqyFJR9iOFEA@mail.gmail.com>
References: <433997010.1272981.1381443245564.JavaMail.root@fhcrc.org>
	<702440245.1273820.1381447687920.JavaMail.root@fhcrc.org>
	<CAFDcVCTvhokihvGs+--c0y+EYbOYyq465KOHYXEqyFJR9iOFEA@mail.gmail.com>
Message-ID: <5257B902.3020503@jrc.ec.europa.eu>



On 11-Oct-13 3:15, Henrik Bengtsson wrote:
> My guess is that the DLL of the already installed XML package is
> loaded by another R session and that prevents the corresponding DLL
> file:
>
>> path <- system.file("libs", package="XML")
>> list.files(path, recursive=TRUE, pattern="dll$")
> [1] "i386/XML.dll" "x64/XML.dll"
>
> from being deleted by install.packages() -> unpackPkgZip() ->
>
>              ret <- unlink(instPath, recursive=TRUE, force=TRUE)
>
> which gives the warnings.  You can verify this by checking that all
> files but the DLLs are deleted;
>
>> path <- system.file("libs", package="XML")
>> list.files(path, recursive=TRUE)
>
> REPRODUCIBLE EXAMPLE:
>
> # Download package with native code (=has DLLs)
> url <- "http://cran.r-project.org/bin/windows/contrib/r-release/png_0.1-6.zip"
> pkgfile <- basename(url)
> if (!file_test("-f", pkgfile)) download.file(url, dest=pkgfile, mode="wb")
>
> # Setup temporary library
> if (!file_test("-d", "local-libs")) dir.create("local-libs")
>
> # Install to temporary library
> install.packages(pkgfile, repos=NULL, lib="local-libs")
>
> # Record package path
> path <- system.file(package="png", lib.loc="local-libs")
>
> # Launch *another* session that loads the package
> Rscript <- file.path(R.home("bin"), "Rscript")
> code <- "library('png', lib.loc='local-libs'); img <-
> readPNG(system.file('img','Rlogo.png',package='png')); Sys.sleep(60)"
> code <- "library('png', lib.loc='local-libs'); Sys.sleep(60)"
> system2(Rscript, args=c("-e", dQuote(code)), wait=FALSE)
>
> # Try to install; will fail
> install.packages(pkgfile, repos=NULL, lib="local-libs")
> ## Gives:
> ## package 'png' successfully unpacked and MD5 sums checked
> ## Warning: cannot remove prior installation of package 'png'
> files <- list.files(path, recursive=TRUE)
> print(files)
> ## [1] "libs/x64/png.dll"
>
>
> SUGGESTION:
> The problem is that unlink(..., recursive=TRUE) is not atomic, leaving
> a corrupt installation behind.  A better solution would be to use
> file.rename() to move the existing installation to a temporary
> directory/location, move the new installation in place, and then
> remove the temporary/old one.  The last step will fail if there is a
> session holding onto the DLL, but at least it does not leave a corrupt
> installation behind.
There is an option to avoid the corrupted installations when running 
multiple instances of R:
options(install.lock = TRUE)
https://stat.ethz.ch/pipermail/r-help/2010-December/263722.html
Not sure if this will solve the original problem though.

Best wishes,
Jon

>
> /Henrik
>
> On Thu, Oct 10, 2013 at 4:28 PM, Dan Tenenbaum <dtenenba at fhcrc.org> wrote:
>> Hi,
>>
>> Starting with the XML package installed:
>>
>>> "XML" %in% rownames(installed.packages())
>> [1] TRUE
>> I ran the following script:
>>
>> pkgs <- c("XML")
>>
>> for (i in 1:100)
>> {
>>      install.packages(pkgs, repos="http://cran.fhcrc.org")
>>      if (!all(pkgs %in% rownames(installed.packages())))
>>      {
>>          print("failed to install pkgs!")
>>          print(paste("Iteration", i))
>>          break
>>      }
>> }
>>
>> And it failed on the third iteration:
>>
>> trying URL 'http://cran.fhcrc.org/bin/windows/contrib/3.0/XML_3.98-1.1.zip'
>> Content type 'application/zip' length 4287270 bytes (4.1 Mb)
>> opened URL
>> downloaded 4.1 Mb
>>
>> package 'XML' successfully unpacked and MD5 sums checked
>>
>> The downloaded binary packages are in
>>          C:\Users\biocbuild\AppData\Local\Temp\3\Rtmps7OWh0\downloaded_packages
>> trying URL 'http://cran.fhcrc.org/bin/windows/contrib/3.0/XML_3.98-1.1.zip'
>> Content type 'application/zip' length 4287270 bytes (4.1 Mb)
>> opened URL
>> downloaded 4.1 Mb
>>
>> package 'XML' successfully unpacked and MD5 sums checked
>>
>> The downloaded binary packages are in
>>          C:\Users\biocbuild\AppData\Local\Temp\3\Rtmps7OWh0\downloaded_packages
>> trying URL 'http://cran.fhcrc.org/bin/windows/contrib/3.0/XML_3.98-1.1.zip'
>> Content type 'application/zip' length 4287270 bytes (4.1 Mb)
>> opened URL
>> downloaded 4.1 Mb
>>
>> package 'XML' successfully unpacked and MD5 sums checked
>> Warning: cannot remove prior installation of package 'XML'
>>
>> The downloaded binary packages are in
>>          C:\Users\biocbuild\AppData\Local\Temp\3\Rtmps7OWh0\downloaded_packages
>> [1] "failed to install pkgs!"
>> [1] "Iteration 3"
>>
>> At this point the XML package is not installed:
>>
>>> "XML" %in% rownames(installed.packages())
>> [1] FALSE
>>
>> Any idea what could cause this? There is no virus scanner running.
>>
>> I notice the warning about failing to remove prior installation, but it looks like it removed enough of it so that XML is no longer installed.
>>
>> I realize my script is a little contrived but I'm trying to track down an elusive problem in our build system that is causing a lot of grief....this may or may not be the same problem but it's certainly a problem, so I thought I'd report it.
>>
>> Is there a workaround?
>>
>> I've only ever seen this issue on Windows.
>>
>> I did try running the same script on a vanilla windows machine and it did not fail. In fact, it does not always fail on the machine where it fails above. But once is enough to mess us up.
>>
>>
>>> sessionInfo()
>> R version 3.0.2 (2013-09-25)
>> Platform: i386-w64-mingw32/i386 (32-bit)
>>
>> locale:
>> [1] LC_COLLATE=English_United States.1252
>> [2] LC_CTYPE=English_United States.1252
>> [3] LC_MONETARY=English_United States.1252
>> [4] LC_NUMERIC=C
>> [5] LC_TIME=English_United States.1252
>>
>> attached base packages:
>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>
>> Thanks,
>> Dan
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
Jon Olav Sk?ien
Joint Research Centre - European Commission
Institute for Environment and Sustainability (IES)
Land Resource Management Unit

Via Fermi 2749, TP 440,  I-21027 Ispra (VA), ITALY

jon.skoien at jrc.ec.europa.eu
Tel:  +39 0332 789205

Disclaimer: Views expressed in this email are those of the individual and do not necessarily represent official views of the European Commission.



[Rd] install.packages() removes package on Windows
Jon Olav Skoien