mirror of
https://github.com/ceph/ceph
synced 2024-12-24 20:33:27 +00:00
2ba7d6e59e
the boost jfrog mirror is broken and returns an HTML error page instead of the archive. the file size of this page is 11534 bytes when download_from() retries the download from download.ceph.com, the -c option tells it to resume the download of the existing file. the resulting boost_1_82_0.tar.bz2 ends up with the correct total file size of 121325129 bytes, but the first 11534 bytes still correspond to the HTML from jfrog. that causes the sha256sum mismatch remove the -c option so that wget fetches the archive in its entirety Signed-off-by: Casey Bodley <cbodley@redhat.com>
223 lines
7.3 KiB
Bash
Executable File
223 lines
7.3 KiB
Bash
Executable File
#!/bin/bash -e
|
|
|
|
SCRIPTNAME="$(basename "${0}")"
|
|
BASEDIR="$(readlink -f "$(dirname "${0}")")"
|
|
|
|
if [ ! -d .git ]; then
|
|
echo "$SCRIPTNAME: Full path to the script: $BASEDIR/$SCRIPTNAME"
|
|
echo "$SCRIPTNAME: No .git present. Run this from the base dir of the git checkout."
|
|
exit 1
|
|
fi
|
|
|
|
# Running the script from a directory containing a colon anywhere in the path
|
|
# will expose us to the dreaded "[BUG] npm run [command] failed if the directory
|
|
# path contains colon" bug https://github.com/npm/cli/issues/633
|
|
# (see https://tracker.ceph.com/issues/39556 for details)
|
|
if [[ "$BASEDIR" == *:* ]] ; then
|
|
echo "$SCRIPTNAME: Full path to the script: $BASEDIR/$SCRIPTNAME"
|
|
echo "$SCRIPTNAME: The path to the script contains a colon. Their presence has been known to break the script."
|
|
exit 1
|
|
fi
|
|
|
|
version=$1
|
|
[ -z "$version" ] && version=$(git describe --long --match 'v*' | sed 's/^v//')
|
|
if expr index $version '-' > /dev/null; then
|
|
rpm_version=$(echo $version | cut -d - -f 1-1)
|
|
rpm_release=$(echo $version | cut -d - -f 2- | sed 's/-/./')
|
|
else
|
|
rpm_version=$version
|
|
rpm_release=0
|
|
fi
|
|
|
|
outfile="ceph-$version"
|
|
echo "version $version"
|
|
|
|
# update submodules
|
|
echo "updating submodules..."
|
|
force=$(if git submodule usage 2>&1 | grep --quiet 'update.*--force'; then echo --force ; fi)
|
|
if ! git submodule sync || ! git submodule update $force --init --recursive --progress; then
|
|
echo "Error: could not initialize submodule projects"
|
|
echo " Network connectivity might be required."
|
|
exit 1
|
|
fi
|
|
|
|
download_from() {
|
|
fname=$1
|
|
shift
|
|
sha256=$1
|
|
shift
|
|
set +e
|
|
while true; do
|
|
url_base=$1
|
|
shift
|
|
if [ -z $url_base ]; then
|
|
echo "Error: failed to download $fname."
|
|
exit
|
|
fi
|
|
url=$url_base/$fname
|
|
wget --no-verbose -O $fname $url
|
|
if [ $? != 0 -o ! -e $fname ]; then
|
|
echo "Download of $url failed"
|
|
elif [ $(sha256sum $fname | awk '{print $1}') != $sha256 ]; then
|
|
echo "Error: failed to download $fname: SHA256 mismatch."
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
set -e
|
|
}
|
|
|
|
download_boost() {
|
|
boost_version=$1
|
|
shift
|
|
boost_sha256=$1
|
|
shift
|
|
boost_version_underscore=$(echo $boost_version | sed 's/\./_/g')
|
|
boost_fname=boost_${boost_version_underscore}.tar.bz2
|
|
download_from $boost_fname $boost_sha256 $*
|
|
tar xjf $boost_fname -C src \
|
|
--exclude="$boost_version_underscore/libs/*/doc" \
|
|
--exclude="$boost_version_underscore/libs/*/example" \
|
|
--exclude="$boost_version_underscore/libs/*/examples" \
|
|
--exclude="$boost_version_underscore/libs/*/meta" \
|
|
--exclude="$boost_version_underscore/libs/*/test" \
|
|
--exclude="$boost_version_underscore/tools/boostbook" \
|
|
--exclude="$boost_version_underscore/tools/quickbook" \
|
|
--exclude="$boost_version_underscore/tools/auto_index" \
|
|
--exclude='doc' --exclude='more' --exclude='status'
|
|
mv src/boost_${boost_version_underscore} src/boost
|
|
tar cf ${outfile}.boost.tar ${outfile}/src/boost
|
|
rm -rf src/boost
|
|
}
|
|
|
|
download_liburing() {
|
|
liburing_version=$1
|
|
shift
|
|
liburing_sha256=$1
|
|
shift
|
|
liburing_fname=liburing-${liburing_version}.tar.gz
|
|
download_from $liburing_fname $liburing_sha256 $*
|
|
tar xzf $liburing_fname -C src \
|
|
--exclude=debian \
|
|
--exclude=examples \
|
|
--exclude=man \
|
|
--exclude=test
|
|
# normalize the names, liburing-0.7 if downloaded from git.kernel.dk,
|
|
# liburing-liburing-0.7 from github.com
|
|
mv src/liburing-* src/liburing
|
|
tar cf ${outfile}.liburing.tar ${outfile}/src/liburing
|
|
rm -rf src/liburing
|
|
}
|
|
|
|
download_pmdk() {
|
|
pmdk_version=$1
|
|
shift
|
|
pmdk_sha256=$1
|
|
shift
|
|
pmdk_fname=pmdk-${pmdk_version}.tar.gz
|
|
download_from $pmdk_fname $pmdk_sha256 $*
|
|
tar xzf $pmdk_fname -C src \
|
|
--exclude="pmdk-${pmdk_version}/doc" \
|
|
--exclude="pmdk-${pmdk_version}/src/test" \
|
|
--exclude="pmdk-${pmdk_version}/src/examples" \
|
|
--exclude="pmdk-${pmdk_version}/src/benchmarks"
|
|
mv src/pmdk-${pmdk_version} src/pmdk
|
|
tar cf ${outfile}.pmdk.tar ${outfile}/src/pmdk
|
|
rm -rf src/pmdk
|
|
}
|
|
|
|
build_dashboard_frontend() {
|
|
CURR_DIR=`pwd`
|
|
TEMP_DIR=`mktemp -d`
|
|
|
|
$CURR_DIR/src/tools/setup-virtualenv.sh $TEMP_DIR
|
|
$TEMP_DIR/bin/pip install nodeenv
|
|
$TEMP_DIR/bin/nodeenv --verbose -p --node=18.17.0
|
|
cd src/pybind/mgr/dashboard/frontend
|
|
|
|
. $TEMP_DIR/bin/activate
|
|
NG_CLI_ANALYTICS=false timeout 1h npm ci
|
|
echo "Building ceph-dashboard frontend with build:localize script";
|
|
# we need to use "--" because so that "--configuration production"
|
|
# survives accross all scripts redirections inside package.json
|
|
npm run build:localize -- --configuration production
|
|
deactivate
|
|
cd $CURR_DIR
|
|
rm -rf $TEMP_DIR
|
|
tar cf dashboard_frontend.tar $outfile/src/pybind/mgr/dashboard/frontend/dist
|
|
}
|
|
|
|
generate_rook_ceph_client() {
|
|
$outfile/src/pybind/mgr/rook/generate_rook_ceph_client.sh
|
|
tar cf rook_ceph_client.tar $outfile/src/pybind/mgr/rook/rook_client/*.py
|
|
}
|
|
|
|
# clean out old cruft...
|
|
echo "cleanup..."
|
|
rm -f $outfile*
|
|
|
|
# build new tarball
|
|
echo "building tarball..."
|
|
bin/git-archive-all.sh --prefix ceph-$version/ \
|
|
--verbose \
|
|
--ignore corpus \
|
|
$outfile.tar
|
|
|
|
# populate files with version strings
|
|
echo "including src/.git_version, ceph.spec"
|
|
|
|
(git rev-parse HEAD ; echo $version) 2> /dev/null > src/.git_version
|
|
|
|
if [ -r /etc/os-release ]; then
|
|
source /etc/os-release
|
|
case $ID in
|
|
opensuse*|suse|sles)
|
|
if [ "x$rpm_release" != "x0" ] ; then
|
|
rpm_release=$(echo $rpm_release | sed 's/.g/+g/')
|
|
rpm_version="${rpm_version}.${rpm_release}"
|
|
rpm_release="0"
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
for spec in ceph.spec.in; do
|
|
cat $spec |
|
|
sed "s/@PROJECT_VERSION@/$rpm_version/g" |
|
|
sed "s/@RPM_RELEASE@/$rpm_release/g" |
|
|
sed "s/@TARBALL_BASENAME@/ceph-$version/g" > `echo $spec | sed 's/.in$//'`
|
|
done
|
|
ln -s . $outfile
|
|
tar cvf $outfile.version.tar $outfile/src/.git_version $outfile/ceph.spec
|
|
# NOTE: If you change this version number make sure the package is available
|
|
# at the three URLs referenced below (may involve uploading to download.ceph.com)
|
|
boost_version=1.82.0
|
|
download_boost $boost_version a6e1ab9b0860e6a2881dd7b21fe9f737a095e5f33a3a874afc6a345228597ee6 \
|
|
https://boostorg.jfrog.io/artifactory/main/release/$boost_version/source \
|
|
https://download.ceph.com/qa
|
|
download_liburing 0.7 8e2842cfe947f3a443af301bdd6d034455536c38a455c7a700d0c1ad165a7543 \
|
|
https://github.com/axboe/liburing/archive \
|
|
https://git.kernel.dk/cgit/liburing/snapshot
|
|
pmdk_version=1.10
|
|
download_pmdk $pmdk_version 08dafcf94db5ac13fac9139c92225d9aa5f3724ea74beee4e6ca19a01a2eb20c \
|
|
https://github.com/pmem/pmdk/releases/download/$pmdk_version
|
|
build_dashboard_frontend
|
|
generate_rook_ceph_client
|
|
for tarball in $outfile.version \
|
|
$outfile.boost \
|
|
$outfile.liburing \
|
|
$outfile.pmdk \
|
|
dashboard_frontend \
|
|
rook_ceph_client \
|
|
$outfile; do
|
|
tar --concatenate -f $outfile.all.tar $tarball.tar
|
|
rm $tarball.tar
|
|
done
|
|
mv $outfile.all.tar $outfile.tar
|
|
rm $outfile
|
|
|
|
echo "compressing..."
|
|
bzip2 -9 $outfile.tar
|
|
|
|
echo "done."
|