Ben, blogging: Show the complete apache config file
Posted by jpluimers on 2018/03/20
Quite a while back, I got attended to Ben, blogging: Show the complete apache config file:
If you really want to see all the complete config settings, there is no existing tool for that. This Stack Overflow page answered this question pretty well: You can use apachectl -S to see the settings of Virtual Host, or apachectl -M to see the loaded modules, but to see all settings, there is no such tool, you will have to go through all the files , starting from familiar yourself with the general structure of the httpd config files.… script …The usage is simple: Run it as
python CombineApacheConfig.py
. Since there is no additional parameters given, it will retrieve the default Ubuntu apache config file from/etc/apache2/apache2.conf
and generate the result complete config file in/tmp/apache2.combined.conf
. If your config file is in different location, then give the input file and output file location.Note: Apache server-info page http://127.0.0.1/server-info also provide similar information, but not in the config file format. It is in human readable format. The page works only when it is open from the same computer.
Since I could not find how to post comments there, and it works better for me having a repo, I put it into a gist with attribution to hist post: https://gist.github.com/jpluimers/fd300f3a500cbc78cd862d2a248e7b03
I need to adapt it for OpenSuSE; until then run it as this:
python CombineApacheConfig.py /etc/apache2/httpd.conf /tmp/apache2.combined.conf
- Source: [WayBack] Ben, blogging: Show the complete apache config file
- Via: [WayBack] opensuse Tumbleweed: Each time I run certbot, a line with `Listen 443` gets added to `/etc/apache2/httpd.conf` · Issue #3364 · certbot/certbot
–jeroen
#!/usr/bin/python2.7 | |
# CombineApacheConfig.py | |
__author__ = 'ben' | |
import sys, os, os.path, logging, fnmatch | |
def Help(): | |
print("Usage: python CombineApacheConfig.py inputfile[default:/etc/apache2/apache2.conf] outputfile[default:/tmp/apache2.combined.conf") | |
def InputParameter(): | |
if len(sys.argv) <> 3: | |
Help() | |
return "/etc/apache2/apache2.conf", "/tmp/apache2.combined.conf" | |
return sys.argv[1], sys.argv[2] | |
def ProcessMultipleFiles(InputFiles): | |
Content = '' | |
LocalFolder = os.path.dirname(InputFiles) | |
basenamePattern = os.path.basename(InputFiles) | |
for root, dirs, files in os.walk(LocalFolder): | |
for filename in fnmatch.filter(files, basenamePattern): | |
Content += ProcessInput(os.path.join(root, filename)) | |
return Content | |
def RemoveExcessiveLinebreak(s): | |
Length = len(s) | |
s = s.replace(os.linesep + os.linesep + os.linesep, os.linesep + os.linesep) | |
NewLength = len(s) | |
if NewLength < Length: | |
s = RemoveExcessiveLinebreak(s) | |
return s | |
def ProcessInput(InputFile): | |
Content = '' | |
if logging.root.isEnabledFor(logging.DEBUG): | |
Content = '# Start of ' + InputFile + os.linesep | |
with open(InputFile, 'r') as infile: | |
for line in infile: | |
stripline = line.strip(' \t') | |
if stripline.startswith('#'): | |
continue | |
if stripline.lower().startswith('include'): | |
match = stripline.split() | |
if len(match) == 2: | |
IncludeFiles = match[1] | |
IncludeFiles = IncludeFiles.strip('"') #Inserted according to V's comment. | |
if not IncludeFiles.startswith('/'): | |
LocalFolder = os.path.dirname(InputFile) | |
IncludeFiles = os.path.join(LocalFolder, IncludeFiles) | |
Content += ProcessMultipleFiles(IncludeFiles) + os.linesep | |
else: | |
Content += line # if it is not pattern of 'include(optional) path', then continue. | |
else: | |
Content += line | |
Content = RemoveExcessiveLinebreak(Content) | |
if logging.root.isEnabledFor(logging.DEBUG): | |
Content += '# End of ' + InputFile + os.linesep + os.linesep | |
return Content | |
if __name__ == "__main__": | |
logging.basicConfig(level=logging.DEBUG, format='[%(asctime)s][%(levelname)s]:%(message)s') | |
InputFile, OutputFile = InputParameter() | |
try: | |
Content = ProcessInput(InputFile) | |
except Exception as e: | |
logging.error("Failed to process " + InputFile, exc_info=True) | |
exit(1) | |
try: | |
with open(OutputFile, 'w') as outfile: | |
outfile.write(Content) | |
except Exception as e: | |
logging.error("Failed to write to " + outfile, exc_info=True) | |
exit(1) | |
logging.info("Done writing " + OutputFile) |
Leave a Reply