apache の Directory ディレクティブの重複しているパスを出力する
検証した apache のバージョンは、2.2.29 です。
apache の VirtualHost が大量にある環境で、
Directory ディレクティブのパスが重複しており、
意図しない設定で上書きされてしまう問題に苦しめられました。
ので、それを解決する方法です。
以下のスクリプトを実行すると、重複しているパスを出力することができます。
実行例は、以下のようになります。
$ tree conf/ conf/ ├── conf1 └── conf2 0 directories, 2 files
$ cat conf/conf? <Directory /path/to/dir> </Directory> <Directory /path/to/dir/> </Directory>
$ grep -h -r '<Directory' conf/ | sed -e 's/"//g' | sed -e 's/<Directory \(.*\)>/\1/' | sed -e 's/ *//g' | sed -e 's/\/$//' | sort | uniq -c | awk 'BEGIN { status=0 } { if ($1 > 1) { print $2; status=1} } END { exit status }' /path/to/dir $ echo $? 1
末尾に / があるパスとないパスが混ざっていても、
同一のパスとして認識してくれます。
また、awk でステータスコードを返すようにしていますので、
重複したときの処理も簡単に書けると思います。
以下は、configtest 時に実行するようにする例です。