Skip to content
This repository was archived by the owner on Apr 12, 2021. It is now read-only.
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs-channels
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 776f084cf1bc
Choose a base ref
...
head repository: NixOS/nixpkgs-channels
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: e1b7493cfedb
Choose a head ref

Commits on Nov 20, 2018

  1. Copy the full SHA
    3ffda36 View commit details

Commits on Dec 5, 2018

  1. jenkins: 2.138.3 -> 2.150.1

    Fixes several security issues.
    
    See https://jenkins.io/blog/2018/12/05/security-updates/.
    alyssais committed Dec 5, 2018
    Copy the full SHA
    33e6c84 View commit details
  2. Copy the full SHA
    93ba7aa View commit details
  3. dockerTools.buildImage: support using a layered image in fromImage

    Docker images used to be, essentially, a linked list of layers. Each
    layer would have a tarball and a json document pointing to its parent,
    and the image pointed to the top layer:
    
        imageA  ----> layerA
                        |
                        v
                      layerB
                        |
                        v
                      layerC
    
    The current image spec changed this format to where the Image defined
    the order and set of layers:
    
        imageA  ---> layerA
                |--> layerB
                `--> layerC
    
    For backwards compatibility, docker produces images which follow both
    specs: layers point to parents, and images also point to the entire
    list:
    
        imageA  ---> layerA
                |      |
                |      v
                |--> layerB
                |      |
                |      v
                `--> layerC
    
    This is nice for tooling which supported the older version and never
    updated to support the newer format.
    
    Our `buildImage` code only supported the old version, so in order for
    `buildImage` to properly generate an image based on another image
    with `fromImage`, the parent image's layers must fully support the old
    mechanism.
    
    This is not a problem in general, but is a problem with
    `buildLayeredImage`.
    
    `buildLayeredImage` creates images with newer image spec, because
    individual store paths don't have a guaranteed parent layer. Including
    a specific parent ID in the layer's json makes the output less likely
    to cache hit when published or pulled.
    
    This means until now, `buildLayeredImage` could not be the input to
    `buildImage`.
    
    The changes in this PR change `buildImage` to only use the layer's
    manifest when locating parent IDs. This does break buildImage on
    extremely old Docker images, though I do wonder how many of these
    exist.
    
    This work has been sponsored by Target.
    grahamc committed Dec 5, 2018
    Copy the full SHA
    c88337c View commit details
  4. rWrapper: use runCommand, local build only

    This seems more appropriate for a wrapper generator.
    joachifm committed Dec 5, 2018
    Copy the full SHA
    d2b467a View commit details
  5. rstudioWrapper: use runCommand, local build only

    This seems more appropriate for a wrapper generator.
    joachifm committed Dec 5, 2018
    Copy the full SHA
    21d83e5 View commit details
  6. yed: 3.18.1.1 -> 3.18.2

    lukateras authored Dec 5, 2018
    Copy the full SHA
    851a529 View commit details

Commits on Dec 6, 2018

  1. crashplan: mark as broken

    the download link no longer works
    Mic92 committed Dec 6, 2018
    Copy the full SHA
    73dc9b4 View commit details
  2. Copy the full SHA
    f7a266d View commit details
  3. Copy the full SHA
    ce728ce View commit details
  4. Copy the full SHA
    6b5963e View commit details
  5. tectonic: 0.1.9 -> 0.1.11

    - handles unicode filenames correctly (since 0.1.10)
    - switch to hopefully more reliable permantent URL for the default bundle (in 0.1.11)
    das-g committed Dec 6, 2018
    Copy the full SHA
    d01082a View commit details

Commits on Dec 7, 2018

  1. vivaldi: correct hash

    Fixes #51635
    worldofpeace committed Dec 7, 2018
    Copy the full SHA
    5256cfd View commit details
  2. Copy the full SHA
    0c9abf6 View commit details
  3. Merge pull request #51528 from grahamc/buildImage-on-layered-image

    dockertools buildImage: support new-style image specs
    nlewo authored Dec 7, 2018
    Copy the full SHA
    f7e67be View commit details
  4. Merge pull request #51646 from worldofpeace/vivaldi/correct-hash

    vivaldi: correct hash
    flokli authored Dec 7, 2018
    Copy the full SHA
    57c69ff View commit details
  5. Merge pull request #51634 from jokogr/u/pylint-2.2.2

    pylint: 2.1.1 -> 2.2.2
    flokli authored Dec 7, 2018
    Copy the full SHA
    b89978c View commit details
  6. Merge pull request #51581 from joachifm/rWrapper-local-runCommand

    Implement R wrappers as local-only runCommand
    joachifm authored Dec 7, 2018
    Copy the full SHA
    f0dbbdf View commit details
  7. Merge pull request #51565 from alyssais/jenkins

    jenkins: 2.138.3 -> 2.150.1 (security!)
    flokli authored Dec 7, 2018
    Copy the full SHA
    1915bbf View commit details
  8. Merge pull request #50809 from sorki/wireguard_containers_wont_modprobe

    wireguard: don't modprobe if boot.isContainer is set
    c0bw3b authored Dec 7, 2018
    Copy the full SHA
    0eb2f4b View commit details
  9. Merge pull request #51618 from Mic92/crashplan

    crashplan: mark as broken
    Mic92 authored Dec 7, 2018
    Copy the full SHA
    fc8c73d View commit details
  10. Merge pull request #51640 from das-g/tectonic-0.1.11

    tectonic: 0.1.9 -> 0.1.11
    srhb authored Dec 7, 2018
    Copy the full SHA
    0ba6752 View commit details
  11. Merge pull request #51585 from veprbl/pr/tradcpp_aarch64_support

    tradcpp: improved aarch64 support
    Mic92 authored Dec 7, 2018
    Copy the full SHA
    dca1fe7 View commit details
  12. Merge pull request #51623 from taku0/flashplayer-32.0.0.101

    flashplayer: 31.0.0.153 -> 32.0.0.101 [Critical security fix]
    srhb authored Dec 7, 2018
    Copy the full SHA
    4065217 View commit details
  13. Merge pull request #51592 from NixOS/yegortimoshenko-patch-1

    yed: 3.18.1.1 -> 3.18.2
    Mic92 authored Dec 7, 2018
    Copy the full SHA
    fc7eef5 View commit details
  14. Merge pull request #51648 from vbgl/ocaml-camlimages-5.0.1

    ocamlPackages.camlimages: 5.0.0 -> 5.0.1
    srhb authored Dec 7, 2018
    Copy the full SHA
    e1b7493 View commit details
2 changes: 1 addition & 1 deletion nixos/modules/services/networking/wireguard.nix
Original file line number Diff line number Diff line change
@@ -202,7 +202,7 @@ let
};

script = ''
modprobe wireguard
${optionalString (!config.boot.isContainer) "modprobe wireguard"}
${values.preSetup}
4 changes: 4 additions & 0 deletions nixos/tests/docker-tools.nix
Original file line number Diff line number Diff line change
@@ -62,5 +62,9 @@ import ./make-test.nix ({ pkgs, ... }: {
# Ensure Layered Docker images work
$docker->succeed("docker load --input='${pkgs.dockerTools.examples.layered-image}'");
$docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layered-image.imageName}");
# Ensure building an image on top of a layered Docker images work
$docker->succeed("docker load --input='${pkgs.dockerTools.examples.layered-on-top}'");
$docker->succeed("docker run --rm ${pkgs.dockerTools.examples.layered-on-top.imageName}");
'';
})
Original file line number Diff line number Diff line change
@@ -98,6 +98,6 @@ stdenv.mkDerivation rec {
license = licenses.unfree;
platforms = [ "x86_64-linux" ];
maintainers = with maintainers; [ xvapx ];
broken = true; # 2018-12-06
};

}
13 changes: 6 additions & 7 deletions pkgs/applications/graphics/yed/default.nix
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
{ stdenv, requireFile, makeWrapper, unzip, jre }:
{ stdenv, fetchzip, makeWrapper, unzip, jre }:

stdenv.mkDerivation rec {
name = "yEd-${version}";
version = "3.18.1.1";
version = "3.18.2";

src = requireFile {
name = "${name}.zip";
url = "https://www.yworks.com/en/products/yfiles/yed/";
sha256 = "0jl0c18jkmy21ka5xgki8dqq2v8cy63qvmx3x01wrhiplmczn97y";
src = fetchzip {
url = "https://www.yworks.com/resources/yed/demo/${name}.zip";
sha256 = "1csj19j9mfx4jfc949sz672h8lnfj217nn32d54cxj8llks82ycy";
};

nativeBuildInputs = [ unzip makeWrapper ];
nativeBuildInputs = [ makeWrapper unzip ];

installPhase = ''
mkdir -p $out/yed
4 changes: 2 additions & 2 deletions pkgs/applications/networking/browsers/chromium/plugins.nix
Original file line number Diff line number Diff line change
@@ -100,11 +100,11 @@ let

flash = stdenv.mkDerivation rec {
name = "flashplayer-ppapi-${version}";
version = "31.0.0.153";
version = "32.0.0.101";

src = fetchzip {
url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/${version}/flash_player_ppapi_linux.x86_64.tar.gz";
sha256 = "0c7vh1h9lzx09njf7w1acvj2v91girlzflqxzli8nxza7pd1zb2v";
sha256 = "1bmmjraqzdz03jzbgs1l932gka1zhiyiis06r4yi4f93mdy31w72";
stripRoot = false;
};

Original file line number Diff line number Diff line change
@@ -74,25 +74,25 @@ let
in
stdenv.mkDerivation rec {
name = "flashplayer-${version}";
version = "31.0.0.153";
version = "32.0.0.101";

src = fetchurl {
url =
if debug then
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/31/flash_player_npapi_linux_debug.${arch}.tar.gz"
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_npapi_linux_debug.${arch}.tar.gz"
else
"https://fpdownload.adobe.com/get/flashplayer/pdc/${version}/flash_player_npapi_linux.${arch}.tar.gz";
sha256 =
if debug then
if arch == "x86_64" then
"0d3ch1ksxra8hvbqnzj5fmbvlz6hq42b3rncx4vpjlwrcjd9ggy9"
"0383r5pl1jrspy06mpxq50kkip5q5v052kz9aymk4qylgy1dwpn2"
else
"1qldcashv1x64cvpbx1741hz32rmc0dp7i3ayhpbi15rvf95qx8f"
"1vx2map0wlj6bj8dqyxxaymmz9awjjfhi6097knpmqp6j8dj7l5g"
else
if arch == "x86_64" then
"114n3kvdyfmn2w6w6zbijx29fz10x3cbjyy3ci05n0y07lhq1grc"
"003mr9mqkg0agj3zlmci5a1m3lnhj27mnvqswjaffdg5rlihvxyi"
else
"0sxvjf3xylm4bmhianyfy54gzbm4gkq1i9q8gg4fn3nb3c0z7327";
"1smmdsnnlsssakzqas5268svyv3rk717zr7kwpkj4rd5d1pqwcps";
};

nativeBuildInputs = [ unzip ];
Original file line number Diff line number Diff line change
@@ -50,19 +50,19 @@

stdenv.mkDerivation rec {
name = "flashplayer-standalone-${version}";
version = "31.0.0.153";
version = "32.0.0.101";

src = fetchurl {
url =
if debug then
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/31/flash_player_sa_linux_debug.x86_64.tar.gz"
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux_debug.x86_64.tar.gz"
else
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/31/flash_player_sa_linux.x86_64.tar.gz";
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux.x86_64.tar.gz";
sha256 =
if debug then
"1k78nwrz5zbsj5jvn340n2y4dz1zxrcb7f7955d8dra15w0zax1k"
"1i59vfhxrlksxwmr3kj3dfbasfjgnx9aimmv400z07fw3zmdrbpw"
else
"0ajg3p4c36xzvvjl2hpbzn2g3xwjgf2xy6x4478aq7fxfgb0vf6s";
"0fz9zhp0qn9xda5pg37dfnvx04n8d7156h1qayf2l3la94apsacq";
};

nativeBuildInputs = [ unzip ];
2 changes: 1 addition & 1 deletion pkgs/applications/networking/browsers/vivaldi/default.nix
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {

src = fetchurl {
url = "https://downloads.vivaldi.com/stable/${product}-stable_${version}_amd64.deb";
sha256 = "08x6abyz65vx4ycj8ys8sib9z1adb8ybmnrqjck69b30kbz78rj2";
sha256 = "00rxp6rardxjg17g2b28y2rj8szqlainp4ga6c58z981zkxvdlls";
};

unpackPhase = ''
46 changes: 31 additions & 15 deletions pkgs/build-support/docker/default.nix
Original file line number Diff line number Diff line change
@@ -188,22 +188,27 @@ rec {
# Use the name and tag to get the parent ID field.
parentID=$(jshon -e $fromImageName -e $fromImageTag -u \
< image/repositories)
cat ./image/manifest.json | jq -r '.[0].Layers | .[]' > layer-list
else
touch layer-list
fi
# Unpack all of the parent layers into the image.
lowerdir=""
while [[ -n "$parentID" ]]; do
echo "Unpacking layer $parentID"
mkdir -p image/$parentID/layer
tar -C image/$parentID/layer -xpf image/$parentID/layer.tar
rm image/$parentID/layer.tar
extractionID=0
for layerTar in $(cat layer-list); do
echo "Unpacking layer $layerTar"
extractionID=$((extractionID + 1))
mkdir -p image/$extractionID/layer
tar -C image/$extractionID/layer -xpf $layerTar
rm $layerTar
find image/$parentID/layer -name ".wh.*" -exec bash -c 'name="$(basename {}|sed "s/^.wh.//")"; mknod "$(dirname {})/$name" c 0 0; rm {}' \;
find image/$extractionID/layer -name ".wh.*" -exec bash -c 'name="$(basename {}|sed "s/^.wh.//")"; mknod "$(dirname {})/$name" c 0 0; rm {}' \;
# Get the next lower directory and continue the loop.
lowerdir=$lowerdir''${lowerdir:+:}image/$parentID/layer
parentID=$(cat image/$parentID/json \
| (jshon -e parent -u 2>/dev/null || true))
lowerdir=$lowerdir''${lowerdir:+:}image/$extractionID/layer
done
mkdir work
@@ -673,6 +678,9 @@ rec {
if [[ -n "$fromImage" ]]; then
echo "Unpacking base image..."
tar -C image -xpf "$fromImage"
cat ./image/manifest.json | jq -r '.[0].Layers | .[]' > layer-list
# Do not import the base image configuration and manifest
chmod a+w image image/*.json
rm -f image/*.json
@@ -690,6 +698,8 @@ rec {
for l in image/*/layer.tar; do
ls_tar $l >> baseFiles
done
else
touch layer-list
fi
chmod -R ug+rw image
@@ -742,17 +752,23 @@ rec {
# Use the temp folder we've been working on to create a new image.
mv temp image/$layerID
# Add the new layer ID to the beginning of the layer list
(
# originally this used `sed -i "1i$layerID" layer-list`, but
# would fail if layer-list was completely empty.
echo "$layerID/layer.tar"
cat layer-list
) | ${pkgs.moreutils}/bin/sponge layer-list
# Create image json and image manifest
imageJson=$(cat ${baseJson} | jq ". + {\"rootfs\": {\"diff_ids\": [], \"type\": \"layers\"}}")
manifestJson=$(jq -n "[{\"RepoTags\":[\"$imageName:$imageTag\"]}]")
currentID=$layerID
while [[ -n "$currentID" ]]; do
layerChecksum=$(sha256sum image/$currentID/layer.tar | cut -d ' ' -f1)
for layerTar in $(cat ./layer-list); do
layerChecksum=$(sha256sum image/$layerTar | cut -d ' ' -f1)
imageJson=$(echo "$imageJson" | jq ".history |= [{\"created\": \"$(jq -r .created ${baseJson})\"}] + .")
imageJson=$(echo "$imageJson" | jq ".rootfs.diff_ids |= [\"sha256:$layerChecksum\"] + .")
manifestJson=$(echo "$manifestJson" | jq ".[0].Layers |= [\"$currentID/layer.tar\"] + .")
currentID=$(cat image/$currentID/json | (jshon -e parent -u 2>/dev/null || true))
manifestJson=$(echo "$manifestJson" | jq ".[0].Layers |= [\"$layerTar\"] + .")
done
imageJsonChecksum=$(echo "$imageJson" | sha256sum | cut -d ' ' -f1)
19 changes: 19 additions & 0 deletions pkgs/build-support/docker/examples.nix
Original file line number Diff line number Diff line change
@@ -156,5 +156,24 @@ rec {
name = "layered-image";
tag = "latest";
config.Cmd = [ "${pkgs.hello}/bin/hello" ];
contents = [ pkgs.hello pkgs.bash pkgs.coreutils ];
};

# 11. Create an image on top of a layered image
layered-on-top = pkgs.dockerTools.buildImage {
name = "layered-on-top";
tag = "latest";
fromImage = layered-image;
extraCommands = ''
mkdir ./example-output
chmod 777 ./example-output
'';
config = {
Env = [ "PATH=${pkgs.coreutils}/bin/" ];
WorkingDir = "/example-output";
Cmd = [
"${pkgs.bash}/bin/bash" "-c" "echo hello > foo; cat foo"
];
};
};
}
8 changes: 4 additions & 4 deletions pkgs/development/ocaml-modules/camlimages/default.nix
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{ stdenv, fetchzip, buildDunePackage, configurator, cppo, lablgtk }:
{ lib, fetchzip, buildDunePackage, configurator, cppo, lablgtk }:

buildDunePackage rec {
pname = "camlimages";
version = "5.0.0";
version = "5.0.1";

src = fetchzip {
url = "https://bitbucket.org/camlspotter/${pname}/get/${version}.tar.gz";
sha256 = "00qvwxkfnhv93yi1iq7vy3p5lxyi9xigxcq464s4ii6bmp32d998";
sha256 = "1figrgzsdrrxzfza0bhz0225g1rwawdf5x2m9lw2kzrdb815khs5";
};

buildInputs = [ configurator cppo lablgtk ];

meta = with stdenv.lib; {
meta = with lib; {
branch = "5.0";
homepage = https://bitbucket.org/camlspotter/camlimages;
description = "OCaml image processing library";
4 changes: 2 additions & 2 deletions pkgs/development/python-modules/astroid/default.nix
Original file line number Diff line number Diff line change
@@ -5,13 +5,13 @@

buildPythonPackage rec {
pname = "astroid";
version = "2.0.4";
version = "2.1.0";

disabled = pythonOlder "3.4";

src = fetchPypi {
inherit pname version;
sha256 = "c7013d119ec95eb626f7a2011f0b63d0c9a095df9ad06d8507b37084eada1a8d";
sha256 = "08hz675knh4294bancdapql392fmbjyimhbyrmfkz1ka7l035c1m";
};

# From astroid/__pkginfo__.py
4 changes: 2 additions & 2 deletions pkgs/development/python-modules/pylint/default.nix
Original file line number Diff line number Diff line change
@@ -3,13 +3,13 @@

buildPythonPackage rec {
pname = "pylint";
version = "2.1.1";
version = "2.2.2";

disabled = pythonOlder "3.4";

src = fetchPypi {
inherit pname version;
sha256 = "31142f764d2a7cd41df5196f9933b12b7ee55e73ef12204b648ad7e556c119fb";
sha256 = "14klyan9lqanyi8qhrbn65k7bgv9p7i7ply662r2lr27wydf57b8";
};

checkInputs = [ pytest pytestrunner pyenchant ];
38 changes: 17 additions & 21 deletions pkgs/development/r-modules/wrapper-rstudio.nix
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{ stdenv, R, rstudio, makeWrapper, recommendedPackages, packages, qtbase }:
{ lib, runCommand, R, rstudio, makeWrapper, recommendedPackages, packages, qtbase }:

let
qtVersion = with stdenv.lib.versions; "${major qtbase.version}.${minor qtbase.version}";
qtVersion = with lib.versions; "${major qtbase.version}.${minor qtbase.version}";
in
stdenv.mkDerivation rec {
runCommand (rstudio.name + "-wrapper") {
preferLocalBuild = true;
allowSubstitutes = false;

name = rstudio.name + "-wrapper";
nativeBuildInputs = [makeWrapper];

buildInputs = [makeWrapper R rstudio] ++ recommendedPackages ++ packages;

unpackPhase = ":";
buildInputs = [R rstudio] ++ recommendedPackages ++ packages;

# rWrapper points R to a specific set of packages by using a wrapper
# (as in https://nixos.org/nixpkgs/manual/#r-packages) which sets
@@ -20,18 +20,14 @@ stdenv.mkDerivation rec {
# into an R file (fixLibsR) which achieves the same effect, then
# uses R_PROFILE_USER to load this code at startup in RStudio.
fixLibsR = "fix_libs.R";
installPhase = ''
mkdir $out
echo "# Autogenerated by wrapper-rstudio.nix from R_LIBS_SITE" > $out/${fixLibsR}
echo -n ".libPaths(c(.libPaths(), \"" >> $out/${fixLibsR}
echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/${fixLibsR}
echo -n "\"))" >> $out/${fixLibsR}
echo >> $out/${fixLibsR}
makeWrapper ${rstudio}/bin/rstudio $out/bin/rstudio --set R_PROFILE_USER $out/${fixLibsR} \
--prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins
'';

meta = {
platforms = stdenv.lib.platforms.unix;
};
}
''
mkdir $out
echo "# Autogenerated by wrapper-rstudio.nix from R_LIBS_SITE" > $out/$fixLibsR
echo -n ".libPaths(c(.libPaths(), \"" >> $out/$fixLibsR
echo -n $R_LIBS_SITE | sed -e 's/:/", "/g' >> $out/$fixLibsR
echo -n "\"))" >> $out/$fixLibsR
echo >> $out/$fixLibsR
makeWrapper ${rstudio}/bin/rstudio $out/bin/rstudio --set R_PROFILE_USER $out/$fixLibsR \
--prefix QT_PLUGIN_PATH : ${qtbase}/lib/qt-${qtVersion}/plugins
''
36 changes: 16 additions & 20 deletions pkgs/development/r-modules/wrapper.nix
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
{ stdenv, R, makeWrapper, recommendedPackages, packages }:
{ runCommand, R, makeWrapper, recommendedPackages, packages }:

stdenv.mkDerivation {
name = R.name + "-wrapper";
runCommand (R.name + "-wrapper") {
preferLocalBuild = true;
allowSubstitutes = false;

buildInputs = [makeWrapper R] ++ recommendedPackages ++ packages;
buildInputs = [R] ++ recommendedPackages ++ packages;

# Make the list of recommended R packages accessible to other packages such as rpy2
passthru.recommendedPackages = recommendedPackages;

unpackPhase = ":";
nativeBuildInputs = [makeWrapper];

installPhase = ''
mkdir -p $out/bin
cd ${R}/bin
for exe in *; do
makeWrapper ${R}/bin/$exe $out/bin/$exe \
--prefix "R_LIBS_SITE" ":" "$R_LIBS_SITE"
done
'';

meta = {
platforms = stdenv.lib.platforms.unix;
};
# Make the list of recommended R packages accessible to other packages such as rpy2
passthru = { inherit recommendedPackages; };
}
''
mkdir -p $out/bin
cd ${R}/bin
for exe in *; do
makeWrapper ${R}/bin/$exe $out/bin/$exe \
--prefix "R_LIBS_SITE" ":" "$R_LIBS_SITE"
done
''
Loading