Created
September 17, 2022 06:24
-
-
Save productiveme/b00a47de0faf6db470f66373f64b2a03 to your computer and use it in GitHub Desktop.
Install meteor on arm64 workaround - cloned from HeartHeroDE
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# This is the Meteor alternative install script! | |
# | |
# The official installation is using: | |
# npm install -g meteor. | |
# | |
# Read more https://www.meteor.com/developers/install | |
# | |
# To install using this alternative method run on Mac or Linux: | |
# curl https://install.meteor.com/ | sh | |
# | |
# Meteor currently supports this alternative method on Mac and Linux | |
# We wrap this whole script in a function, so that we won't execute | |
# until the entire script is downloaded. | |
# That's good because it prevents our output overlapping with curl's. | |
# It also means that we can't run a partially downloaded script. | |
# We don't indent because it would be really confusing with the heredocs. | |
run_it () { | |
# This always does a clean install of the latest version of Meteor into your | |
# ~/.meteor, replacing whatever is already there. (~/.meteor is only a cache of | |
# packages and package metadata; no personal persistent data is stored there.) | |
RELEASE="2.7.3" | |
# Now, on to the actual installer! | |
## NOTE sh NOT bash. This script should be POSIX sh only, since we don't | |
## know what shell the user has. Debian uses 'dash' for 'sh', for | |
## example. | |
PREFIX="/usr/local" | |
set -e | |
set -u | |
# Let's display everything on stderr. | |
exec 1>&2 | |
UNAME=$(uname) | |
# Check to see if it starts with MINGW. | |
if [ "$UNAME" ">" "MINGW" -a "$UNAME" "<" "MINGX" ] ; then | |
echo "To install Meteor on Windows, use the npm installer" | |
echo "https://www.meteor.com/developers/install" | |
exit 1 | |
fi | |
if [ "$UNAME" != "Linux" -a "$UNAME" != "Darwin" ] ; then | |
echo "Sorry, this OS is not supported yet via this installer." | |
echo "For more details on supported platforms, see https://www.meteor.com/developers/install" | |
exit 1 | |
fi | |
if [ "$UNAME" = "Darwin" ] ; then | |
### OSX ### | |
ARCH_NAME="$(uname -m)" | |
# Running a version of Meteor older than 0.6.0 (April 2013)? | |
if grep BUNDLE_VERSION /usr/local/bin/meteor >/dev/null 2>&1 ; then | |
echo "You appear to have a very old version of Meteor installed." | |
echo "Please remove it by running these commands:" | |
echo " $ sudo rm /usr/local/bin/meteor" | |
echo " $ sudo rm -rf /usr/local/meteor /usr/local/meteor.old" | |
echo "and then run the installer command again:" | |
echo " $ curl https://install.meteor.com/ | sh" | |
exit 1 | |
fi | |
if [ "$ARCH_NAME" == "arm64" ] ; then | |
PLATFORM="os.osx.arm64" | |
else | |
PLATFORM="os.osx.x86_64" | |
fi | |
elif [ "$UNAME" = "Linux" ] ; then | |
### Linux ### | |
LINUX_ARCH=$(uname -m) | |
if [ "${LINUX_ARCH}" = "x86_64" ] ; then | |
PLATFORM="os.linux.x86_64" | |
elif [ "${LINUX_ARCH}" = "aarch64" ] ; then | |
PLATFORM="os.osx.arm64" | |
else | |
echo "Unusable architecture: ${LINUX_ARCH}" | |
echo "Meteor only supports x86_64 for now." | |
exit 1 | |
fi | |
# Running a version of Meteor older than 0.6.0 (April 2013) on a dpkg system? | |
if dpkg -s meteor >/dev/null 2>&1 ; then | |
echo "You appear to have a very old version of Meteor installed." | |
echo "Please remove it by running these commands:" | |
echo " $ sudo dpkg -r meteor" | |
echo " $ hash -r" | |
echo "and then run the installer command again:" | |
echo " $ curl https://install.meteor.com/ | sh" | |
exit 1 | |
fi | |
# Running a version of Meteor older than 0.6.0 (April 2013) on an rpm system? | |
if rpm -q meteor >/dev/null 2>&1 ; then | |
echo "You appear to have a very old version of Meteor installed." | |
echo "Please remove it by running these commands:" | |
echo " $ sudo rpm -e meteor" | |
echo " $ hash -r" | |
echo "and then run the installer command again:" | |
echo " $ curl https://install.meteor.com/ | sh" | |
exit 1 | |
fi | |
fi | |
trap "echo Installation failed." EXIT | |
if [ -z $HOME ] || [ ! -d $HOME ]; then | |
echo "The installation and use of Meteor requires the \$HOME environment variable be set to a directory where its files can be installed." | |
exit 1 | |
fi | |
# If you already have a tropohouse/warehouse, we do a clean install here: | |
if [ -e "$HOME/.meteor" ]; then | |
echo "Removing your existing Meteor installation." | |
rm -rf "$HOME/.meteor" | |
fi | |
TARBALL_URL="https://static-meteor.netdna-ssl.com/packages-bootstrap/${RELEASE}/meteor-bootstrap-${PLATFORM}.tar.gz" | |
INSTALL_TMPDIR="$HOME/.meteor-install-tmp" | |
TARBALL_FILE="$HOME/.meteor-tarball-tmp" | |
cleanUp() { | |
rm -rf "$TARBALL_FILE" | |
rm -rf "$INSTALL_TMPDIR" | |
} | |
# Remove temporary files now in case they exist. | |
cleanUp | |
# Make sure cleanUp gets called if we exit abnormally. | |
trap cleanUp EXIT | |
mkdir "$INSTALL_TMPDIR" | |
# Only show progress bar animations if we have a tty | |
# (Prevents tons of console junk when installing within a pipe) | |
VERBOSITY="--silent"; | |
if [ -t 1 ]; then | |
VERBOSITY="--progress-bar" | |
fi | |
echo "Downloading Meteor distribution" | |
# keep trying to curl the file until it works (resuming where possible) | |
MAX_ATTEMPTS=10 | |
RETRY_DELAY_SECS=5 | |
set +e | |
ATTEMPTS=0 | |
while [ $ATTEMPTS -lt $MAX_ATTEMPTS ] | |
do | |
ATTEMPTS=$((ATTEMPTS + 1)) | |
curl $VERBOSITY --fail --continue-at - \ | |
"$TARBALL_URL" --output "$TARBALL_FILE" | |
if [ $? -eq 0 ] | |
then | |
break | |
fi | |
echo "Retrying download in $RETRY_DELAY_SECS seconds..." | |
sleep $RETRY_DELAY_SECS | |
done | |
set -e | |
# bomb out if it didn't work, eg no net | |
test -e "${TARBALL_FILE}" | |
tar -xzf "$TARBALL_FILE" -C "$INSTALL_TMPDIR" -o | |
test -x "${INSTALL_TMPDIR}/.meteor/meteor" | |
mv "${INSTALL_TMPDIR}/.meteor" "$HOME" | |
# just double-checking :) | |
test -x "$HOME/.meteor/meteor" | |
# The `trap cleanUp EXIT` line above won't actually fire after the exec | |
# call below, so call cleanUp manually. | |
cleanUp | |
echo | |
echo "Meteor ${RELEASE} has been installed in your home directory (~/.meteor)." | |
METEOR_SYMLINK_TARGET="$(readlink "$HOME/.meteor/meteor")" | |
METEOR_TOOL_DIRECTORY="$(dirname "$METEOR_SYMLINK_TARGET")" | |
LAUNCHER="$HOME/.meteor/$METEOR_TOOL_DIRECTORY/scripts/admin/launch-meteor" | |
if cp "$LAUNCHER" "$PREFIX/bin/meteor" >/dev/null 2>&1; then | |
echo "Writing a launcher script to $PREFIX/bin/meteor for your convenience." | |
cat <<"EOF" | |
To get started fast: | |
$ meteor create ~/my_cool_app | |
$ cd ~/my_cool_app | |
$ meteor | |
Or see the docs at: | |
docs.meteor.com | |
Deploy and host your app with Cloud: | |
www.meteor.com/cloud | |
EOF | |
elif type sudo >/dev/null 2>&1; then | |
echo "Writing a launcher script to $PREFIX/bin/meteor for your convenience." | |
echo "This may prompt for your password." | |
# New macs (10.9+) don't ship with /usr/local, however it is still in | |
# the default PATH. We still install there, we just need to create the | |
# directory first. | |
# XXX this means that we can run sudo too many times. we should never | |
# run it more than once if it fails the first time | |
if [ ! -d "$PREFIX/bin" ] ; then | |
sudo mkdir -m 755 "$PREFIX" || true | |
sudo mkdir -m 755 "$PREFIX/bin" || true | |
fi | |
if sudo cp "$LAUNCHER" "$PREFIX/bin/meteor"; then | |
cat <<"EOF" | |
To get started fast: | |
$ meteor create ~/my_cool_app | |
$ cd ~/my_cool_app | |
$ meteor | |
Or see the docs at: | |
docs.meteor.com | |
Deploy and host your app with Cloud: | |
www.meteor.com/cloud | |
EOF | |
else | |
cat <<EOF | |
Couldn't write the launcher script. Please either: | |
(1) Run the following as root: | |
cp "$LAUNCHER" /usr/bin/meteor | |
(2) Add "\$HOME/.meteor" to your path, or | |
(3) Rerun this command to try again. | |
Then to get started, take a look at 'meteor --help' or see the docs at | |
docs.meteor.com. | |
EOF | |
fi | |
else | |
cat <<EOF | |
Now you need to do one of the following: | |
(1) Add "\$HOME/.meteor" to your path, or | |
(2) Run this command as root: | |
cp "$LAUNCHER" /usr/bin/meteor | |
Then to get started, take a look at 'meteor --help' or see the docs at | |
docs.meteor.com. | |
EOF | |
fi | |
trap - EXIT | |
} | |
run_it |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment