blob: 7c66e375f8d805f0e7e98eb4b1f7c8fa6342c25f [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
docker_image_name=apache-arrow/release-binary
gpg_agent_extra_socket="$(gpgconf --list-dirs agent-extra-socket)"
if [ $(uname) = "Darwin" ]; then
docker_uid=10000
docker_gid=10000
else
docker_uid=$(id -u)
docker_gid=$(id -g)
fi
docker_ssh_key="${SOURCE_DIR}/binary/id_rsa"
if [ ! -f "${docker_ssh_key}" ]; then
ssh-keygen -N "" -f "${docker_ssh_key}"
fi
docker_gpg_ssh() {
local ssh_port=$1
shift
local known_hosts_file=$(mktemp -t "arrow-binary-gpg-ssh-known-hosts.XXXXX")
local exit_code=
if ssh \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=${known_hosts_file} \
-i "${docker_ssh_key}" \
-p ${ssh_port} \
-R "/home/arrow/.gnupg/S.gpg-agent:${gpg_agent_extra_socket}" \
arrow@127.0.0.1 \
"$@"; then
exit_code=$?;
else
exit_code=$?;
fi
rm -f ${known_hosts_file}
return ${exit_code}
}
docker_run() {
local container_id_dir=$(mktemp -d -t "arrow-binary-gpg-container.XXXXX")
local container_id_file=${container_id_dir}/id
docker \
run \
--cidfile ${container_id_file} \
--detach \
--publish-all \
--rm \
--volume "$PWD":/host \
${docker_image_name} \
bash -c "
if [ \$(id -u) -ne ${docker_uid} ]; then
usermod --uid ${docker_uid} arrow
chown -R arrow: ~arrow
fi
/usr/sbin/sshd -D
"
local container_id=$(cat ${container_id_file})
local ssh_port=$(docker port ${container_id} | grep -E -o '[0-9]+$')
# Wait for sshd available
while ! docker_gpg_ssh ${ssh_port} : > /dev/null 2>&1; do
sleep 0.1
done
gpg --export ${GPG_KEY_ID} | docker_gpg_ssh ${ssh_port} gpg --import
docker_gpg_ssh ${ssh_port} "$@"
docker kill ${container_id}
rm -rf ${container_id_dir}
}
docker build -t ${docker_image_name} "${SOURCE_DIR}/binary"
chmod go-rwx "${docker_ssh_key}"