@@ -8,6 +8,7 @@ IMAGE_BASE=komacke/hamclock
88# Get our directory locations in order
99HERE=" $( realpath -s " $( dirname " $0 " ) " 2> /dev/null) "
1010[ -z " $HERE " ] && HERE=" $( realpath " $( dirname " $0 " ) " ) "
11+ REL_HERE=" $( dirname " $0 " ) "
1112THIS=" $( basename " $0 " ) "
1213STARTED_FROM=" $PWD "
1314cd $HERE
@@ -24,6 +25,8 @@ DEFAULT_BACKEND_HOST=-
2425DEFAULT_HC_SIZE=-
2526# the following env is the lighttpd env file
2627DEFAULT_HC_EEPROM=hc.settings
28+ HC_UID=1199
29+ HC_GID=1199
2730
2831# the following env is for sticky settings
2932STICKY_ENV_FILE=$DOCKER_PROJECT .env
@@ -413,7 +416,7 @@ docker_compose_up() {
413416 docker_compose_yml && docker compose -f <( echo " $DOCKER_COMPOSE_YML " ) create
414417 RETVAL=$?
415418 [ $RETVAL -ne 0 ] && return $RETVAL
416- docker compose $INITIAL_CONFIG_FILE -f <( echo " $DOCKER_COMPOSE_YML " ) up -d
419+ docker compose -f <( echo " $DOCKER_COMPOSE_YML " ) up -d
417420 RETVAL=$?
418421 fi
419422
@@ -687,7 +690,75 @@ determine_eeprom_file() {
687690 if [ ! -e " $HC_EEPROM " ]; then
688691 touch " $HC_EEPROM "
689692 if [ -r " $HERE /config.env" ]; then
690- INITIAL_CONFIG_FILE=" --env-file $HERE /config.env"
693+ INITIAL_CONFIG_FILE=" env_file:
694+ - $HERE /config.env"
695+ fi
696+ fi
697+
698+ hc_settings_perms
699+ }
700+
701+ # checking if the HC_EEPROM file is writable by the user in the container. If not the
702+ # container will crash and we need to fix it.
703+ hc_settings_perms () {
704+ # hc.settings needs to be writable by user 1199:1199
705+ HC_PERMS=$( stat -c ' %a' " $HC_EEPROM " )
706+
707+ # who owns it
708+ HC_OWN=$( stat -c ' %u' " $HC_EEPROM " )
709+ HC_GRP=$( stat -c ' %g' " $HC_EEPROM " )
710+
711+ CAN_ACCESS=false
712+
713+ # test for u+rw
714+ if [[ " $HC_OWN " == " $HC_UID " && " $HC_PERMS " == [67]?? ]]; then
715+ CAN_ACCESS=true
716+
717+ # test for g+rw
718+ elif [[ " $HC_GRP " == " $HC_GID " && " $HC_PERMS " == ? [67]? ]]; then
719+ CAN_ACCESS=true
720+
721+ # test for o+rw
722+ elif [[ " $HC_PERMS " == ?? [67] ]]; then
723+ CAN_ACCESS=true
724+
725+ # otherwise try to fix it
726+ else
727+
728+ # set o+rw
729+ chmod o+rw " $HC_EEPROM " > /dev/null 2>&1
730+ PERM_RETVAL=$?
731+
732+ # if we couldn't set it, we can copy it, delete the original and
733+ # set the perms
734+ if [ $PERM_RETVAL -ne 0 ]; then
735+
736+ # we can do it if the container isn't holding the fh
737+ get_current_image_tag
738+ if [ " $CURRENT_DOCKER_IMAGE " == null ]; then
739+ cp " $HC_EEPROM " " $HC_EEPROM .tmp"
740+ rm -f " $HC_EEPROM "
741+ mv " $HC_EEPROM .tmp" " $HC_EEPROM "
742+ chmod o+rw $HC_EEPROM > /dev/null 2>&1
743+ PERM_RETVAL=$?
744+ if [ $PERM_RETVAL -eq 0 ]; then
745+ CAN_ACCESS=true
746+ else
747+ CAN_ACCESS=false
748+ fi
749+
750+ # otherwise we need to take harsher measures.
751+ else
752+ CAN_ACCESS=false
753+ fi
754+ fi
755+ fi
756+
757+ # take harsher measures - down the container and don't cause an infinite loop
758+ if [ $CAN_ACCESS == false ]; then
759+ if [ ${FUNCNAME[3]} != docker_compose_down ]; then
760+ docker_compose_down
761+ [ ${FUNCNAME[1]} != hc_settings_perms ] && hc_settings_perms
691762 fi
692763 fi
693764}
@@ -808,6 +879,7 @@ services:
808879 - UTC_OFFSET=0
809880 $DC_BACKEND_HOST
810881 $DC_HC_SIZE
882+ $INITIAL_CONFIG_FILE
811883 container_name: $CONTAINER
812884 image: $IMAGE
813885 restart: unless-stopped
@@ -817,7 +889,7 @@ services:
817889 volumes:
818890 - type: bind
819891 source: $HC_EEPROM
820- target: /root /.hamclock/eeprom
892+ target: /opt /.hamclock/eeprom
821893 bind:
822894 selinux: Z
823895 healthcheck:
0 commit comments