mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Update the Meteor Tool to use Mongo 3.6.2 for 64-bit OS'
and Mongo 3.2.18 for 32-bit OS'. A few important mentions:
- As of Mongo 3.6, all Mongo binary downloads include
SSL - there is no longer a non-SSL based download bundle
(so it's a bit bigger, but that shouldn't be an issue).
- Using the `--nojournal` option with WiredTiger based
replica sets is no longer supported (see
https://jira.mongodb.org/browse/SERVER-30760). The
`--nojournal` flag was added in
bcfe072d52
to help reduce the amount of disk space used by Mongo,
but since this option is no longer supported, we'll
have to live with the extra disk space usage.
- Add PR link to History.md
202 lines
6.2 KiB
Bash
Executable File
202 lines
6.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
set -u
|
|
|
|
# Read the bundle version from the meteor shell script.
|
|
BUNDLE_VERSION=$(perl -ne 'print $1 if /BUNDLE_VERSION=(\S+)/' meteor)
|
|
if [ -z "$BUNDLE_VERSION" ]; then
|
|
echo "BUNDLE_VERSION not found"
|
|
exit 1
|
|
fi
|
|
|
|
source "$(dirname $0)/build-dev-bundle-common.sh"
|
|
echo CHECKOUT DIR IS "$CHECKOUT_DIR"
|
|
echo BUILDING DEV BUNDLE "$BUNDLE_VERSION" IN "$DIR"
|
|
|
|
cd "$DIR"
|
|
|
|
extractNodeFromTarGz() {
|
|
LOCAL_TGZ="${CHECKOUT_DIR}/node_${PLATFORM}_v${NODE_VERSION}.tar.gz"
|
|
if [ -f "$LOCAL_TGZ" ]
|
|
then
|
|
echo "Skipping download and installing Node from $LOCAL_TGZ" >&2
|
|
tar zxf "$LOCAL_TGZ"
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
downloadNodeFromS3() {
|
|
test -n "${NODE_BUILD_NUMBER}" || return 1
|
|
S3_HOST="s3.amazonaws.com/com.meteor.jenkins"
|
|
S3_TGZ="node_${UNAME}_${ARCH}_v${NODE_VERSION}.tar.gz"
|
|
NODE_URL="https://${S3_HOST}/dev-bundle-node-${NODE_BUILD_NUMBER}/${S3_TGZ}"
|
|
echo "Downloading Node from ${NODE_URL}" >&2
|
|
curl "${NODE_URL}" | tar zx --strip-components 1
|
|
}
|
|
|
|
downloadOfficialNode() {
|
|
NODE_URL="https://nodejs.org/dist/v${NODE_VERSION}/${NODE_TGZ}"
|
|
echo "Downloading Node from ${NODE_URL}" >&2
|
|
curl "${NODE_URL}" | tar zx --strip-components 1
|
|
}
|
|
|
|
# Try each strategy in the following order:
|
|
extractNodeFromTarGz || downloadNodeFromS3 || downloadOfficialNode
|
|
|
|
# Download Mongo from mongodb.com. Will download a 64-bit version of Mongo
|
|
# by default. Will download a 32-bit version of Mongo if using a 32-bit based
|
|
# OS.
|
|
MONGO_VERSION=$MONGO_VERSION_64BIT
|
|
MONGO_SSL="-ssl"
|
|
|
|
# The MongoDB "Generic" Linux option is not offered with SSL, which is reserved
|
|
# for named distributions. This works out better since the SSL support adds
|
|
# size to the dev bundle though isn't necessary for local development.
|
|
if [ $UNAME = "Linux" ]; then
|
|
MONGO_SSL=""
|
|
fi
|
|
|
|
if [ $ARCH = "i686" ]; then
|
|
MONGO_VERSION=$MONGO_VERSION_32BIT
|
|
fi
|
|
|
|
MONGO_NAME="mongodb-${OS}-${ARCH}-${MONGO_VERSION}"
|
|
MONGO_NAME_SSL="mongodb-${OS}${MONGO_SSL}-${ARCH}-${MONGO_VERSION}"
|
|
MONGO_TGZ="${MONGO_NAME_SSL}.tgz"
|
|
MONGO_URL="http://fastdl.mongodb.org/${OS}/${MONGO_TGZ}"
|
|
echo "Downloading Mongo from ${MONGO_URL}"
|
|
curl "${MONGO_URL}" | tar zx
|
|
|
|
# Put Mongo binaries in the right spot (mongodb/bin)
|
|
mkdir -p "mongodb/bin"
|
|
mv "${MONGO_NAME}/bin/mongod" "mongodb/bin"
|
|
mv "${MONGO_NAME}/bin/mongo" "mongodb/bin"
|
|
rm -rf "${MONGO_NAME}"
|
|
|
|
# export path so we use the downloaded node and npm
|
|
export PATH="$DIR/bin:$PATH"
|
|
|
|
cd "$DIR/lib"
|
|
# Overwrite the bundled version with the latest version of npm.
|
|
npm install "npm@$NPM_VERSION"
|
|
|
|
which node
|
|
which npm
|
|
npm version
|
|
|
|
# Make node-gyp use Node headers and libraries from $DIR/include/node.
|
|
export HOME="$DIR"
|
|
export USERPROFILE="$DIR"
|
|
export npm_config_nodedir="$DIR"
|
|
|
|
INCLUDE_PATH="${DIR}/include/node"
|
|
echo "Contents of ${INCLUDE_PATH}:"
|
|
ls -al "$INCLUDE_PATH"
|
|
|
|
# When adding new node modules (or any software) to the dev bundle,
|
|
# remember to update LICENSE.txt! Also note that we include all the
|
|
# packages that these depend on, so watch out for new dependencies when
|
|
# you update version numbers.
|
|
|
|
# First, we install the modules that are dependencies of tools/server/boot.js:
|
|
# the modules that users of 'meteor bundle' will also have to install. We save a
|
|
# shrinkwrap file with it, too. We do this in a separate place from
|
|
# $DIR/server-lib/node_modules originally, because otherwise 'npm shrinkwrap'
|
|
# will get confused by the pre-existing modules.
|
|
mkdir "${DIR}/build/npm-server-install"
|
|
cd "${DIR}/build/npm-server-install"
|
|
node "${CHECKOUT_DIR}/scripts/dev-bundle-server-package.js" > package.json
|
|
npm install
|
|
npm shrinkwrap
|
|
|
|
mkdir -p "${DIR}/server-lib/node_modules"
|
|
# This ignores the stuff in node_modules/.bin, but that's OK.
|
|
cp -R node_modules/* "${DIR}/server-lib/node_modules/"
|
|
|
|
mkdir -p "${DIR}/etc"
|
|
mv package.json npm-shrinkwrap.json "${DIR}/etc/"
|
|
|
|
# Fibers ships with compiled versions of its C code for a dozen platforms. This
|
|
# bloats our dev bundle. Remove all the ones other than our
|
|
# architecture. (Expression based on build.js in fibers source.)
|
|
shrink_fibers () {
|
|
FIBERS_ARCH=$(node -p -e 'process.platform + "-" + process.arch + "-" + process.versions.modules')
|
|
mv $FIBERS_ARCH ..
|
|
rm -rf *
|
|
mv ../$FIBERS_ARCH .
|
|
}
|
|
|
|
cd "$DIR/server-lib/node_modules/fibers/bin"
|
|
shrink_fibers
|
|
|
|
# Now, install the npm modules which are the dependencies of the command-line
|
|
# tool.
|
|
mkdir "${DIR}/build/npm-tool-install"
|
|
cd "${DIR}/build/npm-tool-install"
|
|
node "${CHECKOUT_DIR}/scripts/dev-bundle-tool-package.js" >package.json
|
|
npm install
|
|
cp -R node_modules/* "${DIR}/lib/node_modules/"
|
|
# Also include node_modules/.bin, so that `meteor npm` can make use of
|
|
# commands like node-gyp and node-pre-gyp.
|
|
cp -R node_modules/.bin "${DIR}/lib/node_modules/"
|
|
|
|
cd "${DIR}/lib"
|
|
|
|
# Clean up some bulky stuff.
|
|
cd node_modules
|
|
|
|
# Used to delete bulky subtrees. It's an error (unlike with rm -rf) if they
|
|
# don't exist, because that might mean it moved somewhere else and we should
|
|
# update the delete line.
|
|
delete () {
|
|
if [ ! -e "$1" ]; then
|
|
echo "Missing (moved?): $1"
|
|
exit 1
|
|
fi
|
|
rm -rf "$1"
|
|
}
|
|
|
|
delete npm/node_modules/node-gyp
|
|
pushd npm/node_modules
|
|
ln -s ../../node-gyp ./
|
|
popd
|
|
|
|
# Since we install a patched version of pacote in $DIR/lib/node_modules,
|
|
# we need to remove npm's bundled version to make it use the new one.
|
|
if [ -d "pacote" ]
|
|
then
|
|
delete npm/node_modules/pacote
|
|
fi
|
|
|
|
delete sqlite3/deps
|
|
delete sqlite3/node_modules/node-pre-gyp
|
|
delete wordwrap/test
|
|
delete moment/min
|
|
|
|
# Remove esprima tests to reduce the size of the dev bundle
|
|
find . -path '*/esprima-fb/test' | xargs rm -rf
|
|
|
|
cd "$DIR/lib/node_modules/fibers/bin"
|
|
shrink_fibers
|
|
|
|
# Sanity check to see if we're not breaking anything by replacing npm
|
|
INSTALLED_NPM_VERSION=$(cat "$DIR/lib/node_modules/npm/package.json" |
|
|
xargs -0 node -e "console.log(JSON.parse(process.argv[1]).version)")
|
|
if [ "$INSTALLED_NPM_VERSION" != "$NPM_VERSION" ]; then
|
|
echo "Unexpected NPM version in lib/node_modules: $INSTALLED_NPM_VERSION"
|
|
echo "Update this check if you know what you're doing."
|
|
exit 1
|
|
fi
|
|
|
|
echo BUNDLING
|
|
|
|
cd "$DIR"
|
|
echo "${BUNDLE_VERSION}" > .bundle_version.txt
|
|
rm -rf build CHANGELOG.md ChangeLog LICENSE README.md .npm
|
|
|
|
tar czf "${CHECKOUT_DIR}/dev_bundle_${PLATFORM}_${BUNDLE_VERSION}.tar.gz" .
|
|
|
|
echo DONE
|