vitess.io/vitess@v0.16.2/docker/lite/install_dependencies.sh (about)

     1  #!/bin/bash
     2  
     3  # This is a script that gets run as part of the Dockerfile build
     4  # to install dependencies for the vitess/lite family of images.
     5  #
     6  # Usage: install_dependencies.sh <flavor>
     7  
     8  set -euo pipefail
     9  
    10  FLAVOR="$1"
    11  export DEBIAN_FRONTEND=noninteractive
    12  
    13  KEYSERVERS=(
    14      keyserver.ubuntu.com
    15      hkp://keyserver.ubuntu.com:80
    16  )
    17  
    18  add_apt_key() {
    19      for i in {1..3}; do
    20          for keyserver in "${KEYSERVERS[@]}"; do
    21              if apt-key adv --no-tty --keyserver "${keyserver}" --recv-keys "$1"; then return; fi
    22          done
    23      done
    24  }
    25  
    26  # Set number of times to retry a download
    27  MAX_RETRY=20
    28  
    29  do_fetch() {
    30      wget \
    31          --tries=$MAX_RETRY\
    32          --read-timeout=30\
    33          --timeout=30\
    34          --retry-connrefused\
    35          --waitretry=1\
    36          --no-dns-cache \
    37          $1 -O $2
    38  }
    39  
    40  # Install base packages that are common to all flavors.
    41  BASE_PACKAGES=(
    42      bzip2
    43      ca-certificates
    44      dirmngr
    45      gnupg
    46      libaio1
    47      libatomic1
    48      libcurl4
    49      libdbd-mysql-perl
    50      libwww-perl
    51      libev4
    52      libjemalloc2
    53      libtcmalloc-minimal4
    54      procps
    55      rsync
    56      strace
    57      sysstat
    58      wget
    59      curl
    60      percona-toolkit
    61      zstd
    62  )
    63  
    64  apt-get update
    65  apt-get install -y --no-install-recommends "${BASE_PACKAGES[@]}"
    66  
    67  # Packages specific to certain flavors.
    68  case "${FLAVOR}" in
    69  mysql57)
    70      mysql57_version=5.7.31
    71      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-5.7/m/mysql-community/libmysqlclient20_${mysql57_version}-1debian10_amd64.deb /tmp/libmysqlclient20_${mysql57_version}-1debian10_amd64.deb
    72      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-5.7/m/mysql-community/mysql-community-client_${mysql57_version}-1debian10_amd64.deb /tmp/mysql-community-client_${mysql57_version}-1debian10_amd64.deb
    73      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-5.7/m/mysql-community/mysql-client_${mysql57_version}-1debian10_amd64.deb /tmp/mysql-client_${mysql57_version}-1debian10_amd64.deb
    74      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-5.7/m/mysql-community/mysql-community-server_${mysql57_version}-1debian10_amd64.deb /tmp/mysql-community-server_${mysql57_version}-1debian10_amd64.deb
    75      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-5.7/m/mysql-community/mysql-server_${mysql57_version}-1debian10_amd64.deb /tmp/mysql-server_${mysql57_version}-1debian10_amd64.deb
    76      PACKAGES=(
    77          /tmp/libmysqlclient20_${mysql57_version}-1debian10_amd64.deb
    78          /tmp/mysql-community-client_${mysql57_version}-1debian10_amd64.deb
    79          /tmp/mysql-client_${mysql57_version}-1debian10_amd64.deb
    80          /tmp/mysql-community-server_${mysql57_version}-1debian10_amd64.deb
    81          /tmp/mysql-server_${mysql57_version}-1debian10_amd64.deb
    82          percona-xtrabackup-24
    83      )
    84      ;;
    85  mysql80)
    86      mysql8_version=8.0.30
    87      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/libmysqlclient21_${mysql8_version}-1debian10_amd64.deb /tmp/libmysqlclient21_${mysql8_version}-1debian10_amd64.deb
    88      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-client-core_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-community-client-core_${mysql8_version}-1debian10_amd64.deb
    89      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-client-plugins_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-community-client-plugins_${mysql8_version}-1debian10_amd64.deb
    90      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-client_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-community-client_${mysql8_version}-1debian10_amd64.deb
    91      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-client_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-client_${mysql8_version}-1debian10_amd64.deb
    92      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-server-core_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-community-server-core_${mysql8_version}-1debian10_amd64.deb
    93      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-community-server_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-community-server_${mysql8_version}-1debian10_amd64.deb
    94      do_fetch https://repo.mysql.com/apt/debian/pool/mysql-8.0/m/mysql-community/mysql-server_${mysql8_version}-1debian10_amd64.deb /tmp/mysql-server_${mysql8_version}-1debian10_amd64.deb
    95      PACKAGES=(
    96          /tmp/libmysqlclient21_${mysql8_version}-1debian10_amd64.deb
    97          /tmp/mysql-community-client-core_${mysql8_version}-1debian10_amd64.deb
    98          /tmp/mysql-community-client-plugins_${mysql8_version}-1debian10_amd64.deb
    99          /tmp/mysql-community-client_${mysql8_version}-1debian10_amd64.deb
   100          /tmp/mysql-client_${mysql8_version}-1debian10_amd64.deb
   101          /tmp/mysql-community-server-core_${mysql8_version}-1debian10_amd64.deb
   102          /tmp/mysql-community-server_${mysql8_version}-1debian10_amd64.deb
   103          /tmp/mysql-server_${mysql8_version}-1debian10_amd64.deb
   104          percona-xtrabackup-80
   105      )
   106      ;;
   107  percona)
   108      PACKAGES=(
   109          libcurl3
   110          percona-server-server-5.6
   111          percona-xtrabackup
   112      )
   113      ;;
   114  percona57)
   115      PACKAGES=(
   116          libperconaserverclient20
   117          percona-server-server-5.7
   118          percona-xtrabackup-24
   119      )
   120      ;;
   121  percona80)
   122      PACKAGES=(
   123          libperconaserverclient21
   124          percona-server-rocksdb
   125          percona-server-server
   126          percona-xtrabackup-80
   127      )
   128      ;;
   129  *)
   130      echo "Unknown flavor ${FLAVOR}"
   131      exit 1
   132      ;;
   133  esac
   134  
   135  # Get GPG keys for extra apt repositories.
   136  # repo.mysql.com
   137  add_apt_key 8C718D3B5072E1F5
   138  add_apt_key 467B942D3A79BD29
   139  
   140  # All flavors include Percona XtraBackup (from repo.percona.com).
   141  add_apt_key 9334A25F8507EFA5
   142  
   143  # Add extra apt repositories for MySQL.
   144  case "${FLAVOR}" in
   145  mysql57)
   146      echo 'deb http://repo.mysql.com/apt/debian/ buster mysql-5.7' > /etc/apt/sources.list.d/mysql.list
   147      ;;
   148  mysql80)
   149      echo 'deb http://repo.mysql.com/apt/debian/ buster mysql-8.0' > /etc/apt/sources.list.d/mysql.list
   150      ;;
   151  esac
   152  
   153  # Add extra apt repositories for Percona Server and/or Percona XtraBackup.
   154  case "${FLAVOR}" in
   155  mysql57|mysql80|percona57)
   156      echo 'deb http://repo.percona.com/apt buster main' > /etc/apt/sources.list.d/percona.list
   157      ;;
   158  percona80)
   159      echo 'deb http://repo.percona.com/apt buster main' > /etc/apt/sources.list.d/percona.list
   160      echo 'deb http://repo.percona.com/ps-80/apt buster main' > /etc/apt/sources.list.d/percona80.list
   161      ;;
   162  esac
   163  
   164  # Pre-fill values for installation prompts that are normally interactive.
   165  case "${FLAVOR}" in
   166  percona57)
   167      debconf-set-selections <<EOF
   168  debconf debconf/frontend select Noninteractive
   169  percona-server-server-5.7 percona-server-server/root_password password 'unused'
   170  percona-server-server-5.7 percona-server-server/root_password_again password 'unused'
   171  percona-server-server-5.7 percona-server-server-5.7/root-pass password 'unused'
   172  percona-server-server-5.7 percona-server-server-5.7/re-root-pass password 'unused'
   173  EOF
   174      ;;
   175  percona80)
   176      debconf-set-selections <<EOF
   177  debconf debconf/frontend select Noninteractive
   178  percona-server-server-8.0 percona-server-server/root_password password 'unused'
   179  percona-server-server-8.0 percona-server-server/root_password_again password 'unused'
   180  EOF
   181      ;;
   182  esac
   183  
   184  # Install flavor-specific packages
   185  apt-get update
   186  for i in $(seq 1 $MAX_RETRY); do apt-get install -y --no-install-recommends "${PACKAGES[@]}" && break; done
   187  if [[ "$i" = "$MAX_RETRY" ]]; then
   188      exit 1
   189  fi
   190  
   191  # Clean up files we won't need in the final image.
   192  rm -rf /var/lib/apt/lists/*
   193  rm -rf /var/lib/mysql/
   194  rm -rf /tmp/*.deb