Skip to content

Commit e573f8f

Browse files
committed
Adjust solution to be generalized for all APACHE_*_DIR variables, and to handle edge cases in a less hard-coded manner
1 parent f2bd9a3 commit e573f8f

File tree

3 files changed

+72
-30
lines changed

3 files changed

+72
-30
lines changed

5.6/apache/apache2-foreground

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,31 @@ if test -f "$APACHE_ENVVARS"; then
1010
. "$APACHE_ENVVARS"
1111
fi
1212

13-
: "${APACHE_PID_FILE:=${APACHE_RUN_DIR:=/var/run/apache2}/apache2.pid}"
14-
15-
# setup directories and permissions
16-
mkdir -p /run/lock
17-
for dir in ${APACHE_RUN_DIR} ${APACHE_LOCK_DIR}
18-
do
19-
mkdir -p ${dir}
20-
chown -R "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"
21-
done
22-
2313
# Apache gets grumpy about PID files pre-existing
14+
: "${APACHE_RUN_DIR:=/var/run/apache2}"
15+
: "${APACHE_PID_FILE:=$APACHE_RUN_DIR/apache2.pid}"
2416
rm -f "$APACHE_PID_FILE"
2517

18+
# create missing directories
19+
# (especially APACHE_RUN_DIR, APACHE_LOCK_DIR, and APACHE_LOG_DIR)
20+
for e in "${!APACHE_@}"; do
21+
if [[ "$e" == *_DIR ]] && [[ "${!e}" == /* ]]; then
22+
# handle "/var/lock" being a symlink to "/run/lock", but "/run/lock" not existing beforehand, so "/var/lock/something" fails to mkdir
23+
# mkdir: cannot create directory '/var/lock': File exists
24+
dir="${!e}"
25+
while [ "$dir" != "$(dirname "$dir")" ]; do
26+
dir="$(dirname "$dir")"
27+
if [ -d "$dir" ]; then
28+
break
29+
fi
30+
absDir="$(readlink -f "$dir" 2>/dev/null || :)"
31+
if [ -n "$absDir" ]; then
32+
mkdir -p "$absDir"
33+
fi
34+
done
35+
36+
mkdir -p "${!e}"
37+
fi
38+
done
39+
2640
exec apache2 -DFOREGROUND "$@"

7.0/apache/apache2-foreground

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,31 @@ if test -f "$APACHE_ENVVARS"; then
1010
. "$APACHE_ENVVARS"
1111
fi
1212

13-
: "${APACHE_PID_FILE:=${APACHE_RUN_DIR:=/var/run/apache2}/apache2.pid}"
14-
15-
# setup directories and permissions
16-
mkdir -p /run/lock
17-
for dir in ${APACHE_RUN_DIR} ${APACHE_LOCK_DIR}
18-
do
19-
mkdir -p ${dir}
20-
chown -R "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"
21-
done
22-
2313
# Apache gets grumpy about PID files pre-existing
14+
: "${APACHE_RUN_DIR:=/var/run/apache2}"
15+
: "${APACHE_PID_FILE:=$APACHE_RUN_DIR/apache2.pid}"
2416
rm -f "$APACHE_PID_FILE"
2517

18+
# create missing directories
19+
# (especially APACHE_RUN_DIR, APACHE_LOCK_DIR, and APACHE_LOG_DIR)
20+
for e in "${!APACHE_@}"; do
21+
if [[ "$e" == *_DIR ]] && [[ "${!e}" == /* ]]; then
22+
# handle "/var/lock" being a symlink to "/run/lock", but "/run/lock" not existing beforehand, so "/var/lock/something" fails to mkdir
23+
# mkdir: cannot create directory '/var/lock': File exists
24+
dir="${!e}"
25+
while [ "$dir" != "$(dirname "$dir")" ]; do
26+
dir="$(dirname "$dir")"
27+
if [ -d "$dir" ]; then
28+
break
29+
fi
30+
absDir="$(readlink -f "$dir" 2>/dev/null || :)"
31+
if [ -n "$absDir" ]; then
32+
mkdir -p "$absDir"
33+
fi
34+
done
35+
36+
mkdir -p "${!e}"
37+
fi
38+
done
39+
2640
exec apache2 -DFOREGROUND "$@"

7.1/apache/apache2-foreground

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,31 @@ if test -f "$APACHE_ENVVARS"; then
1010
. "$APACHE_ENVVARS"
1111
fi
1212

13-
: "${APACHE_PID_FILE:=${APACHE_RUN_DIR:=/var/run/apache2}/apache2.pid}"
14-
15-
# setup directories and permissions
16-
mkdir -p /run/lock
17-
for dir in ${APACHE_RUN_DIR} ${APACHE_LOCK_DIR}
18-
do
19-
mkdir -p ${dir}
20-
chown -R "$APACHE_RUN_USER:$APACHE_RUN_GROUP" "$dir"
21-
done
22-
2313
# Apache gets grumpy about PID files pre-existing
14+
: "${APACHE_RUN_DIR:=/var/run/apache2}"
15+
: "${APACHE_PID_FILE:=$APACHE_RUN_DIR/apache2.pid}"
2416
rm -f "$APACHE_PID_FILE"
2517

18+
# create missing directories
19+
# (especially APACHE_RUN_DIR, APACHE_LOCK_DIR, and APACHE_LOG_DIR)
20+
for e in "${!APACHE_@}"; do
21+
if [[ "$e" == *_DIR ]] && [[ "${!e}" == /* ]]; then
22+
# handle "/var/lock" being a symlink to "/run/lock", but "/run/lock" not existing beforehand, so "/var/lock/something" fails to mkdir
23+
# mkdir: cannot create directory '/var/lock': File exists
24+
dir="${!e}"
25+
while [ "$dir" != "$(dirname "$dir")" ]; do
26+
dir="$(dirname "$dir")"
27+
if [ -d "$dir" ]; then
28+
break
29+
fi
30+
absDir="$(readlink -f "$dir" 2>/dev/null || :)"
31+
if [ -n "$absDir" ]; then
32+
mkdir -p "$absDir"
33+
fi
34+
done
35+
36+
mkdir -p "${!e}"
37+
fi
38+
done
39+
2640
exec apache2 -DFOREGROUND "$@"

0 commit comments

Comments
 (0)