Web interface has black / empty window following Ubuntu Install

Hello
I am Libretime newbie, doing my first install. All seems to be fine except that when I log into the web page interface, the menus are in place but the central pane is black when I click on any menu…
I have restarted all the services and restarted the server, without avail.

I have checked the postgresql
systemctl status postgresql
& it is working.

When I click on the webpage upload page, I get a Http 500 error page.

I have reinstalled the app twice
sudo bash install -fiap

Any help would be most welcome to troubleshoot this?
Thank you

Have you looked at the browsers console window (press F12)? Are there any error messages showing up there?

Hello Matth

In the firefox console, I get

This page uses the non standard property “zoom”. Consider using calc() in the relevant property values, or using “transform” along with “transform-origin: 0 0”. showbuilder
Layout was forced before the page was fully loaded. If stylesheets are not yet loaded this may cause a flash of unstyled content. jquery-1.8.3.min.js:2:91186
Uncaught TypeError: a is null
jQuery 2
setCurrentTable ***p://80.211.83.***/js/airtime/library/library.js?f809c3a8f:1377
libraryInit ***p://80.211.83.***/js/airtime/library/library.js?f809c3a8f:1016
onReady ***p://80.211.83.***/js/airtime/showbuilder/main_builder.js?f809c3a8f:224
jQuery 4
jquery.dataTables.js:31:450
Uncaught TypeError: a is null
jQuery 2
setCurrentTable ***p://80.211.83.***/js/airtime/library/library.js?f809c3a8f:1377
highlightMediaTypeSelector ***p://80.211.83.***/js/airtime/showbuilder/main_builder.js?f809c3a8f:151
jQuery 2
jquery.dataTables.js:31:450
Source map error: Error: request failed with status 404
Resource URL: ***p://80.211.83.***/js/libs/angular.min.js?f809c3a8f
Source Map URL: angular.min.js.map

​CHROME GIVES ME

jquery.dataTables.js?f809c3a8f:31 Uncaught TypeError: Cannot read property 'aoData' of null
at ga (jquery.dataTables.js?f809c3a8f:31)
at init.fnClearTable (jquery.dataTables.js?f809c3a8f:99)
at Object.mod.setCurrentTable (library.js?f809c3a8f:1377)
at Object.libraryInit (library.js?f809c3a8f:1016)
at HTMLDocument.mod.onReady (main_builder.js?f809c3a8f:224)
at l (jquery-1.8.3.min.js?f809c3a8f:2)
at Object.fireWith [as resolveWith] (jquery-1.8.3.min.js?f809c3a8f:2)
at Function.ready (jquery-1.8.3.min.js?f809c3a8f:2)
at HTMLDocument.A (jquery-1.8.3.min.js?f809c3a8f:2)
jquery.dataTables.js?f809c3a8f:31 Uncaught TypeError: Cannot read property 'aoData' of null
at ga (jquery.dataTables.js?f809c3a8f:31)
at init.fnClearTable (jquery.dataTables.js?f809c3a8f:99)
at Object.mod.setCurrentTable (library.js?f809c3a8f:1377)
at main_builder.js?f809c3a8f:151
at dispatch (jquery-1.8.3.min.js?f809c3a8f:2)
at u (jquery-1.8.3.min.js?f809c3a8f:2)
DevTools failed to load SourceMap: Could not load content for ***p://80.211.83.***/js/libs/angular.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE

I’m running

Operating system Ubuntu Linux 18.04.5
Webmin version 1.973

Authentic theme version 19.73

Time on system Monday, April 19, 2021 7:35 AM Kernel and CPU Linux 4.15.0-142-generic on x86_64
Processor information Intel(R) Xeon(R) Gold 5119T CPU @ 1.90GHz, 1 cores

I’ve starred out http as this website won’t let me have more than 2 links.

I do get the same error with the missing angular.min.js.map, so I guess we can ignore that one. The same with the Zoom error.

The error with the ‘aoData’ is most likely the culprit, though to be honest I don’t have much insight to share. I’m mostly a user too.

I can reach your radio page and that one also looks just fine. My guess is that there is some sort of config missing somewhere, but couldn’t say what that is. Sorry.

Below is my config file. Does it look like yours by any chance?

One thing I don’t understand is where the Media is stored. I took the default option of

/srv/airtime/stor/

but I cannot see it in the config file.

Many thanks

sudo nano /etc/airtime/airtime.conf
[general]
api_key = P9N2N61N0IR82UAITRRU
web_server_user = www-data
base_url = 80.*******
base_port = 80
base_dir = /
force_ssl =
cache_ahead_hours = 1
airtime_dir = /usr/share/airtime
station_id =
auth = local

[database]
host = localhost
dbname = airtime
dbuser = airtime
dbpass = ******

[rabbitmq]
host = 127.0.0.1
port = 5672
user = airtime
password = *****
vhost = /airtime

[current_backend]
storage_backend=file

[monit]
user = guest
password = *****

[demo]
demo = 0

[pypo]
api_client = ‘airtime’
cache_dir = ‘/var/tmp/airtime/pypo/cache/’
file_dir = ‘/var/tmp/airtime/pypo/files/’
tmp_dir = ‘/var/tmp/airtime/pypo/tmp/’
cache_base_dir = ‘/var/tmp/airtime/pypo’
log_base_dir = ‘/var/log/airtime’
pypo_log_dir = ‘/var/log/airtime/pypo’
liquidsoap_log_dir = ‘/var/log/airtime/pypo-liquidsoap’
ls_host = ‘127.0.0.1’
ls_port = ‘1234’
poll_interval = 3600
push_interval = 1
cue_style = ‘pre’
record_bitrate = 256
record_samplerate = 44100
record_channels = 2
record_sample_size = 16
record_file_type = ‘ogg’
base_recorded_files = ‘/var/tmp/airtime/show-recorder/’

[facebook]
facebook_app_id = 0
facebook_app_url = *ttp://example.org
facebook_app_api_key = 0

[ldap]
hostname = ldap.example.org
binddn = ‘uid=libretime,cn=sysaccounts,cn=etc,dc=int,dc=example,dc=org’
password = ********
account_domain = INT.EXAMPLE.ORG
basedn = ‘cn=users,cn=accounts,dc=int,dc=example,dc=org’
filter_field = uid
groupmap_guest = ‘cn=guest,cn=groups,cn=accounts,dc=int,dc=example,dc=org’
groupmap_host = ‘cn=host,cn=groups,cn=accounts,dc=int,dc=example,dc=org’
groupmap_program_manager = 'cn=program_manager,cn=groups,cn=accounts,dc=int,dc=ex$
groupmap_admin = ‘cn=admins,cn=groups,cn=accounts,dc=int,dc=example,dc=org’
groupmap_superadmin = 'cn=superadmin,cn=groups,cn=accounts,dc=int,dc=example,dc=o$

Here’s mine

[general]
api_key = XXXX
web_server_user = www-data
base_url = libretime.domain.com
base_port = 443
base_dir = /
cache_ahead_hours = 1
airtime_dir =
station_id =
auth = local

[database]
host = localhost
dbname = airtime
dbuser = airtime
dbpass = password

[rabbitmq]
host = 127.0.0.1
port = 5672
user = airtime
password = password
vhost = /airtime

[current_backend]
storage_backend=file

[monit]
user =
password =

[pypo]
api_client = 'airtime'
cache_dir = '/var/tmp/airtime/pypo/cache/'
file_dir = '/var/tmp/airtime/pypo/files/'
tmp_dir = '/var/tmp/airtime/pypo/tmp/'
cache_base_dir = '/var/tmp/airtime/pypo'
log_base_dir = '/var/log/airtime'
pypo_log_dir = '/var/log/airtime/pypo'
liquidsoap_log_dir = '/var/log/airtime/pypo-liquidsoap'
ls_host = '127.0.0.1'
ls_port = '1234'
poll_interval = 3600
push_interval = 1
cue_style = 'pre'
record_bitrate = 256
record_samplerate = 44100
record_channels = 2
record_sample_size = 16
record_file_type = 'ogg'
base_recorded_files = '/var/tmp/airtime/show-recorder/'

[soundcloud]
connection_retries = 3
time_between_retries = 60
soundcloud_client_id = 0
soundcloud_client_secret = 0
soundcloud_redirect_uri = http://libretime.example.org/soundcloud_callback.php
[facebook]
facebook_app_id = 0
facebook_app_url = http://example.org
facebook_app_api_key = 0

[ldap]
hostname = ldap.example.org
binddn = 'uid=libretime,cn=sysaccounts,cn=etc,dc=int,dc=example,dc=org'
password = password
account_domain = INT.EXAMPLE.ORG
basedn = 'cn=users,cn=accounts,dc=int,dc=example,dc=org'
filter_field = uid
groupmap_guest = 'cn=guest,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_host = 'cn=host,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_program_manager = 'cn=program_manager,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_admin = 'cn=admins,cn=groups,cn=accounts,dc=int,dc=example,dc=org'
groupmap_superadmin = 'cn=superadmin,cn=groups,cn=accounts,dc=int,dc=example,dc=org'

Do you have any items in the log files that stand out? Have a look in this one

sudo nano /var/log/apache2/other_vhosts_access.log

It looks like we are about the same thing.

I took a look at
other_vhosts_access.log
but the log is so thick that I have no idea what to look for. I cannot see anything that has error in it.

What do you get in /var/log/airtime/zendphp.log ?

2021-04-20T07:44:14+02:00 ERR (3): 80.211.83.191 [Logging.php:166 - loggingShutdownCallback()] - Uncaught Error: Call to a member function getDirectory() on null in /usr/share/airtime/php/airtime_mvc/applicatio$
Stack trace:
#0 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(222): Application_Model_MusicDir->getDirectory()
#1 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(236): Application_Model_Systemstatus::GetDiskInfo()
#2 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(266): Application_Model_Systemstatus::isDiskOverQuota()
#3 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(60): PodcastTask->shouldBeRun()
#4 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(104): TaskManager->runTask(‘PodcastTask’)
#5 /usr/share/airtime/php/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php(70): TaskManager->runTasks()
#6 /usr/share/airtime/php/vendor/zf1s/zend-controller/library/Zend/Controller/Plugin/Broker.php(260): PageLayoutInitPlugin->routeShutdown(Object(Zend_C at /usr/share/airtime/php/airtime_mvc/application/models/M$
array (
‘type’ => 1,
‘message’ => ‘Uncaught Error: Call to a member function getDirectory() on null in /usr/share/airtime/php/airtime_mvc/application/models/MusicDir.php:34
Stack trace:
#0 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(222): Application_Model_MusicDir->getDirectory()
#1 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(236): Application_Model_Systemstatus::GetDiskInfo()
#2 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(266): Application_Model_Systemstatus::isDiskOverQuota()
#3 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(60): PodcastTask->shouldBeRun()
#4 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(104): TaskManager->runTask(‘PodcastTask’)
#5 /usr/share/airtime/php/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php(70): TaskManager->runTasks()
#6 /usr/share/airtime/php/vendor/zf1s/zend-controller/library/Zend/Controller/Plugin/Broker.php(260): PageLayoutInitPlugin->routeShutdown(Object(Zend_C’,
‘file’ => ‘/usr/share/airtime/php/airtime_mvc/application/models/MusicDir.php’,
‘line’ => 34,
)
2021-04-20T07:45:01+02:00 ERR (3): 80.211.83.191 [Logging.php:166 - loggingShutdownCallback()] - Uncaught Error: Call to a member function getDirectory() on null in /usr/share/airtime/php/airtime_mvc/applicatio$
Stack trace:
#0 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(222): Application_Model_MusicDir->getDirectory()
#1 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(236): Application_Model_Systemstatus::GetDiskInfo()
#2 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(266): Application_Model_Systemstatus::isDiskOverQuota()
#3 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(60): PodcastTask->shouldBeRun()
#4 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(104): TaskManager->runTask(‘PodcastTask’)
#5 /usr/share/airtime/php/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php(70): TaskManager->runTasks()
#6 /usr/share/airtime/php/vendor/zf1s/zend-controller/library/Zend/Controller/Plugin/Broker.php(260): PageLayoutInitPlugin->routeShutdown(Object(Zend_C at /usr/share/airtime/php/airtime_mvc/application/models/M$
array (
‘type’ => 1,
‘message’ => ‘Uncaught Error: Call to a member function getDirectory() on null in /usr/share/airtime/php/airtime_mvc/application/models/MusicDir.php:34
Stack trace:
#0 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(222): Application_Model_MusicDir->getDirectory()
#1 /usr/share/airtime/php/airtime_mvc/application/models/Systemstatus.php(236): Application_Model_Systemstatus::GetDiskInfo()
#2 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(266): Application_Model_Systemstatus::isDiskOverQuota()
#3 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(60): PodcastTask->shouldBeRun()
#4 /usr/share/airtime/php/airtime_mvc/application/common/TaskManager.php(104): TaskManager->runTask(‘PodcastTask’)
#5 /usr/share/airtime/php/airtime_mvc/application/controllers/plugins/PageLayoutInitPlugin.php(70): TaskManager->runTasks()
#6 /usr/share/airtime/php/vendor/zf1s/zend-controller/library/Zend/Controller/Plugin/Broker.php(260): PageLayoutInitPlugin->routeShutdown(Object(Zend_C’,
‘file’ => ‘/usr/share/airtime/php/airtime_mvc/application/models/MusicDir.php’,
‘line’ => 34,
)
20

An extremely long flow of errors that seem to loop as above.
I don’t know anything about php so can you help me decode this?
Many thanks

I think there is a problem with the configured music dirs, either they are not correctly configured or not created. Can you get the output from the airtime database? SELECT * FROM public.cc_music_dirs LIMIT 1000;

Hello
To be honest, I’m in out of my depth. I presume that you are asking for a phpmyadmin export. For the moment, phpmyadmin won’t install, so this not encouraging.

Webmin returns the info below on the for cc_music_dirs but I cannot see what use it is.

if you can access the console login as root and do the following:

su postgres
psql

now In the postgres console:

\c airtime
SELECT * FROM public.cc_music_dirs;

it will throw something like this:

 id |        directory         |  type   | exists | watched 
----+--------------------------+---------+--------+---------
  1 | /srv/airtime/stor/       | stor    | t      | t
  2 | /srv/airtime/stor/music/ | watched | t      | t

It doesn’t look very promising …

root@radioldb:~# su postgres
postgres@radioldb:/root$ psql
could not change directory to “/root”: Permission denied
psql (10.16 (Ubuntu 10.16-0ubuntu0.18.04.1))
Type “help” for help.

postgres=#
postgres=#
postgres=# \c airtime
You are now connected to database “airtime” as user “postgres”.
airtime=# SELECT * FROM public.cc_music_dirs;
id | directory | type | exists | watched
----±----------±-----±-------±--------
(0 rows)

airtime=#

That’s it, the system is not properly configured. Remove /etc/airtime/airtime.conf (or make a backup) and go to your libretime website to do the web based configuration. Take your time filling every field and make sure that everything is filled correctly. If this does not work, I’d recommend to reinstall it:

git clone https://github.com/LibreTime/libretime.git
cd libretime
sudo ./install -fiap

Sadly, neither redoing the config file nor reinstalling changed anything.
The reinstall did not erase the database and I think that is where my problem lies.

So I have wiped the instance completely and started again from scratch.

Thank you so much for all your help

I don’t know if you’ve already started from scratch but you could try manually adding the row in postgres … for that:

su postgres
psql

now In the postgres console:

\c airtime
INSERT INTO public.cc_music_dirs (directory, type, exists, watched) VALUES ('/srv/airtime/stor/', 'stor', 't','t')";

and see what happens. Make sure /srv/airtime/stor folder exists in your system. If not create it and set the correct permissions for user www-data (or whoever is running the airtime web instance)

Thank you for describing how to revive the database.
I must confess I started again from scratch and this time it works, but now we all have an idea of how to trouble shoot the database;
Many thanks