@@ -21,7 +21,13 @@ main() {
2121 useradd - M - g docker - N bridgehead & > / dev / null || echo " Using existing user bridgehead."
2222 chown - R bridgehead :docker [TMP_DIR ]
2323 chmod - R g + sw [TMP_DIR ]
24- install_systemd
24+ if ! systemctl list - units & > / dev / null ; then
25+ echo " Systemd is not active. Skipping systemd setup."
26+ update
27+ return
28+ else
29+ install_systemd
30+ fi
2531 echo " Installation complete."
2632 echo " You may start the bridgehead service with 'systemctl start bridgehead' or '[TMP_DIR]/bridgehead compose up' now."
2733 ;;
@@ -31,27 +37,49 @@ main() {
3137 ;;
3238 compose )
3339 shift
34- exec docker compose - p bridgehead -- env - file .env $COMPOSE_FILES $ @
40+ exec docker compose - p bridgehead -- env - file .env $COMPOSE_FILES - f docker - image . lock . yml $ @
3541 ;;
3642 update )
37- docker pull samply / rusthead :$ {TAG :- latest } & > / dev / null || echo " Failed to pull latest rusthead image. Using latest local image."
38- exec docker run -- rm \
39- - v [TMP_DIR ]:[TMP_DIR ] \
40- - e BRIDGEHEAD_CONFIG_PATH = [TMP_DIR ] \
41- - u " $(id -u bridgehead):$(id -g bridgehead)" \
42- samply / rusthead :$ {TAG :- latest } update
43+ update
4344 ;;
4445 * )
46+ echo " Unknown bridgehead command '$@'"
4547 exit 1
4648 ;;
4749 esac
4850}
4951
50- install_systemd () {
51- if ! systemctl list - units & > / dev / null ; then
52- echo " Systemd is not active. Skipping systemd setup."
53- return
52+ update () {
53+ env_hash = $ (sha1sum .env | awk ' {print $1}' )
54+ services_hash = $ (sha1sum services /* | awk '{print $1}')
55+ image_hashes=$(sha1sum docker-image.lock.yml | awk '{print $1}')
56+ docker pull samply/rusthead:${TAG:-latest} &>/dev/null || echo "Failed to pull latest rusthead image. Using latest local image."
57+ docker run --rm \
58+ -v [TMP_DIR]:[TMP_DIR] \
59+ -e BRIDGEHEAD_CONFIG_PATH=[TMP_DIR] \
60+ -u "$(id -u bridgehead):$(id -g bridgehead)" \
61+ samply/rusthead:${TAG:-latest} update
62+ docker image prune -f
63+ # TODO: Check if we have any services
64+ new_compose_files="$(ls services | awk '{print " -f services/" $0}')"
65+ [ -e ./docker-compose.override.yml ] && new_compose_files+=" -f docker-compose.override.yml"
66+ docker compose --env-file .env $new_compose_files pull
67+ docker compose --env-file .env $new_compose_files config --lock-image-digests > docker-image.lock.yml
68+ env_changed=$([ "$env_hash" != "$(sha1sum .env | awk '{print $1}')" ] && echo true || echo false)
69+ services_changed=$([ "$services_hash" != "$(sha1sum services/* | awk '{print $1}')" ] && echo true || echo false)
70+ images_changed=$([ "$image_hashes" != "$(sha1sum docker-image.lock.yml | awk '{print $1}')" ] && echo true || echo false)
71+
72+ if [ "$env_changed" = true ] || [ "$services_changed" = true ] || [ "$images_changed" = true ]; then
73+ echo "Update completed. Changes detected in:"
74+ [ "$env_changed" = true ] && echo " - Environment configuration"
75+ [ "$services_changed" = true ] && echo " - Services configuration"
76+ [ "$images_changed" = true ] && echo " - Docker images" || true
77+ else
78+ echo "Update completed. No changes detected - everything is up to date."
5479 fi
80+ }
81+
82+ install_systemd() {
5583 cat <<EOF > /etc/systemd/system/bridgehead.service
5684[Unit]
5785Description=Bridgehead Service
0 commit comments