Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
A
autoradio
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ale
autoradio
Commits
e20cd79e
Commit
e20cd79e
authored
11 years ago
by
ale
Browse files
Options
Downloads
Patches
Plain Diff
updated documentation
parent
45a1b610
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
README
+0
-7
0 additions, 7 deletions
README
README.rst
+102
-0
102 additions, 0 deletions
README.rst
with
102 additions
and
7 deletions
README
deleted
100644 → 0
+
0
−
7
View file @
45a1b610
radio.ai
========
A distributed, fault-tolerant icecast streaming network.
This diff is collapsed.
Click to expand it.
README.rst
0 → 100644
+
102
−
0
View file @
e20cd79e
radio.ai
========
The RadioAI service aims to provide a reliable, fault-tolerant Icecast
streaming network for audio and video. It provides all the necessary
components to ensure that the traffic from the source to the clients
is uninterrupted, even in face of high load or server crashes.
It is a full-stack service, meaning that it includes its own DNS and
HTTP servers, for full control of the request flow.
RadioAI works by using etcd_ to coordinate the various nodes and store
the global mount configuration. The intended target is a set of
homogeneous servers (or virtual machines) dedicated to this purpose.
RadioAI also needs a dedicated DNS domain (or a delegation for a
subdomain).
Installation
------------
The simplest installation method is probably to use the pre-built
Debian packages (only available for amd64 at the moment), by placing
this line in ``/etc/apt/sources.list.d/radioai.list``::
deb http://www.incal.net/ale/debian radioai/
And then running::
$ sudo apt-get update
$ sudo apt-get install etcd radioai
This will install and start the necessary jobs (which will initially
fail due to the missing configuration).
Edit ``/etc/default/radioai`` and set, at least, the ``DOMAIN``
variable to what you've assigned to the cluster. The jobs will
automatically start as soon as the configuration is saved.
Securing etcd
+++++++++++++
In a production cluster, you will want to limit access to the *etcd*
daemons so that only the other nodes can connect to it. While it is
possible to do this with firewall rules, the dynamic membership of the
cluster may make this difficult. We suggest using instead *etcd*'s
support for X509 client authentication, together with a tool to manage
an online CA (such as autoca_). This way, enrolling a new machine in
the cluster only requires generating a new client certificate, and no
other configuration.
Install the CA certificate in ``/etc/radioai/etcd_ca.pem``, the client
certificate in ``/etc/radioai/etcd_client.pem`` and its private key in
``/etc/radioai/etcd_client.key``, and the clients will connect to
*etcd* using SSL authentication.
Operation
---------
In order to create a new stream (*mount*, in the Icecast terminology),
assuming you are running RadioAI on the ``example.com`` domain:
#. On any node, run::
$ radioctl create-mount /path/to/mount.ogg
this will output the username and password used to authenticate the
source. Take note of them.
The cluster will be automatically reconfigured with the new mount in
a few seconds at most.
#. Configure the source, using the username/password provided in the
previous step, and point it at the following URL::
http://stream.example.com/path/to/mount.ogg
#. Tell your users to listen to the stream at::
http://stream.example.com/path/to/mount.ogg.m3u
DNS zone delegation
+++++++++++++++++++
Since we can't modify the DNS glue records for the zone delegation in
real-time, we have to restrict slightly the assumptions on the
availability of nodes in the cluster: you have to assume that at least
N of your nodes will be partially available at any one time (i.e. at
least one of a chosen subset of N servers will be reachable). The
number N should be fairly low, say 3. Then, you can use those 3
servers as the nameservers for zone delegation, and the other nodes
are free to have dynamic membership.
.. _etcd: https://github.com/coreos/etcd
.. _autoca: https://git.autistici.org/public/ai/autoca
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment