Allows building deb packages for R on ubuntu-1804 (#12)
* Allows building deb packages for R on ubuntu-1804
this update provides a mechanism for building deb packages on Ubunto
1804. Several changes have been necessary to facilitate this:
* Dockerfile has been updated. It now includes:
- fpm - a tool tool to create OS specific packages
- copying the package script into the image
* the OS specific package.ubuntu-1804 packaging script
- this is the script that uses fpm to build the package
* Updates to build.sh. It now includes:
- runs the package script if it exists
- stores the resultant package to s3
* removed duplicate dependencies
* fixed minor bug with output directory creation
* moved package creation to after the clean step
* Changed deb priority to "optional"
The fpm default priority is "extra" which is now deprecated.
https://github.com/jordansissel/fpm/issues/1398
* Added additional package fields
Added 'Bugs', URL (Homepage), 'Description', 'Maintainer' and 'License'
* Fixed the repo URL
* Added passthrough for Jenkins BUILD_NUMBER
Jenkins sets the BUILD_NUMBER environment variable for all jobs.
This change sets that env var inside the container as BUILD_NO.
BUILD_NO is used bythe packaging scripts in place of a version number
for all of the created packages.
* removed liblapack
* Improved consistency of environment variable use
Removed the needless renaming of environment variables to improve
overall consistency and readability
* No longer tries to version the packages
Previous commits relied on the idea that the Jenkins BUILD_NUMBER
environment variable could be used as a version number for the package
itself (in addition to R's existing version numbers). This is not the
case and having a version number for the package is not deemed desirable
at this time. This change pins *all* packages produced to version 1.
* Moved additional apt package installations
Packages were being installed in two places, have rationalised to a
single location to reduce the number of layers in the final container.
* Tidy up of package script
Alphabetised the dependencies to make things easier to find.
* Added additional dependencies
These dependencies were added as they were identified to be missing when
running against the R 3.6.1 build during testing
* Removed an unrequired dependency
Further trimming down the dependency list based on reviewer feedback.
* Swapped liblapack-dev for libopenblas-dev
This commit is contained in:
parent
6047fb7b63
commit
a20cff273b
3 changed files with 72 additions and 1 deletions
|
|
@ -6,15 +6,18 @@ RUN set -x \
|
||||||
&& sed -i "s|# deb-src|deb-src|g" /etc/apt/sources.list \
|
&& sed -i "s|# deb-src|deb-src|g" /etc/apt/sources.list \
|
||||||
&& export DEBIAN_FRONTEND=noninteractive \
|
&& export DEBIAN_FRONTEND=noninteractive \
|
||||||
&& apt-get update \
|
&& apt-get update \
|
||||||
&& apt-get install -y libcurl4-openssl-dev libicu-dev libopenblas-base wget python-pip \
|
&& apt-get install -y libcurl4-openssl-dev libicu-dev libopenblas-base wget python-pip ruby ruby-dev \
|
||||||
&& apt-get build-dep -y r-base
|
&& apt-get build-dep -y r-base
|
||||||
|
|
||||||
RUN pip install awscli
|
RUN pip install awscli
|
||||||
|
|
||||||
|
RUN gem install fpm
|
||||||
|
|
||||||
RUN chmod 0777 /opt
|
RUN chmod 0777 /opt
|
||||||
|
|
||||||
# Override the default pager used by R
|
# Override the default pager used by R
|
||||||
ENV PAGER /usr/bin/pager
|
ENV PAGER /usr/bin/pager
|
||||||
|
|
||||||
|
COPY package.ubuntu-1804 /package.sh
|
||||||
COPY build.sh .
|
COPY build.sh .
|
||||||
ENTRYPOINT ./build.sh
|
ENTRYPOINT ./build.sh
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,12 @@ upload_r() {
|
||||||
if [ -n "$S3_BUCKET" ] && [ "$S3_BUCKET" != "" ]; then
|
if [ -n "$S3_BUCKET" ] && [ "$S3_BUCKET" != "" ]; then
|
||||||
echo "Storing artifact on s3: ${S3_BUCKET}, tarball: ${TARBALL_NAME}"
|
echo "Storing artifact on s3: ${S3_BUCKET}, tarball: ${TARBALL_NAME}"
|
||||||
aws s3 cp /tmp/${TARBALL_NAME} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/${TARBALL_NAME}
|
aws s3 cp /tmp/${TARBALL_NAME} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/${TARBALL_NAME}
|
||||||
|
# check if PKG_FILE has been set by a packager script and act accordingly
|
||||||
|
if [ -n "$PKG_FILE" ] && [ "$PKG_FILE" != "" ]; then
|
||||||
|
if [ -f "$PKG_FILE" ]; then
|
||||||
|
aws s3 cp ${PKG_FILE} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/pkgs/$(basename ${PKG_FILE})
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
if [ -n "$LOCAL_STORE" ] && [ "$LOCAL_STORE" != '' ]; then
|
if [ -n "$LOCAL_STORE" ] && [ "$LOCAL_STORE" != '' ]; then
|
||||||
echo "Storing artifact locally: ${LOCAL_STORE}, tarball: ${TARBALL_NAME}"
|
echo "Storing artifact locally: ${LOCAL_STORE}, tarball: ${TARBALL_NAME}"
|
||||||
|
|
@ -89,6 +95,16 @@ compile_r() {
|
||||||
make install
|
make install
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# check for packager script
|
||||||
|
## If it exists this build is ready for packaging with fpm, so run the script
|
||||||
|
## else do nothing
|
||||||
|
package_r() {
|
||||||
|
if [[ -f /package.sh ]]; then
|
||||||
|
export R_VERSION=${1}
|
||||||
|
source /package.sh
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
set_up_environment() {
|
set_up_environment() {
|
||||||
mkdir -p /opt/R
|
mkdir -p /opt/R
|
||||||
}
|
}
|
||||||
|
|
@ -102,5 +118,6 @@ set_up_environment
|
||||||
fetch_r_source $R_VERSION
|
fetch_r_source $R_VERSION
|
||||||
compile_r $R_VERSION
|
compile_r $R_VERSION
|
||||||
clean_r
|
clean_r
|
||||||
|
package_r $R_VERSION
|
||||||
archive_r $R_VERSION
|
archive_r $R_VERSION
|
||||||
upload_r $R_VERSION
|
upload_r $R_VERSION
|
||||||
|
|
|
||||||
51
builder/package.ubuntu-1804
Normal file
51
builder/package.ubuntu-1804
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
if [[ ! -d /tmp/output/ubuntu-1804 ]]; then
|
||||||
|
mkdir -p /tmp/output/ubuntu-1804
|
||||||
|
fi
|
||||||
|
|
||||||
|
fpm \
|
||||||
|
-s dir \
|
||||||
|
-t deb \
|
||||||
|
-v 1 \
|
||||||
|
-n R-${R_VERSION} \
|
||||||
|
--deb-priority "optional" \
|
||||||
|
--deb-field 'Bugs: https://github.com/rstudio/r-builds/issues' \
|
||||||
|
--url "http://www.r-project.org/" \
|
||||||
|
--description "GNU R statistical computation and graphics system" \
|
||||||
|
--maintainer "RStudio Inc https://github.com/rstudio/r-builds" \
|
||||||
|
--license "GPL-2" \
|
||||||
|
-p /tmp/output/ubuntu-1804/ \
|
||||||
|
-d g++ \
|
||||||
|
-d gcc \
|
||||||
|
-d gfortran \
|
||||||
|
-d libbz2-1.0 \
|
||||||
|
-d libc6 \
|
||||||
|
-d libcairo2 \
|
||||||
|
-d libcurl4 \
|
||||||
|
-d libglib2.0-0 \
|
||||||
|
-d libgomp1 \
|
||||||
|
-d libicu60 \
|
||||||
|
-d libjpeg8 \
|
||||||
|
-d liblzma5 \
|
||||||
|
-d libopenblas-dev \
|
||||||
|
-d libpango-1.0-0 \
|
||||||
|
-d libpangocairo-1.0-0 \
|
||||||
|
-d libpaper-utils \
|
||||||
|
-d libpcre3 \
|
||||||
|
-d libpng16-16 \
|
||||||
|
-d libreadline7 \
|
||||||
|
-d libtcl8.6 \
|
||||||
|
-d libtiff5 \
|
||||||
|
-d libtk8.6 \
|
||||||
|
-d libx11-6 \
|
||||||
|
-d libxt6 \
|
||||||
|
-d make \
|
||||||
|
-d ucf \
|
||||||
|
-d unzip \
|
||||||
|
-d xdg-utils \
|
||||||
|
-d zip \
|
||||||
|
-d zlib1g \
|
||||||
|
/opt/R/${R_VERSION}
|
||||||
|
|
||||||
|
shopt -s extglob
|
||||||
|
export PKG_FILE=$(ls /tmp/output/ubuntu-1804/[rR]-${R_VERSION}*.@(deb|rpm) | head -1)
|
||||||
|
|
||||||
Loading…
Reference in a new issue