From 6f2226bfcd3df1d2bf0a40dfab0594d8d65e32fa Mon Sep 17 00:00:00 2001 From: Joshua Tauberer Date: Thu, 7 May 2015 07:11:21 -0400 Subject: [PATCH] move more of start.sh into questions.sh to keep start.sh cleaner and encapsulate all of the variable setting in a single script Based on https://github.com/Toilal/mailinabox/commit/5b23a06a7410e4530a56fd6200a6c46c3c6ea9b6. --- setup/questions.sh | 41 +++++++++++++++++++++++++++++++ setup/start.sh | 61 ++++++---------------------------------------- 2 files changed, 49 insertions(+), 53 deletions(-) diff --git a/setup/questions.sh b/setup/questions.sh index f193b454..e0bc2c8d 100644 --- a/setup/questions.sh +++ b/setup/questions.sh @@ -196,3 +196,44 @@ if [ -z "$CSR_COUNTRY" ]; then exit fi fi + +# Automatic configuration, e.g. as used in our Vagrant configuration. +if [ "$PUBLIC_IP" = "auto" ]; then + # Use a public API to get our public IP address, or fall back to local network configuration. + PUBLIC_IP=$(get_publicip_from_web_service 4 || get_default_privateip 4) +fi +if [ "$PUBLIC_IPV6" = "auto" ]; then + # Use a public API to get our public IPv6 address, or fall back to local network configuration. + PUBLIC_IPV6=$(get_publicip_from_web_service 6 || get_default_privateip 6) +fi +if [ "$PRIMARY_HOSTNAME" = "auto-easy" ]; then + # Generate a probably-unique subdomain under our justtesting.email domain. + PRIMARY_HOSTNAME=`echo $PUBLIC_IP | sha1sum | cut -c1-5`.justtesting.email +fi + +# Set STORAGE_USER and STORAGE_ROOT to default values (user-data and /home/user-data), unless +# we've already got those values from a previous run. +if [ -z "$STORAGE_USER" ]; then + STORAGE_USER=$([[ -z "$DEFAULT_STORAGE_USER" ]] && echo "user-data" || echo "$DEFAULT_STORAGE_USER") +fi +if [ -z "$STORAGE_ROOT" ]; then + STORAGE_ROOT=$([[ -z "$DEFAULT_STORAGE_ROOT" ]] && echo "/home/$STORAGE_USER" || echo "$DEFAULT_STORAGE_ROOT") +fi + +# Show the configuration, since the user may have not entered it manually. +echo +echo "Primary Hostname: $PRIMARY_HOSTNAME" +echo "Public IP Address: $PUBLIC_IP" +if [ ! -z "$PUBLIC_IPV6" ]; then + echo "Public IPv6 Address: $PUBLIC_IPV6" +fi +if [ "$PRIVATE_IP" != "$PUBLIC_IP" ]; then + echo "Private IP Address: $PRIVATE_IP" +fi +if [ "$PRIVATE_IPV6" != "$PUBLIC_IPV6" ]; then + echo "Private IPv6 Address: $PRIVATE_IPV6" +fi +if [ -f .git ]; then + echo "Mail-in-a-Box Version: " $(git describe) +fi +echo diff --git a/setup/start.sh b/setup/start.sh index 43a2e242..a7bf9328 100755 --- a/setup/start.sh +++ b/setup/start.sh @@ -47,71 +47,26 @@ chmod +x /usr/local/bin/mailinabox # Ask the user for the PRIMARY_HOSTNAME, PUBLIC_IP, PUBLIC_IPV6, and CSR_COUNTRY # if values have not already been set in environment variables. When running -# non-interactively, be sure to set values for all! +# non-interactively, be sure to set values for all! Also sets STORAGE_USER and +# STORAGE_ROOT. source setup/questions.sh -# Automatic configuration, e.g. as used in our Vagrant configuration. -if [ "$PUBLIC_IP" = "auto" ]; then - # Use a public API to get our public IP address, or fall back to local network configuration. - PUBLIC_IP=$(get_publicip_from_web_service 4 || get_default_privateip 4) -fi -if [ "$PUBLIC_IPV6" = "auto" ]; then - # Use a public API to get our public IPv6 address, or fall back to local network configuration. - PUBLIC_IPV6=$(get_publicip_from_web_service 6 || get_default_privateip 6) -fi -if [ "$PRIMARY_HOSTNAME" = "auto-easy" ]; then - # Generate a probably-unique subdomain under our justtesting.email domain. - PRIMARY_HOSTNAME=`echo $PUBLIC_IP | sha1sum | cut -c1-5`.justtesting.email -fi - -# Show the configuration, since the user may have not entered it manually. -echo -echo "Primary Hostname: $PRIMARY_HOSTNAME" -echo "Public IP Address: $PUBLIC_IP" -if [ ! -z "$PUBLIC_IPV6" ]; then - echo "Public IPv6 Address: $PUBLIC_IPV6" -fi -if [ "$PRIVATE_IP" != "$PUBLIC_IP" ]; then - echo "Private IP Address: $PRIVATE_IP" -fi -if [ "$PRIVATE_IPV6" != "$PUBLIC_IPV6" ]; then - echo "Private IPv6 Address: $PRIVATE_IPV6" -fi -if [ -f .git ]; then - echo "Mail-in-a-Box Version: " $(git describe) -fi -echo - # Run some network checks to make sure setup on this machine makes sense. if [ -z "$SKIP_NETWORK_CHECKS" ]; then - . setup/network-checks.sh + source setup/network-checks.sh fi -# For the first time (if the config file (/etc/mailinabox.conf) not exists): -# Create the user named "user-data" and store all persistent user -# data (mailboxes, etc.) in that user's home directory. -# -# If the config file exists: -# Apply the existing configuration options for STORAGE_USER/ROOT -if [ -z "$STORAGE_USER" ]; then - STORAGE_USER=$([[ -z "$DEFAULT_STORAGE_USER" ]] && echo "user-data" || echo "$DEFAULT_STORAGE_USER") -fi - -if [ -z "$STORAGE_ROOT" ]; then - STORAGE_ROOT=$([[ -z "$DEFAULT_STORAGE_ROOT" ]] && echo "/home/$STORAGE_USER" || echo "$DEFAULT_STORAGE_ROOT") -fi - -# Create the STORAGE_USER if it not exists +# Create the STORAGE_USER and STORAGE_ROOT directory if they don't already exist. +# If the STORAGE_ROOT is missing the mailinabox.version file that lists a +# migration (schema) number for the files stored there, assume this is a fresh +# installation to that directory and write the file to contain the current +# migration number for this version of Mail-in-a-Box. if ! id -u $STORAGE_USER >/dev/null 2>&1; then useradd -m $STORAGE_USER fi - -# Create the STORAGE_ROOT if it not exists if [ ! -d $STORAGE_ROOT ]; then mkdir -p $STORAGE_ROOT fi - -# Create mailinabox.version file if not exists if [ ! -f $STORAGE_ROOT/mailinabox.version ]; then echo $(setup/migrate.py --current) > $STORAGE_ROOT/mailinabox.version chown $STORAGE_USER.$STORAGE_USER $STORAGE_ROOT/mailinabox.version