vibe = (icecast + NetBSD)

Dernière étape de la migration des services de l’ancien iMil.net vers son nouveau foyer: icecast.

Alors que je me préparais à l’enfermer dans un chroot comme quelques-uns de ses petits camarades, je me suis souvenu que icecast supportait déjà cette fonction. Sa configuration est une promenade de santé.

Après l’avoir installé via un bête pkgin in icecast-2, l’édition de son fichier de configuration, si l’on fait abstraction de cette saloperie de format XML, est assez rapide, voici les sections qu’il vous faudra renseigner dans le fichier /usr/pkg/etc/icecast/icecast.xml afin de rapidement diffuser du son sur l’intarwebz :


[…]
<authentication>
<!– Sources log in with username ‘source’ –>
<source -password>motdepassecomplique</source>
<!– Relays log in username ‘relay’ –>
<relay -password>motdepassecomplique</relay>

    &lt;!-- Admin logs in with the username given below --&gt;
    &lt;admin -user&gt;admin&lt;/admin&gt;
    &lt;admin -password&gt;motdepasseencorepluscomplique&lt;/admin&gt;
&lt;/authentication&gt;

[…]
<hostname>ta.radio.quidemonte.net</hostname>
[…]
<paths>
<!– basedir is only used if chroot is enabled –>
<basedir>/var/chroot/icecast</basedir>
<!– Note that if <chroot> is turned on below, these paths must both
be relative to the new root, not the original root –>
<logdir>log/</logdir>
<webroot>web/</webroot>
<adminroot>admin/</adminroot>
<pidfile>/var/chroot/icecast/icecast.pid</pidfile>
[…]
<security>
<chroot>1</chroot>
<changeowner>
<user>icecast</user>
<group>icecast</group>
</changeowner>
</security>

</paths>

On notera que la directive chroot est à 1 et que les path sont relatifs au chroot, ce qui nous donne /var/chroot/icecast/{web,log,admin}. Il sera enfin nécessaire de copier le contenu des repertoires /usr/pkg/share/icecast/{web,admin} dans leurs équivalents chrootés, puis de configurer le démarrage automatique d’icecast :

cp /usr/pkg/share/examples/rc.d/icecast /etc/rc.d/

echo “icecast=YES” >> /etc/rc.conf

/etc/rc.d/icecast start


À toutes fins utiles, je colle ici la configuration du client ices2, qui permet le streaming effectif d’une source audio :


$ cat etc/ices2.xml
< ?xml version=”1.0”?>
<ices>

&lt;!-- run in background  --&gt;
&lt;background&gt;0&lt;/background&gt;
&lt;!-- where logs go. --&gt;
&lt;logpath&gt;/var/log/ices&lt;/logpath&gt;
&lt;logfile&gt;ices.log&lt;/logfile&gt;
&lt;!-- size in kilobytes --&gt;
&lt;logsize&gt;2048&lt;/logsize&gt;
&lt;!-- 1=error, 2=warn, 3=infoa ,4=debug --&gt;
&lt;loglevel&gt;4&lt;/loglevel&gt;
&lt;!-- logfile is ignored if this is set to 1 --&gt;
&lt;consolelog&gt;0&lt;/consolelog&gt;

&lt;!-- optional filename to write process id to --&gt;
&lt;!-- &lt;pidfile&gt;/home/ices/ices.pid --&gt;

&lt;stream&gt;
    &lt;!-- metadata used for stream listing --&gt;
    &lt;metadata&gt;
        &lt;name&gt;Du bon SON&lt;/name&gt;
        &lt;genre&gt;Du qui tape&lt;/genre&gt;
        &lt;description&gt;Du qui fait que tu put tes hands in the air&lt;/description&gt;
        &lt;url&gt;http://ta.radio.quidemonte.net:8000&lt;/url&gt;
    &lt;/metadata&gt;

    &lt;!--    Input module.

        This example uses the 'oss' module. It takes input from the
        OSS audio device (e.g. line-in), and processes it for live
        encoding.  --&gt;
    &lt;input /&gt;
        &lt;module&gt;alsa&lt;/module&gt;
        &lt;param name="rate"&gt;48000&lt;/param&gt;
        &lt;param name="channels"&gt;2&lt;/param&gt;
        &lt;param name="device"&gt;hw:0,0&lt;/param&gt;
        &lt;!-- Read metadata (from stdin by default, or --&gt;
        &lt;!-- filename defined below (if the latter, only on SIGUSR1) --&gt;
        &lt;param name="metadata"&gt;1&lt;/param&gt;
        &lt;param name="metadatafilename"&gt;test&lt;/param&gt;

    &lt;!--    Stream instance.

        You may have one or more instances here.  This allows you to
        send the same input data to one or more servers (or to different
        mountpoints on the same server). Each of them can have different
        parameters. This is primarily useful for a) relaying to multiple
        independent servers, and b) encoding/reencoding to multiple
        bitrates.

        If one instance fails (for example, the associated server goes
        down, etc), the others will continue to function correctly.
        This example defines a single instance doing live encoding at
        low bitrate.  --&gt;

    &lt;instance&gt;
        &lt;!--    Server details.

            You define hostname and port for the server here, along
            with the source password and mountpoint.  --&gt;

        &lt;hostname&gt;ta.radio.quidemonte.net&lt;/hostname&gt;
        &lt;port&gt;8000&lt;/port&gt;
        &lt;password&gt;motdepassecomplique&lt;/password&gt;
        &lt;mount&gt;/jumpjump.ogg&lt;/mount&gt;
        &lt;yp&gt;0&lt;/yp&gt;   &lt;!-- allow stream to be advertised on YP, default 0 --&gt;

        &lt;!--    Live encoding/reencoding:

            channels and samplerate currently MUST match the channels
            and samplerate given in the parameters to the oss input
            module above or the remsaple/downmix section below.  --&gt;

        &lt;encode&gt;  
            &lt;quality&gt;0&lt;/quality&gt;
            &lt;samplerate&gt;48000&lt;/samplerate&gt;
            &lt;channels&gt;2&lt;/channels&gt;
        &lt;/encode&gt;

        &lt;!-- stereo-&gt;mono downmixing, enabled by setting this to 1 --&gt;
        &lt;downmix&gt;0&lt;/downmix&gt;

        &lt;!-- resampling.

            Set to the frequency (in Hz) you wish to resample to, --&gt;

        &lt;!--resample&gt;
            &lt;in -rate&gt;44100&lt;/in&gt;
            &lt;out -rate&gt;44100&lt;/out&gt;
        &lt;/resample --&gt;
    &lt;/instance&gt;

&lt;/stream&gt;

</ices>

Et voila ! Ton petit monde peut désormais écouter tes exploits sur http://ta.radio.quidemonte.net:8000/jumpjump.ogg

Je rappelle également que dans 2 semaines, c’est la Miami Winter Conference 2010, que c’est le 25ème anniversaire de cette grand messe, et qu’ILS y seront.

Ça y est. Enfin. Ça va recommencer.