How familiar are you with the codebase?:
[BUG | ISSUE] Expected Behaviour:
The admin interface should load from client machines, and the API should load from the command line of the local machine.
[BUG | ISSUE] Actual Behaviour:
The admin page does not load, and nor does the API.
[BUG | ISSUE] Steps to reproduce:
Install Pihole onto an Ubuntu 14.04 LTS 64-bit machine, and attempt to load the admin page.
The issue began as an error when Pihole attempted to flush the log last night: /usr/local/bin/pihole: line 43: /opt/pihole/piholeLogFlush.sh: No such file or directory. Sure enough, there was no /opt/pihole directory, but the scripts were present in /etc/.pihole and subdirectories.
I uninstalled Pihole and reinstalled it, which corrected the error, however now there's a new problem: neither the web admin interface nor the API are loading. Instead of the expected content, I get the following from the API:
HTTP/1.1 200 OK
X-Pi-hole: The Pi-hole Web interface is working!
X-Frame-Options: DENY
Content-Type: text/html
Accept-Ranges: bytes
ETag: "363755924"
Last-Modified: Mon, 31 Oct 2016 06:52:44 GMT
Content-Length: 78
Date: Mon, 31 Oct 2016 07:08:12 GMT
Server: lighttpd/1.4.33
<html>
<head>
<script>window.close();</script>
</head>
<body>
</body>
</html>
Loading the web interface in a browser gives the same window.close(); content. Attempts to reconfigure and reinstall Pihole have not changed the behaviour, nor has a manual git pull in the web admin folder (it simply says I'm already up-to-date.)
-
(Optional) Debug Log generated by pihole -d:
2phymhoc26
_This template was created based on the work of udemy-dl._
What is the output of ls -al /var/www/html/admin/ and in that directory: git status?
$ ls -al /var/www/html/admin/
total 104
drwxr-xr-x 9 root root 4096 Oct 31 06:51 .
drwxrwxr-x 4 www-data www-data 4096 Oct 31 06:52 ..
-rw-r--r-- 1 root root 1871 Oct 31 06:51 api.php
drwxr-xr-x 5 root root 4096 Oct 31 06:51 bootstrap
-rw-r--r-- 1 root root 729 Oct 31 06:51 CONTRIBUTING.md
drwxr-xr-x 5 root root 4096 Oct 31 06:51 css
-rw-r--r-- 1 root root 9250 Oct 31 06:51 data.php
-rw-r--r-- 1 root root 1214 Oct 31 06:51 footer.php
drwxr-xr-x 8 root root 4096 Oct 31 20:31 .git
drwxr-xr-x 2 root root 4096 Oct 31 06:51 .github
-rw-r--r-- 1 root root 153 Oct 31 06:51 .gitignore
-rw-r--r-- 1 root root 10527 Oct 31 06:51 header.php
drwxr-xr-x 2 root root 4096 Oct 31 06:51 img
-rw-r--r-- 1 root root 5974 Oct 31 06:51 index.php
drwxr-xr-x 4 root root 4096 Oct 31 06:51 js
-rw-r--r-- 1 root root 1085 Oct 31 06:51 LICENSE
-rw-r--r-- 1 root root 2062 Oct 31 06:51 list.php
drwxr-xr-x 2 root root 4096 Oct 31 06:51 php
-rw-r--r-- 1 root root 645 Oct 31 06:51 .pullapprove.yml
-rw-r--r-- 1 root root 1519 Oct 31 06:51 queries.php
-rw-r--r-- 1 root root 1352 Oct 31 06:51 README.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
curl -i http://pi.hole/admin/api.php?summary
$ curl -i http://pi.hole/admin/api.php?summary
HTTP/1.1 200 OK
X-Pi-hole: The Pi-hole Web interface is working!
X-Frame-Options: DENY
Content-Type: text/html
Accept-Ranges: bytes
ETag: "363755924"
Last-Modified: Mon, 31 Oct 2016 06:52:44 GMT
Content-Length: 78
Date: Mon, 31 Oct 2016 22:55:46 GMT
Server: lighttpd/1.4.33
<html>
<head>
<script>window.close();</script>
</head>
<body>
</body>
</html>
curl -I http://pi.hole/admin/index.php
$ curl -I http://pi.hole/admin/index.php
HTTP/1.1 200 OK
X-Pi-hole: The Pi-hole Web interface is working!
X-Frame-Options: DENY
Content-Type: text/html
Accept-Ranges: bytes
ETag: "363755924"
Last-Modified: Mon, 31 Oct 2016 06:52:44 GMT
Content-Length: 78
Date: Mon, 31 Oct 2016 22:58:17 GMT
Server: lighttpd/1.4.33
The only thing I can think of right now is permissions error, but I have similar permissions on my machine...
cat /etc/pihole/install.log
Permissions don't appear to be the problem, so far as I can see: www-data has read access to all the files. I can happily curl files like README.md from the same directory.
$ cat /etc/pihole/install.log
::: Checking if user 'pihole' exists...
::: User 'pihole' already exists
:::
::: Installing scripts to /opt/pihole... done.
:::
::: Installing configs...
::: Existing dnsmasq.conf found... it is not a pi-hole file, leaving alone!
::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf... done.
:::
::: Creating log file and changing owner to dnsmasq... already exists!
:::
::: Installing pihole custom index page... Existing page detected, not overwriting
::: Installing sudoer file... done!
:::
::: Installing latest Cron script... done!
::: Configuring iptables for httpd and dnsmasq..
:::
::: Preparing to run gravity.sh to refresh hosts...
::: Cleaning up previous install (preserving whitelist/blacklist)
::: Running gravity.sh
:::
::: Neutrino emissions detected...
:::
::: No custom adlist file detected, reading from default file... done!
:::
::: Getting raw.githubusercontent.com list... No changes detected, transport skipped!
::: Getting mirror1.malwaredomains.com list... No changes detected, transport skipped!
::: Getting sysctl.org list... No changes detected, transport skipped!
::: Getting zeustracker.abuse.ch list... No changes detected, transport skipped!
::: Getting s3.amazonaws.com list... No changes detected, transport skipped!
::: Getting s3.amazonaws.com list... No changes detected, transport skipped!
::: Getting hosts-file.net list... No changes detected, transport skipped!
::: Getting raw.githubusercontent.com list... No changes detected, transport skipped!
:::
::: Aggregating list of domains... done!
::: Formatting list of domains to remove comments.... done!
::: 0 domains being pulled in by gravity...
::: Removing duplicate domains.... done!
::: 0 unique domains trapped in the event horizon.
:::
::: Adding adlist sources to the whitelist... done!
::: Whitelisting 8 domains... done!
::: Nothing to blacklist!
::: Formatting domains into a HOSTS file...
:::
::: Cleaning up un-needed files... done!
:::
::: Refresh lists in dnsmasq...
* Starting DNS forwarder and DHCP server dnsmasq
...done.
::: Pi-hole blocking is Enabled
Are the only files in that admin directory that you can't curl php files?
Looks like it: they all give the same window.close(); lack-of-content, whereas the other (non-script) files work fine.
It looks like gravity isn't working too well... What's the output of pihole -g -f?
$ pihole -g -f
:::
::: Deleting exising list cache... done!
::: Neutrino emissions detected...
:::
::: No custom adlist file detected, reading from default file... done!
:::
::: Getting raw.githubusercontent.com list... List updated, transport successful!
::: Getting mirror1.malwaredomains.com list... List updated, transport successful!
::: Getting sysctl.org list... List updated, transport successful!
::: Getting zeustracker.abuse.ch list... List updated, transport successful!
::: Getting s3.amazonaws.com list... List updated, transport successful!
::: Getting s3.amazonaws.com list... List updated, transport successful!
::: Getting hosts-file.net list... List updated, transport successful!
::: Getting raw.githubusercontent.com list... List updated, transport successful!
:::
::: Aggregating list of domains... done!
::: Formatting list of domains to remove comments.... done!
::: 125653 domains being pulled in by gravity...
::: Removing duplicate domains.... done!
::: 101577 unique domains trapped in the event horizon.
:::
::: Adding adlist sources to the whitelist... done!
::: Whitelisting 8 domains... done!
::: Nothing to blacklist!
::: Formatting domains into a HOSTS file...
:::
::: Cleaning up un-needed files... done!
:::
::: Refresh lists in dnsmasq...
* Restarting DNS forwarder and DHCP server dnsmasq [ OK ]
::: Pi-hole blocking is Enabled
sudo lighttpd -p to check the currently running config.
Well, this may explain something:
$ sudo lighttpd -p
2016-10-31 23:17:04: (server.c.617) No configuration available. Try using -f option.
Try reloading lighttpd (I think this works on 14): sudo service lighttpd restart
That's my fault, you need to pass the configfile, we know that you have something running, as the X-Header's are populated. The full command is lighttpd -p -f /etc/lighttpd/lighttpd.conf
Reloads fine. @dschaper's full command results in:
$ lighttpd -p -f /etc/lighttpd/lighttpd.conf
config {
var.PID = 16915
var.CWD = "/var/www/html/admin"
server.modules = (
"mod_indexfile",
"mod_access",
"mod_accesslog",
"mod_auth",
"mod_expire",
"mod_compress",
"mod_redirect",
"mod_setenv",
"mod_rewrite",
"mod_dirlisting",
"mod_staticfile",
# 11
)
server.document-root = "/var/www/html"
server.error-handler-404 = "pihole/index.html"
server.upload-dirs = ("/var/cache/lighttpd/uploads")
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
accesslog.filename = "/var/log/lighttpd/access.log"
accesslog.format = "%{%s}t|%V|%r|%s|%b"
index-file.names = ("index.php", "index.html", "index.lighttpd.html")
url.access-deny = ("~", ".inc")
static-file.exclude-extensions = (".php", ".pl", ".fcgi")
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ("application/javascript", "text/css", "text/html", "text/plain")
mimetype.assign = (
[big list of mimetypes excised for space]
)
url.rewrite = (
"^(?!/admin/).*\.js$" => "pihole/index.js",
)
$SERVER["socket"] == "[::]:80" {
# block 1
} # end of $SERVER["socket"] == "[::]:80"
$HTTP["url"] =~ "^/admin/" {
# block 2
setenv.add-response-header = (
"X-Pi-hole" => "The Pi-hole Web interface is working!",
"X-Frame-Options" => "DENY",
# 2
)
} # end of $HTTP["url"] =~ "^/admin/"
$HTTP["url"] =~ "^(?!/admin)/.*" {
# block 3
setenv.add-response-header = (
"X-Pi-hole" => "A black hole for Internet advertisements.",
)
} # end of $HTTP["url"] =~ "^(?!/admin)/.*"
}
Strange... Is this config file modified?
If it is, I haven't modified it. Like I say, Pihole was all working fine until last night, then it broke, so I uninstalled and reinstalled it (using the uninstall command and the standard curl-into-bash install command) and now it works except for the web interface being on the fritz.
Try pihole -r and choose Repair.
Done. Completed succesfully, but has made no difference: all PHP files still return window.close(); instead of the expected content.
$ pihole -r
:::
::: You are root.
::: Repair option selected.
::: Verifying free disk space...
:::
::: Checking apt-get for upgraded packages.... done!
:::
::: Your system is up to date! Continuing with Pi-hole installation...
::: Checking for apt-utils... installed!
::: Checking for whiptail... installed!
::: Checking for git... installed!
::: Checking for dhcpcd5... installed!
::: Checking for dnsutils... installed!
::: Checking for bc... installed!
::: Checking for dnsmasq... installed!
::: Checking for lighttpd... installed!
::: Checking for php5-common... installed!
::: Checking for php5-cgi... installed!
::: Checking for curl... installed!
::: Checking for unzip... installed!
::: Checking for wget... installed!
::: Checking for sudo... installed!
::: Checking for netcat... installed!
::: Checking for cron... installed!
::: Checking for iproute2... installed!
::: --reconfigure passed to install script. Not downloading/updating local repos
:::
::: Installing scripts to /opt/pihole... done.
:::
::: Installing configs...
::: Existing dnsmasq.conf found... it is not a pi-hole file, leaving alone!
::: Copying 01-pihole.conf to /etc/dnsmasq.d/01-pihole.conf... done.
:::
::: Creating log file and changing owner to dnsmasq... already exists!
:::
::: Installing pihole custom index page... Existing page detected, not overwriting
::: Installing sudoer file... done!
:::
::: Installing latest Cron script... done!
::: Configuring iptables for httpd and dnsmasq..
:::
::: Preparing to run gravity.sh to refresh hosts...
::: Cleaning up previous install (preserving whitelist/blacklist)
::: Running gravity.sh
:::
::: Neutrino emissions detected...
:::
::: No custom adlist file detected, reading from default file... done!
:::
::: Getting raw.githubusercontent.com list... List updated, transport successful!
::: Getting mirror1.malwaredomains.com list... List updated, transport successful!
::: Getting sysctl.org list... List updated, transport successful!
::: Getting zeustracker.abuse.ch list... List updated, transport successful!
::: Getting s3.amazonaws.com list... List updated, transport successful!
::: Getting s3.amazonaws.com list... List updated, transport successful!
::: Getting hosts-file.net list... List updated, transport successful!
::: Getting raw.githubusercontent.com list... List updated, transport successful!
:::
::: Aggregating list of domains... done!
::: Formatting list of domains to remove comments.... done!
::: 125653 domains being pulled in by gravity...
::: Removing duplicate domains.... done!
::: 101577 unique domains trapped in the event horizon.
:::
::: Adding adlist sources to the whitelist... done!
::: Whitelisting 8 domains... done!
::: Nothing to blacklist!
::: Formatting domains into a HOSTS file...
:::
::: Cleaning up un-needed files... done!
:::
::: Refresh lists in dnsmasq...
* Restarting DNS forwarder and DHCP server dnsmasq
...done.
::: Pi-hole blocking is Enabled
::: Restarting services...
:::
::: Starting dnsmasq service... done.
:::
::: Enabling dnsmasq service to start on reboot... done.
:::
::: Starting lighttpd service... done.
:::
::: Enabling lighttpd service to start on reboot... done.
::: done.
:::
::: Update complete!
:::
::: The install log is located at: /etc/pihole/install.log
::: View the web interface at http://pi.hole/admin or http:///admin
We're still trying to track this one down. Do you have the weekly cronjob for checking for a version update enabled or is everything just stock from the install?
I seem to be having the same issue here.. just popped up a few minutes ago when powering up a configured pi-hole. The pi-hole was configured a few days ago at my office, I then brought it home, re-ip'd, rebooted. Seems to be working (ads are blocked and my log is updated) but admin is not loading.. seeing the same window.close();
Everything is stock here
Looks like that is running a previous version and the /var/www/html/admin/ directory has been changed. The git error is showing that the directory is no longer under the local repository. (A ls -lac /var/www/html/admin should show a .git directory, but the system isn't detecting it.) Can you confirm if the .git directory is no longer on the Pi?
yah this is weird, sorry to add unnecessary noise to this thread.. it seems my git installation was borked and it manifested itself the same way.
I came across this:
git: error while loading shared libraries: ���4���: cannot open shared object file: No such file or directory
Which I was able to tidy up by apt-get remove git ; apt-get install -y git
Ran through curl -L https://install.pi-hole.net | bash again and no longer saw the same error.
But I do see some git action
::: Checking for existing repository...
::: Checking /var/www/html/admin is a repo... OK!
::: Updating repo in /var/www/html/admin... [/] fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet
fatal: No such ref: HEAD
[\] error: unable to resolve reference refs/tags/v1.4.3.1a: Invalid argument
done!
:::
Looks like the .git directory is still there
pi@pi-hole:~ $ ls -lac /var/www/html/admin/
total 40
drwxr-xr-x 9 root root 4096 Oct 27 18:53 .
drwxrwxr-x 4 www-data www-data 4096 Nov 2 01:50 ..
-rw-r--r-- 1 root root 0 Oct 27 18:53 api.php
drwxr-xr-x 5 root root 4096 Oct 27 18:53 bootstrap
-rw-r--r-- 1 root root 0 Oct 27 18:53 CONTRIBUTING.md
drwxr-xr-x 5 root root 4096 Oct 27 18:53 css
-rw-r--r-- 1 root root 0 Oct 27 18:53 data.php
-rw-r--r-- 1 root root 0 Oct 27 18:53 footer.php
drwxr-xr-x 8 root root 4096 Nov 2 01:55 .git
drwxr-xr-x 2 root root 4096 Oct 27 18:53 .github
-rw-r--r-- 1 root root 0 Oct 27 18:53 .gitignore
-rw-r--r-- 1 root root 0 Oct 27 18:53 header.php
drwxr-xr-x 2 root root 4096 Oct 27 18:53 img
-rw-r--r-- 1 root root 0 Oct 27 18:53 index.php
drwxr-xr-x 4 root root 4096 Oct 27 18:53 js
-rw-r--r-- 1 root root 0 Oct 27 18:53 LICENSE
-rw-r--r-- 1 root root 0 Oct 27 18:53 list.php
drwxr-xr-x 2 root root 4096 Oct 27 18:53 php
-rw-r--r-- 1 root root 0 Oct 27 18:53 .pullapprove.yml
-rw-r--r-- 1 root root 1519 Oct 27 18:53 queries.php
-rw-r--r-- 1 root root 0 Oct 27 18:53 README.md
pi@pi-hole:~ $
That's okay, I'm checking with the rest of the team to see if it's safe to just delete the whole admin directory and re-curl to pull down a fresh version of the interface. I'll let you know if I find out that its okay.
And got confirmation that you should be able to just rm -r that directory and then curl the install script again to replace it with the most recent copy.
Confirmed, all good - thank you!
@dschaper:
Do you have the weekly cronjob for checking for a version update enabled or is everything just stock from the install?
I have a daily cron job which does an -up and a -g to refresh both Pihole and Gravity.
Just in case, I tried wiping the admin directory and reinstalling, as per @ctaloi's fix (even though I wasn't seeing any git errors). No dice: still just getting window.close(); from all PHP files.
@ghalfacree
I ran into this issue on Debian 8.
The fix for me:
Add the following line to /etc/php5/cgi/php.ini:
cgi.fix_pathinfo = 1
In /etc/lighttpd/lighttpd.conf
make sure mod_fastcgi is in
server.modules = (
"mod_fastcgi",
)
and also add a basic section to the end of the file that looks like this:
fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket"
)))
Then just run systemctl restart lighttpd (or however you do it on your distro), and visit the admin interface.
Referenced from TutorialLighttpdAndPHP#Configuration.
We're getting somewhere: following @sgtbigman's instructions gives me actual content in the admin page: the page itself loads, but fails to populate with data. The coloured stat blocks for things like "ads blocked today" and "DNS queries today" sit there with -- in them, and the graph blocks below show nothing but the loading circle.
Attempting to load api.php gives me nothing but a 500 Internal Server Error as so:
curl -i http://pi.hole/admin/api.php?summary
HTTP/1.1 500 Internal Server Error
X-Pi-hole: The Pi-hole Web interface is working!
X-Frame-Options: DENY
X-Powered-By: PHP/5.5.9-1ubuntu4.20
Content-type: text/html
Content-Length: 0
Date: Fri, 04 Nov 2016 08:59:51 GMT
Server: lighttpd/1.4.33
Attempting to access the query log via the web interface gives me the following error in a dialogue box: DataTables warning: table id=all-queries - Ajax error. For more information about this error, please see http://datatables.net/tn/7. A quick look at the console shows that the server is returning the same 500 response as when I query the API. (I also get two errors about refusal to execute inline scripts due to the unsafe-eval content security policy, but that's not the root of this particular problem.)
The lighttpd error.log shows the following fatal errors:
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'RuntimeException' with message 'SplFileObject::__construct(/var/log/pihole.log): failed to open stream: Permission denied' in /var/www/html/admin/data.php:5
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: Stack trace:
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/html/admin/data.php(5): SplFileObject->__construct('/var/log/pihole...')
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: #1 /var/www/html/admin/api.php(2): include('/var/www/html/a...')
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: #2 {main}
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/html/admin/data.php on line 5
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: PHP Fatal error: Uncaught exception 'RuntimeException' with message 'SplFileObject::__construct(/var/log/pihole.log): failed to open stream: Permission denied' in /var/www/html/admin/data.php:5
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: Stack trace:
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: #0 /var/www/html/admin/data.php(5): SplFileObject->__construct('/var/log/pihole...')
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: #1 /var/www/html/admin/api.php(2): include('/var/www/html/a...')
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: #2 {main}
2016-11-04 08:59:23: (mod_fastcgi.c.2673) FastCGI-stderr: thrown in /var/www/html/admin/data.php on line 5
These errors repeat; only the first two entries are shown here. So, from what I can see, the web server user is trying to access the Pihole log file to parse, and failing through permission denied. Easy enough to test, I guess:
$ ls -larth /var/log/pihole.log
-rw-r----- 1 dnsmasq root 2.0M Nov 4 09:10 /var/log/pihole.log
$ sudo chgrp www-data /var/log/pihole.log
ls -larth /var/log/pihole.log
-rw-r----- 1 dnsmasq www-data 2.1M Nov 4 09:10 /var/log/pihole.log
$ curl -i http://pi.hole/admin/api.php?summary
HTTP/1.1 200 OK
X-Pi-hole: The Pi-hole Web interface is working!
X-Frame-Options: DENY
X-Powered-By: PHP/5.5.9-1ubuntu4.20
Content-type: application/json
Transfer-Encoding: chunked
Date: Fri, 04 Nov 2016 09:11:35 GMT
Server: lighttpd/1.4.33
{"domains_being_blocked":"102,544","dns_queries_today":"9,970","ads_blocked_today":"7","ads_percentage_today":"0.1"}
Boom: it's a permissions problem on the log file. Sure enough, reload the admin interface and the lovely pretty graphs and stats are present and correct.
However, it looks like there are still some permission problems that need tweaking: I can load the whitelist absolutely fine through the web interface, but I can't seem to _add_ anything. If I put example.com into the box and hit the button, I get a success message but the domain doesn't appear in the whitelist even when I manually refresh.
Any ideas for jumping that last little hurdle, guys?
_EDIT:_ After bothering to look at the logs again, I found the following:
2016-11-04 09:12:43: Failed CORS: http://altair.local vs http://192.168.0.8,http://pi.hole,http://localhost
2016-11-04 09:14:06: Failed CORS: http://altair.local vs http://192.168.0.8,http://pi.hole,http://localhost
Sure enough, accessing the web interface via http://pi.hole rather than http://altair.local allows it to modify the white and blacklists without difficulty. Huzzah!
The last thing to check, which I'll do now, is whether an update and log flush will reset the permissions and break anything... Nope, it doesn't: flushed the log, and it's still owned by the www-data group.
We still don't know _why_ it broke, or even _how_ it broke, but it's fixed. Thanks to everyone for your help!
Most helpful comment
@ghalfacree
I ran into this issue on Debian 8.
The fix for me:
Add the following line to
/etc/php5/cgi/php.ini:In
/etc/lighttpd/lighttpd.confmake sure
mod_fastcgiis inand also add a basic section to the end of the file that looks like this:
Then just run
systemctl restart lighttpd(or however you do it on your distro), and visit the admin interface.Referenced from TutorialLighttpdAndPHP#Configuration.