#!/usr/bin/env bash # Copyright The containerd Authors. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # Downloads and installs protobuf # set -eu -o pipefail PROTOBUF_VERSION=3.20.1 PROTOBUF_DIR=$(mktemp -d) # Use `go tool dist list` for the full list of targets TARGET="$(go env GOOS)-$(go env GOARCH)" TARGET_ORIG=$TARGET # Fix up OS/ARCH to get proper download link for https://github.com/protocolbuffers/protobuf/releases # Darwin TARGET=${TARGET/darwin-amd64/osx-x86_64} TARGET=${TARGET/darwin-arm64/osx-aarch_64} # Windows TARGET=${TARGET/windows-amd64/win64} TARGET=${TARGET/windows-386/win32} # Linux TARGET=${TARGET/linux-386/linux-x86_32} TARGET=${TARGET/linux-amd64/linux-x86_64} TARGET=${TARGET/linux-arm64/linux-aarch_64} TARGET=${TARGET/linux-ppc64le/linux-ppcle_64} if [[ $TARGET != $TARGET_ORIG ]] then wget -O "$PROTOBUF_DIR/protobuf" "https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-$TARGET.zip" unzip "$PROTOBUF_DIR/protobuf" -d /usr/local else # Build from source wget -O "$PROTOBUF_DIR/protobuf" "https://github.com/protocolbuffers/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-cpp-$PROTOBUF_VERSION.zip" unzip "$PROTOBUF_DIR/protobuf" -d /usr/src/protobuf cd "/usr/src/protobuf/protobuf-$PROTOBUF_VERSION" ./autogen.sh ./configure --disable-shared make make check make install ldconfig fi rm -rf "$PROTOBUF_DIR" # Download status.proto. grpc repos' one seems copied from # https://github.com/googleapis/googleapis/blob/master/google/rpc/status.proto, # but we use grpc's since the repos has tags/releases. mkdir -p /usr/local/include/google/rpc curl \ -L https://raw.githubusercontent.com/grpc/grpc/v1.45.2/src/proto/grpc/status/status.proto \ -o /usr/local/include/google/rpc/status.proto