add tutorial setup script to share/spack (#17705)
* add tutorial setup script to share/spack * Add check for Ubuntu 18, fix xvda check, fix apt-get errors - now works on t2.micro, t2.small, and m instances - apt-get needs retries around it to work Co-authored-by: Todd Gamblin <tgamblin@llnl.gov>
This commit is contained in:
parent
d351946194
commit
1ceec31422
123
share/spack/setup-tutorial-env.sh
Executable file
123
share/spack/setup-tutorial-env.sh
Executable file
@ -0,0 +1,123 @@
|
|||||||
|
# Copyright 2013-2020 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
#
|
||||||
|
# This file is part of Spack and sets up the environment for the Spack tutorial
|
||||||
|
# It is intended to be run on ubuntu-18.04 or an ubuntu-18.04 container or AWS
|
||||||
|
# cloud9 environment
|
||||||
|
#
|
||||||
|
# Components:
|
||||||
|
# 1. apt installs for packages used in the tutorial
|
||||||
|
# these include compilers and externals used by the tutorial and
|
||||||
|
# basic spack requirements like python and curl
|
||||||
|
# 2. spack configuration files
|
||||||
|
# these set the default configuration for Spack to use x86_64 and suppress
|
||||||
|
# certain gpg warnings. The gpg warnings are not relevant for the tutorial
|
||||||
|
# and the default x86_64 architecture allows us to run the same tutorial on
|
||||||
|
# any x86_64 architecture without needing new binary packages.
|
||||||
|
# 3. aws cloud9 configuration to expand available storage
|
||||||
|
# when we run on aws cloud9 we have to expand the storage from 10G to 30G
|
||||||
|
# because we install too much software for a default cloud9 instance
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
####
|
||||||
|
# Ensure we're on Ubuntu 18.04
|
||||||
|
####
|
||||||
|
|
||||||
|
if [ -f /etc/os-release ]; then
|
||||||
|
. /etc/os-release
|
||||||
|
fi
|
||||||
|
if [ x"$UBUNTU_CODENAME" != "xbionic" ]; then
|
||||||
|
echo "The tutorial setup script must be run on Ubuntu 18.04."
|
||||||
|
return 1 &>/dev/null || exit 1 # works if sourced or run
|
||||||
|
fi
|
||||||
|
|
||||||
|
####
|
||||||
|
# Install packages needed for tutorial
|
||||||
|
####
|
||||||
|
|
||||||
|
# compilers, basic system components, externals
|
||||||
|
# There are retries around these because apt fails frequently on new instances,
|
||||||
|
# due to unattended updates running in the background and taking the lock.
|
||||||
|
until sudo apt-get update -y; do
|
||||||
|
echo "==> apt-get update failed. retrying..."
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
|
until sudo apt-get install -y --no-install-recommends \
|
||||||
|
autoconf make python3 python3-pip \
|
||||||
|
build-essential ca-certificates curl git gnupg2 iproute2 emacs \
|
||||||
|
file openssh-server tcl unzip vim wget \
|
||||||
|
clang g++ g++-6 gcc gcc-6 gfortran gfortran-6 \
|
||||||
|
zlib1g zlib1g-dev mpich; do
|
||||||
|
echo "==> apt-get install failed. retrying..."
|
||||||
|
sleep 5
|
||||||
|
done
|
||||||
|
|
||||||
|
####
|
||||||
|
# Spack configuration settings for tutorial
|
||||||
|
####
|
||||||
|
|
||||||
|
# create spack system config
|
||||||
|
sudo mkdir -p /etc/spack
|
||||||
|
|
||||||
|
# set default arch to x86_64
|
||||||
|
sudo tee /etc/spack/packages.yaml << EOF > /dev/null
|
||||||
|
packages:
|
||||||
|
all:
|
||||||
|
target: [x86_64]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# suppress gpg warnings
|
||||||
|
sudo tee /etc/spack/config.yaml << EOF > /dev/null
|
||||||
|
config:
|
||||||
|
suppress_gpg_warnings: true
|
||||||
|
EOF
|
||||||
|
|
||||||
|
####
|
||||||
|
# AWS set volume size to at least 30G
|
||||||
|
####
|
||||||
|
|
||||||
|
# Hardcode the specified size to 30G
|
||||||
|
SIZE=30
|
||||||
|
|
||||||
|
# Get the ID of the environment host Amazon EC2 instance.
|
||||||
|
INSTANCEID=$(curl http://169.254.169.254/latest/meta-data//instance-id)
|
||||||
|
|
||||||
|
# Get the ID of the Amazon EBS volume associated with the instance.
|
||||||
|
VOLUMEID=$(aws ec2 describe-instances \
|
||||||
|
--instance-id $INSTANCEID \
|
||||||
|
--query "Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId" \
|
||||||
|
--output text)
|
||||||
|
|
||||||
|
# Resize the EBS volume.
|
||||||
|
aws ec2 modify-volume --volume-id $VOLUMEID --size $SIZE
|
||||||
|
|
||||||
|
# Wait for the resize to finish.
|
||||||
|
while [ \
|
||||||
|
"$(aws ec2 describe-volumes-modifications \
|
||||||
|
--volume-id $VOLUMEID \
|
||||||
|
--filters Name=modification-state,Values="optimizing","completed" \
|
||||||
|
--query "length(VolumesModifications)"\
|
||||||
|
--output text)" != "1" ]; do
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -e /dev/xvda1 ]
|
||||||
|
then
|
||||||
|
# Rewrite the partition table so that the partition takes up all the space that it can.
|
||||||
|
sudo growpart /dev/xvda 1
|
||||||
|
|
||||||
|
# Expand the size of the file system.
|
||||||
|
sudo resize2fs /dev/xvda1
|
||||||
|
|
||||||
|
else
|
||||||
|
# Rewrite the partition table so that the partition takes up all the space that it can.
|
||||||
|
sudo growpart /dev/nvme0n1 1
|
||||||
|
|
||||||
|
# Expand the size of the file system.
|
||||||
|
sudo resize2fs /dev/nvme0n1p1
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user