[ixpmanager] Assistance with Birdseye and HTTP 500 Error
Michel Blais
michel.blais.qc at gmail.com
Sat Apr 26 20:51:09 IST 2025
Finally, I can't figure out why I still get the 500 error. Help would be
appreciated. Here is the debug info.
I can't query the api. I get an error that it's not found.
curl -v ipv4.rs1.dm1a.2675pt.qix.ca/api/status
* Host ipv4.rs1.dm1a.2675pt.qix.ca:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.240.31
* Trying 192.168.240.31:80...
* Connected to ipv4.rs1.dm1a.2675pt.qix.ca (192.168.240.31) port 80
> GET /api/status HTTP/1.1
> Host: ipv4.rs1.dm1a.2675pt.qix.ca
> User-Agent: curl/8.5.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/html
< Content-Length: 341
< Date: Sat, 26 Apr 2025 15:25:41 GMT
< Server: lighttpd/1.4.69
<
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>404 Not Found</title>
</head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
* Connection #0 to host ipv4.rs1.dm1a.2675pt.qix.ca left intact
But I can query test.php
curl ipv4.rs1.dm1a.2675pt.qix.ca/test.php
=====================
WORKING
=====================
index.php return a error 500
curl ipv4.rs1.dm1a.2675pt.qix.ca/index.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="robots" content="noindex,nofollow,noarchive" />
<title>An Error Occurred: Internal Server Error</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22
http://www.w3.org/2000/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22
font-size=%2296%22>❌</text></svg>" />
<style>body { background-color: #fff; color: #222; font: 16px/1.5
-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
Arial, sans-serif; margin: 0; }
.container { margin: 30px; max-width: 600px; }
h1 { color: #dc3545; font-size: 24px; }
h2 { font-size: 18px; }</style>
</head>
<body>
<div class="container">
<h1>Oops! An Error Occurred</h1>
<h2>The server returned a "500 Internal Server Error".</h2>
<p>
Something is broken. Please let us know what you were doing when
this error occurred.
We will fix it as soon as possible. Sorry for any inconvenience
caused.
</p>
</div>
</body>
</html>
Here is the birdseye version
cat /opt/birdseye/version.php
<?php
$_ENV['BIRDSEYE_API_VERSION'] = '2.1.0';
And the PHP version
php --version
PHP 8.3.20 (cli) (built: Apr 14 2025 18:44:12) (NTS)
The wrapper work fine for both IPv4 and IPv6 daemon
sudo -u www-data /usr/bin/sudo /opt/birdseye/bin/birdc -2 -s
/var/run/bird/bird-rs1-dm1a-2675pt-ipv4.ctl "show status"
BIRD 2.17 ready.
Access restricted
BIRD 2.17
Router ID is 149.112.119.253
Hostname is rs1.dm1a.2675pt
Current server time is 2025-04-26 11:36:08
Last reboot on 2025-04-14 19:08:00
Last reconfiguration on 2025-04-26 11:30:01
Daemon is up and running
sudo -u www-data /usr/bin/sudo /opt/birdseye/bin/birdc -2 -s
/var/run/bird/bird-rs1-dm1a-2675pt-ipv6.ctl "show status"
BIRD 2.17 ready.
Access restricted
BIRD 2.17
Router ID is 149.112.119.253
Hostname is rs1.dm1a.2675pt
Current server time is 2025-04-26 11:36:12
Last reboot on 2025-04-14 19:08:00
Last reconfiguration on 2025-04-26 11:30:01
Daemon is up and running
Her is the environnements config
cat /srv/birdseye/*env | egrep -v '(^#)|(^\s*$)'
BIRDC="/usr/bin/sudo /opt/birdseye/bin/birdc -2 -s
/var/run/bird/bird-rs1-dm1a-2675pt-ipv4.ctl"
CACHE_DRIVER=file
LOOKING_GLASS_ENABLED=true
BIRDC="/usr/bin/sudo /opt/birdseye/bin/birdc -2 -s
/var/run/bird/bird-rs1-dm1a-2675pt-ipv6.ctl"
CACHE_DRIVER=file
LOOKING_GLASS_ENABLED=true
The RS config from the DB
mysql> SELECT * FROM routers WHERE id = 3\G
*************************** 1. row ***************************
id: 3
pair_id: NULL
vlan_id: 1
handle: rs1-dm1a-2675pt-ipv6
protocol: 6
type: 1
name: RS1 - 2675pt - PVE NET1 - IPv6
shortname: RS1 - 2675pt - IPv6
router_id: 149.112.119.253
peering_ip: 2602:f777::253
asn: 15037
software: 6
mgmt_host: rs1.dm1a.2675pt.qix.ca
api: https://ipv6.rs1.dm1a.2675pt.qix.ca/api
api_type: 1
lg_access: 0
quarantine: 0
bgp_lc: 1
template: api/v4/router/server/bird2/standard
skip_md5: 0
last_update_started: 2025-04-26 12:45:01
last_updated: 2025-04-26 12:45:01
pause_updates: 0
rpki: 0
software_version: 2.17
operating_system: Debian
operating_system_version: 12
rfc1997_passthru: 1
created_at: 2025-04-13 15:02:33
updated_at: 2025-04-26 12:45:01
1 row in set (0.00 sec)
mysql> SELECT * FROM routers WHERE id = 1\G
*************************** 1. row ***************************
id: 1
pair_id: NULL
vlan_id: 1
handle: rs1-dm1a-2675pt-ipv4
protocol: 4
type: 1
name: RS1 - 2675pt - PVE NET1 - IPv4
shortname: RS1 - 2675pt - IPv4
router_id: 149.112.119.253
peering_ip: 149.112.119.253
asn: 15037
software: 6
mgmt_host: rs1.dm1a.2675pt.qix.ca
api: https://ipv4.rs1.dm1a.2675pt.qix.ca/api
api_type: 1
lg_access: 0
quarantine: 0
bgp_lc: 1
template: api/v4/router/server/bird2/standard
skip_md5: 0
last_update_started: 2025-04-26 12:45:01
last_updated: 2025-04-26 12:45:01
pause_updates: 0
rpki: 0
software_version: 2.17
operating_system: Debian
operating_system_version: 12
rfc1997_passthru: 1
created_at: 2025-04-10 03:27:54
updated_at: 2025-04-26 12:45:01
1 row in set (0.00 sec)
No log entries on storage when the error 500 happen.
root at rs1:/opt/birdseye# ls -la storage/logs/
total 12
drwxr-xr-x 2 www-data www-data 4096 Apr 20 08:09 .
drwxr-xr-x 5 www-data www-data 4096 Apr 20 08:09 ..
-rw-r--r-- 1 www-data www-data 1778 Apr 20 08:10 lumen-2025-04-20.log
Lighttpd log entries. DEPRECATED entries comes from using the inex config
but I don't have those error with the default debian config. I have the
same 500 error with both config.
2025-04-20 09:54:56: (server.c.2078) server stopped by UID = 0 PID = 1
2025-04-20 09:54:57: (server.c.1704) server started (lighttpd/1.4.69)
2025-04-24 19:24:33: (server.c.2078) server stopped by UID = 0 PID = 1
2025-04-24 19:24:33: (server.c.1704) server started (lighttpd/1.4.69)
2025-04-24 21:20:15: (server.c.2078) server stopped by UID = 0 PID = 1
2025-04-24 21:20:16: (server.c.1704) server started (lighttpd/1.4.69)
2025-04-26 09:22:31: (server.c.2078) server stopped by UID = 0 PID = 1
2025-04-26 09:22:31: (server.c.1704) server started (lighttpd/1.4.69)
2025-04-26 14:55:32: (server.c.2078) server stopped by UID = 0 PID = 1
2025-04-26 14:55:32: (server.c.1704) server started (lighttpd/1.4.69)
2025-04-26 14:55:32: (mod_deflate.c.736) DEPRECATED: compress.filetype
replaced with deflate.mimetypes
2025-04-26 14:55:32: (mod_deflate.c.799) DEPRECATED: compress.cache-dir
replaced with deflate.cache-dir
2025-04-26 14:56:38: (server.c.2078) server stopped by UID = 0 PID = 1
2025-04-26 14:56:39: (server.c.1704) server started (lighttpd/1.4.69)
Same via "journalctl -t lighttpd"
Apr 19 10:52:51 rs1.dm1a.2675pt lighttpd[60354]: include
"/etc/lighttpd/conf-enabled/*.conf"
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006655]: WARNING:
include-conf-enabled.pl is deprecated and slated for removal.
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006655]: Replace in
lighttpd.conf with:
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006655]: include
"/etc/lighttpd/conf-enabled/*.conf"
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006650]: 2025-04-26 14:55:32:
(mod_deflate.c.736) DEPRECATED: compress.filetype replaced with deflate.mim>
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006650]: 2025-04-26 14:55:32:
(mod_deflate.c.799) DEPRECATED: compress.cache-dir replaced with deflate.ca>
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006661]: WARNING:
include-conf-enabled.pl is deprecated and slated for removal.
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006661]: Replace in
lighttpd.conf with:
Apr 26 14:55:32 rs1.dm1a.2675pt lighttpd[1006661]: include
"/etc/lighttpd/conf-enabled/*.conf"
The lighttpd config file
server.modules = (
"mod_indexfile",
"mod_access",
"mod_alias",
"mod_redirect",
)
server.document-root = "/opt/birdseye/public"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
server.bind ="192.168.240.31"
# features
#
https://redmine.lighttpd.net/projects/lighttpd/wiki/Server_feature-flagsDetails
server.feature-flags += ("server.h2proto" => "enable")
server.feature-flags += ("server.h2c" => "enable")
server.feature-flags += ("server.graceful-shutdown-timeout" => 5)
#server.feature-flags += ("server.graceful-restart-bg" => "enable")
# strict parsing and normalization of URL for consistency and security
#
https://redmine.lighttpd.net/projects/lighttpd/wiki/Server_http-parseoptsDetails
# (might need to explicitly set "url-path-2f-decode" = "disable"
# if a specific application is encoding URLs inside url-path)
server.http-parseopts = (
"header-strict" => "enable",# default
"host-strict" => "enable",# default
"host-normalize" => "enable",# default
"url-normalize-unreserved"=> "enable",# recommended highly
"url-normalize-required" => "enable",# recommended
"url-ctrls-reject" => "enable",# recommended
"url-path-2f-decode" => "enable",# recommended highly (unless breaks
app)
#"url-path-2f-reject" => "enable",
"url-path-dotseg-remove" => "enable",# recommended highly (unless breaks
app)
#"url-path-dotseg-reject" => "enable",
#"url-query-20-plus" => "enable",# consistency in query string
)
index-file.names = ( "index.php", "index.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.conf.pl"
include "/etc/lighttpd/conf-enabled/*.conf"
#server.compat-module-load = "disable"
server.modules += (
"mod_dirlisting",
"mod_staticfile",
)
I also tried this one based on the inex config. Both with same 500 error.
# Sample Bird's Eye Lighttpd config - just added a small amount to
# the standard Lighttpd configuration.
server.modules = (
"mod_access",
"mod_alias",
#"mod_compress",
"mod_deflate",
"mod_redirect",
"mod_rewrite",
)
server.document-root = "/opt/birdseye/public"
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
server.bind = "192.168.240.31"
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" )
# default listening port for IPv6 falls back to the IPv4 port
## Use ipv6 if available
#include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.conf.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
url.redirect = ()
url.rewrite-once = (
"^/(css|img|js|fonts)/.*\.(jpg|jpeg|gif|png|swf|avi|mpg|mpeg|mp3|flv|ico|css|js|woff|ttf)$"
=> "$0",
"^/(favicon\.ico|robots\.txt|sitemap\.xml)$" => "$0",
"^/test\.php$" => "$0",
"^/[^\?]*(\?.*)?$" => "/index.php/$1"
)
And I added a symbolic link from /srv/birdseye pointing to /opt/birdseye
just in case the path used by inex could still be somewhere in the config
files.
Thanks
Le sam. 26 avr. 2025 à 08:26, Michel Blais <michel.blais.qc at gmail.com> a
écrit :
> Thanks Barry,
>
> I was confused between the binary and the wrapper since they both have the
> same name and are both in a directory called bin.
>
> Thanks for pointing that out. I still get an error 500 but I will try to
> figure it out with the debugging documentation and if I can't figure it
> out, write back with all the needed information indicated in the doc.
>
> Thanks again.
>
> Le jeu. 24 avr. 2025 à 07:01, Barry O'Donovan (INEX) <
> barry.odonovan at inex.ie> a écrit :
>
>>
>> Hi Michel,
>>
>> >I'm new to IXP manager and would need help with birdseye.
>> Welcome!
>>
>> Did you see the debugging section at:
>>
>> https://docs.ixpmanager.org/latest/features/looking-glass/#debugging
>>
>> And can you run through this providing the output along the way?
>>
>> Other notes:
>>
>>
>> >Initially tried version 2.0 with PHP 8.2 from the Debian repository
>>
>> This should probably have worked? But:
>>
>> >Then installed PHP 8.3 from the sury.org repository and tried Birdseye
>> >2.1
>> >Also tried PHP 8.4 briefly but encountered many deprecated warnings in
>> >the Lighttpd logs, so I reverted to 8.3
>>
>> 2.1 is a better choice; depreciation warnings can be ignored (and turned
>> off).
>>
>> >My .env file for the route server looks like this:
>> >cat birdseye-rs1-cabId-dcName-ipv4.env
>> >IRDC="/usr/bin/sudo /usr/local/sbin/birdc -s
>> >/var/run/bird/bird-rs1-cabId-dcName-ipv4.ctl"
>> Why are you calling birdc directly? You should be using the wrapper
>> script (or a modified version of it if necessary) as supplied in the
>> Birdseye bin/ directory. This ensures birdc is run in restricted
>> (read-only) mode.
>>
>> (Preumably you cut the ‘B’ from the start of the above line when pasting
>> also).
>>
>>
>> >The www-data user is able to successfully run Bird commands via the
>> >CLI:
>> >su -l www-data -s /bin/bash
>> >/usr/bin/sudo /usr/local/sbin/birdc -s
>> >/var/run/bird/bird-rs1-cabId-dcName-ipv4.ctl "show status”
>>
>> You need to do this with the wrapper script.
>>
>> >but I had to remove the "-2" because this option doesn't seem to be
>> >supported anymore in bird 2.17.
>>
>> -2 is not a bircd parameter but a wrapper script parameter:
>>
>> # parameter $1: either -4 or -6 to chose between birdc and birdc6, or -2
>> for Bird v2
>>
>> - Barry
>>
>
>
> --
> Cordialement, / With regards,
>
> Michel Blais
>
>
--
Cordialement, / With regards,
Michel Blais
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.inex.ie/pipermail/ixpmanager/attachments/20250426/849d3614/attachment-0001.htm>
More information about the ixpmanager
mailing list