Giter VIP home page Giter VIP logo

libretime-docker's Introduction

libretime-docker (based on libretime 3.0.0-alpha9)Docker Pulls Docker Cloud Build Status

Welcome in the documentation to install LibreTime quickly within a Docker container.

This project is only here to simplify the installation of LibreTime in a single Docker container.

Installation

First, run this command to download the image:

docker pull odclive/libretime-docker:latest

Then choose Method 1 or Method 2. Read them carefully.

Method 1: Quick demo installation WITHOUT data persistence

This is the simplest way to try LibreTime standalone in a container but NOT persisting any data.

This is useful only for testing purposes. If interested just run this command:

docker run -p 80:80 -p 8000:8000 -p 8001:8001 --name=libretime odclive/libretime-docker:latest

Now:

  • See the "First run" section
  • if you like this demo, kill everything and see the "Method 2" section.

Method 2: Normal installation WITH data persistence

This is the LibreTime installation with data persistence thanks to Docker compose.

To do that is strongly recommended you use a docker-compose.yml file, together with an .env file and save them into a directory.

Both files have an example in this repository so you can copy them somewhere.

If you need an example of these files, see here:

https://github.com/kessibi/libretime-docker/wiki/Sample-installation

After you created a directory with both files and you are inside that directory, run:

docker-compose up

Now the LibreTime webserver is running. See the next section.

First LibreTime web configuration

On your first run, visit this address (or your server IP):

http://localhost

That URL should now serve the LibreTime welcome page.

Follow the instructions on your browser and answer questions. Having said it should work also pressing Next and leaving defaults.

At some point (it should be the point number 5) LibreTime will tell you to run lot of sudo service commands. Instead, just run this in another terminal:

docker exec libretime sh /libre_start.sh

Good! Now you are ready to use LibreTime at its full power! Read the next section.

Start and stop with Docker compose

If you have done the installation using Docker compose, you can just stop with:

docker-compose down

And start with:

docker-compose up

To simply pop you back to your installation.

Note: it may needed 15-30 seconds to restart. Enjoy your Libre radio!

HTTPS

It is possible to serve this image via HTTPS using different tools, one option is to use traefik and docker-compose as described in the wiki page.

Another option is to have a frontend HTTP proxy. This is very simple with Apache. So you have Apache or nginx listening on port 443, forwarding traffic to LibreTime listening to a non-standard port.

To have free SSL certificates read about Let's Encrypt.

Disclaimer

This installation is not secure, the logins and passwords provided are the default ones. It is recommended to change them (icecast, libretime, postgres,..).

This work is still in progress.

Thanks

The systemctl.py script (and the related operations in the Dockerfile) was not at all developed by me but rather found in the repository https://github.com/gdraheim/docker-systemctl-images

systemctl is needed for the installation script (icecast2, apache2, postgres, ...).

About the image

This Docker image is based on the ubuntu:18.04 base image, runs with postgres 10, php 7 and python 2.7 (libretime has not fully transitionned to python 3 yet).

The version of libretime used is release 3.0.0-alpha9

Troubleshooting

Feel free to create an issue with your detailed problem, make sure to provide enough information to understand and recreate the problem.

Updating stream configurations

Feel free to modify stream configs, just know you will have to run this command:

docker exec libretime sh /libre_start.sh

Afterwards to restart all services. Otherwise, liquidsoap just doesn't start up again. If you find a clever way to tackle this issue, don't hesitate to bring it forward.

Upgrade of the image

If you downloaded the image early on (before version 3.0.0-alpha9, you might face these problems:

  • When updating the image, it is possible you had an image based on ubuntu 16 (cat /etc/os-release in the Docker container),if it is the case you'll have to make sure your postgresql cluster gets updated from 9.5 to 10 (assuming you use volumes to store data).
  • Again, if your image is based on ubuntu 16, it is most probable that you can't upload songs. To fix the issue, please run this command inside the container: chown -R www-data:www-data /srv/airtime/stor. Thanks to @miasmaejuices for pointing that out.

libretime-docker's People

Contributors

kessibi avatar valerio-bozzolan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

libretime-docker's Issues

[Question] Update workflow?

Small question. How would you describe your update workflow?

E.g. I think backup (how?), shutdown, update git, startup, update LibreTime (how?), check, eventually rollback (how?).

I'm not 100% familiar with this Docker image and would like to help others to use it. Thank you :)

(If I figure it out I'll put it in the README.)

anomaly during "stream panel" modification

I installed libretime 3.0.0.0-alpha9 through "run docker pull odclive / libretime-docker: latest" and it seems to me it works fine.
However, I have found the following inconvenience: if I go to modify some parameters in the "stream settings" section, it is always necessary to manually restart the "libretime" container because the "liquidsoap" service does not restart automatically.
is it possible to solve the problem? thank you
errore1

Airtime API version number?

issue in log

airtime-playout.service: 2020-01-16 08:27:45,867 [api_client] [INFO ] Unable to get Airtime API version number.?

how can i cange port?

hello,

how can i change port 80 to 8080 in docker-compose or env on startup docker setup?
default page 8080 not 80?

thx

Permissions

Hey mate.

After install, the ownership of /srv/airtime/stor/ needs to be changed to www-data:www-data

If it stays as root:root, it will fail to import any music.

Tested it, and it works fine with the updated ownership.

Hope that helps :)

libretime liquidsoap can't be installed

I run into this everytime i try to install libretime. Please what could be the problem.
Error response from daemon: error while creating mount source path '/srv/docker/libretime/liquidsoap': mkdir /srv/docker: read-only file system

Thank

Non English/Latin characters

This may be an up stream support issue.

Libretime seems to fail mp3 importing if the filename or ID3 tag contain non English/Latin characters.

Examples:

  • The "é" in Beyoncé feat. Jay-Z - Changing it to Beyonce feat. Jay-Z solves the issue
  • The "ü" in Jason Derülo - Changing it to Jason Derulo solves the issue

If you have a small library, this isn't much of an issue. However, with a larger library this becomes quite problematic. If you have 1,000's of songs you're trying to import, you wont know it's not been imported until you review the recent uploads list. Then you have to search out each individual file, and fix each one manually.

Issue start page only with mixed content

Issue start page only with mixed content

this only affects the start page, there is no error in the admin panel!

how can i change the absolute path on the start page to a relative one? iframes sources have an absolute path.
startpage

[amd64] ERROR missing /usr/bin/airtime_analyzer

HI, i'm trying to setup a libretime docker container on a VPS, but following the instructions at the moment to run libre_start.sh, it show me this error.

airtime_analyzer don't exist in the path.

root@r1:/opt/libretime-docker# docker-compose up
Creating volume "libretime-docker_libretime_postgres" with default driver
Creating libretime ... done
Attaching to libretime
libretime    | Restarting postgres DB
libretime    | Removed stale pid file.
libretime    | Setting up liquidsoap dir
libretime    | Restarting libretime services
libretime    | ERROR:systemctl: Exec command does not exist: (ExecStart) /usr/bin/airtime_analyzer
libretime    | ERROR:systemctl: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
libretime    | ERROR:systemctl: Found 1 problems in /etc/systemd/system/airtime_analyzer.service
libretime    | ERROR:systemctl: Now 1 executable paths were not found in the current environment.
libretime    | ERROR:systemctl: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
libretime    | Starting libretime container...
libretime    | ERROR:systemctl: Exec command does not exist: (ExecStart) /usr/bin/airtime_analyzer
libretime    | ERROR:systemctl: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
libretime    | ERROR:systemctl: Found 1 problems in /etc/systemd/system/airtime_analyzer.service
libretime    | ERROR:systemctl: Now 1 executable paths were not found in the current environment.
libretime    | ERROR:systemctl: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

root@r1:/opt/libretime-docker# docker exec libretime sh /libre_start.sh
ERROR:systemctl: Exec command does not exist: (ExecStart) /usr/bin/airtime_analyzer
ERROR:systemctl: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ERROR:systemctl: Found 1 problems in /etc/systemd/system/airtime_analyzer.service
ERROR:systemctl: Now 1 executable paths were not found in the current environment.
ERROR:systemctl: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
root@r1:/opt/libretime-docker# 

here the logs


airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:11:54,811 [telnetliquidsoap] [INFO ]  streams.master_dj_stop,
airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:11:54,812 [telnetliquidsoap] [INFO ]  vars.stream_metadata_type ,
airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:11:54,812 [telnetliquidsoap] [INFO ]  vars.station_name ,
airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:11:54,812 [telnetliquidsoap] [INFO ]  vars.default_dj_fade 0.000,
airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:11:55,058 [recorder] [INFO ]  Parsing recording show schedules...,
airtime-playout.service: 2020-09-11 06:11:55,058 [recorder] [INFO ]  Bootstrap recorder schedule received: {u'is_recording': False, u'server_timezone': u'UTC', u'shows': []},
airtime-playout.service: 2020-09-11 06:11:55,059 [recorder] [INFO ]  Bootstrap complete: got initial copy of the schedule,
airtime-playout.service: 2020-09-11 06:11:55,075 [api_client] [ERROR]  HTTP Error 307: Temporary Redirect,
airtime-playout.service: 2020-09-11 06:11:55,229 [pypofetch] [INFO ]  Bootstrap schedule received: {u'media': {}},
airtime-playout.service: 2020-09-11 06:11:55,230 [pypofetch] [INFO ]  Loop #1,
airtime-playout.service: 2020-09-11 06:11:55,236 [pypopush] [INFO ]  heartbeat,
airtime-playout.service: 2020-09-11 06:11:55,237 [pypoliqqueue] [INFO ]  New schedule received: {},
airtime-playout.service: 2020-09-11 06:11:55,237 [pypoliqqueue] [INFO ]  waiting indefinitely for schedule,
airtime-playout.service: 2020-09-11 06:11:59,611 [pypomessagehandler] [INFO ]  Initializing RabbitMQ stuff,
airtime-playout.service: 2020-09-11 06:11:59,643 [pypomessagehandler] [ERROR]  [Errno 111] Connection refused,
airtime-playout.service: 2020-09-11 06:11:59,643 [pypomessagehandler] [ERROR]  Exception: __exit__,
airtime-playout.service: 2020-09-11 06:11:59,648 [pypomessagehandler] [ERROR]  traceback: Traceback (most recent call last):,
airtime-playout.service:   File "/usr/local/lib/python2.7/dist-packages/airtime_playout-1.0-py2.7.egg/pypo/pypomessagehandler.py", line 92, in main,
airtime-playout.service:     with self.init_rabbit_mq() as queue:,
airtime-playout.service: AttributeError: __exit__,
airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:11:59,648 [pypomessagehandler] [ERROR]  Error connecting to RabbitMQ Server. Trying again in few seconds,
airtime-playout.service: 2020-09-11 06:12:04,652 [pypomessagehandler] [INFO ]  Initializing RabbitMQ stuff,
airtime-playout.service: 2020-09-11 06:12:04,668 [pypomessagehandler] [ERROR]  [Errno 111] Connection refused,
airtime-playout.service: 2020-09-11 06:12:04,668 [pypomessagehandler] [ERROR]  Exception: __exit__,
airtime-playout.service: 2020-09-11 06:12:04,668 [pypomessagehandler] [ERROR]  traceback: Traceback (most recent call last):,
airtime-playout.service:   File "/usr/local/lib/python2.7/dist-packages/airtime_playout-1.0-py2.7.egg/pypo/pypomessagehandler.py", line 92, in main,
airtime-playout.service:     with self.init_rabbit_mq() as queue:,
airtime-playout.service: AttributeError: __exit__,
airtime-playout.service: ,
airtime-playout.service: 2020-09-11 06:12:04,668 [pypomessagehandler] [ERROR]  Error connecting to RabbitMQ Server. Trying again in few seconds,
airtime-playout.service: 2020-09-11 06:12:09,674 [pypomessagehandler] [INFO ]  Initializing RabbitMQ stuff,
airtime-playout.service: ,
airtime_analyzer.service: ERROR:systemctl:('/usr/bin/airtime_analyzer'): [Errno 2] No such file or directory,
airtime_analyzer.service: ERROR:systemctl:('/usr/bin/airtime_analyzer'): [Errno 2] No such file or directory,
airtime_analyzer.service: ,
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message,
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message,
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message,
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message,
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.3. Set the 'ServerName' directive globally to suppress this message,
apache2.service: httpd (pid 63) already running,
apache2.service: ,
rabbitmq-server.service: Waiting for rabbitmq@localhost,
rabbitmq-server.service: pid is 114,
rabbitmq-server.service: ,
icecast2.service:  * Starting streaming media server icecast2,
icecast2.service:    ...done.,
icecast2.service: [2020-07-15  11:28:34] WARN CONFIG/_parse_root Warning, <hostname> not configured, using default value "localhost". This will cause problems, e.g. with YP directory listings.,
icecast2.service: [2020-07-15  11:28:34] WARN CONFIG/_parse_root Warning, <location> not configured, using default value "Earth".,
icecast2.service: [2020-07-15  11:28:34] WARN CONFIG/_parse_root Warning, <admin> contact not configured, using default value "icemaster@localhost".,
icecast2.service:  * Starting streaming media server icecast2,
icecast2.service:    ...done.,
icecast2.service: [2020-09-11  06:12:10] WARN CONFIG/_parse_root Warning, <hostname> not configured, using default value "localhost". This will cause problems, e.g. with YP directory listings.,
icecast2.service: [2020-09-11  06:12:10] WARN CONFIG/_parse_root Warning, <location> not configured, using default value "Earth".,
icecast2.service: [2020-09-11  06:12:10] WARN CONFIG/_parse_root Warning, <admin> contact not configured, using default value "icemaster@localhost".,
icecast2.service: ,
liquidsoap.service: Starting liquidsoap channels: no script found in /etc/liquidsoap,
liquidsoap.service: ,
airtime-liquidsoap.service: 2020-09-11 06:12:15,621 [pyponotify] [INFO ]  #################################################,
airtime-liquidsoap.service: 2020-09-11 06:12:15,622 [pyponotify] [INFO ]  # Calling server to update liquidsoap status    #,
airtime-liquidsoap.service: 2020-09-11 06:12:15,622 [pyponotify] [INFO ]  #################################################,
airtime-liquidsoap.service: 2020-09-11 06:12:15,622 [pyponotify] [INFO ]  msg = OK,
airtime-liquidsoap.service: 2020-09-11 06:12:19,367 [api_client] [ERROR]  Exception: HTTP Error 307: Temporary Redirect,
airtime-liquidsoap.service: 2020-09-11 06:12:19,368 [pyponotify] [INFO ]  Response: null,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: #           *** pypo  ***               #,
airtime-liquidsoap.service: #     pypo notification gateway         #,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: 2020-09-11 06:12:24,790 [api_client] [ERROR]  Exception: HTTP Error 307: Temporary Redirect,
airtime-liquidsoap.service: 2020-09-11 06:12:24,791 [pyponotify] [INFO ]  Response: null,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: #           *** pypo  ***               #,
airtime-liquidsoap.service: #     pypo notification gateway         #,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: 2020-09-11 06:12:29,712 [api_client] [ERROR]  Exception: HTTP Error 307: Temporary Redirect,
airtime-liquidsoap.service: 2020-09-11 06:12:29,713 [pyponotify] [INFO ]  Response: null,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: #           *** pypo  ***               #,
airtime-liquidsoap.service: #     pypo notification gateway         #,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: 2020-09-11 06:12:35,839 [api_client] [ERROR]  Exception: HTTP Error 307: Temporary Redirect,
airtime-liquidsoap.service: 2020-09-11 06:12:35,839 [pyponotify] [INFO ]  Response: null,
airtime-liquidsoap.service: ,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: #           *** pypo  ***               #,
airtime-liquidsoap.service: #     pypo notification gateway         #,
airtime-liquidsoap.service: #########################################,
airtime-liquidsoap.service: ,

Is possible that the image was corrupped os wrong?

Image doesn't even run.

I downloaded the image and ran it using the command recommended in the installation instrauctions, I get this:

don@lockdown2020:~$ sudo docker run -p 80:80 -p 8000:8000 -p 8001:8001 --name=libretime odclive/libretime-docker:latest
Restarting postgres DB
Removed stale pid file.
Setting up liquidsoap dir
Restarting libretime services
ERROR:systemctl:Unit airtime_analyzer.service could not be found.
Starting libretime container...
airtime-celery.service: Traceback (most recent call last):
airtime-celery.service: File "/usr/local/bin/celery", line 11, in
airtime-celery.service: load_entry_point('celery==3.1.26.post2', 'console_scripts', 'celery')()
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/main.py", line 30, in main
airtime-celery.service: main()
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/celery.py", line 81, in main
airtime-celery.service: cmd.execute_from_commandline(argv)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/celery.py", line 793, in execute_from_commandline
airtime-celery.service: super(CeleryCommand, self).execute_from_commandline(argv)))
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/base.py", line 311, in execute_from_commandline
airtime-celery.service: return self.handle_argv(self.prog_name, argv[1:])
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/celery.py", line 785, in handle_argv
airtime-celery.service: return self.execute(command, argv)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/celery.py", line 717, in execute
airtime-celery.service: ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/worker.py", line 177, in run_from_argv
airtime-celery.service: *self.parse_options(prog_name, argv, command))
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/base.py", line 411, in parse_options
airtime-celery.service: self.parser = self.create_parser(prog_name, command)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/base.py", line 417, in create_parser
airtime-celery.service: self.get_options() +
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/bin/worker.py", line 221, in get_options
airtime-celery.service: conf = self.app.conf
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/kombu-3.0.37-py2.7.egg/kombu/utils/init.py", line 325, in get
airtime-celery.service: value = obj.dict[self.name] = self.__get(obj)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/app/base.py", line 638, in conf
airtime-celery.service: return self._get_config()
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/app/base.py", line 456, in _get_config
airtime-celery.service: s = Settings({}, [self.prepare_config(self.loader.conf),
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/loaders/base.py", line 258, in conf
airtime-celery.service: self._conf = self.read_configuration()
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/loaders/base.py", line 245, in read_configuration
airtime-celery.service: usercfg = self._import_config_module(custom_config)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/loaders/base.py", line 173, in _import_config_module
airtime-celery.service: return self.import_from_cwd(name)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/loaders/base.py", line 112, in import_from_cwd
airtime-celery.service: package=package,
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/utils/imports.py", line 101, in import_from_cwd
airtime-celery.service: return imp(module, package=package)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/celery-3.1.26.post2-py2.7.egg/celery/loaders/base.py", line 106, in import_module
airtime-celery.service: return importlib.import_module(module, package=package)
airtime-celery.service: File "/usr/lib/python2.7/importlib/init.py", line 37, in import_module
airtime-celery.service: import(name)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/airtime_celery-0.1-py2.7.egg/airtime-celery/celeryconfig.py", line 25, in
airtime-celery.service: BROKER_URL = get_rmq_broker()
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/airtime_celery-0.1-py2.7.egg/airtime-celery/celeryconfig.py", line 11, in get_rmq_broker
airtime-celery.service: rmq_settings = parse_rmq_config(rmq_config)
airtime-celery.service: File "/usr/local/lib/python2.7/dist-packages/airtime_celery-0.1-py2.7.egg/airtime-celery/celeryconfig.py", line 17, in parse_rmq_config
airtime-celery.service: 'host' : rmq_config[RMQ_CONFIG_SECTION]['host'],
airtime-celery.service: File "build/bdist.linux-x86_64/egg/configobj.py", line 554, in getitem
airtime-celery.service: KeyError: 'rabbitmq'
airtime-celery.service:
airtime-liquidsoap.service: Error loading config file: /etc/airtime/airtime.conf
airtime-liquidsoap.service: traceback: Traceback (most recent call last):
airtime-liquidsoap.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 219, in init
airtime-liquidsoap.service: self.services = RequestProvider(self.config)
airtime-liquidsoap.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 188, in init
airtime-liquidsoap.service: if self.config["general"]["base_dir"].startswith("/"):
airtime-liquidsoap.service: File "build/bdist.linux-x86_64/egg/configobj.py", line 554, in getitem
airtime-liquidsoap.service: val = dict.getitem(self, key)
airtime-liquidsoap.service: KeyError: 'general'
airtime-liquidsoap.service:
airtime-liquidsoap.service: Airtime Liquidsoap
airtime-liquidsoap.service: Error loading config file: /etc/airtime/airtime.conf
airtime-liquidsoap.service: traceback: Traceback (most recent call last):
airtime-liquidsoap.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 219, in init
airtime-liquidsoap.service: self.services = RequestProvider(self.config)
airtime-liquidsoap.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 188, in init
airtime-liquidsoap.service: if self.config["general"]["base_dir"].startswith("/"):
airtime-liquidsoap.service: File "build/bdist.linux-x86_64/egg/configobj.py", line 554, in getitem
airtime-liquidsoap.service: val = dict.getitem(self, key)
airtime-liquidsoap.service: KeyError: 'general'
airtime-liquidsoap.service:
airtime-liquidsoap.service: Airtime Liquidsoap
airtime-liquidsoap.service:
airtime-playout.service: 2020-03-27 11:21:04,916 [main] [INFO ] New locale set to: en_US.UTF-8
airtime-playout.service: 2020-03-27 11:21:04,917 [main] [INFO ] ###########################################
airtime-playout.service: 2020-03-27 11:21:04,917 [main] [INFO ] # *** pypo *** #
airtime-playout.service: 2020-03-27 11:21:04,917 [main] [INFO ] # Liquidsoap Scheduled Playout System #
airtime-playout.service: 2020-03-27 11:21:04,918 [main] [INFO ] ###########################################
airtime-playout.service: 2020-03-27 11:21:04,918 [main] [INFO ] Timezone: ('UTC', 'UTC')
airtime-playout.service: 2020-03-27 11:21:04,918 [main] [INFO ] UTC time: 2020-03-27 11:21:04.918371
airtime-playout.service: 2020-03-27 11:21:04,918 [api_client] [ERROR] Error loading config file: /etc/airtime/airtime.conf
airtime-playout.service: 2020-03-27 11:21:04,921 [api_client] [ERROR] traceback: Traceback (most recent call last):
airtime-playout.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 219, in init
airtime-playout.service: self.services = RequestProvider(self.config)
airtime-playout.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 188, in init
airtime-playout.service: if self.config["general"]["base_dir"].startswith("/"):
airtime-playout.service: File "build/bdist.linux-x86_64/egg/configobj.py", line 554, in getitem
airtime-playout.service: val = dict.getitem(self, key)
airtime-playout.service: KeyError: 'general'
airtime-playout.service:
airtime-playout.service: 2020-03-27 11:21:07,768 [main] [INFO ] New locale set to: en_US.UTF-8
airtime-playout.service: 2020-03-27 11:21:07,769 [main] [INFO ] ###########################################
airtime-playout.service: 2020-03-27 11:21:07,769 [main] [INFO ] # *** pypo *** #
airtime-playout.service: 2020-03-27 11:21:07,769 [main] [INFO ] # Liquidsoap Scheduled Playout System #
airtime-playout.service: 2020-03-27 11:21:07,769 [main] [INFO ] ###########################################
airtime-playout.service: 2020-03-27 11:21:07,770 [main] [INFO ] Timezone: ('UTC', 'UTC')
airtime-playout.service: 2020-03-27 11:21:07,770 [main] [INFO ] UTC time: 2020-03-27 11:21:07.770133
airtime-playout.service: 2020-03-27 11:21:07,770 [api_client] [ERROR] Error loading config file: /etc/airtime/airtime.conf
airtime-playout.service: 2020-03-27 11:21:07,772 [api_client] [ERROR] traceback: Traceback (most recent call last):
airtime-playout.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 219, in init
airtime-playout.service: self.services = RequestProvider(self.config)
airtime-playout.service: File "/usr/local/lib/python2.7/dist-packages/api_clients-1.0-py2.7.egg/api_clients/api_client.py", line 188, in init
airtime-playout.service: if self.config["general"]["base_dir"].startswith("/"):
airtime-playout.service: File "build/bdist.linux-x86_64/egg/configobj.py", line 554, in getitem
airtime-playout.service: val = dict.getitem(self, key)
airtime-playout.service: KeyError: 'general'
airtime-playout.service:
airtime-playout.service:
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.3. Set the 'ServerName' directive globally to suppress this message
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
apache2.service: httpd (pid 65) already running
apache2.service:
rabbitmq-server.service: Waiting for rabbitmq@localhost
rabbitmq-server.service: pid is 77
rabbitmq-server.service:
icecast2.service: * Starting streaming media server icecast2
icecast2.service: ...done.
icecast2.service: [2020-03-10 22:17:56] WARN CONFIG/_parse_root Warning, not configured, using default value "localhost". This will cause problems, e.g. with YP directory listings.
icecast2.service: [2020-03-10 22:17:56] WARN CONFIG/_parse_root Warning, not configured, using default value "Earth".
icecast2.service: [2020-03-10 22:17:56] WARN CONFIG/_parse_root Warning, contact not configured, using default value "icemaster@localhost".
icecast2.service: * Starting streaming media server icecast2
icecast2.service: ...done.
icecast2.service: [2020-03-27 11:21:23] WARN CONFIG/_parse_root Warning, not configured, using default value "localhost". This will cause problems, e.g. with YP directory listings.
icecast2.service: [2020-03-27 11:21:23] WARN CONFIG/_parse_root Warning, not configured, using default value "Earth".
icecast2.service: [2020-03-27 11:21:23] WARN CONFIG/_parse_root Warning, contact not configured, using default value "icemaster@localhost".
icecast2.service:
liquidsoap.service: Starting liquidsoap channels: no script found in /etc/liquidsoap
liquidsoap.service:

player doesnt play in main page

hey
im trying to use libretime in docker and everything works fine but the player doesnt play anything(in radio.example.com:8000 it works completely fine)
i have done 2 installations on 2 servers both have the same problem
in inspect mode of chrome i get

GET http://127.0.0.1:8000/airtime_128 net::ERR_CONNECTION_REFUSED

Set default passwod

Look strange but i have follow the Readme.

And i haven't understand how set the password for simply enter inside my session.

Yes the documentation work ...

And if i want enter inside the session how to ?

Unfortunally LibreTime is require for liberty and Freedom, then lake of documentation and/or security point is a bit strange.

docker-compose.yml for traefik 1.7

Here the docker-compose.yml for traefik 1.7 if someone need it.
Traefik is a reverse-proxy with autoconfiguration that permit to have more site in a single computer.
For example I can have wordpress, mariadb, libretime,posgresql, traefik, portainer, ghost, nectcloud, redis... running together in a little raspberrypi.. all of then in ports 80/443 with let's encrypt ssl certificates (autoconfigured too).

root@3d:/opt/libretime-docker# cat docker-compose.yml 
version: "3.6"

# make sure to have a .env file in the same directory

services:
  libretime:
    image: libretime-arm64:latest
    container_name: libretime
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ${USERDIR}/docker/libretime/airtime:/etc/airtime
      - ${USERDIR}/docker/libretime/stor:/srv/airtime/stor
      - ${USERDIR}/docker/libretime/watch:/srv/airtime/watch
      - libretime_postgres:/var/lib/postgresql/10/main
      - ${USERDIR}/docker/libretime/liquidsoap:/usr/local/lib/python2.7/dist-packages/airtime_playout-1.0-py2.7.egg/liquidsoap/
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:radio.example.com"
      - "traefik.docker.network=web"
    networks:
      - web
volumes:
  libretime_postgres:
networks:
  web:
    external: true


Notes:

  1. you can setup your docker+traefik 1.7 following this tutorial
    https://www.digitalocean.com/community/tutorials/how-to-use-traefik-as-a-reverse-proxy-for-docker-containers-on-ubuntu-18-04-es

  2. IMPORTANT!
    image: libretime-arm64:latest is the image that I have build for my Armbian OS on OrangePi... (It's like Raspian on RaspberryPi computers).
    You should use "odclive/libretime-docker:latest" on amd64 architeture.

  3. "radio.example.com" must be a DNS record at your registar provider that point to your fixed IP server (I think that adding ddclient package, we can use a dynamic IP)

Ability to configure, and/or disable internal Icecast service

Once configuration, media import etc is complete, going live to listeners would likely require an external Icecast/Shoutcast server. It would be handy to have a way to either reconfigure Icecast, or even disable it completely.

Using an external Icecast/Shoutcast server for production purposes would ease server load (minimal I guess), and decrease bandwidth usage.

For dev; setup and local network listening purposes, the internal Icecast server is perfect, but moving to production may require more bandwidth.

This is not an error or issue, just a feature request for your spare time.

Thanks again for your great work!

problems with installation through docker-compose

I tried to install libretime in "docker-compose" mode but I get the following error at the end;

"service airtime_analyzer"
(don't start)

The .yml file used is the one you indicated as an example.

https://github.com/kessibi/libretime-docker/wiki/Sample-installation

I also believe that the version obtained (ubuntu 1804) is different from the one obtained through "docker pull odclive / libretime-docker: latest" (debian10)

Can you help me?

many thanks !
libretime-docker-compose-error-4
libretime-docker-compose-error

ls_script.liq - overwritten on upgrade or reinstall

Files in /usr/local/lib/python2.7/dist-packages/airtime_playout-1.0-py2.7.egg/liquidsoap/ are overwritten any time we upgrade, update, refresh or reinstall.

This may be a limitation of the resolution for the last issue #4

I'm wondering if it may be wise to setup the volume as ro after the initial copy...

I'll keep looking into solutions, and let you know if I come up with anything.

Thanks again!~

ls_script.liq - Used for rotations and Failover - Needs to be editable

The ls_script.liq is located in the directory /usr/local/lib/python2.7/dist-packages/airtime_playout-1.0-py2.7.egg/liquidsoap

This file is used a lot for editing rotations of jingles, ads and music for failover. It can be really handy so that your station can run with no dead air.

You can see more information about it here

The paths they use are old, but the file remains the same (just in a different place). The path I provided above, is the path within the docker, where the ls_script.liq file is located.

Ideally, I'd like to be able to edit this file outside of the docker, within the volumes somewhere perhaps? Keeping it persistent would be great, so after updates/upgrades, the rotations and failover continues.

Here's my modification:

default = amplify(id="silence_src", 0.00001, noise())

Do a search for the above line, then replace it with

#default = amplify(id="silence_src", 0.00001, noise())
m = playlist("/srv/airtime/stor/imported")
default = fallback(track_sensitive = false,[m])

Note the commended out line, and it's replacement.

You can also add lines like

default = rewrite_metadata([("#{m['title']","title"),("#{m['artist']","artist"),("station", !ref_off_air_meta)], default)

To allow for metadata rewrites during failover playback.

If you want more information about how to modify it to include weighted playback, jingles and ads, let me know 😁

No audio play, too many erros

hi,

After trying the installations for weeks, keep getting the same errors whether on docker or VM. So disappointed now. I'm like fuck it, what's the next best software for radio systems?

  1. No audio plays on the web and no proper documentation
  2. Goes on air then suddenly stops
  3. Icecast errors
  4. installation errors below..
    Digest: sha256:e81442f7b538edf586aaf6a4c0858afd60781da6416c9b0851db431ca77c8890
    Status: Downloaded newer image for odclive/libretime-docker:latest
    Creating libretime ... done
    Attaching to libretime
    libretime | Restarting postgres DB
    libretime | Removed stale pid file.
    libretime | Setting up liquidsoap dir
    libretime | Restarting libretime services
    libretime | Starting libretime container...
    libretime | ERROR:systemctl:the service is already running on PID 81
    libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
    libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
    libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
    libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
    libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
    libretime | apache2.service: httpd (pid 59) already running
    libretime | apache2.service:
    libretime | epmd.service: epmd: Mon Nov 8 09:11:58 2021: systemd provides no sockets
    libretime | epmd.service:
    libretime | libretime-analyzer.service: Airtime Analyzer 1.0
    libretime | libretime-analyzer.service: Failed to open config file at /etc/airtime/airtime.conf: No such file or directory
    libretime | libretime-analyzer.service: Airtime Analyzer 1.0
    libretime | libretime-analyzer.service: Failed to open config file at /etc/airtime/airtime.conf: No such file or directory
    libretime | libretime-analyzer.service:
    libretime | libretime-celery.service: Traceback (most recent call last):
    libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 134, in getattr
    libretime | libretime-celery.service: return self[k]
    libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 449, in getitem

other installation erros

root@netradio-server-dockers-two:/opt/installers# sudo docker-compose up
Creating volume "installers_libretime_postgres" with default driver
Creating libretime ... done
Attaching to libretime
libretime | Restarting postgres DB
libretime | Removed stale pid file.
libretime | Setting up liquidsoap dir
libretime | Restarting libretime services
libretime | Starting libretime container...
libretime | ERROR:systemctl:the service is already running on PID 81
libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
libretime | apache2.service: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.18.0.2. Set the 'ServerName' directive globally to suppress this message
libretime | apache2.service: httpd (pid 59) already running
libretime | apache2.service:
libretime | epmd.service: epmd: Mon Nov 8 08:22:24 2021: systemd provides no sockets
libretime | epmd.service:
libretime | libretime-analyzer.service: Airtime Analyzer 1.0
libretime | libretime-analyzer.service: Failed to open config file at /etc/airtime/airtime.conf: No such file or directory
libretime | libretime-analyzer.service: Airtime Analyzer 1.0
libretime | libretime-analyzer.service: Failed to open config file at /etc/airtime/airtime.conf: No such file or directory
libretime | libretime-analyzer.service:
libretime | libretime-celery.service: Traceback (most recent call last):
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 134, in getattr
libretime | libretime-celery.service: return self[k]
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 449, in getitem
libretime | libretime-celery.service: return self.missing(key)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 276, in missing
libretime | libretime-celery.service: raise KeyError(key)
libretime | libretime-celery.service: KeyError: 'worker_state_db'
libretime | libretime-celery.service:
libretime | libretime-celery.service: During handling of the above exception, another exception occurred:
libretime | libretime-celery.service:
libretime | libretime-celery.service: Traceback (most recent call last):
libretime | libretime-celery.service: File "/usr/local/bin/celery", line 33, in
libretime | libretime-celery.service: sys.exit(load_entry_point('celery==4.4.7', 'console_scripts', 'celery')())
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/main.py", line 16, in main
libretime | libretime-celery.service: _main()
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 322, in main
libretime | libretime-celery.service: cmd.execute_from_commandline(argv)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 499, in execute_from_commandline
libretime | libretime-celery.service: super(CeleryCommand, self).execute_from_commandline(argv)))
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/base.py", line 305, in execute_from_commandline
libretime | libretime-celery.service: return self.handle_argv(self.prog_name, argv[1:])
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 491, in handle_argv
libretime | libretime-celery.service: return self.execute(command, argv)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 419, in execute
libretime | libretime-celery.service: ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/worker.py", line 221, in run_from_argv
libretime | libretime-celery.service: *self.parse_options(prog_name, argv, command))
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/base.py", line 428, in parse_options
libretime | libretime-celery.service: self.parser = self.create_parser(prog_name, command)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/base.py", line 444, in create_parser
libretime | libretime-celery.service: self.add_arguments(parser)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/worker.py", line 278, in add_arguments
libretime | libretime-celery.service: default=conf.worker_state_db,
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 138, in getattr
libretime | libretime-celery.service: type(self).name, k))
libretime | libretime-celery.service: AttributeError: 'Settings' object has no attribute 'worker_state_db'
libretime | libretime-celery.service: Traceback (most recent call last):
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 134, in getattr
libretime | libretime-celery.service: return self[k]
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 449, in getitem
libretime | libretime-celery.service: return self.missing(key)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 276, in missing
libretime | libretime-celery.service: raise KeyError(key)
libretime | libretime-celery.service: KeyError: 'worker_state_db'
libretime | libretime-celery.service:
libretime | libretime-celery.service: During handling of the above exception, another exception occurred:
libretime | libretime-celery.service:
libretime | libretime-celery.service: Traceback (most recent call last):
libretime | libretime-celery.service: File "/usr/local/bin/celery", line 33, in
libretime | libretime-celery.service: sys.exit(load_entry_point('celery==4.4.7', 'console_scripts', 'celery')())
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/main.py", line 16, in main
libretime | libretime-celery.service: _main()
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 322, in main
libretime | libretime-celery.service: cmd.execute_from_commandline(argv)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 499, in execute_from_commandline
libretime | libretime-celery.service: super(CeleryCommand, self).execute_from_commandline(argv)))
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/base.py", line 305, in execute_from_commandline
libretime | libretime-celery.service: return self.handle_argv(self.prog_name, argv[1:])
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 491, in handle_argv
libretime | libretime-celery.service: return self.execute(command, argv)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/celery.py", line 419, in execute
libretime | libretime-celery.service: ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/worker.py", line 221, in run_from_argv
libretime | libretime-celery.service: *self.parse_options(prog_name, argv, command))
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/base.py", line 428, in parse_options
libretime | libretime-celery.service: self.parser = self.create_parser(prog_name, command)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/base.py", line 444, in create_parser
libretime | libretime-celery.service: self.add_arguments(parser)
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/bin/worker.py", line 278, in add_arguments
libretime | libretime-celery.service: default=conf.worker_state_db,
libretime | libretime-celery.service: File "/usr/local/lib/python3.7/dist-packages/celery-4.4.7-py3.7.egg/celery/utils/collections.py", line 138, in getattr
libretime | libretime-celery.service: type(self).name, k))
libretime | libretime-celery.service: AttributeError: 'Settings' object has no attribute 'worker_state_db'
libretime | libretime-celery.service:
libretime | libretime-liquidsoap.service: Error loading config file: /etc/airtime/airtime.conf
libretime | libretime-liquidsoap.service: Traceback (most recent call last):
libretime | libretime-liquidsoap.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 203, in init
libretime | libretime-liquidsoap.service: self.services = RequestProvider(self.config)
libretime | libretime-liquidsoap.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 170, in init
libretime | libretime-liquidsoap.service: if self.config["general"]["base_dir"].startswith("/"):
libretime | libretime-liquidsoap.service: File "/usr/local/lib/python3.7/dist-packages/configobj-5.0.6-py3.7.egg/configobj.py", line 554, in getitem
libretime | libretime-liquidsoap.service: val = dict.getitem(self, key)
libretime | libretime-liquidsoap.service: KeyError: 'general'
libretime | libretime-liquidsoap.service: Airtime Liquidsoap
libretime | libretime-liquidsoap.service: Error loading config file: /etc/airtime/airtime.conf
libretime | libretime-liquidsoap.service: Traceback (most recent call last):
libretime | libretime-liquidsoap.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 203, in init
libretime | libretime-liquidsoap.service: self.services = RequestProvider(self.config)
libretime | libretime-liquidsoap.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 170, in init
libretime | libretime-liquidsoap.service: if self.config["general"]["base_dir"].startswith("/"):
libretime | libretime-liquidsoap.service: File "/usr/local/lib/python3.7/dist-packages/configobj-5.0.6-py3.7.egg/configobj.py", line 554, in getitem
libretime | libretime-liquidsoap.service: val = dict.getitem(self, key)
libretime | libretime-liquidsoap.service: KeyError: 'general'
libretime | libretime-liquidsoap.service: Airtime Liquidsoap
libretime | libretime-liquidsoap.service:
libretime | libretime-playout.service: 2021-11-08 08:22:17,395 [main] [INFO ] ###########################################
libretime | libretime-playout.service: 2021-11-08 08:22:17,395 [main] [INFO ] # *** pypo *** #
libretime | libretime-playout.service: 2021-11-08 08:22:17,395 [main] [INFO ] # Liquidsoap Scheduled Playout System #
libretime | libretime-playout.service: 2021-11-08 08:22:17,395 [main] [INFO ] ###########################################
libretime | libretime-playout.service: 2021-11-08 08:22:17,396 [main] [INFO ] Timezone: ('', '')
libretime | libretime-playout.service: 2021-11-08 08:22:17,396 [main] [INFO ] UTC time: 2021-11-08 08:22:17.396100
libretime | libretime-playout.service: 2021-11-08 08:22:17,396 [api_client] [ERROR] Error loading config file: /etc/airtime/airtime.conf
libretime | libretime-playout.service: Traceback (most recent call last):
libretime | libretime-playout.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 203, in init
libretime | libretime-playout.service: self.services = RequestProvider(self.config)
libretime | libretime-playout.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 170, in init
libretime | libretime-playout.service: if self.config["general"]["base_dir"].startswith("/"):
libretime | libretime-playout.service: File "/usr/local/lib/python3.7/dist-packages/configobj-5.0.6-py3.7.egg/configobj.py", line 554, in getitem
libretime | libretime-playout.service: val = dict.getitem(self, key)
libretime | libretime-playout.service: KeyError: 'general'
libretime | libretime-playout.service: 2021-11-08 08:22:27,577 [main] [INFO ] ###########################################
libretime | libretime-playout.service: 2021-11-08 08:22:27,577 [main] [INFO ] # *** pypo *** #
libretime | libretime-playout.service: 2021-11-08 08:22:27,578 [main] [INFO ] # Liquidsoap Scheduled Playout System #
libretime | libretime-playout.service: 2021-11-08 08:22:27,578 [main] [INFO ] ###########################################
libretime | libretime-playout.service: 2021-11-08 08:22:27,578 [main] [INFO ] Timezone: ('', '')
libretime | libretime-playout.service: 2021-11-08 08:22:27,579 [main] [INFO ] UTC time: 2021-11-08 08:22:27.578919
libretime | libretime-playout.service: 2021-11-08 08:22:27,579 [api_client] [ERROR] Error loading config file: /etc/airtime/airtime.conf
libretime | libretime-playout.service: Traceback (most recent call last):
libretime | libretime-playout.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 203, in init
libretime | libretime-playout.service: self.services = RequestProvider(self.config)
libretime | libretime-playout.service: File "/usr/local/lib/python3.7/dist-packages/api_clients-1.0-py3.7.egg/api_clients/api_client.py", line 170, in init
libretime | libretime-playout.service: if self.config["general"]["base_dir"].startswith("/"):
libretime | libretime-playout.service: File "/usr/local/lib/python3.7/dist-packages/configobj-5.0.6-py3.7.egg/configobj.py", line 554, in getitem
libretime | libretime-playout.service: val = dict.getitem(self, key)
libretime | libretime-playout.service: KeyError: 'general'
libretime | libretime-playout.service:
libretime | icecast2.service: Starting streaming media server: icecast2.
libretime | icecast2.service: [2021-07-27 17:02:09] WARN CONFIG/_parse_root Warning, not configured, using default value "localhost". This will cause problems, e.g. with YP directory listings.
libretime | icecast2.service: [2021-07-27 17:02:09] WARN CONFIG/_parse_root Warning, not configured, using default value "Earth".
libretime | icecast2.service: [2021-07-27 17:02:09] WARN CONFIG/_parse_root Warning, contact not configured, using default value "icemaster@localhost".
libretime | icecast2.service: Starting streaming media server: icecast2.
libretime | icecast2.service: [2021-11-08 08:22:40] WARN CONFIG/_parse_root Warning, not configured, using default value "localhost". This will cause problems, e.g. with YP directory listings.
libretime | icecast2.service: [2021-11-08 08:22:40] WARN CONFIG/_parse_root Warning, not configured, using default value "Earth".
libretime | icecast2.service: [2021-11-08 08:22:40] WARN CONFIG/_parse_root Warning, contact not configured, using default value "icemaster@localhost".

Only serious comments, please. I have tried many solutions and I'm bored now

Saving stream settings stops icecast playout

While testing, I added a master source username and password and pressed Save under the stream setting. This caused the stream to stop, as expected, but it did not come back up again. There were no mounts listed in Icecast.

Logs:

libretime    | airtime-playout.service: 2020-01-15 12:30:54,119 [pypomessagehandler] [INFO ]  Handling command: update_stream_setting
libretime    | airtime-playout.service: 2020-01-15 12:30:54,119 [pypomessagehandler] [INFO ]  Updating stream setting...
libretime    | airtime-playout.service: 2020-01-15 12:30:54,121 [pypofetch] [INFO ]  Received event from Pypo Message Handler: {"setting":{"s1_enable":"true","s1_output":"icecast","s1_type":"ogg","s1_bitrate":128,"s1_port":8000,"s1_user":"","s1_pass":"hackme","s1_admin_user":"","s1_admin_pass":"","s1_url":"http:\/\/airtime.sourcefabric.org","s1_description":"LibreTime Radio! Stream #1","s1_genre":"genre","s1_name":"LibreTime!","s1_channels":"stereo","s1_liquidsoap_error":"OK","s1_mobile":"0","s1_host":"localhost","s1_mount":"_a","s2_enable":"false","s2_output":"icecast","s2_user":"","s2_admin_user":"","s2_admin_pass":"","s2_url":"","s2_description":"","s2_genre":"","s2_name":"","s2_channels":"stereo","s2_mobile":"0","s2_type":"ogg","s2_bitrate":48,"s2_host":"localhost","s2_port":8000,"s2_pass":"hackme","s2_mount":"_b","s2_liquidsoap_error":"waiting","s3_enable":"false","s3_output":"icecast","s3_user":"","s3_admin_user":"","s3_admin_pass":"","s3_url":"","s3_description":"","s3_genre":"","s3_name":"","s3_channels":"stereo","s3_mobile":"0","s3_type":"ogg","s3_bitrate":48,"s3_host":"localhost","s3_port":8000,"s3_pass":"hackme","s3_mount":"_c","s3_liquidsoap_error":"waiting","s4_enable":"false","s4_output":"icecast","s4_name":"","s4_type":"","s4_bitrate":0,"s4_user":"","s4_admin_user":"","s4_admin_pass":"","s4_url":"","s4_description":"","s4_genre":"","s4_channels":"stereo","s4_host":"localhost","s4_port":8000,"s4_pass":"hackme","s4_mount":"_d","s4_liquidsoap_error":"waiting","s4_mobile":"","master_live_stream_port":"8001","master_live_stream_mp":"\/master","dj_live_stream_port":"8002","dj_live_stream_mp":"\/show","off_air_meta":"LibreTime - offline","icecast_vorbis_metadata":"false","output_sound_device":"false","output_sound_device_type":"ALSA"},"event_type":"update_stream_setting"}
libretime    | airtime-playout.service: 2020-01-15 12:30:54,121 [pypofetch] [INFO ]  Handling command: update_stream_setting
libretime    | airtime-playout.service: 2020-01-15 12:30:54,122 [pypofetch] [INFO ]  Updating stream setting...
libretime    | airtime-playout.service: 2020-01-15 12:30:54,122 [pypofetch] [INFO ]  Restarting Liquidsoap
libretime    | airtime-playout.service: 2020-01-15 12:30:54,602 [pypofetch] [INFO ]  Waiting for Liquidsoap to start
libretime    | airtime-playout.service: 

libretime on Synology NAS via Docker

Hi there,

I installed odclive/libretime-docker on a Synology NAS via docker. Since i have problems with liquidsoap service i am looking into a step by step debugging.

admin@Diskstation:~$ sudo docker run -p 80:80 -p 8000:8000 -p 8001:8001 --name=libretime3 odclive/libretime-docker:latest
docker: Error response from daemon: driver failed programming external connectivity on endpoint libretime3 (f0769552c5de2d7e12ac4f58e5ccb919304f373a77f1d6cc6ee922a561d4ad99): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address already in use.
ERRO[0000] error waiting for container: context canceled 
admin@Diskstation:~$ 

Can anyone help me understand these port issues ?

Can't do the setup!

Hi I can't pass the first step of the initial wizard

Captura de pantalla_2020-03-10_10-55-06

name, password and db are "airtime"

The postgresql are up and the passwd file is ok

root@4240f3338673:/# service postgresql status
10/main (port 5432): online
root@4240f3338673:/# cat /root/.pgpass
localhost:5432:artime:airtime:airtime
root@4240f3338673:/#

any idea?

Docker Compose

Here is the Docker Compose I use:

version: "3.6"
services:
   libretime:
     image: odclive/libretime-docker
     container_name: libretime
     environment:
       - PUID=1000
       - PGID=1000
       - TZ=${TZ}
     volumes:
       - ${USERDIR}/docker/libretime:/srv/airtime/stor
     ports:
       - 80:80
       - 8000:8000
     restart: always

This may be worth adding to a wiki or something.

Cheers again :)

Oops! Something went wrong!

today I have cleaned my docker laptop system, deleting all containers (but portainer), volumes, images and networks.
I leave only the essential for Portainer.

then:

# git clone https://github.com/kessibi/libretime-docker.git
Clonando en 'libretime-docker'...
remote: Enumerating objects: 96, done.
remote: Counting objects: 100% (96/96), done.
remote: Compressing objects: 100% (70/70), done.
remote: Total 96 (delta 50), reused 63 (delta 24), pack-reused 0
Desempaquetando objetos: 100% (96/96), 66.91 KiB | 142.00 KiB/s, listo.
root@max-HP-Laptop-15-bs0xx:/opt# cd libretime-docker
root@max-HP-Laptop-15-bs0xx:/opt/libretime-docker# docker-compose up -d
Creating network "libretime-docker_default" with the default driver
Creating volume "libretime-docker_libretime_postgres" with default driver
Pulling libretime (odclive/libretime-docker:latest)...
latest: Pulling from odclive/libretime-docker
2746a4a261c9: Pull complete
4c1d20cdee96: Pull complete
0d3160e1d0de: Pull complete
c8e37668deea: Pull complete
f4433fe32c4a: Pull complete
c4e308c2069e: Pull complete
187727721593: Pull complete
0cd7e58c3a49: Pull complete
8c9a945c1ec6: Pull complete
327355e5dc04: Pull complete
c4b000044982: Pull complete
77586208cb20: Pull complete
14c84b2fffe5: Pull complete
24ee840aa642: Pull complete
411134bdb8fd: Pull complete
Digest: sha256:a7f381317c9636b1e2b1ba07982e5cc676081a8d5fd58916a2323daf8efc01da
Status: Downloaded newer image for odclive/libretime-docker:latest
Creating libretime ... done
root@max-HP-Laptop-15-bs0xx:/opt/libretime-docker# 

but this time something was wrong:

airtime-playout.service: 2020-06-30 09:17:16,132 [api_client] [INFO ]  Unable to get Airtime API version number.
airtime-playout.service: 2020-06-30 09:17:17,393 [api_client] [INFO ]  Unable to get Airtime API version number.
airtime-playout.service: 2020-06-30 09:17:21,154 [api_client] [INFO ]  Unable to get Airtime API version number.
airtime-playout.service: 2020-06-30 09:17:22,431 [api_client] [INFO ]  Unable to get Airtime API version number.

There is this log inside the container:


root@917fcd874a0a:/# tail -f /var/log/airtime/airtime_analyzer.log 
2020-06-30 09:07:54,632 [message_listener] [ERROR]  Connection to 127.0.0.1:5672 failed: [Errno 111] Connection refused
2020-06-30 09:07:54,633 [message_listener] [INFO ]  Retrying in 5 seconds...
2020-06-30 09:07:57,399 [message_listener] [ERROR]  Connection to message queue failed. 
2020-06-30 09:07:57,399 [message_listener] [ERROR]  Connection to 127.0.0.1:5672 failed: [Errno 111] Connection refused
2020-06-30 09:07:57,399 [message_listener] [INFO ]  Retrying in 5 seconds...
2020-06-30 09:07:59,638 [message_listener] [ERROR]  Connection to message queue failed. 
2020-06-30 09:07:59,638 [message_listener] [ERROR]  Connection to 127.0.0.1:5672 failed: [Errno 111] Connection refused
2020-06-30 09:07:59,639 [message_listener] [INFO ]  Retrying in 5 seconds...
2020-06-30 09:08:02,460 [message_listener] [INFO ]   Listening for messages...
2020-06-30 09:08:04,668 [message_listener] [INFO ]   Listening for messages..

and in the browser at http://localhost/ there is this message:
Captura de pantalla de 2020-06-30 11-19-28

Do you know how fix it?

Unable to connect to the Airtime server (Liquidsoap starts, then stop itself)

Hello everybody,

I've a fresh host and I've executed

docker run -p 80:80 -p 8000:8000 -p 8001:8001 --name=libretime odclive/libretime-docker:latest

Then completed the installation. The strange part is that for some seconds Liquidsoap is marked as running:

image

Then it shutdown itself:

image

After that, In the logs I see:

$ docker exec -ti libretime /bin/bash
$ tail -f airtime-liquidsoap.service.log 
Unable to connect to the Airtime server.
Unable to connect to the Airtime server.
Unable to connect to the Airtime server.
Unable to connect to the Airtime server.
Unable to connect to the Airtime server.

And this is the airtime_analyzer.log:

2020-11-24 22:16:32,451 [message_listener] [ERROR]  Connection to 127.0.0.1:5672 failed: [Errno 111] Connection refused

Any clue about how I was able to mess up this docker? 🙈

Additional information:

This web page is served via a simple HTTP proxy made with Apache, too keep the Docker internal. Something very usual I think. But this may be the problem because I'm not able to reproduce this issue when running this Docker not on this server but on my computer and visiting via localhost.

Any troubleshooting tip?

libretime + nginx (ssl) - player (internal +home page) don't work

I set up a proxy (nginx) for web port (80) and icecast port (8000).
Libretime features are all satisfied, except the audio players (monitor and the welcome page), I think because they are trying to play the original stream "http" (not compatible in to https website).
I ask you if you can manually change the configuration of the two players indicated, or remove "http" in "https".
Thank you.
Capture1
Capture2
Capture9

MP3's - Misreported Song Length

When uploading MP3's to the Airtime Server via the web interface, the song length is misreported.

During playback, songs only play for around 1:30 before cutting off and moving on to the next song. Unknown if this is an upstream issue.

Attempted with both 128k and 320K MP3 files. The issue remains.

This does not affect OGG/Vorbis files.

Mutagen 1.43!!

Hi, I'm trying again to port this docker image to the ARM architecture (32 and 64bit), but first I have to replicate your work for x86.

For this I have tried to recompile an image from my x86 laptop for the amd64 architecture using the command

docker build -t libretime_amd64 .

compiling the image always fails with mutagen-1.44.

So I have downloaded your image and entered it, with

docker run -it --entrypoint /bin/bash odclive/libretime-docker:latest -s

... and I have seen that you are using mutagen-1.43 !!

It is clear that you have modified the libretime-alpha8 source code to use mutagen-1.43

How did you do it? What files have you modified?

RewriteEngine Action 'start' failed.

In the logs there is this error:

apache2.service: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
apache2.service: Action 'start' failed.

you need to add in preparation.sh this command

a2enmod rewrite
service apache2 restart

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.