--- title: LibreTime 3.0.0 alpha 11 --- import ReleaseHead from './\_release-head.md'; ## :sparkling_heart: Contributors The LibreTime project wants to thank the following contributors for authoring PRs to this release: - @jooola - @paddatrapper ## :rocket: Features - Use setuptools entrypoints ([#1409](https://github.com/libretime/libretime/issues/1409)) - Support php7.4 ([#1354](https://github.com/libretime/libretime/issues/1354)) - run API tests in CI ([#1421](https://github.com/libretime/libretime/issues/1421)) - add support for Ubuntu Focal 20.04 ([#1168](https://github.com/libretime/libretime/issues/1168)) - debian 11 support ([#1292](https://github.com/libretime/libretime/issues/1292)) - create libretime_shared package ([#1349](https://github.com/libretime/libretime/issues/1349)) - enhance libretime shared ([#1491](https://github.com/libretime/libretime/issues/1491)) - **shared:** let user provide the log level ([#1493](https://github.com/libretime/libretime/issues/1493)) - replace verbosity flag with log-level flag ([#1496](https://github.com/libretime/libretime/issues/1496)) - **playout:** enhance playout logging ([#1495](https://github.com/libretime/libretime/issues/1495)) - **api:** update env var settings loading - **api:** allow to run without log file for dev - **analyzer:** enhance analyzer cli and logging ([#1507](https://github.com/libretime/libretime/issues/1507)) - **playout:** migrate notify cli to click ([#1519](https://github.com/libretime/libretime/issues/1519)) - **shared:** allow loading from ini config file - **shared:** allow cli parametrized decorators ([#1527](https://github.com/libretime/libretime/issues/1527)) - **shared:** add suffix to shared config models - **analyzer:** load config using shared helpers - **playout:** change playout working directory - **playout:** load config using shared helpers - **analyzer:** analyze replaygain using ffmpeg - **analyzer:** analyze cuepoint using ffmpeg - **playout:** change liquidsoap working dir ([#1547](https://github.com/libretime/libretime/issues/1547)) - **legacy:** rename log filepath ([#1551](https://github.com/libretime/libretime/issues/1551)) - **shared:** add url/dsn property to config classes ([#1553](https://github.com/libretime/libretime/issues/1553)) - remove locale generation from installer ([#1560](https://github.com/libretime/libretime/issues/1560)) - **legacy:** consolidate constants ([#1558](https://github.com/libretime/libretime/issues/1558)) - **legacy:** add db config defaults and allow custom port ([#1559](https://github.com/libretime/libretime/issues/1559)) - remove unused ubuntu ppa ([#1591](https://github.com/libretime/libretime/issues/1591)) - **analyzer:** do verify ssl certs on requests - **analyzer:** rework analyze_metadata step - **api:** improve uwsgi systemd integration ([#1614](https://github.com/libretime/libretime/issues/1614)) - **analyzer:** rework organise_file using pathlib - **shared:** load config from str filepath - **shared:** create general config model - **shared:** create time functions - **shared:** return log level and filepath - remove unused web_server_user config entry - **legacy:** clean config parsing and add defaults - **api_client:** load config using shared helpers - **worker:** load config using shared helpers - **shared:** do not exit on missing config file - **api:** remove admin app and static files - **api:** load config using shared helpers - **legacy:** replace massivescale/celery-php with jooola/celery-php - **worker:** set celery timezone to UTC - **api:** include id in file/webstream serializers - remove uninstall script ([#1682](https://github.com/libretime/libretime/issues/1682)) - **worker:** add service log filepath ([#1640](https://github.com/libretime/libretime/issues/1640)) ## :bug: Bug fixes - remove rogue buster reference - correct vagrantfile function call - declare pypo.notify module - revert removal of eval for shell commands - add missing dependencies to celery module - assume api client is installed - **shared:** fix tests - change filepath options type to pathlib.Path ([#1506](https://github.com/libretime/libretime/issues/1506)) - **legacy:** validate id param in show image controller ([#1510](https://github.com/libretime/libretime/issues/1510)) - **playout:** optional log_file for liquidsoap - **shared:** require click >=8.0.3 - **legacy:** correct linting issues - make vagrant source.list update idempotent ([#1520](https://github.com/libretime/libretime/issues/1520)) - **api:** duplicate exception raising and close file - **legacy:** api migration config variable name ([#1522](https://github.com/libretime/libretime/issues/1522)) - **shared:** prevent child override by empty dict - **shared:** tmp_path fixture type mismatch - **analyzer:** install missing steps package - **shared:** type is required for default config submodel ([#1536](https://github.com/libretime/libretime/issues/1536)) - **legacy:** default values when array is null - **legacy:** do not catch too broad exceptions - **legacy:** add more null check in api live info - **legacy:** only render if img creation succeed ([#1540](https://github.com/libretime/libretime/issues/1540)) - **shared:** pin loguru version - **legacy:** clean sql migrations files ([#1545](https://github.com/libretime/libretime/issues/1545)) - **shared:** set logger encoding and dont assume encoding - **playout:** proper logger format string - **playout:** only exclude ended file event - **api_client:** use same date format as schedule key - **api_client:** properly enclose events in media dict - **playout:** properly populate scheduled_now_webstream - **legacy:** revert default storage path ([#1563](https://github.com/libretime/libretime/issues/1563)) - **legacy:** update setup with new db config schema ([#1567](https://github.com/libretime/libretime/issues/1567)) - **shared:** do not strip vhost slash ([#1594](https://github.com/libretime/libretime/issues/1594)) - **analyzer:** remove bad attributes in shutdown handler ([#1605](https://github.com/libretime/libretime/issues/1605)) - **analyzer:** update docstring for organise_file - **shared:** fix missing port in public_url - change celery user in worker service file ([#1638](https://github.com/libretime/libretime/issues/1638)) - **api:** model_bakery is a dev dependency - **api:** static_url settings is required in dev mode ([#1662](https://github.com/libretime/libretime/issues/1662)) - **api_client:** comply to legacy schedule events - **playout:** remove stream_buffer_start in event dispatch - add PPA for newer liquidsoap version on Ubuntu - upgrade python packages during install ([#1707](https://github.com/libretime/libretime/issues/1707)) - **installer:** test and create correct log path - **installer:** remove rougue reference to /var/log/airtime ([#1710](https://github.com/libretime/libretime/issues/1710)) - **installer:** remove /var/tmp/airtime reference - **worker:** drop logfile reference until environment variable expansion works correctly ## :arrow_up: Upgrading ### Analyzer certificate verification Analyzer no longer ignore certificate verification when performing a request. We recommend using Let's Encrypt to get a certificate. If you do rely on self signed certificate, please read the [requests](https://requests.readthedocs.io/) documentation to provide a CA Bundle to verify the cert using environment variables. ### Analyzer new command line interface The Analyzer command line interface has been reworked and uses new flags. - `--debug` flag becomes `--log-level ` - `--rmq-config-file` flag becomes `--config ` - `--http-retry-queue-file` flag becomes `--retry-queue-filepath`. - `retry-queue-filepath` default value changed from `/tmp/airtime_analyzer_http_retries` to `retry_queue` in the working directory. ### New configuration schema and validation The configuration file parsing was improved with validation and the configuration schema was updated. Some deprecated fields were removed and other were renamed. The `general` section has been changed: - the `general.web_server_user` entry was removed - the `general.cache_ahead_hours` entry now defaults to 1 - the `general.airtime_dir` entry is deprecated and can be removed - the `general.station_id` entry is deprecated and can be removed - the `general.protocol` (`http` or `https`) entry is recommended over the `general.force_ssl` entry. - the `general.force_ssl` entry should either be removed or set to a value (`true` or `false`), an empty value will fail validation. The storage (`current_backend`) section has been changed: - the `current_backend.storage_backend` entry now defaults to the only valid value `file`. :::note You can remove the entire `current_backend` section from your configuration file. ::: The `database` section has been changed: - the `database.*` entries now have defaults - the `database.port` entry was added and defaults to `5432` - the `database.dbname` entry was renamed to `database.name` - the `database.dbuser` entry was renamed to `database.user` - the `database.dbpass` entry was renamed to `database.password` The `rabbitmq` section has been changed: - the `rabbitmq.*` entries now have defaults The `pypo` section has been changed: - the `pypo` section was renamed to `playout` - the `pypo.ls_*` entries were renamed to `playout.liquidsoap_*` - the `pypo.*_dir` entries were removed - the `pypo.api_client` entry was removed - the `pypo.record_file_type` entry was renamed to `playout.record_file_format` - the `pypo.base_recorded_files` entry was removed - the `pypo.poll_interval` entry was removed - the `pypo.push_interval` entry was removed - the `pypo.cue_style` entry was removed The deprecated sections `monit` and `facebook` are unused, they can be removed from your configuration file. Unless you use a custom auth mechanism, the `ldap` section can be removed from your configuration file. Remove any quoted values in your configuration file, validation might fail otherwise. See the following example: ```ini # The previously quoted value ls_port = '1234' # should become liquidsoap_port = 1234 ``` Please see the [configuration documentation](../admin-manual/configuration.md) for more details. ### Environment variables The API configuration environment variables names changed: - `LIBRETIME_CONF_DIR` was removed - `LIBRETIME_CONF_FILE` was renamed to `LIBRETIME_CONFIG_FILEPATH` The Analayzer configuration environment variables names changed: - `LIBRETIME_CONF_DIR` environment variable was replaced with `LIBRETIME_CONFIG_FILEPATH`. The Worker configuration environment variables names changed: - `RMQ_CONFIG_FILE` was renamed to `LIBRETIME_CONFIG_FILEPATH`. ### Log files new paths When running Playout from the command line, the service won't log to a file by default. When running Playout as a systemd service, the log file moved from `/var/log/airtime/pypo/pypo.log` to `/var/log/libretime/playout.log` The Playout Notify log file at `/var/log/airtime/pypo-liquidsoap/notify.log` was removed and merged into the existing `/var/log/libretime/liquidsoap.log` log file. When running Liquidsoap from the command line, the service won't log to a file by default. When running Liquidsoap as a systemd service, the log file moved from `/var/log/airtime/pypo-liquidsoap/ls_script.log` to `/var/log/libretime/liquidsoap.log` The Legacy log file moved from `/var/log/airtime/zendphp.log` to `/var/log/libretime/legacy.log` The API log file moved from `/var/log/airtime/api.log` to `/var/log/libretime/api.log` Run the following command to create the new and clean the old log directory: ```bash sudo mkdir -p /var/log/libretime sudo chown -R www-data:www-data /var/log/libretime sudo rm -rf /var/log/airtime ``` ### Services new working directories When running Playout as a systemd service, the working directory changed from `/var/tmp/airtime/pypo/` to `/var/lib/libretime/playout`. When running from the command line, the users current working directory is now used by default. When running Liquidsoap as a systemd service, the working directory is now `/var/lib/libretime/playout`. When running from the command line, the users current working directory is now used by default. When running Analyzer as a systemd service, the working directory is now `/var/lib/libretime/analyzer`. When running Worker (celery) as a systemd service, the working directory changed from `/srv/airtime` to `/var/lib/libretime/worker`. Run the following command to clean the old directory: ```bash sudo rm -rf /var/tmp/airtime/pypo/ ``` ### Analyzer new `ffmpeg` based steps The Analyzer now requires `ffmpeg`. The `silan` system dependency and the `rgain3` python package and it's system dependencies can be removed. Run the following command to clean the old packages: ```bash sudo apt purge silan sudo apt purge \ gir1.2-gtk-3.0 \ libcairo2-dev \ libgirepository1.0-dev \ libglib2.0-dev \ pkg-config \ python3-cairo \ python3-dev \ python3-gi \ python3-gi-cairo \ python3-gst-1.0 sudo pip3 uninstall rgain3 ``` ### No static files for the API The API doesn't rely on static files in production anymore. Run the following command to clean the old files: ```bash sudo rm -rf /usr/share/airtime/api ``` ## :warning: Known issues The following issues may need a workaround for the time being. Please search the [issues](https://github.com/libretime/libretime/issues) before reporting problems not listed below. ### Ubuntu 18.04 Playout Status The playout status notifications in the web interface aren't working. The issue is tracked in [#1606](https://github.com/libretime/libretime/issues/1606). The playout works correctly and can be heard in Icecast, however the **On Air** button is greyed out and the status reported on the **Streams** status page can report errors connecting to Liquidsoap. The current workaround is to upgrade the server to Ubuntu 20.04.