github.com/lbryio/lbcd@v0.22.119/contrib/linode/lbcd_stack_script.sh (about)

     1  #!/bin/bash
     2  # <UDF name="username" Label="Username" example="lbry" />
     3  # <UDF name="password" Label="Password" example="ASDF123!@#" />
     4  # <UDF name="private_ip_prefix" Label="PrivateIPPrefix" example="192" default="192" />
     5  # <UDF name="snapshot_url" Label="SnapshotURL" default="https://snapshots.lbry.com/blockchain/lbcd/data-1052K.zip" />
     6  # <UDF name="AWS_ACCESS_KEY_ID" Label="AccessKey" default="" />
     7  # <UDF name="AWS_SECRET_ACCESS_KEY" Label="SecretKey" default="" />
     8  # <UDF name="endpoint_url" Label="BlockStorageEndpoint" default="" />
     9  # <UDF name="docker_compose_file_url" Label="ConfigURL" default="https://picardtek-linode-storage.us-east-1.linodeobjects.com/config/docker-compose-lbcd.yml" />
    10  
    11  source <ssinclude StackScriptID=1>
    12  
    13  # For debugging
    14  exec > >(tee -i /var/log/stackscript.log) 2>&1
    15  set -xeo pipefail
    16  
    17  function user_add_sudo {
    18    USERNAME="$1"
    19    USERPASS="$2"
    20    if [ ! -n "$USERNAME" ] || [ ! -n "$USERPASS" ]; then
    21      echo "No new username and/or password entered"
    22      return 1;
    23    fi
    24    adduser "$USERNAME" --disabled-password --gecos ""
    25    echo "$USERNAME:$USERPASS" | chpasswd
    26    apt-get install -y sudo
    27    usermod -aG sudo "$USERNAME"
    28  }
    29  
    30  function download_snapshot {
    31    if [ -z "${AWS_ACCESS_KEY_ID}" ]; then
    32      wget "${SNAPSHOT_URL}"
    33    else
    34      echo "[default]
    35            access_key = ${AWS_ACCESS_KEY_ID}
    36            secret_key = ${AWS_SECRET_ACCESS_KEY}" > ~/.s3cfg
    37      if [ -z "${ENDPOINT_URL}" ]; then
    38        s4cmd --verbose get "${SNAPSHOT_URL}"
    39      else
    40        s4cmd --verbose get "${SNAPSHOT_URL}" --endpoint-url "${ENDPOINT_URL}"
    41      fi
    42    fi
    43  }
    44  
    45  function download_and_start {
    46    download_snapshot
    47    # get the snapshot data into place
    48    SNAPSHOT_FILE_NAME=$(echo "${SNAPSHOT_URL}" | rev | cut -d/ -f1 | rev)
    49    unzip "${SNAPSHOT_FILE_NAME}" -d ~/.lbcd/
    50    mv ~/.lbcd/"${SNAPSHOT_FILE_NAME}" ~/.lbcd/data
    51    rm "${SNAPSHOT_FILE_NAME}"
    52    # get our private ip
    53    PRIVATE_IP=$(ip addr | grep "${PRIVATE_IP_PREFIX}" | cut -d'/' -f1 | rev | cut -d" " -f 1 | rev)
    54    # download the compose-compose and put our private ip in the for RPC endpoint
    55    wget "${DOCKER_COMPOSE_FILE_URL}" -O - | sed 's/REPLACE_ME/'"${PRIVATE_IP}"'/g' > docker-compose.yml
    56    # Create our volume and start lbcd
    57    docker volume create --driver local \
    58        --opt type=none \
    59        --opt device=~/.lbcd\
    60        --opt o=bind lbcd
    61     docker-compose up -d
    62  }
    63  # add a non-root sudo user
    64  user_add_sudo "${USERNAME}" "${PASSWORD}"
    65  # Update and install dependencies
    66  sudo apt-get update && sudo apt-get upgrade -y
    67  sudo apt-get install -y unzip wget s4cmd
    68  apt install -y apt-transport-https ca-certificates curl software-properties-common && \
    69          curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \
    70          add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
    71          apt install -y docker-ce docker-ce-cli containerd.io && \
    72          systemctl enable docker && sudo systemctl start docker && \
    73          curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && \
    74          chmod +x /usr/local/bin/docker-compose
    75  # make sure we can use docker
    76  usermod -aG docker $USERNAME
    77  export -f download_and_start
    78  export -f download_snapshot
    79  su "${USERNAME}" -c 'bash -c "cd ~ && download_and_start"'