Category Archives: Linux & Software

Problemi di sicurezza per OpenSSL 1.1.0

Il giorno 10 novembre 2016 è stata trovata una falla di sicurezza nel pacchetto OpenSSL release 1.1.0.

La severity di questo bug è stata fissata ad “high” e, come si spiega nel security advisory riguarda la possibilità di poter effettuare attacchi DOS (Denial Of Service), ed arrivare all’effettivo crash di OpenSSL.

Fortunatamente però, la falla di sicurezza non permetterebbe l’accesso alla macchina da parte di hattacker.

Si consiglia quindi l’aggiornamento di OpenSSL alla versione 1.1.0a. Al momento una patch è già uscita, le principali distribuzioni renderanno disponibile l’aggiornamento in tempi brevi.

Share This:

How-to: Installazione di Docker

Introduzione

Docker è un’applicazione che rende semplice la possibilità di utilizzare applicazioni all’interno di un container. I container sono simili alle macchine virtuali, però più portabili, e più dipendenti dalla macchina host, in quanto ne condividono le risorse hardware e il kernel.
In questo tutorial vi spiegherò come installare Docker su Ubuntu 16.04.

Prerequisiti

Per questo tutorial avrete bisogno di:

  • Installazione di Ubuntu 16.04 su macchina fisica a 64bit
  • Utente non root con i privilegi Sudo

Nota: Docker necessita di un’installazione fisica a 64 bit e una versione del kernel uguale o superiore a 3.10. Ubuntu soddisfa le seguenti richieste.

Tutti i comandi di questo tutorial dovrebbero essere lanciati da utenti NON root, se è richiesto l’accesso di root, il comando verrà preceduto da “sudo”.

Step 1: Installare Docker

Il pacchetto di installazione di Docker è presente nei repository ufficiali di Ubuntu 16.04, però potrebbe non essere aggiornato all’ultima versione, per questo è meglio utilizzare il repository ufficiale Docker, dove troveremo sempre le versioni più aggiornate.

Prima di tutto aggiorniamo il database dei pacchetti:

sudo apt-get update

Ora aggiungiamo la chiave GPG del repository di Docker nel portachiavi di sistema:

sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Aggiungiamo poi il repository di Docker al nostro Ubuntu:

echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list

Aggiorniamo di nuovo la lista pacchetti:

sudo apt-get update

Sinceriamoci che la versione di Docker che andremo a installare provenga dal repository Docker e non da quello ufficiale Ubuntu:

apt-cache policy docker-engine

Dovreste ottenere un output di questo tipo:

docker-engine:
Installed: (none)
Candidate: 1.11.1-0~xenial
Version table:
1.11.1-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages
1.11.0-0~xenial 500
500 https://apt.dockerproject.org/repo ubuntu-xenial/main amd64 Packages

Se tutto è andato come previsto, installiamo Docker:

sudo apt-get install -y docker-engine

A questo punto Docker dovrebbe essere stato installato, abilitato al boot e dovrebbe essere già attivo. Per conoscere lo stato di Docker digitiamo:

sudo systemctl status docker

Questo è l’output che dovremmo ricevere:

● docker.service – Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2016-05-01 06:53:52 CDT; 1 weeks 3 days ago
Docs: https://docs.docker.com
Main PID: 749 (docker)

Installando Docker avrai accesso non solo al demone, ma anche all’utility docker indispensabile per poter configurare/utilizzare Docker.

Vediamo come utilizzare questo comando.

Step 2: Utilizzare Docker senza l’utilizzo di Sudo

Normalmente Docker è un comando che prevede i privilegi di Root, è per questo che dovete sempre usare sudo per poterlo usare. Tale comando però, può essere utilizzato anche dagli utenti che fanno parte del gruppo docker che è automaticamente creato in fase di installazione. Se provate quindi ad utilizzare docker con un utente differente, otterrete il seguente risultato:

docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See ‘docker run –help’.

Se volete utilizzare Docker con il vostro utente normale, dovrete aggiungervi al gruppo docker:

sudo usermod -aG docker $(whoami)

Dovrete effettuare il logout/login per rendere effettive le modifiche.

Il resto di questo tutorial assume che voi utilizziate Docker tramite un utente limitato appartenente al gruppo docker, pertanto da qui in poi sudo verrà omesso.

Step 3 — Usare il comando docker

Con Docker installato e funzionante, è l’ora di divenire familiare con la sua utility a riga di comando. Utilizzarla – come la maggior parte dei software GNU/Linux – consiste nel passargli una serie di opzioni seguite dai relativi argomenti. La sintassi ha questa forma:

docker [option] [command] [arguments]

Per vedere tutte le opzioni disponibili basterà digitare il comando:

docker

Avrete quindi un output di questo tipo:

attach Attach to a running container
build Build an image from a Dockerfile
commit Create a new image from a container’s changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes on a container’s filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container’s filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
network Manage Docker networks
pause Pause all processes within a container
port List port mappings or a specific mapping for the CONTAINER
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart a container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
update Update configuration of one or more containers
version Show the Docker version information
volume Manage Docker volumes
wait Block until a container stops, then print its exit code

Per vedere tutte le sotto opzioni dovrete digitare:

docker docker-sottocomando --help

Per vedere le informazioni generali dovrete digitare:

docker info

Step 4: Lavorare con le immagini docker

I container Docker vengono sviluppati dalle immagini Docker. Normalmente si possono prendere delle immagini preconfigurate direttamente dal Docker Hub, un repository di immagini gestito dalla società che ha creato Docker. Molte volte troverete l’immagine che cercate direttamente nel Docker Hub.

Per controllare il corretto accesso al Docker Hub digitate:

docker run hello-world

L’output che dovreste ricevere è:

Hello from Docker.
This message shows that your installation appears to be working correctly.

Potete cercare le immagini Docker utilizzando il comando search:

docker search ubuntu

Lo script prenderà i dati dal Docker Hub e vi restituirà un output simile a questo:

NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s… 3808 [OK]
ubuntu-upstart Upstart is an event-based replacement for … 61 [OK]
torusware/speedus-ubuntu Always updated official Ubuntu docker imag… 25 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of… 24 [OK]
ubuntu-debootstrap debootstrap –variant=minbase –components… 23 [OK]
nickistre/ubuntu-lamp LAMP server on Ubuntu 6 [OK]
nickistre/ubuntu-lamp-wordpress LAMP on Ubuntu with wp-cli installed 5 [OK]
nuagebec/ubuntu Simple always updated Ubuntu docker images… 4 [OK]
nimmis/ubuntu This is a docker images different LTS vers… 4 [OK]
maxexcloo/ubuntu Docker base image built on Ubuntu with Sup… 2 [OK]
admiringworm/ubuntu Base ubuntu images based on the official u… 1 [OK]

Una volta che hai identificato l’immagine che ti interessa, la puoi scaricare tramite il comando pull:

docker pull ubuntu

Una volta che l’immagine è stata scaricata, potete utilizzarla utilizzando l’istruzione run

docker run ubuntu

Per avere una lista delle immagini scaricate, utilizzate l’istruzione images:

docker images

Dovreste ricevere un output simile a questo:

REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest c5f1cf30c96b 7 days ago 120.8 MB
hello-world latest 94df4f0ce8a4 2 weeks ago 967 B

Queste immagini potranno poi essere modificate per creare altre immagini Docker, ed essere inviate (pushed) al Docker Hub e ad altri registry Docker.

Step 5: Utilizzare un container Docker

Prendendo come esempio l’immagine di Ubuntu scaricata in precedenza, utilizzatela facendo il deploy di un nuovo container:

docker run -it ubuntu

le opzioni -i e -t vi forniranno una console interattiva collegata al container.

Il prompt dei comandi quindi dovrà cambiare, in questo modo si entrerà dentro il container:

root@d9b100f2f636:/#

Come vedete, potete lavorare all’interno del container con le credenziali di root.

A questo punto, potete lavorare dentro al container utilizzando le più comuni utility GNU/Linux. Ad esempio installiamo postfix:

apt-get install -y postfix

Step 6: Controllare i tuoi container

Dopo aver utilizzato Docker per un po’, avrete diversi container attivi o meno. Per vedere i container attivi digitate:

docker ps

Avrete un output simile a questo.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f7c79cc556dd ubuntu “/bin/bash” 3 hours ago Up 3 hours silly_spence

Per vedere tutti i container, attivi e passivi digitate:

docker ps -a

Per vedere l’ultimo container creato digitate:

docker ps -l

Per fermare un container digitate:

docker stop container-id

Il container-id può essere trovato utilizzando il comando docker ps

Conclusione

Docker è uno strumento molto completo, e c’è molto da imparare per poterlo usare al meglio. Con questo tutorial però potrete già iniziare a usare Docker per i vostri progetti o per apprendimento.

Liberamente tratto da Digital Ocean

Share This:

Installazione della Chiavetta Onda MDC655 su Linux

Mi sono trovato in mano una Chiavetta TIM Onda MDC655 – quella della Ducati per intendersi -. Vediamo come utilizzarla su Linux senza installare il programma fornito da TIM.

Non mi sono mai piaciuti i programmi per le chiavette 3g/4g forniti dagli operatori telefonici (per Linux sono anche molto rari). Li trovo poco estetici e malfunzionanti. Per questo sono un grande fan di usb_modeswitch, software per far funzionare gran parte di questi device su Linux nativamente con wvdial. La Onda Ducati non è presente nella lista dei device supportati da usb_modeswitch, però è possibile utilizzarla ugualmente.

Prima di tutto installiamo usb_modeswitch:

apt-get install usb_modeswitch

Una volta inserito il device nella porta USB del pc, facendo un listato delle periferiche USB attaccate avremo:

lsub


[...]
Bus 001 Device 005: ID 1ee8:004a
[...]

Controllando il log del kernel avremo qualcosa simile a:

[ 9.840656] scsi 2:0:0:0: CD-ROM ONDA Datacard CD-ROM 0001 PQ: 0 ANSI: 0
[ 9.848203] scsi 2:0:0:1: Direct-Access ONDA Mass Storage 0001 PQ: 0 ANSI: 0
[ 9.856191] sd 2:0:0:1: [sdb] Attached SCSI removable disk
[ 9.857775] usb-storage: device scan complete
[ 9.934764] sr0: scsi3-mmc drive: 0x/0x caddy
[ 9.937760] Uniform CD-ROM driver Revision: 3.20
[ 9.940994] sr 2:0:0:0: Attached scsi CD-ROM sr0

Per poter effettuare lo switch al modem, dovremo digitare:

usb_modeswitch --default-vendor 0x1ee8 --default-product 0x004a --message-content 555342431234567800000000000010ff000000000000000000000000000000

Controlliamo di nuovo la lista dei device attaccati, dovremmo avere qualcosa simile a:

lsusb


[...]
Bus 001 Device 005: ID 1ee8:0049
[...]

e se controlliamo di nuovo i log del kernel avremo:

[ 96.663358] cdc_acm 1-3:1.0: ttyACM0: USB ACM device
[ 96.665830] cdc_acm 1-3:1.2: ttyACM1: USB ACM device
[ 96.669966] usbcore: registered new interface driver cdc_acm
[ 96.671791] cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
[ 96.699277] usb0: register 'cdc_ether' at usb-0000:00:1d.7-3, CDC Ethernet Device, 02:8b:78:ec:ce:09
[ 96.701702] usbcore: registered new interface driver cdc_ether

La nostra pennetta ha effettuato lo switch come modem. Andiamo ora a configurare wvdial, questa è la configurazione per TIM:

vim /etc/wvdial.conf


[Dialer Defaults]
Modem = /dev/ttyACM1
ISDN = off
Modem Type = Analog Modem
Baud = 921600
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","ibox.tim.it"
Phone = *99#
Dial Command = ATDT
Dial Attempts = 1
Ask Password = off
Username = " "
Password = " "
Auto Reconnect = on
Abort on Busy = off
Carrier Check = on
Check Def Route = on
Abort on No Dialtone = on
Stupid Mode = on
Idle Seconds = 0
Auto DNS = on

Chiudiamo e proviamo a connetterci:

wvdial

Se ci viene restituito un errore, proviamo a cambiare

Modem = /dev/ttyACM1

con

Modem = /dev/ttyACM0

Share This:

Configurazione di un bonding tra due schede di rete

In questo articolo vedremo come configurare il link aggregation (Bonding) di due schede di rete in Debian, utile per creare connessioni ridondate ed aumentare il throughput del nostro server.

Il software di cui abbiamo bisogno è “ifenslave”, che serve per attivare o disattivare il bonding tra le due schede.

Un bonding device si comporterà come una normale interfaccia ethernet, ma invierà i pacchetti attraverso le interfacce secondarie (slaves) attraverso uno scheduler round-robin. Questo permette un load-balancing, del tutto simile alle tecniche Channel Bonding o Trunking usati negli switch.

Nel nostro esempio abbiamo due interfacce di rete:

202.54.1.1 (eth0)
192.168.1.254 (eth1)

Installiamo ifenslave:

apt-get install ifenslave-2.6

Creiamo ora un file chiamato /etc/modprobe.d/bonding.conf:

vim /etc/modprobe.d/bonding.conf

e vi inseriamo:

alias bond0 bonding
options bonding mode=0 arp_interval=100 arp_ip_target=192.168.1.254, 192.168.1.12

Salviamo e chiudiamo il file. Questa configurazione è molto importante in quanto sarà usata dal driver del Kernel di Linux chiamato “bonding”. Le opzioni sopra inserite sono:

  • mode=0: Dice al driver di usare lo scheduler balance-rr, che sarebbe il round robin. Questo è la modalità di default.
  • arp_interval=100: è l’intervallo (in millisecondi) per il controllo l’arp monitoring. Senza questo parametro all’avvio riceverete molti warning.
  • arp_ip_target=192.168.1.254, 192.168.1.12: usa l’interfaccia collegata al router (192.168.1.254) e l’IP 192.168.1.2 per effettuare l’arp monitoring quando l’arp_interval > 0. Questo è usato per determinare la salute dei nostri link. Possiamo inserire più indirizzi IP, delimitati da una virgola. Dobbiamo inserire chiaramente almeno un indirizzo IP.

A questo momento carichiamo il driver:

modprobe bonding

Controlliamo che l’interfaccia virtuale sia stata creata:

ifconfig bond0

Ora fermiamo le due interfacce preconfigurate:

/etc/init.d/networking stop

Mofifichiamo il file di configurazione della rete di debian:

cp /etc/network/interfaces /etc/network/interfaces.bak
vim /etc/network/interfaces

Eliminiamo le entry eth0 ed eth1 che al momento non servono più ed inseriamo la entry relativa al bonding:

# The primary network interface
auto bond0
iface bond0 inet static
address 192.168.1.10
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.254
slaves eth0 eth1
# jumbo frame support
mtu 9000
# Load balancing and fault tolerance
bond-mode balance-rr
bond-miimon 100
bond-downdelay 200
bond-updelay 200

Salviamo e chiudiamo.

Un po’ di spiegazione su quest’ultima entry:

  • address 192.168.1.10: indirizzo IP di bond0
  • netmask 255.255.255.0: netmask di bond0
  • network 192.168.1.0: network di bond0
  • gateway 192.168.1.254: default gateway di bond0
  • slaves eth0 eth1: specifichiamo le interfacce reali dove fare il bonding
  • mtu 9000: settiamo l’MTU a 9000
  • bond-mode balance-rr: settiamo il bonding come “Load balancing and fault tolerance”
  • bond-miimon 100: settiamo il link monitoring a 100 millisecondi
  • bond-downdelay 200: ritardo massimo di un link prima di essere dichiarato “failed”
  • bond-updelay 200: ritardo massimo di un link prima di essere dichiarato “up”

A questo punto effettuiamo un restart della rete:

/etc/init.d/networking restart

Controlliamo che tutto sia andato bene:

ifconfig

Dovremmo avere qualcosa simile a:

bond0 Link encap:Ethernet HWaddr 00:xx:yy:zz:tt:31
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::208:9bff:fec4:3031/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:9000 Metric:1
RX packets:2414 errors:0 dropped:0 overruns:0 frame:0
TX packets:1559 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:206515 (201.6 KiB) TX bytes:480259 (469.0 KiB)
eth0 Link encap:Ethernet HWaddr 00:xx:yy:zz:tt:31
UP BROADCAST RUNNING SLAVE MULTICAST MTU:9000 Metric:1
RX packets:1214 errors:0 dropped:0 overruns:0 frame:0
TX packets:782 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103318 (100.8 KiB) TX bytes:251419 (245.5 KiB)
Memory:fe9e0000-fea00000
eth1 Link encap:Ethernet HWaddr 00:xx:yy:zz:tt:31
UP BROADCAST RUNNING SLAVE MULTICAST MTU:9000 Metric:1
RX packets:1200 errors:0 dropped:0 overruns:0 frame:0
TX packets:777 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:103197 (100.7 KiB) TX bytes:228840 (223.4 KiB)
Memory:feae0000-feb00000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:560 (560.0 B) TX bytes:560 (560.0 B)

Per controllare lo status del bonding possiamo digitare:

cat /proc/net/bonding/bond0

Dovremmo avere qualcosa simile a:

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:xx:yy:zz:tt:31
Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:xx:yy:zz:tt:30

Se un link aggregation non è andato a buon fine avremo:

cat /proc/net/bonding/bond0

 

Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200
Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:xx:yy:zz:tt:31
Slave Interface: eth1
MII Status: down
Link Failure Count: 1
Permanent HW addr: 00:xx:yy:zz:tt:30

Vi ricordo che anche il file /var/log/messages contiene importanti informazioni sullo stato del bonding:

Sep 5 04:20:21 nas01 kernel: [ 6517.492974] e1000e: eth1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX
Sep 5 04:20:21 nas01 kernel: [ 6517.548029] bonding: bond0: link status up for interface eth1, enabling it in 200 ms.
Sep 5 04:20:21 nas01 kernel: [ 6517.748016] bonding: bond0: link status definitely up for interface eth1.

Sep 5 04:16:15 nas01 kernel: [ 6271.468218] e1000e: eth1 NIC Link is Down
Sep 5 04:16:15 nas01 kernel: [ 6271.548027] bonding: bond0: link status down for interface eth1, disabling it in 200 ms.
Sep 5 04:16:15 nas01 kernel: [ 6271.748018] bonding: bond0: link status definitely down for interface eth1, disabling it

Politiche di link aggregation del bonding di Linux

  • balance-rr or 0: Politica di round robin. I pacchetti sono inviati in sequenza dal primo slave disponibile fino all’ultimo. Questa modalità supporta il load balancing ed il fault tollerance.
  • active-backup or 1: Politica di backup attivo. Solo uno slave nel bond è attivo, Un altro slave diventa attivo soltanto se il primo fallisce. Questa modalità supporta il fault tollerance.
  • balance-xor or 2: secondo altre fonti la policy di default è [(source MAC address XOR’d with destination MAC address) modulo slave count]. Fornisce load balancing e fault tollerance
  • broadcast or 3: Trasmette tutto il traffico a tutti gli slave
  • 802.3ad or 4: Crea gruppi di aggregazione che condividono la stessa velocità e duplex. Utilizza gli slave attivi secondo lo standard 802.3ad. Molti switch avranno bisogno di configurazioni avanzate per utilizzare 802.3ad.
  • balance-tlb or 5: Il traffico in uscita è instradato secondo il carico sulle singole interfacce di rete. Il traffico in entrata è ricevuto dallo slave corrente. Se lo slave ricevente fallisce, un altro slave diventerà automaticamente ricevente prendendo il suo mac address.
  • balance-alb or 6: include il balance-tlb ed in più effettua il load balancing in entrata tramite l’arp negotiation.

Share This:

Creazione di una Web Radio completa

In questo articolo vi spiegherò come ho creato la mia web radio: Radio passaggio a Scirocco partendo da zero ed utilizzando supporti open-source e musica libera dai diritti d’autore.

Si parte inizialmente dalla filosofia e dalla possibilità o meno di “pagare”. Per avere una webradio “regolare” occorre essere iscritti alla SIAE. Ad oggi, per una radio da massimo 30 utenti simultanei NON COMMERCIALE bisogna pagare circa 300 euro l’anno.

Essendo il mio un progetto totalmente amatoriale e personale, ho deciso di evitare di pagare la SIAE e di utilizzare soltanto musica di artisti non iscritti alla SIAE (licenze creative common e aperte), però in caso vi interessasse qualcosa di più “main stram”, potete fare un giro nel sito di Mondo, che è molto ferrato in materia.

Per avere un po’ di buon “materiale” da suonare, mi sono fatto un giro su Free Music Archive, un database di musica gratuita che può essere riprodotta e scaricata gratis.

Al momento non prevedo di inserire delle trasmissioni “live“, ma di suonare musica a rotazione (un jukebox via internet insomma). Ho poi pensato che sarebbe stato meglio registrare le trasmissioni in locale e poi farle ruotare sul server. Questo perché non è facile con una strumentalizzazione amatoriale (pc + streaming server) creare buoni stacchi e tagli.

Come server utilizzerò una Debian Squeeze aggiornata, server web Apache e Icecast2 come server di streaming.

Per prima cosa installiamo icecast2 ed ices2, i due programmi che si occuperanno di effettuare lo streaming della musica ai vostri ascoltatori:

apt-get install icecast2 ices2

una volta installati, questi programmi vanno configurati. Si parte con il file di configurazione di icecast2: /etc/icecast2/icecast.xml. Le parti più importanti del file sono:

<--! massimo numero di clienti simultanei -->
<clients>100</clients>
<sources>2</sources>
<threadpool>5</threadpool>
<queue-size>902400</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>

<authentication>
<!-- Password di Ices2 -->
<source-password>sourcepass</source-password>
<!-- Password per Relay (inutilizzato al momento) -->
<relay-password>relaypass</relay-password>

<!-- Password per la web UI -->
<admin-user>admin</admin-user>
<admin-password>adminpass</admin-password>
</authentication>
<hostname>buleria.acido.be</hostname>

<listen-socket>
<port>8000</port>
<!-- <bind-address>109.169.37.166</bind-address> -->
<!-- <shoutcast-mount>/stream</shoutcast-mount> -->
</listen-socket>

Una volta modificato il file, lo avviamo:

/etc/init.d/icecast2 restart

Passiamo poi a ices2: prima di tutto creo il suo ambiente e mi prendo un file di configurazione standard:

mkdir -p /home/ices/music
cp /usr/share/doc/ices2/examples/ices-playlist.xml > /home/ices/

Inizio poi a modificare il file di configurazione. Ecco le parti più importanti:

<ices>
<!-- fork in background -->
<background>1</background>
<!-- location dei logs -->
<logpath>/var/log/ices</logpath>
<logfile>ices.log</logfile>
<!-- 1=error,2=warn,3=info,4=debug -->
<loglevel>4</loglevel>

<stream>

<input>
<module>playlist</module>
<param name="type">basic</param>
<param name="file">/home/ices/playlist.txt</param>
<!-- random play -->
<param name="random">1</param>
<!-- Se la playlist viene cambiata, il playback inizia da capo -->
<param name="restart-after-reread">0</param>
<!-- Se è messo a 1, riproduce tutta la playlist e poi esce -->
<param name="once">0</param>
</input>
<instance>
<!-- Credenziali per il collegamento ad icecast2 -->
<hostname>localhost</hostname>
<port>8000</port>
<password>sourcepass</password>
<mount>/radio</mount>
<reconnectdelay>2</reconnectdelay>
<reconnectattempts>5</reconnectattempts>
<maxqueuelength>80</maxqueuelength>
<encode>
<!-- Bitrate -->
<nominal-bitrate>64000</nominal-bitrate>
<samplerate>44100</samplerate>
<channels>2</channels>
</encode>
</instance>

</stream>
</ices>

A questo punto dobbiamo caricare la nostra prima canzone! Ices2 utilizza OGG come formato musicale open source, quindi probabilmente dovremo convertire il nostro mp3 prima di poterlo mettere in playlist:

mpg321 -q nomefile.mp3 -w - | oggenc -b256 -o nomefile.ogg -

e poi metterlo in playlist:

ls ./*.ogg > /home/ices/playlist.txt

Nel mio caso, dopo qualche test ho preferito effetturare l’encoding del file a 256kb/s ed uno stream a 64kb/s. Questo mi permette di risparmiare banda utilizzando uno stream bitrate basso, ma di avere comunque una buona qualità di ascolto.

Feedbacks sono ben accetti.

Infine avviamo ices2:

ices2 /home/ices/ices-config.xml

Proviamo ad aprire il nostro player musicale (iTunes, VLC, Winamp..), inserendo nel mio caso il seguente URL:

http://buleria.acido.be:8000/radio

Se tutto è andato bene, possiamo mettere l’avvio automatico di ices inserendo il comando nel file /etc/rc.local

Per fare questa operazione su un largo numero di files, mi sono creato uno scriptino in bash: mp32ogg.sh  che rinomina i files mp3 togliendo gli spazi, fa l’encoding dei files ogg inserendo anche gli ID3 ed infila tutto nella playlist di ices2.

Per poterlo usare, la cartella contenente i files mp3 non può avere spazi (mentre i nomi dei files sì) e lo script va lanciato con i path ASSOLUTI. Es:

sh mp32ogg.sh /home/ices/music/album_in_mp3

Il problema è che su Debian al momento, lo script ufficiale per fare encoding di files ogg – mp32ogg – è rotto e perl va in errore. Ho dovuto riparare da me.

Questo script è scritto “con la zappa”, ovvero fa uscire a video un sacco di errori, a volte mpg123 va in segfault, ed è successo che gli ID3 se non sono scritti bene uscissero errati, ma funziona nel 95% dei casi. Se qualcuno ha voglia e tempo di fargli un paio di fix ne sarei contento 😉

Potete controllare tutti i parametri della radio aprendo con un browser questo indirizzo:

http://buleria.acido.be:8000

Per entrare nell’area admin dovrete loggarvi con “admin” e la “adminpass” che avete specificato nel file di configurazione di icecast2

A questo punto, dopo aver messo in piedi la vostra radio bisogna passare al sito web.

Ho pensato che, essendo una web radio, la parte più importante debba essere la musica, quindi ho voluto creare una pagina web molto semplice dove ci fosse solo il player in html5 e qualche info:

http://pas.acido.be

Una cosa che in una web radio è molto utile è l’indicazione in tempo reale della canzone che si sta ascoltando. Per fare questo, ho trovato uno script da qualche parte nel web che prende le info di http://buleria.acido.be:8000/status.xsl e le inserisce in un html. Nella pagina index ho poi inserito un javascript che fa l’update del DIV dove verranno stampate le informazioni.

Per comodità potete scaricare il sorgente completo di http://pas.acido.be e modificarlo a vostro piacimento.

A questo punto la radio è completa! Buon divertimento!

Share This: