Files
glauth/v2/scripts/ship-docker-build.sh
Chris F Ravenscroft 32750d2abd Move plugins to their own repos (#283)
* Plugins release build delegated to plugin Makefile

* Build and push docker containers

* README points to documentation
2022-10-29 15:16:57 -07:00

146 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
inform() {
echo "--------------------------------------------------------------------------------"
echo "$@"
echo "--------------------------------------------------------------------------------"
}
image_name() {
[[ "$1" == "plugins" ]] && { echo "glauth-plugins"; } || { echo "glauth"; }
}
ldap_port() {
[[ "$1" == "plugins" ]] && { echo "3893"; } || { echo "3893"; }
}
prepare_image() {
profile="$1"
img="localhost/$(image_name $profile)"
inform "Deleting local builds to avoid future surprises."
rm -rf bin
inform "Mounting pseudo app directory to expose parent to current context."
mkdir -p local/app
sudo mount -o bind .. local/app/
inform "Building profile: $profile container: $img"
podman build --security-opt seccomp=scripts/docker/fastat-workaround.json -f Dockerfile-$profile -t $img
sudo umount local/app
inform "Starting registry"
mkdir -p local/registry
podman run -d --name registry -p 5000:5000 -v ./local/registry:/var/lib/registry --restart=unless-stopped registry:2
inform "Pushing image to container"
podman tag $img localhost:5000/$(image_name $profile)
podman push --tls-verify=false localhost:5000/$(image_name $profile)
if command -v ldapsearch &> /dev/null; then
inform "Running image"
podman run -d --name checkglauth -p $(ldap_port $profile):$(ldap_port $profile) localhost:5000/$(image_name $profile)
sleep 3
inform "Testing image"
checkfailed=0
if (ldapsearch -LLL -H ldap://localhost:$(ldap_port $profile) -D cn=serviceuser,ou=svcaccts,dc=glauth,dc=com -w mysecret -x -bdc=glauth,dc=com cn=hackers | grep posixAccoun) &> /dev/null; then
echo "Checked glauth is responding properly to ldapsearch query."
else
checkfailed=1
echo "glauth check did not pass. Aborting."
fi
inform "Stopping image"
podman stop checkglauth && podman rm checkglauth
if [[ checkfailed -eq 1 ]]; then
# Note that we are not removing the registry so that
# we can manually check why we failed.
exit 1
fi
else
echo "Skipping ldapsearch sanity check. Command not present."
fi
inform "Stopping registry"
podman stop registry && podman rm registry
}
prepare_images() {
prepare_image standalone
prepare_image plugins
}
push_profile_to_docker() {
profile="$1"
tag="$2"
REGISTRY_AUTH_FILE=~/.podmanauth
echo "Pushing image to docker hub"
podman login
podman push localhost:5000/$(image_name $profile) docker.io/glauth/$(image_name $profile):$tag
}
push_to_docker() {
tag="$1"
push_profile_to_docker standalone $tag
push_profile_to_docker plugins $tag
}
clear
cat <<EOB
This script is now deprecated.
Please use:
make releasedocker
make testdocker
EOB
exit 0
TAG="$1"
if [[ "$1" != "--force" ]]; then
tested=0
found=0
if command -v lsof &> /dev/null; then
tested=1
if lsof -i :5000 &> /dev/null; then
found=1
fi
elif command -v fuser &> /dev/null; then
tested=1
if fuser 5000/tcp &> /dev/null; then
found=1
fi
elif command -v netstat &> /dev/null; then
tested=1
if (netstat -plnt | grep 5000) &> /dev/null; then
found=1
fi
fi
if [[ tested -eq 0 ]]; then
echo "Unable to figure out whether a registry is already running."
echo "Please install lsof, fuser or netstat, or run with '--force'"
exit 1
fi
if [[ found -eq 1 ]]; then
echo "Port 5000 is busy. I will not be able to run the local registry. Aborting."
echo "You can avoid this check by running with '--force'"
exit 1
fi
else
TAG="$2"
fi
if [[ "$TAG" == "" ]]; then
echo "Please provide a tag for this image."
exit 1
fi
prepare_images
while true; do
read -p "Everything seems ok. Push to Docker registry? (y/n) " yn
case $yn in
[Yy]* ) push_to_docker $TAG; push_to_docker latest; break;;
[Nn]* ) exit;;
esac
done