Refactor Docker setup for new binary location

This commit is contained in:
Johannes M. Scheuermann 2022-06-20 17:34:59 +01:00 committed by Aaron Molitor
parent 61d621a4c4
commit 0d05f0f2d8
3 changed files with 38 additions and 38 deletions

View File

@ -70,7 +70,7 @@ FROM base as foundationdb-base
WORKDIR /tmp WORKDIR /tmp
ARG FDB_VERSION=6.3.22 ARG FDB_VERSION=6.3.22
ARG FDB_LIBRARY_VERSIONS="${FDB_VERSION}" ARG FDB_LIBRARY_VERSIONS="${FDB_VERSION}"
ARG FDB_WEBSITE=https://www.foundationdb.org ARG FDB_WEBSITE=https://github.com/apple/foundationdb/releases/download
RUN mkdir -p /var/fdb/{logs,tmp,lib} && \ RUN mkdir -p /var/fdb/{logs,tmp,lib} && \
mkdir -p /usr/lib/fdb/multiversion && \ mkdir -p /usr/lib/fdb/multiversion && \
@ -89,24 +89,29 @@ RUN groupadd --gid 4059 \
COPY website /tmp/website/ COPY website /tmp/website/
# Install FoundationDB Binaries # Install FoundationDB Binaries
RUN curl -Ls $FDB_WEBSITE/downloads/$FDB_VERSION/linux/fdb_$FDB_VERSION.tar.gz | tar zxf - --strip-components=1 && \ RUN for file in fdbserver fdbbackup fdbcli fdbmonitor; do \
for file in fdbbackup fdbcli fdbdr fdbmonitor fdbrestore fdbserver backup_agent dr_agent fastrestore_tool; do \ curl --fail -Ls ${FDB_WEBSITE}/${FDB_VERSION}/$file.x86_64 -o $file; \
chmod u+x $file; \ chmod u+x $file; \
mv $file /usr/bin; \ mv $file /usr/bin; \
done done
# Setup all symlinks for the other binaries that are a copy of fdbbackup
RUN for file in fdbdr fdbrestore fdbserver backup_agent dr_agent fastrestore_tool; do \
ln -s /usr/bin/fdbbackup /usr/bin/$file; \
done
# Install additional FoundationDB Client Libraries # Install additional FoundationDB Client Libraries
RUN for version in $FDB_LIBRARY_VERSIONS; do \ RUN for version in $FDB_LIBRARY_VERSIONS; do \
curl -Ls $FDB_WEBSITE/downloads/$version/linux/libfdb_c_$version.so -o /usr/lib/fdb/multiversion/libfdb_c_${version%.*}.so; \ curl --fail -Ls ${FDB_WEBSITE}/${version}/libfdb_c.x86_64.so -o /usr/lib/fdb/multiversion/libfdb_c_${version%.*}.so; \
done done
# Install additional FoundationDB Client Libraries (for sidecar) # Install additional FoundationDB Client Libraries (for sidecar)
RUN mkdir -p /var/fdb/lib && \ RUN mkdir -p /var/fdb/lib && \
for version in $FDB_LIBRARY_VERSIONS; do \ for version in $FDB_LIBRARY_VERSIONS; do \
curl -Ls $FDB_WEBSITE/downloads/$version/linux/libfdb_c_$version.so -o /var/fdb/lib/libfdb_c_${version%.*}.so; \ curl --fail -Ls ${FDB_WEBSITE}/${version}/libfdb_c.x86_64.so -o /var/fdb/lib/libfdb_c_${version%.*}.so; \
done done
RUN curl -Ls $FDB_WEBSITE/downloads/$FDB_VERSION/linux/libfdb_c_$FDB_VERSION.so -o /usr/lib/libfdb_c.so RUN curl -Ls $FDB_WEBSITE/$FDB_VERSION/libfdb_c.x86_64.so -o /usr/lib/libfdb_c.so
RUN rm -rf /tmp/* RUN rm -rf /tmp/*
WORKDIR / WORKDIR /

View File

@ -78,7 +78,7 @@ FROM base as foundationdb-base
WORKDIR /tmp WORKDIR /tmp
ARG FDB_VERSION=6.3.22 ARG FDB_VERSION=6.3.22
ARG FDB_LIBRARY_VERSIONS="${FDB_VERSION}" ARG FDB_LIBRARY_VERSIONS="${FDB_VERSION}"
ARG FDB_WEBSITE=https://www.foundationdb.org ARG FDB_WEBSITE=https://github.com/apple/foundationdb/releases/download
RUN mkdir -p /var/fdb/{logs,tmp,lib} && \ RUN mkdir -p /var/fdb/{logs,tmp,lib} && \
mkdir -p /usr/lib/fdb/multiversion && \ mkdir -p /usr/lib/fdb/multiversion && \
@ -97,24 +97,29 @@ RUN groupadd --gid 4059 \
COPY website /tmp/website/ COPY website /tmp/website/
# Install FoundationDB Binaries # Install FoundationDB Binaries
RUN curl -Ls $FDB_WEBSITE/downloads/$FDB_VERSION/linux/fdb_$FDB_VERSION.tar.gz | tar zxf - --strip-components=1 && \ RUN for file in fdbserver fdbbackup fdbcli fdbmonitor; do \
for file in fdbbackup fdbcli fdbdr fdbmonitor fdbrestore fdbserver backup_agent dr_agent fastrestore_tool; do \ curl --fail -Ls ${FDB_WEBSITE}/${FDB_VERSION}/$file.x86_64 -o $file; \
chmod u+x $file; \ chmod u+x $file; \
mv $file /usr/bin; \ mv $file /usr/bin; \
done done
# Setup all symlinks for the other binaries that are a copy of fdbbackup
RUN for file in fdbdr fdbrestore fdbserver backup_agent dr_agent fastrestore_tool; do \
ln -s /usr/bin/fdbbackup /usr/bin/$file; \
done
# Install additional FoundationDB Client Libraries # Install additional FoundationDB Client Libraries
RUN for version in $FDB_LIBRARY_VERSIONS; do \ RUN for version in $FDB_LIBRARY_VERSIONS; do \
curl -Ls $FDB_WEBSITE/downloads/$version/linux/libfdb_c_$version.so -o /usr/lib/fdb/multiversion/libfdb_c_${version%.*}.so; \ curl --fail -Ls ${FDB_WEBSITE}/${version}/libfdb_c.x86_64.so -o /usr/lib/fdb/multiversion/libfdb_c_${version%.*}.so; \
done done
# Install additional FoundationDB Client Libraries (for sidecar) # Install additional FoundationDB Client Libraries (for sidecar)
RUN mkdir -p /var/fdb/lib && \ RUN mkdir -p /var/fdb/lib && \
for version in $FDB_LIBRARY_VERSIONS; do \ for version in $FDB_LIBRARY_VERSIONS; do \
curl -Ls $FDB_WEBSITE/downloads/$version/linux/libfdb_c_$version.so -o /var/fdb/lib/libfdb_c_${version%.*}.so; \ curl --fail -Ls ${FDB_WEBSITE}/${version}/libfdb_c.x86_64.so -o /var/fdb/lib/libfdb_c_${version%.*}.so; \
done done
RUN curl -Ls $FDB_WEBSITE/downloads/$FDB_VERSION/linux/libfdb_c_$FDB_VERSION.so -o /usr/lib/libfdb_c.so RUN curl -Ls $FDB_WEBSITE/$FDB_VERSION/libfdb_c.x86_64.so -o /usr/lib/libfdb_c.so
RUN rm -rf /tmp/* RUN rm -rf /tmp/*
WORKDIR / WORKDIR /

View File

@ -18,12 +18,11 @@ function popd () {
function create_fake_website_directory() { function create_fake_website_directory() {
fdb_binaries=( 'fdbbackup' 'fdbcli' 'fdbserver' 'fdbmonitor' ) fdb_binaries=( 'fdbbackup' 'fdbcli' 'fdbserver' 'fdbmonitor' )
fake_fdb_binaries=( 'backup_agent' 'dr_agent' 'fastrestore_tool' 'fdbdr' 'fdbrestore' )
logg "PREPARING WEBSITE" logg "PREPARING WEBSITE"
website_directory="${script_dir}/website" website_directory="${script_dir}/website"
rm -rf "${website_directory}" rm -rf "${website_directory}"
mkdir -p "${website_directory}/downloads/${fdb_version}/linux/bin" mkdir -p "${website_directory}/${fdb_version}"
pushd "${website_directory}/downloads/${fdb_version}/linux/bin" || exit 127 pushd "${website_directory}/${fdb_version}" || exit 127
############################################################################ ############################################################################
# there are four intended paths here: # there are four intended paths here:
# 1) fetch the unstripped binaries and client library from artifactory_base_url # 1) fetch the unstripped binaries and client library from artifactory_base_url
@ -39,43 +38,34 @@ function create_fake_website_directory() {
"unstripped_artifactory") "unstripped_artifactory")
logg "DOWNLOADING BINARIES TAR FILE" logg "DOWNLOADING BINARIES TAR FILE"
curl -Ls "${artifactory_base_url}/${fdb_version}/release/api/foundationdb-binaries-${fdb_version}-linux.tar.gz" | tar -xzf - curl -Ls "${artifactory_base_url}/${fdb_version}/release/api/foundationdb-binaries-${fdb_version}-linux.tar.gz" | tar -xzf -
# Add the x86_64 to all binaries
for file in "${fdb_binaries[@]}"; do
cp -pr "${file}" "${file}.x86_64"
done
;; ;;
"stripped_artifactory") "stripped_artifactory")
for file in "${fdb_binaries[@]}"; do for file in "${fdb_binaries[@]}"; do
logg "DOWNLOADING ${file}" logg "DOWNLOADING ${file}"
curl -Ls "${artifactory_base_url}/${fdb_version}/release/files/linux/bin/${file}" -o "${file}" curl -Ls "${artifactory_base_url}/${fdb_version}/release/files/linux/bin/${file}" -o "${file}.x86_64"
chmod 755 "${file}" chmod 755 "${file}"
done done
;; ;;
"unstripped_local") "unstripped_local")
for file in "${fdb_binaries[@]}"; do for file in "${fdb_binaries[@]}"; do
logg "COPYING ${file}" logg "COPYING ${file}"
cp -pr "${build_output_directory}/bin/${file}" "${file}" cp -pr "${build_output_directory}/bin/${file}" "${file}.x86_64"
chmod 755 "${file}" chmod 755 "${file}"
done done
;; ;;
"stripped_local") "stripped_local")
for file in "${fdb_binaries[@]}"; do for file in "${fdb_binaries[@]}"; do
logg "COPYING ${file}" logg "COPYING ${file}"
cp -pr "${build_output_directory}/packages/bin/${file}" "${file}" cp -pr "${build_output_directory}/packages/bin/${file}" "${file}.x86_64"
chmod 755 "${file}" chmod 755 "${file}"
done done
;; ;;
esac esac
# dont download files that are binary duplicates of fdbbackup, recreate the
# symlinks (to fdbbackup in the same directory)
logg "CREATING fdbbackup SYMLINKS"
for fake in "${fake_fdb_binaries[@]}"; do
logg "CREATING ${fake}"
ln -sf fdbbackup "${fake}"
done
popd || exit 128 popd || exit 128
# re-create the same file that is present in the downloads path of
# foundationdb.org such that it can be copied into the Docker image and
# referenced with a file:// url by the container image build
logg "CREATING BINARIES TAR FILE"
tar -czf "${website_directory}/downloads/${fdb_version}/linux/fdb_${fdb_version}.tar.gz" --directory "${website_directory}/downloads/${fdb_version}/linux/bin" .
rm -rf "${website_directory}/downloads/${fdb_version}/linux/bin"
############################################################################ ############################################################################
# this follows the same logic as the case statement above, they are separate # this follows the same logic as the case statement above, they are separate
@ -87,8 +77,8 @@ function create_fake_website_directory() {
"unstripped_artifactory") "unstripped_artifactory")
for version in "${fdb_library_versions[@]}"; do for version in "${fdb_library_versions[@]}"; do
logg "FETCHING ${version} CLIENT LIBRARY" logg "FETCHING ${version} CLIENT LIBRARY"
destination_directory="${website_directory}/downloads/${version}/linux" destination_directory="${website_directory}/${version}"
destination_filename="libfdb_c_${version}.so" destination_filename="libfdb_c_${version}.x86_64.so"
mkdir -p "${destination_directory}" mkdir -p "${destination_directory}"
pushd "${destination_directory}" || exit 127 pushd "${destination_directory}" || exit 127
curl -Ls "${artifactory_base_url}/${version}/release/api/fdb-server-${version}-linux.tar.gz" | tar -xzf - ./lib/libfdb_c.so --strip-components 2 curl -Ls "${artifactory_base_url}/${version}/release/api/fdb-server-${version}-linux.tar.gz" | tar -xzf - ./lib/libfdb_c.so --strip-components 2
@ -100,8 +90,8 @@ function create_fake_website_directory() {
"stripped_artifactory") "stripped_artifactory")
for version in "${fdb_library_versions[@]}"; do for version in "${fdb_library_versions[@]}"; do
logg "FETCHING ${version} CLIENT LIBRARY" logg "FETCHING ${version} CLIENT LIBRARY"
destination_directory="${website_directory}/downloads/${version}/linux" destination_directory="${website_directory}/${version}"
destination_filename="libfdb_c_${version}.so" destination_filename="libfdb_c_${version}.x86_64.so"
mkdir -p "${destination_directory}" mkdir -p "${destination_directory}"
pushd "${destination_directory}" || exit 127 pushd "${destination_directory}" || exit 127
curl -Ls "${artifactory_base_url}/${version}/release/files/linux/lib/libfdb_c.so" -o "${destination_filename}" curl -Ls "${artifactory_base_url}/${version}/release/files/linux/lib/libfdb_c.so" -o "${destination_filename}"
@ -111,11 +101,11 @@ function create_fake_website_directory() {
;; ;;
"unstripped_local") "unstripped_local")
logg "COPYING UNSTRIPPED CLIENT LIBRARY" logg "COPYING UNSTRIPPED CLIENT LIBRARY"
cp -pr "${build_output_directory}/lib/libfdb_c.so" "${website_directory}/downloads/${fdb_version}/linux/libfdb_c_${fdb_version}.so" cp -pr "${build_output_directory}/lib/libfdb_c.so" "${website_directory}/${fdb_version}/libfdb_c_${fdb_version}.x86_64.so"
;; ;;
"stripped_local") "stripped_local")
logg "COPYING STRIPPED CLIENT LIBRARY" logg "COPYING STRIPPED CLIENT LIBRARY"
cp -pr "${build_output_directory}/packages/lib/libfdb_c.so" "${website_directory}/downloads/${fdb_version}/linux/libfdb_c_${fdb_version}.so" cp -pr "${build_output_directory}/packages/lib/libfdb_c.so" "${website_directory}/${fdb_version}/libfdb_c_${fdb_version}.x86_64.so"
;; ;;
esac esac
# override fdb_website variable that is passed to Docker build # override fdb_website variable that is passed to Docker build
@ -233,7 +223,7 @@ source_code_diretory=$(awk -F= '/foundationdb_SOURCE_DIR:STATIC/{print $2}' "${b
commit_sha=$(cd "${source_code_diretory}" && git rev-parse --verify HEAD --short=10) commit_sha=$(cd "${source_code_diretory}" && git rev-parse --verify HEAD --short=10)
fdb_version=$(cat "${build_output_directory}/version.txt") fdb_version=$(cat "${build_output_directory}/version.txt")
fdb_library_versions=( '5.1.7' '6.1.13' '6.2.30' '6.3.18' "${fdb_version}" ) fdb_library_versions=( '5.1.7' '6.1.13' '6.2.30' '6.3.18' "${fdb_version}" )
fdb_website="https://www.foundationdb.org" fdb_website="https://github.com/apple/foundationdb/releases/download"
image_list=( image_list=(
'base' 'base'
# 'go-build' # 'go-build'