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