Category Archives: Uncategorized

Enginyer Tècnic per la Universitat de les Secretàries de l’EET

Després de tres anys, i de molta batalla burocràtica en els darrers mesos, ja tinc a la mà el resguard del títol.

El títol és d’Enginyer Tècnic de Telecomunicacions, especialitat en So i Imatge per la Universitat de les Secretàries de l’EET. És una universitat oculta on hi regnen les doctrines del personal d’administració i direcció(no tan…) i les seves estranyes conductes burocràtiques…

Després de ser torejat a la secretaria acadèmica durant tot el Juliol, d’incomptables viatges Sant Gregori-Terrassa i de cues a secretaria, per fi m’han registrat el reconeixement dels 3 putos crèdits de lliure elecció. Al·leluia! Quasi ha tardat el mateix reconèixer 3 ALEs que les obres de desdoblament de la N-II a les comarques Gironines…En fi, que ja tinc el resguard del títol i el certificat acadèmic (encara no he entès per què tarden 5 dies a fer-lo…) encarregat.

En fi, com a motiu de l’alegria pel fet acadèmic, penjo el PFC en aquest bloc. El PFC us pot ser útil si voleu aprendre a virtualitzar màquines Linux o si voleu muntar-vos una Ràdio IP senzilleta. Aquí el teniu. Espero que pugui ser útil a algú.

I ara a acabar de moure papers per les inscripcions a la superior…Visca la paperassa i les secretàries universitàries!

Marc

Anuncis

LaTeX en català per catalans

Software: jo faig servir el TexMaker en un escriptori GNOME. El TexMaker té la interfície en català, plantilles de documents LaTex i permet guardar comandes i enllaçar-les en accessos directes per combinacions de tecles com shift+F1.

Paquets: per escriure en català i que el programa et codifiqui bé els accents, cal afegir a la capçalera els següents paquets:

\usepackage[utf8]{inputenc}
\usepackage[catalan]{babel}

Per exemple:

\documentclass[a4paper,12pt]{book}
\usepackage[catalan]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\frenchspacing
\begin{document}
\title{Un \TeX \ i no res }
\author{Marc Fontdevila i Sibat}
\maketitle
\chapter{\LaTeX \ en català}
Per emprar paraules catalanes amb accents o amb signes ortogràfics que ens diferencien d’altres llengües, cal afegir a l’inici del nostre document, els paquets següents:
\begin{itemize}
\item “[catalan]\{babel\} ”
\item “[utf8]\{inputenc\}”
\item “[T1]\{fontenc\}”
\end{itemize}

La inclusió d’aquests paquets et permet escriure paraules com tarantel·la, eloqüència, Vicenç \ldots

\end{document}

Marc

Dia 29: nou escenari Net

Després d’uns quants dies sense arribar enlloc, per fi m’ha sortit una cosa profitosa. La qüestió era dissenyar un escenari amb dues màquines virtuals, una de les quals seria el servidor (Ràdio) i l’altra seria la bomba que nodriria el servidor d’àudio. El client (l’oient) és el host de les màquines virtuals. L’esquema de l’escenari seria el que està a dins del núvol de la imatge següent:

Per tal de tenir aquest escenari, he creat el fitxer vnuml següent:


<vnuml>
  <global>
    <version>1.8</version>
    <simulation_name>net</simulation_name>
    <automac/>
    <vm_mgmt type="none" />
    <vm_defaults exec_mode="mconsole">
       <filesystem type="cow">/usr/share/vnuml/filesystems/root_fs_tutorial</filesystem>
       <kernel>/usr/share/vnuml/kernels/linux</kernel>
       <console id="0">pts</console>
       <!-- <console id="0">xterm</console> -->
    </vm_defaults>
  </global>

  <net name="Net0" mode="uml_switch" hub="yes" />
  <net name="Net1" mode="uml_switch" hub="yes" sock="/var/run/vnuml/Net1.ctl" />

  <vm name="virt1">
    <if id="0" net="Net0">
    	<ipv4>10.0.0.1/24</ipv4>
    </if>
    <route type="ipv4" gw="10.0.0.2">192.168.0.0/24</route>
    <exec seq="start" type="verbatim">echo "1" &gt;/proc/sys/net/ipv4/conf/all/accept_source_route</exec>
    
  </vm>

   <vm name="virt2">
    <if id="0" net="Net0">
    	<ipv4>10.0.0.2/24</ipv4>
    </if>
    <if id="1" net="Net1">
    	<ipv4>192.168.0.2/24</ipv4>
    </if>
    <exec seq="start" type="verbatim">echo "1" &gt;/proc/sys/net/ipv4/conf/all/accept_source_route</exec>

  </vm>
</vnuml>

A més, s’ha d’afegir una interfície tap0 per poder connectar el host amb les màquines virtuals i s’ha de configurar el host per què estigui a dins de la Net1. En aquest script, marc és el nom de l’usuari de la màquina que vol tenir el control del tap0:

#! /bin/bash
tunctl -u marc -t tap0
ifconfig tap0 192.168.0.1 netmask 255.255.255.0 up
route -A inet add -net 10.0.0.0/24 gw 192.168.0.2

D’aquesta manera ja es poden fer pings entre les màquines físiques i virtuals.

Ara s’ha de configurar cada màquina segons el rol que té:

virt1: és la bomba. Així que s’ha d’editar el fitxer ices-playlist.xml. L’únic canvi que sofreix la versió anterior és la de canviar localhost per 192.168.0.2. D’aquesta manera, la bomba envia les dades al servidor, a la IP 192.168.0.2:

<?xml version="1.0"?>
<ices>
    <!-- run in background -->
    <background>1</background>
    <!-- where logs, etc go. -->
    <logpath>/var/log/ices</logpath>
    <logfile>ices.log</logfile>
    <!-- 1=error,2=warn,3=info,4=debug -->
    <loglevel>4</loglevel>
    <!-- set this to 1 to log to the console instead of to the file above -->
    <consolelog>0</consolelog>

    <!-- optional filename to write process id to -->
    <!-- <pidfile>/home/ices/ices.pid</pidfile> -->

    <stream>
        <!-- metadata used for stream listing (not currently used) -->
        <metadata>
            <name>Radio MFS</name>
            <genre>Rock</genre>
            <description>Emissions en proves</description>
        </metadata>

        <!-- input module

            The module used here is the playlist module - it has 
            'submodules' for different types of playlist. There are
            two currently implemented, 'basic', which is a simple
            file-based playlist, and 'script' which invokes a command
            to returns a filename to start playing. -->

        <input>
            <module>playlist</module>
            <param name="type">basic</param>
            <param name="file">/etc/ices2/playlist.txt</param>
            <!-- random play -->
            <param name="random">0</param>
            <!-- if the playlist get updated that start at the beginning -->
            <param name="restart-after-reread">0</param>
            <!-- if set to 1 , plays once through, then exits. -->
            <param name="once">0</param>
        </input>

		<!-- 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 two instances as two mountpoints on the
            same server.  -->
        <instance>
            <!-- Server details:
                You define hostname and port for the server here, along with
                the source password and mountpoint.  -->
            <hostname>192.168.0.2</hostname>
            <port>8000</port>
            <password>xxxx</password>
            <mount>/example1.ogg</mount>

            <!-- Reconnect parameters:
                When something goes wrong (e.g. the server crashes, or the
                network drops) and ices disconnects from the server, these
                control how often it tries to reconnect, and how many times
                it tries to reconnect. Delay is in seconds.
                If you set reconnectattempts to -1, it will continue 
                indefinately. Suggest setting reconnectdelay to a large value
                if you do this.
            -->
            <reconnectdelay>2</reconnectdelay>
            <reconnectattempts>5</reconnectattempts> 

            <!-- maxqueuelength:
                This describes how long the internal data queues may be. This
                basically lets you control how much data gets buffered before
                ices decides it can't send to the server fast enough, and 
                either shuts down or flushes the queue (dropping the data)
                and continues. 
                For advanced users only.
            -->
            <maxqueuelength>80</maxqueuelength>

            <!-- Live encoding/reencoding:
                Currrently, the parameters given here for encoding MUST
                match the input data for channels and sample rate. That 
                restriction will be relaxed in the future.
            -->
            <encode>  
                <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->
                <samplerate>44100</samplerate>
                <channels>2</channels>
            </encode>
        </instance>

	</stream>
</ices>

virt2: aquesta màquina serà el servidor, així que ha d’executar l’icecast2. S’ha d’editar el fitxer icecast.xml i canviar localhost per 192.168.0.2. Això vol dir que l’adreça del servidor és 192.168.0.2 i se sent pel port 8000.

<icecast>
    <limits>
        <clients>100</clients>
        <sources>2</sources>
        <threadpool>5</threadpool>
        <queue-size>524288</queue-size>
        <client-timeout>30</client-timeout>
        <header-timeout>15</header-timeout>
        <source-timeout>10</source-timeout>
        <!-- If enabled, this will provide a burst of data when a client 
             first connects, thereby significantly reducing the startup 
             time for listeners that do substantial buffering. However,
             it also significantly increases latency between the source
             client and listening client.  For low-latency setups, you
             might want to disable this. -->
        <burst-on-connect>1</burst-on-connect>
        <!-- same as burst-on-connect, but this allows for being more
             specific on how much to burst. Most people won't need to
             change from the default 64k. Applies to all mountpoints  -->
        <burst-size>65535</burst-size>
    </limits>

    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>xxxx</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>xxxx</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>xxxx</admin-password>
    </authentication>

    <!-- set the mountpoint for a shoutcast source to use, the default if not
         specified is /stream but you can change it here if an alternative is
         wanted or an extension is required
    <shoutcast-mount>/live.nsv</shoutcast-mount>
    -->

    <!-- Uncomment this if you want directory listings -->
    <!--
    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
     -->

    <!-- This is the hostname other people will use to connect to your server.
    It affects mainly the urls generated by Icecast for playlists and yp
    listings. -->
    <hostname>192.168.0.2</hostname>

    <!-- You may have multiple <listener> elements -->
    <listen-socket>
        <port>8000</port>
        <!-- <bind-address>127.0.0.1</bind-address> -->
        <!-- <shoutcast-mount>/stream</shoutcast-mount> -->
    </listen-socket>
    <!--
    <listen-socket>
        <port>8001</port>
    </listen-socket>
    -->

    <!--<master-server>127.0.0.1</master-server>-->
    <!--<master-server-port>8001</master-server-port>-->
    <!--<master-update-interval>120</master-update-interval>-->
    <!--<master-password>hackme</master-password>-->

    <!-- setting this makes all relays on-demand unless overridden, this is
         useful for master relays which do not have <relay> definitions here.
         The default is 0 -->
    <!--<relays-on-demand>1</relays-on-demand>-->

    <!--
    <relay>
        <server>127.0.0.1</server>
        <port>8001</port>
        <mount>/example.ogg</mount>
        <local-mount>/different.ogg</local-mount>
        <on-demand>0</on-demand>

        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
    </relay>
    -->

    <!-- Only define a <mount> section if you want to use advanced options,
         like alternative usernames or passwords
    <mount>
        <mount-name>/example-complex.ogg</mount-name>

        <username>othersource</username>
        <password>hackmemore</password>

        <max-listeners>1</max-listeners>
        <dump-file>/tmp/dump-example1.ogg</dump-file>
        <burst-size>65536</burst-size>
        <fallback-mount>/example2.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>
        <intro>/example_intro.ogg</intro>
        <hidden>1</hidden>
        <no-yp>1</no-yp>
        <authentication type="htpasswd">
                <option name="filename" value="myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
        <on-connect>/home/icecast/bin/stream-start</on-connect>
        <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
    </mount>

    <mount>
        <mount-name>/auth_example.ogg</mount-name>
        <authentication type="url">
            <option name="mount_add"       value="http://myauthserver.net/notify_mount.php"/>
            <option name="mount_remove"    value="http://myauthserver.net/notify_mount.php"/>
            <option name="listener_add"    value="http://myauthserver.net/notify_listener.php"/>
            <option name="listener_remove" value="http://myauthserver.net/notify_listener.php"/>
        </authentication>
    </mount>

    -->

    <fileserve>1</fileserve>

    <paths>
		<!-- basedir is only used if chroot is enabled -->
        <basedir>/usr/share/icecast2</basedir>

        <!-- Note that if <chroot> is turned on below, these paths must both
             be relative to the new root, not the original root -->
        <logdir>/var/log/icecast2</logdir>
        <webroot>/usr/share/icecast2/web</webroot>
        <adminroot>/usr/share/icecast2/admin</adminroot>
        <!-- <pidfile>/usr/share/icecast2/icecast.pid</pidfile> -->

        <!-- Aliases: treat requests for 'source' path as being for 'dest' path
             May be made specific to a port or bound address using the "port"
             and "bind-address" attributes.
          -->
        <!--
        <alias source="/foo" dest="/bar"/>
          -->
        <!-- Aliases: can also be used for simple redirections as well,
             this example will redirect all requests for http://server:port/ to
             the status page
          -->
        <alias source="/" dest="/status.xsl"/>
    </paths>

    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <!-- <playlistlog>playlist.log</playlistlog> -->
      	<loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
      	<logsize>10000</logsize> <!-- Max size of a logfile -->
        <!-- If logarchive is enabled (1), then when logsize is reached
             the logfile will be moved to [error|access|playlist].log.DATESTAMP,
             otherwise it will be moved to [error|access|playlist].log.old.
             Default is non-archive mode (i.e. overwrite)
        -->
        <!-- <logarchive>1</logarchive> -->
    </logging>

    <security>
        <chroot>0</chroot>
        <!--
        <changeowner>
            <user>nobody</user>
            <group>nogroup</group>
        </changeowner>
        -->
    </security>
</icecast>

Per arrencar l’escenari obrir un terminal:

#! /bin/bash
simctl net start
simctl net get virt1
simctl net get virt2

Entrar a virt2 i engegar el servidor icecast i a més, habilitar el forwarding de paquets per si es vol comunicar el Host amb la font/bomba del servidor:

/etc/init.d/icecast2 start
echo 1 > /proc/sys/net/ipv4/ip_forward

si amb el navegador es visita: http://192.168.0.2:8000

Entrar a virt1 i engegar la bomba:

ices2 /etc/ices2/ices-playlist.xml

En el host, per exemple amb el google chrome obrir la ràdio:

google-chrome http://192.168.0.2:8000/example1.ogg

o amb el vlc:

vlc http://192.168.0.2:8000/example1.ogg

Marc

Dia 8: segona part: escenari Net i NVLC

He creat un escenari que es tracta d’una xarxa local en què hi ha un servidor i un host. El servidor executarà l’icecast2 amb l’ices2 i el client escoltarà el servidor.

Codi de l’escenari:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE vnuml SYSTEM "/usr/share/xml/vnuml/vnuml.dtd">

<vnuml>
  <global>
    <version>1.8</version>
    <simulation_name>net</simulation_name>
    <automac/>
    <vm_mgmt type="none" />
    <vm_defaults exec_mode="mconsole">
       <filesystem type="cow">/usr/share/vnuml/filesystems/root_fs_tutorial</filesystem>
       <kernel>/usr/share/vnuml/kernels/linux</kernel>
       <console id="0">pts</console>
       <!-- <console id="0">xterm</console> -->
    </vm_defaults>
  </global>

  <net name="Net0" mode="uml_switch" hub="yes" sock="/var/run/vnuml/Net0.ctl" />

  <vm name="server">
    <if id="1" net="Net0"></if>
    <exec seq="start" type="verbatim">echo "1" &gt;/proc/sys/net/ipv4/conf/all/accept_source_route</exec>
		<exec seq="netconf_eth_mask24" type="verbatim">ifconfig eth1 192.168.0.32/24</exec>
		<exec seq="netconf_eth_mask25" type="verbatim">ifconfig eth1 192.168.0.32/25</exec>
		<exec seq="netconf_eth_mask26" type="verbatim">ifconfig eth1 192.168.0.32/26</exec>
  </vm>

   <vm name="host">
    <if id="1" net="Net0"></if>
    <exec seq="start" type="verbatim">echo "1" &gt;/proc/sys/net/ipv4/conf/all/accept_source_route</exec>
		<exec seq="netconf_eth_mask24" type="verbatim">ifconfig eth1 192.168.0.96/24</exec>
		<exec seq="netconf_eth_mask25" type="verbatim">ifconfig eth1 192.168.0.96/25</exec>
		<exec seq="netconf_eth_mask26" type="verbatim">ifconfig eth1 192.168.0.96/26</exec>
  </vm>  
</vnuml>

Amb el programari disponible al sistema de fitxers, des del host no puc arribar a sentir l’àudio. Així que el que faré, serà instal·lar el VLC al sistema de fitxers. Amb el VLC ve una versió de consola, que es diu nvlc. Utilitzaré aquesta versió ja que sinó tindré problemes amb el simctl.

cd /usr/share/vnuml/filesystems
mount -o loop root_fs_tutorial /mnt/loop
mount -t proc none /mnt/loop/proc
chroot /mnt/loop
apt-get install vlc

Tancar el terminal. No sé per què però en el filesystem de les màquines virtuals, a usr/bin no apareix el nvlc. L’afegeixo manualment, obrint un nou terminal:

cd ~/usr/bin
cp nvlc /mnt/loop/usr/bin
umount /mnt/loop/proc
umount /mnt/loop

Ara ja es pot iniciar la simulació:

simctl net start
simctl net get host
simctl net get server

en el terminal server configuro la interfície eth1 i inicio el servidor:

root
xxxx
ifconfig eth1 192.168.0.1 netmask 255.255.255.0
/etc/init.d/icecast2 start
ices2 /etc/ices2/ices-playlist.xml

La màquina server

a la màquina host configuro la interfície eth1 i intento captar el flux provinent del port 8000 del servidor (192.168.0.1):

root
xxxx
ifconfig eth1 192.168.0.254 netmask 255.255.255.0
nvlc http://192.168.0.1:8000/example1.ogg

un cop fet això m’apareix el NVLC però no se sent res. El terminal del host es queixa dels ALSA:

Error dels drivers d'àudio

així que demà tocarà investigar cap a aquesta direcció…

Marc

Dia 8: Modificant el sistema de fitxers de les VM

Ei, m’he posat a modificar el sistema de fitxers de les màquines virtuals per tal de poder posar la ràdio. He de modificar els fitxers que ahir vaig crear/modificar.Anem per parts:

Primer montaré el sistema de fitxers utilitzat per, un cop muntat, afegir-hi els arxius clau:

cd /usr/share/vnuml/filesystems
mount -o loop root_fs_tutorial /mnt/loop
mount -t proc none /mnt/loop/proc
chroot /mnt/loop

Un cop muntat el sistema de fitxers, al nou directori arrel(/mnt/loop) ja hi tenim les carpetes necessàries com ara /etc o /var. Considerant els fitxers de configuració penjats ahir, ices i icecast, s’ha de copiar el text i passar-los a un arxiu .xml. Un cop es tenen els fitxers xml, el fitxer icescast.xml ha de ser copiat a /etc/icecast2, substituint l’arxiu anterior ja existent.

Les explicacions parteixen del fet que a l’Escriptori de l’usuari hi ha els fitxers icecast.xml i ices-playlist.xml i la carpeta music amb fixers ogg a dins:

Invocant un terminal nou:

cd ~/Escriptori
sudo cp icecast.xml /mnt/loop/etc/icecast2/

S’ha de canviar el paràmetre ENABLE a true:

cd /mnt/loop/etc/default
gedit icecast2

Posar el valor enable a true i desar.

En un nou terminal, crearé les carpetes necessàries pel bon funcionament de l’ices2, al sistema de fitxers, segons explica el tutorial utilitzat ahir:

cd ..
cd ..
cd /mnt/loop/
sudo -s
chroot /mnt/loop
mkdir /var/log/ices
mkdir /etc/ices2
mkdir /etc/ices2/music

En un nou terminal, copiaré el fitxer ices-playlist.xml (el fitxer ices.pdf, transformat a xml i canviat de nom) a /etc/ices2 del sistema de fitxers muntat (o sigui a: /mnt/loop/etc/ices2). A més afegiré els fitxers de música a la carpeta mnt/loop/etc/ices2/music

cd ~/Escriptori
sudo cp ices-playlist.xml /mnt/loop/etc/ices2
cd music
sudo cp -r *.ogg /mnt/loop/etc/ices2/music/

per últim s’ha de crear un fixer .txt on hi hagi les cançons de la llista. En un nou terminal escriu:

cd /mnt/loop/etc/ices2/
echo /etc/ices2/music/pista1.ogg >> playlist.txt
echo /etc/ices2/music/pista2.ogg >> playlist.txt
echo /etc/ices2/music/pista3.ogg >> playlist.txt
echo /etc/ices2/music/pista5.ogg >> playlist.txt

Arribats a aquest punt, ja tindriem el sistema de fitxers apunt. Ara s’ha de desmuntar el sistema de fitxers des d’un nou terminal:

umount /mnt/loop/proc
umount /mnt/loop

Si falla la simulació, pot ser que s’hagi de netejar la carpeta .vnuml de la carpeta d’usuari. S’eliminen els arxius de dins dels directoris simulations i networks i es torna a iniciar la simulació.

%d bloggers like this: