From edd at debian.org  Wed Sep  7 21:50:35 2016
From: edd at debian.org (Dirk Eddelbuettel)
Date: Wed, 7 Sep 2016 14:50:35 -0500
Subject: [Rd] Building R under Linux - library dependencies
In-Reply-To: <3092aed4.f96460.57d06171.56abc@tlen.pl>
References: <62ff6ef3.6e95b7a5.57d031ed.7e18d@tlen.pl>
	<22480.20131.781988.142009@max.nulle.part>
	<3092aed4.f96460.57d06171.56abc@tlen.pl>
Message-ID: <22480.28555.417649.426895@max.nulle.part>


On 7 September 2016 at 20:50, Pawe? Pi?tkowski wrote:
| > | Is there a way to overcome this problem? Precompiled versions of R can be installed on various system configurations, so I guess that there should be a way to compile it in a version-agnostic manner.
| > 
| > Yes, for example by
| > 
| >   -- using a Docker container which is portable across OSs (!!) and versions
| 
| Docker R containers are north of 250 MB. I have checked experimentally that you can trim R down to 16 MB (!) and you'll still be able to execute it (though with warnings). That *is* quite a difference, especially when deploying small applications.

You are not enumerating your trade-offs very well. There are natural
conflicts. What is you really want?

- Being able to pre-build and distribute?  We have done that since the last
5C1990s with .deb packages.

- Being able to install with minimal size?  Have you queried your users?  I
note that among the Docker containers for R (in the "Rocker" project Carl and
I run) the _larger_ ones containing RStudio plus optionally "lots from
hadley" plus optionally lots of rOpenSci tend to me _more_ popular (for ease
of installation of the aggregate).

And while share the overall sentiment a little bit, you have to realize that
it is 2016 with the corresponding bandwith and storage:

  edd at max:~$ du -csh /usr/local/lib/R/site-library/
  1.5G    /usr/local/lib/R/site-library/
  1.5G    total
  edd at max:~$

And that it _outside_ of R itself, or the (numerous) other shared libraries.

| >   -- relying on package management which is what every Linux distro does
| > 
| > (...)
| > 
| > PS For the latter point, our .deb based R package currently shows this:
| > 
| > (...)
| > 
| > Depends: zip, unzip, libpaper-utils, xdg-utils, libblas3 | libblas.so.3, libbz2-1.0, libc6 (>= 2.23), libcairo2 (>= 1.6.0), libcurl3 (>= 7.28.0), libglib2.0-0 (>= 2.12.0), libgomp1 (>= 4.9), libjpeg8 (>= 8c), liblapack3 | liblapack.so.3, liblzma5 (>= 5.1.1alpha+20120614), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libpcre3, libpng12-0 (>= 1.2.13-4), libreadline6 (>= 6.0), libtcl8.6 (>= 8.6.0), libtiff5 (>= 4.0.3), libtk8.6 (>= 8.6.0), libx11-6, libxt6, zlib1g (>= 1:1.1.4), ucf (>= 3.0), ca-certificates
| 
| Sure, package dependencies would be great as well - at least you'd be sure that users of, say, Debian-based distros will be able to run this portable R, as long as they've installed the required libraries. But notice that in your example package versions equal *or greater* than listed are required - so if someone has upgraded their system, they still will be able to run that R. With a version built from source you need *exactly* the same version as on the machine where R was compiled. Hence my question: how come the precompiled distribution of R has "less strict" library requirements than manually compiled versions?

This is not the list for internals of how Linux packaging works, but if you
took the question to debian-user or debian-devel you would like get a pretty
qualified answer.  That dependency resolution system has been refined for
well over 20 years, so don't expect one sentence answers.

Good luck,  Dirk

-- 
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org



[Rd] Building R under Linux - library dependencies
Dirk Eddelbuettel