<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2861649065273936462</id><updated>2024-11-01T08:18:33.973+01:00</updated><category term="Ubuntu"/><category term="Tutorials"/><category term="Linux"/><category term="Tricks"/><category term="Debian"/><category term="Windows"/><category term="Apache"/><category term="Instalacion"/><category term="Symphony"/><category term="VirtualBox"/><category term="Background"/><category term="Ejecución"/><category term="Java"/><category term="Mac"/><category term="MySQL"/><category term="NTP"/><category term="PDF"/><category term="Programación Web"/><category term="Scripts"/><category term="Seguridad"/><category term="Shutdown"/><category term="X-Server"/><category term="php"/><title type='text'>Jesus de Baldoma</title><subtitle type='html'>Nulla dies sine technica notat</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>26</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-5649451483535122433</id><published>2014-02-18T17:29:00.000+01:00</published><updated>2014-02-18T17:29:23.023+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Java"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Cómo instalar  Oracle (Sun) Java JRE en Linux Mint</title><content type='html'>&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGM0wCiAUIMmTbyt3vYVr1ALCIdAKBvABCAj_ZxWbzVd7xLqLXi4VOPYvkp_gu21HjVBbHnsJHiIdw_ttCEdVQ0T3hzkp0x8vCk6x8Zya4I24mVg0vDY5tXfE_WufSbZi-_iPzkq8P_Zo/s1600/logo_java.png&quot; height=&quot;200&quot; style=&quot;float: left;&quot; width=&quot;200&quot; /&gt;&lt;br /&gt;
Por regla general, las distribuciones de Linux Mint y Ubuntu incorporan OpenJDK (versión libre de Java) para poder dar soporte a LibreOffice. &lt;br /&gt;
&lt;br /&gt;
OpenJDK y el plugin IcedTea son mantenidos por la comunidad y reciben actualizaciones periódicas. Funciona bien para la mayoría de los propósitos. Lo más probable es que no necesitemos Oracle Java en absoluto, pero podemos vernos en la necesidad de instalarlo y esto suele ser una fuente de problemas, ya que fue retirado de los repositorios &quot;partner&quot; por la revocación de la anterior licencia.&lt;br /&gt;
&lt;br /&gt;
En este tutorial se muestran los pasos para instalar el Java de Oracle y, también, el correspondiente plugin para Firefox en la distribución Linux Mint..&lt;br /&gt;
&lt;br /&gt;
Este paso previo se puede obviar, pero para evitar conflictos procederemos a eliminar OpenJDK y, también, todas sus dependencias.&lt;br /&gt;
&lt;pre&gt;$ sudo apt-get remove openjdk-6-jre
$ sudo apt-get autoremove
$ sudo apt-get clean&lt;/pre&gt;
&lt;div class=&quot;title&quot;&gt;
Instalación de Java&lt;/div&gt;
Desde la &lt;a href=&quot;http://java.com/es/download/manual.jsp#lin&quot; target=&quot;_blank&quot;&gt;web oficial de Oracle&lt;/a&gt; descargamos el paquete .tar.gz correspondiente a la última versión de Java (en este momento, la 1.7.45). Descargamos desde los enlaces Linux (32-bit) o Linux x64 (64-bit). &lt;b&gt;No descargar la versión RPM&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
A continuación creamos els siguiente directorio en función de si nuestra arquitectura es de 32 o 64 bits.&lt;br /&gt;
&lt;br /&gt;
- Versión 32-bit&lt;br /&gt;
&lt;pre&gt;$ sudo mkdir -p -v /opt/java/32&lt;/pre&gt;
- Versión 64-bit&lt;br /&gt;
&lt;pre&gt;$ sudo mkdir -p -v /opt/java/64&lt;/pre&gt;
Nos situamos en la carpeta donde hayamos realizado la descarga del archivo .tar.gz y lo descomprimimos. Una vez descomprimido, se habrá creado el directorio jre1.7.0_45. Lo movemos a la carpeta que hayamos creado en el paso anterior.&lt;br /&gt;
&lt;br /&gt;
- Versión 32-bit&lt;br /&gt;
&lt;pre&gt;$ cd ~/Downloads
$ tar -zxvf&amp;nbsp;jre-7u45-linux-i586.tar.gz
$ sudo mv -v jre1.7.0_45 /opt/java/32&lt;/pre&gt;
- Versión 64-bit&lt;br /&gt;
&lt;pre&gt;$ cd ~/Downloads
$ tar -zxvf jre-7u45-linux-x64.tar.gz
$ sudo mv -v jre1.7.0_45 /opt/java/64&lt;/pre&gt;
El último paso es definir el nuevo JRE por defecto y comprobar que se ha instalado correctamente.&lt;br /&gt;
&lt;br /&gt;
- Versión 32-bit&lt;br /&gt;
&lt;pre&gt;$ sudo update-alternatives --install &quot;/usr/bin/java&quot; &quot;java&quot; &quot;/opt/java/32/jre1.7.0_45/bin/java&quot; 1
$ sudo update-alternatives --set java /opt/java/32/jre1.7.0_45/bin/java
$ java -version
java version &quot;1.7.0_45&quot;
Java(TM) SE Runtime Environment (build 1.7.0_45-b13)
Java HotSpot(TM) Server VM (build 24.45-b03, mixed mode)&lt;/pre&gt;
- Versión 64-bit&lt;br /&gt;
&lt;pre&gt;$ sudo update-alternatives --install &quot;/usr/bin/java&quot; &quot;java&quot; &quot;/opt/java/64/jre1.7.0_45/bin/java&quot; 1
$ sudo update-alternatives --set java /opt/java/64/jre1.7.0_45/bin/java
$ java -version
java version &quot;1.7.0_45&quot;
Java(TM) SE Runtime Environment (build 1.7.0_45-b13)
Java HotSpot(TM) Server VM (build 24.45-b03, mixed mode)&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;
Instalación del plugin para Firefox&lt;/div&gt;
Para cada usuario habrá que crear el siguiente directorio&lt;br /&gt;
&lt;pre&gt;$ mkdir -v ~/.mozilla/plugins&lt;/pre&gt;
En ese mismo directorio, crearemos un link simbólico para que Firefox sepa dónde encontrar el plugin de Java.&lt;br /&gt;
&lt;br /&gt;
- Versión 32-bit&lt;br /&gt;
&lt;pre&gt;ln -s /opt/java/32/jre1.7.0_45/lib/i386/libnpjp2.so ~/.mozilla/plugins/&lt;/pre&gt;
- Versión 64-bit&lt;br /&gt;
&lt;pre&gt;ln -s /opt/java/64/jre1.7.0_45/lib/amd64/libnpjp2.so ~/.mozilla/plugins/&lt;/pre&gt;
Ahora solo queda reiniciar Firefox y comprobar que la instalación ha sido efectuada. Basta con escribir &lt;code&gt;about:plugins&lt;/code&gt; en el navegador.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVS73lUTl6Mk5mbIOakYB1mLXtShRN6YWac7GL_rRRdR14qTxP9U3InEx-Rj6HdaZR8x-PMjW-8gTXDYl5xH11kJ8Tnjp6wk8N_Gp7LCXj8OyH7CAqFD-w8DvxK8EOQmpztCdFxHTLxWo/s1600/plugins_firefox.png&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;
Fuentes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://community.linuxmint.com/tutorial/view/1091&quot;&gt;Howto install Oracle (Sun) Java JRE for Linux Mint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ubuntu-guia.com/2012/04/instalar-oracle-java-7-en-ubuntu-1204.html&quot;&gt;Instalar Oracle Java 7 en Ubuntu 12.04&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/5649451483535122433/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/5649451483535122433' title='6 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5649451483535122433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5649451483535122433'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2014/02/instalar-sun-java-en-linux-mint.html' title='Cómo instalar  Oracle (Sun) Java JRE en Linux Mint'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGM0wCiAUIMmTbyt3vYVr1ALCIdAKBvABCAj_ZxWbzVd7xLqLXi4VOPYvkp_gu21HjVBbHnsJHiIdw_ttCEdVQ0T3hzkp0x8vCk6x8Zya4I24mVg0vDY5tXfE_WufSbZi-_iPzkq8P_Zo/s72-c/logo_java.png" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-7358200174567869519</id><published>2014-01-15T18:30:00.000+01:00</published><updated>2014-01-15T18:30:00.614+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Deshabilitar Ctrl+Alt+Delete en Ubuntu</title><content type='html'>Cuando se pulsan simultáneamente las teclas &lt;code&gt;&lt;b&gt;Control+Alt+Delete&lt;/b&gt;&lt;/code&gt;&amp;nbsp;en un equipo con Ubuntu, el sistema se reinicia y muestra el siguiente mensaje&amp;nbsp;por la consola de sistema.&lt;br /&gt;
&lt;pre&gt;Broadcast message from root@nombre_servidor
        (unknown) at 12:34 ...

The system is going down for reboot NOW!
Control-Alt-Delete pressed&lt;/pre&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQiptstczjATKaW7bNy0QNQubdDQRI6aZTfbRAEjMQXNZW_PjvhbE6XV6u_npeurAsmeGrl-zPFCePRa5UKpf-M-J2SVh-mMTXfM-M2_3pAc0-llKdFWhJV19WNzfhf-bMSam0BxrMWq0/s1600/ctr-alt-del.jpg&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
Esta operación se controla mediante un fichero de configuración especial que se encuentra en &lt;code&gt;&lt;b&gt;/etc/init/control-alt-delete.conf&lt;/b&gt;&lt;/code&gt;. Para deshabilitar el reinicio del equipo (que es la operación por defecto), basta con editar ese fichero y comentar la línea que se indica.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo vim /etc/init/control-alt-delete.conf&lt;/b&gt;
&lt;span style=&quot;color: red;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;exec shutdown -r now &quot;Control-Alt-Delete pressed&lt;/span&gt;&quot;&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;Fuentes:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.cyberciti.biz/faq/ubuntu-linux-disable-ctrl-alt-del-keys/&quot;&gt;Ubuntu Linux Disable control-alt-delete [CTRL-ALT-DEL] Emergency Keypress Handling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/7358200174567869519/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/7358200174567869519' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7358200174567869519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7358200174567869519'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2014/01/deshabilitar-ctrlaltdelete-en-ubuntu.html' title='Deshabilitar Ctrl+Alt+Delete en Ubuntu'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQiptstczjATKaW7bNy0QNQubdDQRI6aZTfbRAEjMQXNZW_PjvhbE6XV6u_npeurAsmeGrl-zPFCePRa5UKpf-M-J2SVh-mMTXfM-M2_3pAc0-llKdFWhJV19WNzfhf-bMSam0BxrMWq0/s72-c/ctr-alt-del.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-5883298559772197907</id><published>2013-12-31T19:28:00.000+01:00</published><updated>2014-01-15T12:16:46.254+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="X-Server"/><title type='text'>Reinstalar drivers nVidia en Linux Mint 13</title><content type='html'>Desde hace ya algún tiempo que tengo un &lt;a href=&quot;http://www.dell.com/us/dfb/p/vostro-1310/pd&quot;&gt;Dell Vostro 1310&lt;/a&gt; equipado con una tarjeta gráfica &lt;a href=&quot;http://www.nvidia.com/object/geforce_8400M.html&quot;&gt;NVIDIA GeForce 8400M GS&lt;/a&gt; y al que le instalé &lt;a href=&quot;http://www.linuxmint.com/edition.php?id=104&quot;&gt;Linux Mint 13 MATE 64-bit&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
El caso es que, en las últimas fechas, el portátil se calentaba en exceso hasta el punto de llegar a quedarse &quot;colgado&quot; por sobrecalentamiento. El problema estaba en que, aparte de perder todo el trabajo no guardado, también se perdía la configuración de los drivers de la tarjeta gráfica y, en consecuencia, no arrancaba el servidor gráfico.&lt;br /&gt;
&lt;br /&gt;
En este tutorial contaré la forma en que solucioné el problema.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;1. Resolver el sobrecalentamiento de la CPU&lt;/span&gt;&lt;br /&gt;
Aunque, por importancia, este era el primer problema que había que solventar, no es el objeto de este tutorial. Lo que hice para solucionarlo fue restituir la capa de &lt;a href=&quot;http://es.wikipedia.org/wiki/Pasta_t%C3%A9rmica&quot;&gt;pasta térmica&lt;/a&gt; entre la CPU y el radiador.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;2. Reinstalar (la última versión de) los drivers de la tarjeta gráfica&lt;/span&gt;&lt;br /&gt;
Hay que recordar que en el caso que nos ocupa no disponemos de servidor gráfico. Por lo tanto, todas las instrucciones se ejecutarán desde la consola del sistema.&lt;br /&gt;
&lt;br /&gt;
Previamente, desde otro equipo, accederemos a la &lt;a href=&quot;http://www.nvidia.es/Download/index.aspx?lang=es&quot;&gt;zona de descargas de la web de NVIDIA&lt;/a&gt; y descargaremos los drivers adecuados al sistema: en nuestro caso, GeForce 8400M GS para Linux de 64-bit.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78CBEOa5X2c49JeTh1DfabzgOWlq8dxAdJK9Qr2wpJy4rzw3m1KW7lRtlcFjtbJ0mw4D9Boh0RDFHBiAU436qQghRcdgZ-WIMEtL1NgO3gy7pYoLSQ0ZOFJhm-QHvby2ONITHT0w-fJw/s1600/driver_download.jpg&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
Una vez realizada la descarga, copiamos el archivo (en nuestro caso, NVIDIA-Linux-x86_64-331.20.run) en el equipo donde haya que reinstalar los drivers.&lt;br /&gt;
&lt;br /&gt;
Antes de proceder, actualizaremos del sistema&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&lt;/b&gt;&lt;/pre&gt;
A continuación, si no están instalados ya, instalamos los siguientes paquetes:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get install build-essential linux-headers-$(uname -r)&lt;/b&gt;&lt;/pre&gt;
Nos situamos en el directorio donde hayamos copiado el archivo de los drivers y le asignamos permisos de ejecución&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ chmod +x NVIDIA-Linux-x86_64-331.20.run&lt;/b&gt;&lt;/pre&gt;
Si ya habíamos instalado los drivers a mano anteriormente, los desinstalamos&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo sh NVIDIA-Linux-x86_64-331.20.run --uninstall&lt;/b&gt;&lt;/pre&gt;
Eliminamos los paquetes anteriores de nvidia y, también, el driver libre &quot;nouveau&quot;&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get remove --purge nvidia*
$ sudo apt-get remove --purge xserver-xorg-video-nouveau&lt;/b&gt;&lt;/pre&gt;
Editamos la lista negra que indica qué módulos no deben cargarse mediante &lt;code&gt;modprobe&lt;/code&gt; y, al final del archivo, le añadimos los siguientes módulos:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo vim /etc/modprobe.d/blacklist.conf&lt;/b&gt;
&lt;span style=&quot;color: blue;&quot;&gt;blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv&lt;/span&gt;&lt;/pre&gt;
Nos aseguramos de detener el servicio &lt;i&gt;Mint Display Manager&lt;/i&gt; (mdm), ejecutamos el script que nos instalará los nuevos drivers (privativos) de NVIDIA y volvemos a arrancar el servicio mdm&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo service mdm stop
$ sudo sh NVIDIA-Linux-x86_64-331.20.run
$ sudo service mdm stop&lt;/b&gt;&lt;/pre&gt;
Si arranca la interfaz gráfica es señal de que ya tenemos instalado los drivers. En este punto sería recomendable reiniciar el sistema.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo reboot&lt;/b&gt;&lt;/pre&gt;
Al arrancar de nuevo, para comprobar que ya están instalados vamos al menú y en el buscador escribimos &quot;nvidia&quot;. Debería salir el &quot;NVIDIA X Server Settings&quot;. &lt;br /&gt;
&lt;br /&gt;
También se pueden buscar desde la consola: &lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ glxinfo | grep direct&lt;/b&gt; 
&lt;span style=&quot;color: blue;&quot;&gt;direct rendering: Yes
    GL_EXT_Cg_shader, GL_EXT_depth_bounds_test, [...]&lt;/span&gt;&lt;/pre&gt;
Si devuelve &quot;Yes&quot; quiere decir que están instalados. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;
&lt;b&gt;A TENER EN CUENTA:&lt;/b&gt; La solución tomada en este tutorial es eliminar el driver libre &lt;i&gt;nouveau&lt;/i&gt; para NVIDIA y proceder a la instalación de los respectivos drivers propietarios del fabricante.&lt;/div&gt;
&lt;div class=&quot;fuentes&quot;&gt;
Fuentes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.taringa.net/posts/linux/14863019/LinuxMint-13-y-Ubuntu-12-04-driver-privativo-nVidia.html&quot;&gt;LinuxMint 13 y Ubuntu 12.04 driver privativo nVidia&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/5883298559772197907/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/5883298559772197907' title='11 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5883298559772197907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5883298559772197907'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/12/reinstalar-drivers-nvidia-en-linux-mint.html' title='Reinstalar drivers nVidia en Linux Mint 13'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi78CBEOa5X2c49JeTh1DfabzgOWlq8dxAdJK9Qr2wpJy4rzw3m1KW7lRtlcFjtbJ0mw4D9Boh0RDFHBiAU436qQghRcdgZ-WIMEtL1NgO3gy7pYoLSQ0ZOFJhm-QHvby2ONITHT0w-fJw/s72-c/driver_download.jpg" height="72" width="72"/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-1390880753314905315</id><published>2013-12-31T13:21:00.000+01:00</published><updated>2013-12-31T18:13:34.319+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PDF"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Concatenar ficheros PDF en Ubuntu</title><content type='html'>En Ubuntu existen varias formas de unir varios archivos PDF (&lt;code&gt;file1.pdf&lt;/code&gt;, &lt;code&gt;file2.pdf&lt;/code&gt;) en un único archivo de salida (&lt;code&gt;mergedfile.pdf&lt;/code&gt;). En este tutorial veremos 3 formas de hacerlo:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;
1. GhostScript&lt;/div&gt;
Si es preciso, instalamos el paquete &lt;a href=&quot;https://apps.ubuntu.com/cat/applications/ghostscript&quot;&gt;ghostscript&lt;/a&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get install ghostscript&lt;/b&gt;&lt;/pre&gt;
Para concatenar los archivos, ejecutamos el siguiente comando:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sDEVICE=pdfwrite \
  -sOutputFile=mergedfile.pdf file1.pdf file2.pdf&lt;/b&gt;&lt;/pre&gt;
Esta es una breve explicación del comando&lt;br /&gt;
&lt;pre&gt;&lt;span style=&quot;color: blue;&quot;&gt;gs&lt;/span&gt;         llamada al programa Ghostscript.
&lt;span style=&quot;color: blue;&quot;&gt;-dBATCH&lt;/span&gt;    una vez Ghostscript ha procesado los archivos PDF,
           finaliza la ejecución. Si no se incluye esta opción,
           Ghostscript se mantendrá en ejecución.
&lt;span style=&quot;color: blue;&quot;&gt;-dNOPAUSE&lt;/span&gt;  fuerza a Ghostscript a procesar cada página sin pausa para 
           interacción del usuario.
&lt;span style=&quot;color: blue;&quot;&gt;-q&lt;/span&gt;         evita que Ghostscript muestre mensajes mientras trabaja
&lt;span style=&quot;color: blue;&quot;&gt;-sDEVICE=pdfwrite&lt;/span&gt; 
           indica a Ghostscript que procese los archivos con su 
           escritor de PDF interno.
&lt;span style=&quot;color: blue;&quot;&gt;-sOutputFile=finished.pdf&lt;/span&gt;
           indica a Ghostscript que guarde el archivo PDF combinado 
           con el nombre especificado.&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;
2. PDF Toolkit&lt;/div&gt;
Si es preciso, instalamos el paquete &lt;a href=&quot;https://apps.ubuntu.com/cat/applications/pdftk&quot;&gt;pdftk&lt;/a&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get install pdftk&lt;/b&gt;&lt;/pre&gt;
Para concatenar los archivos, ejecutamos el siguiente comando:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ pdftk file1.pdf file2.pdf cat output mergedfile.pdf&lt;/b&gt;&lt;/pre&gt;
Para concatenar, en orden alfabético, todos los archivos PDF de un directorio se puede hacer lo siguiente:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ pdftk *.pdf cat output mergedfile.pdf&lt;/b&gt;&lt;/pre&gt;
Más información y ejemplos de uso de pdftk disponibles &lt;a href=&quot;http://www.ubuntuhowtos.com/howtos/merge_pdf_files&quot;&gt;aquí&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;
3. PDF Shuffler&lt;/div&gt;
A diferencia de las dos soluciones anteriores que se basaban en aplicaciones que se ejecutaban desde la línea de comandos, &lt;a href=&quot;https://apps.ubuntu.com/cat/applications/pdfshuffler&quot;&gt;PDF Shuffler&lt;/a&gt; es una aplicación con un GUI muy básico y sencillo de manejar. Basta con ir añadiendo los archivos que se quieren concatenar y salvar el PDF resultante.&lt;br /&gt;
&lt;br /&gt;
El paquete se puede instalar desde la línea de comandos:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get install pdfshuffler&lt;/b&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz0pDePlySuyAK50_4_p1tCjbDBKjn9dgSPkgQ_GV18lNl-uJtzC-ArZQykdYaFEz_bXa_zb2-teSvHSgLcuRvzoHrhnjIuM1zBrVegFPCdPhzaKSdB0kZ5oCNH8ZmP9mPC48-Kx9M1Dc/s1600/pdfshuffler.jpg&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;
Fuentes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://askubuntu.com/questions/2799/how-to-merge-several-pdf-files&quot;&gt;Ask Ubuntu - How to merge several PDF files?&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/1390880753314905315/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/1390880753314905315' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1390880753314905315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1390880753314905315'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/12/concatenar-ficheros-pdf-en-ubuntu.html' title='Concatenar ficheros PDF en Ubuntu'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjz0pDePlySuyAK50_4_p1tCjbDBKjn9dgSPkgQ_GV18lNl-uJtzC-ArZQykdYaFEz_bXa_zb2-teSvHSgLcuRvzoHrhnjIuM1zBrVegFPCdPhzaKSdB0kZ5oCNH8ZmP9mPC48-Kx9M1Dc/s72-c/pdfshuffler.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-3535944947092531281</id><published>2013-11-12T02:00:00.000+01:00</published><updated>2014-01-15T12:17:38.474+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><category scheme="http://www.blogger.com/atom/ns#" term="VirtualBox"/><title type='text'>Ubuntu: Migrar una máquina virtual a una máquina física</title><content type='html'>&lt;div class=&quot;destacado&quot;&gt;
Para esta aplicación en particular, Linux es mucho más versátil que Windows en el sentido de que, en general, una máquina virtual Linux se ejecutará sin demasiados problemas incluso en una máquina diferente con hardware diferente. Por el contrario, Windows es mucho más exigente con los cambios de hardware y las &lt;a href=&quot;http://es.wikipedia.org/wiki/Pantalla_azul_de_la_muerte&quot; target=&quot;_blank&quot;&gt;pantallas azules de la muerte&lt;/a&gt; son muy frecuentes.&lt;br /&gt;
&lt;br /&gt;
Este tutorial se basa en la &lt;b&gt;migración de una Máquina Virtual con Ubuntu 12.04 LTS&lt;/b&gt;.&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; margin-top: 15px; text-align: center;&quot;&gt;
&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsf6H4CyMs9H3eODbmBc7uDp8nGQY2DN39ar1B8UGdaYCU4LlxFZNjuJm9Z3meumCLF40W8JoPEyh6E1iA-5ln509okMbS41XoQ8Mq69shTHDvwLcpvNOcvA257qLjAopb89xjqjoFXMM/s1600/v2p.png&quot; width=&quot;480&quot; /&gt;&lt;/div&gt;
Antes de empezar y para no tener problemas posteriores, lo primero que haremos será &lt;a href=&quot;http://www.jdbaldoma.net/2013/11/eliminar-snapshots-en-virtualbox.html&quot;&gt;eliminar todos los &lt;i&gt;snapshots&lt;/i&gt; de la máquina virtual&lt;/a&gt; sobre la que queremos realizar la migración.&lt;br /&gt;
&lt;br /&gt;
A continuación, realizamos un listado de todos los discos de las máquinas virtuales y nos fijamos en la información de la máquina que nos interesa.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ vboxmanage list hdds&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;[...]
UUID:        &lt;span class=&quot;error remark&quot;&gt;f128ad44-edfd-4cbf-962e-15703a3beb3a&lt;/span&gt;
Parent UUID: base
Format:      VDI
Location:    /home/user/VirtualBox VMs/ubuntu-12.04/ubuntu-12.04.vdi
State:       created
Type:        normal
Usage:       ubuntu-12.04 (UUID: 82845cce-762c-4bee-bfd9-90fbc2762e11)
[...]&lt;/span&gt;&lt;/pre&gt;
Con esta información, ya estamos en disposición de realizar un clonado de la máquina virtual y forzar la salida sobre un fichero en formato RAW. (&lt;b&gt;NOTA: A efectos del espacio necesario, hay que tener en cuenta que el fichero de salida acabará teniendo el mismo tamaño que el disco de la máquina virtual original&lt;/b&gt;).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ vboxmanage clonehd &lt;span class=&quot;error remark&quot;&gt;f128ad44-edfd-4cbf-962e-15703a3beb3a&lt;/span&gt; disk.img \
  --format RAW&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format &#39;RAW&#39;. UUID: cdb8dc16-ba9f-462e-abb0-4b57d4f03dee&lt;/span&gt;&lt;/pre&gt;
El archivo IMG obtenido en la operación anterior no es una imagen ISO, por lo que el sistema operativo instalado no se puede configurar para ejecutarse desde un CD / DVD. Lo que haremos será hacer un volcado del contenido del fichero obtenido directamente sobre el disco físico de destino (en nuestro caso, &lt;code&gt;/dev/sdb&lt;/code&gt;).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo dd if=disk.img of=/dev/sdb bs=32M&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;256+0 registros leídos
256+0 registros escritos
8589934592 bytes (8.6 GB) copiados, 76.3879 s, 112 MB/s&lt;/span&gt;&lt;/pre&gt;
Una vez realizada la migración, el número y el tamaño de las particiones en el disco de destino se mantendrá exactamente igual que en la máquina virtual original.&lt;br /&gt;
&lt;br /&gt;
Lo más probable es que sea necesario redimensionar las particiones para aprovechar al máximo el espacio del disco duro físico.&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;
Relacionado:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jdbaldoma.net/2013/11/eliminar-snapshots-en-virtualbox.html&quot;&gt;Eliminar las capturas de una imagen en VirtualBox&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
Fuentes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://superuser.com/questions/114445/is-it-possible-to-convert-virtual-machines-to-physical-environments&quot;&gt;Superuser - Is it possible to convert virtual machines to physical environments?&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://community.spiceworks.com/how_to/show/1946-copying-a-virtual-linux-system-from-virtualbox-to-a-real-physical-machine&quot;&gt;Spiceworks - Copying a virtual Linux system from Virtualbox to a real physical machine&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/3535944947092531281/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/3535944947092531281' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/3535944947092531281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/3535944947092531281'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/11/migrar-mv-a-maquina-fisica.html' title='Ubuntu: Migrar una máquina virtual a una máquina física'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsf6H4CyMs9H3eODbmBc7uDp8nGQY2DN39ar1B8UGdaYCU4LlxFZNjuJm9Z3meumCLF40W8JoPEyh6E1iA-5ln509okMbS41XoQ8Mq69shTHDvwLcpvNOcvA257qLjAopb89xjqjoFXMM/s72-c/v2p.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-675573864148099193</id><published>2013-11-11T20:53:00.000+01:00</published><updated>2013-11-11T20:53:37.288+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="VirtualBox"/><title type='text'>Eliminar las capturas de una imagen en VirtualBox</title><content type='html'>Antes de realizar algunas tareas más o menos habituales en el ámbito de las máquinas virtuales (como el clonado de discos virtuales o la redimensión de una partición en una máquina virtual), es necesario eliminar todas las &lt;a href=&quot;http://es.wikipedia.org/wiki/Copia_instant%C3%A1nea_de_volumen&quot; target=&quot;_blank&quot;&gt;capturas o &lt;i&gt;snapshots&lt;/i&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Cuando se elimina una captura, en realidad, lo que se está haciendo es descartar la información de estado almacenada en ella. Los datos de disco repartidos en varios archivos creados con la captura se fusionan en un sólo archivo. Este proceso puede ser largo y, una vez terminado, la información de la captura no podrá ser recuperada.&lt;br /&gt;
&lt;br /&gt;
La forma más sencilla de realizar esta operación es desde el propio GUI de VirtualBox. &lt;br /&gt;
&lt;br /&gt;
1. Seleccionamos la Maquina Virtual y hacemos click sobre el icono de &quot;Eliminar instantánea&quot;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;margin-top:15px; clear: both; text-align: center;&quot;&gt;&lt;img width=&quot;550&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-4QgQzMAupCjncGZRl4nkE6aJzibP6RCiktjDFFOu68zfHCKif_HOW3ZsZvb4g-jSqjK4wqAMTJVpzvwGRLcn-dh2gIBbWDNHBBWe9Lt3GQOrZFoP35jTjfQr95I8QCybsrBEe3u1Mpo/s1600/eliminar_snapshot_1.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
2. Confirmamos la operación haciendo click sobre el botón &quot;Eliminar&quot;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;margin-top:15px; clear: both; text-align: center;&quot;&gt;&lt;img width=&quot;550&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjJ0uFTezs5VKvZfbTr3pXBo8U0cF1PCEneuz29xmiUsVShtsJmZrhqoS7g1pTo2msLAdI0xmsHtisYByTmUskNUMqER3u5lYB7wBRH_fa9uGdenUfRQ4GT9fNr1hbbdH30IbWNLpbGvU/s1600/eliminar_snapshot_2.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
3. El resultado es una máquina virtual donde se ha fusionado el estado actual de la máquina virtual con todas las capturas existentes.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;margin-top:15px; clear: both; text-align: center;&quot;&gt;&lt;img width=&quot;550&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU761Efo-GJW0pCL7gU6-gRHTgZgl6e5-ZWXhXomdJOko9kmLNtCPf8YXzsZv5fX6tdjuS7NFgyh8pZ1JLFWwGJWbyqzoCHs2mt5v9ExgzFxnpY5IQHVgwjiIQ5GVUSwDfyJxyqrgCf1M/s1600/eliminar_snapshot_3.png&quot; /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/675573864148099193/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/675573864148099193' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/675573864148099193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/675573864148099193'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/11/eliminar-snapshots-en-virtualbox.html' title='Eliminar las capturas de una imagen en VirtualBox'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-4QgQzMAupCjncGZRl4nkE6aJzibP6RCiktjDFFOu68zfHCKif_HOW3ZsZvb4g-jSqjK4wqAMTJVpzvwGRLcn-dh2gIBbWDNHBBWe9Lt3GQOrZFoP35jTjfQr95I8QCybsrBEe3u1Mpo/s72-c/eliminar_snapshot_1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-2006771731427714015</id><published>2013-11-11T01:17:00.000+01:00</published><updated>2013-11-11T01:17:24.295+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Cambiar la partición de swap por un fichero</title><content type='html'>El espacio de intercambio es una zona del disco que se usa para guardar las imágenes de los procesos que no han de mantenerse en memoria física. A este espacio se le suele llamar swap y puede estar ubicado tanto en un fichero como en una partición exclusiva o partición de swap.&lt;br /&gt;
&lt;br /&gt;
Dejando de lado el debate de si es necesario o no un espacio de intercambio, hay que tener en cuenta que ambos sistemas (fichero o disco) presentan ventajas e inconvenientes que no se van a discutir en este tutorial puesto que lo que nos planteamos es la forma de eliminar la partición de swap y utilizar en su lugar un fichero de intercambio.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;1. Cálculo del tamaño de la partición de swap&lt;/span&gt;&lt;br /&gt;
En el caso que nos ocupa, partimos de una situación como la indicada en la imagen, con una partición de swap de 510MB situada dentro de una partición extendida.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;margin-top:15px; clear: both; text-align: center;&quot;&gt;&lt;img width=&quot;550&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOx5mbwlxe_D5d0NpdUywbTU7kK_eOd0pQUR0cSbJSGI_2ASTVzWTNc9qgdWPy8jV0GNw_hJ2Nq_OPww_g2lUMGWc25JqTA2hBGK7ednnBO9HTPiloc2qmEusCByWJVSx-3VpEKeHoLY0/s1600/gparted-1.png&quot; /&gt;&lt;/div&gt;Para conocer el tamaño de la partición de intercambio desde la línea de comandos se podría utilizar cualquiera de los dos comandos siguientes:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cat /proc/swaps&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Filename                         Type          Size    Used   Priority
&lt;span class=&quot;remark&quot;&gt;/dev/sda5                        partition     522236  0      -1&lt;/span&gt;&lt;/span&gt;

&lt;b&gt;$ free&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;             total       used        free   shared   buffers    cached
Mem:        507772      86888      420884        0      9508     40804
-/+ buffers/cache:      36576      471196
&lt;span class=&quot;remark&quot;&gt;Swap:       522236          0      522236&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;Si se divide la cifra de 522236 bytes entre 1024, se obtiene el tamaño conocido de 510MB.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;2. Desactivación de la partición de swap&lt;/span&gt;&lt;br /&gt;
Antes de empezar, desactivaremos la partición de intercambio:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo swapoff -a&lt;/b&gt;&lt;/pre&gt;Se puede comprobar que, efectivamente, la partición de swap ya no está activa&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cat /proc/swaps&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Filename                         Type          Size    Used   Priority&lt;/span&gt;

&lt;b&gt;$ free&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;             total       used        free   shared   buffers    cached
Mem:        507772      86888      420884        0      9508     40804
-/+ buffers/cache:      36576      471196
&lt;span class=&quot;remark&quot;&gt;Swap:            0          0           0&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;3. Supresión de la partición de swap&lt;/span&gt;&lt;br /&gt;
A continuación ya se puede eliminar la partición de swap que, en nuestro caso, está situada en la partición &lt;code&gt;/dev/sda5&lt;/code&gt;. También podemos eliminar la partición extendida que la contiene (&lt;code&gt;/dev/sda2&lt;/code&gt;).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo parted /dev/sda rm 5&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Información: Puede que sea necesario actualizar /etc/fstab&lt;/span&gt;

&lt;b&gt;$ sudo parted /dev/sda rm 2&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Información: Puede que sea necesario actualizar /etc/fstab&lt;/span&gt;&lt;/pre&gt;Una vez eliminada la partición de swap, la situación es la siguiente:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;margin-top:15px; clear: both; text-align: center;&quot;&gt;&lt;img width=&quot;550&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNa2Lsi8ny-MfPe8aaD19qeCGJDH7U4FJLhSA5G4yxuWbIvoYX2q5z4fKrYaguJIorPW8U8jLprQ2FeLgxv54QOkcEehk3uiioT8X4QC4WspvlNmpExUf00wWngCMTf2phSLbmoL0Xouw/s1600/gparted-2.png&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;4. Creación del nuevo espacio de intercambio&lt;/span&gt;&lt;br /&gt;
En este punto, una vez ya ha sido eliminada la partición de swap, procederemos a crear el nuevo archivo de intercambio y a su posterior activación.&lt;br /&gt;
&lt;br /&gt;
En primer lugar, generamos un archivo lleno de ceros con el mismo tamaño que tenía la partición de intercambio original (510MB).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo dd if=/dev/zero of=/swapfile bs=1M count=510&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;510+0 registros leídos
510+0 registros escritos
534773760 bytes (535MB) copiados, 2,77221 s, 193 MB/s&lt;/span&gt;&lt;/pre&gt;Lo siguiente será asignar el archivo recién creado como zona de intercambio y activar el swap.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo mkswap /swapfile&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Configurando la versión swapspace 1, tamaño = 522236 KiB
sin etiqueta, UUID=503822fb-5cca-46c4-abf2-a366583d24c2&lt;/span&gt;

&lt;b&gt;$ sudo swapon /swapfile&lt;/b&gt;&lt;/pre&gt;Después de lo anterior ya volvemos a tener zona de intercambio, pero ahora, en lugar de tenerla en una partición, la tenemos en un fichero. Lo podemos comprobar de nuevo.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cat /proc/swaps&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Filename                         Type          Size    Used   Priority
&lt;span class=&quot;remark&quot;&gt;/swapfile                        file          522236  0      -1&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;5. Consolidación de los cambios&lt;/span&gt;&lt;br /&gt;
Para que este cambio sea consistente y se mantenga activo la próxima vez que se reinicie el equipo, es preciso reflejar los cambios realizados en el archivo &lt;code&gt;/etc/fstab&lt;/code&gt;. Para ello, basta con cambiar el antiguo UUID de la partición de swap por el nombre del nuevo fichero de intercambio y también el punto de montaje.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo vim /etc/fstab&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;&amp;lt;files system&amp;gt;   &amp;lt;mount point&amp;gt;   &amp;lt;type&amp;gt;   &amp;lt;options&amp;gt;  &amp;lt;dump&amp;gt;   &amp;lt;pass&amp;gt;
/swapfile            swap         swap        sw       0        0&lt;/span&gt;&lt;/pre&gt;La próxima vez que arranque el sistema, ya dispondrá del nuevo espacio de intercambio situado en el fichero &lt;code&gt;/swapfile&lt;/code&gt;.&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;Fuentes:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Espacio_de_intercambio&quot;&gt;Wikipedia - Espacio de intercambio&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://frannoe.blogspot.com.es/2013/03/prescindir-de-la-particion-swap.html&quot;&gt;DMDC - &quot;Prescindir&quot; de la partición Swap&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/2006771731427714015/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/2006771731427714015' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/2006771731427714015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/2006771731427714015'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/11/cambiar-particion-swap-por-fichero.html' title='Cambiar la partición de swap por un fichero'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOx5mbwlxe_D5d0NpdUywbTU7kK_eOd0pQUR0cSbJSGI_2ASTVzWTNc9qgdWPy8jV0GNw_hJ2Nq_OPww_g2lUMGWc25JqTA2hBGK7ednnBO9HTPiloc2qmEusCByWJVSx-3VpEKeHoLY0/s72-c/gparted-1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-859639099350532407</id><published>2013-11-07T00:10:00.000+01:00</published><updated>2013-11-09T13:25:29.331+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Repositorios para versiones antiguas de Ubuntu</title><content type='html'>El calendario de versiones de Ubuntu marca que cada seis meses se publique una nueva versión del sistema.&lt;br /&gt;
&lt;br /&gt;
Las &lt;b&gt;versiones estándar&lt;/b&gt; reciben soporte de Canonical durante nueve meses por medio de actualizaciones de seguridad, parches para bugs críticos y actualizaciones menores de programas.&lt;br /&gt;
&lt;br /&gt;
Las &lt;b&gt;versiones LTS&lt;/b&gt; (Long-Term Support), que se liberan cada dos años (la próxima será la 14.04, en abril de 2014), reciben soporte durante cinco años en los sistemas de servidor y 3 en los de escritorio.&lt;br /&gt;
&lt;br /&gt;
La que sigue es una tabla con el ciclo de vida de las versiones Server de Ubuntu.&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2IA9Qd9WdCeDINE-VhFNRr1oeTGz7XMMVKLFc7JoB0lFGYyru6fbBdteqWmrhbiOzXiKaSVhF_krs6bC_AgaOgvXIT4CXgYJObV28PowM07MoSpO8ufxJZL_vR-S-q6GtZJpy_GPJArU/s1600/ubuntu_lts_release_cycle.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2IA9Qd9WdCeDINE-VhFNRr1oeTGz7XMMVKLFc7JoB0lFGYyru6fbBdteqWmrhbiOzXiKaSVhF_krs6bC_AgaOgvXIT4CXgYJObV28PowM07MoSpO8ufxJZL_vR-S-q6GtZJpy_GPJArU/s1600/ubuntu_lts_release_cycle.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fuente: ubuntu.com&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;Cuando termina el ciclo de soporte de una versión determinada, lo más indicado sería reinstalar el sistema con la última versión LTS disponible. No obstante, y dada la naturaleza de un equipo determinado, podría ser conveniente no realizar esa actualización.&lt;br /&gt;
&lt;br /&gt;
Dado que, una vez finalizado el fin de ciclo de las versiones, los repositorios dejan de estar disponibles, cuando intentemos acceder a ellos para instalar cualquier paquete (tanto en APT como en Synaptic) se generará un error 404.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo apt-get update&lt;/b&gt;
&lt;span class=&quot;error&quot;&gt;Err http://archive.ubuntu.com hardy Release.gpg
No se pudo resolver &#39;archive.ubuntu.com&#39;
Err http://archive.ubuntu.com hardy/main Translation-es
No se pudo resolver &#39;archive.ubuntu.com&#39;
Err http://archive.ubuntu.com hardy/restricted Translation-es
No se pudo resolver &#39;archive.ubuntu.com&#39;
Err http://archive.ubuntu.com hardy/universe Translation-es
No se pudo resolver &#39;archive.ubuntu.com&#39;
Err http://archive.ubuntu.com hardy/multiverse Translation-es
No se pudo resolver &#39;archive.ubuntu.com&#39;
Se está leyendo la lista de paquetes... Hecho
W: No se pudo obtener http://archive.ubuntu.com/ubuntu/dists/hardy/Release.gpg No se pudo resolver &#39;archive.ubuntu.com&#39;
[…]&lt;/span&gt;&lt;/pre&gt;Dado el caso, existe una forma sencilla de solucionar este problema. Se trata de modificar las fuentes de los repositorios añadiendo los repositorios &lt;code&gt;old-relesases&lt;/code&gt; para así poder seguir utilizando APT e instalar paquetes de esas versiones descatalogadas. &lt;br /&gt;
&lt;br /&gt;
Modificaremos el fichero de configuración &lt;code&gt;/etc/apt/sources.list&lt;/code&gt; y copiaremos en él el siguiente contenido:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo vim /etc/apt/sources.list&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;deb http://old-releases.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ hardy main restricted
deb http://old-releases.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ hardy-updates main restricted
deb http://old-releases.ubuntu.com/ubuntu/ hardy universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ hardy universe multiverse
deb http://old-releases.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://old-releases.ubuntu.com/ubuntu hardy-security main restricted&lt;/span&gt;&lt;/pre&gt;Este caso sería para la versión hardy (8.04 LTS). Si se utiliza otra versión, simplemente hay que sustituir &quot;hardy&quot; por el nombre de la misma.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;Mapa de las versiones de Ubuntu&lt;/div&gt;&lt;br /&gt;
&lt;table class=&quot;wikitable right&quot; style=&quot;background-color: #f9f9f9; border-collapse: collapse; border: 1px solid rgb(170, 170, 170); clear: right; color: black; font-family: sans-serif; font-size: 12px; height: 325px; line-height: 19px; margin: 0 auto; text-align: center; width: 473px;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Versión&lt;/th&gt;&lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Nombre en clave&lt;/th&gt;&lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Lanzamiento&lt;/th&gt;&lt;th style=&quot;background-color: #f2f2f2; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Fin de soporte&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_4.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;4.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Warty Warthog&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;20/octubre/2004&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-wartyrelease_47-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-wartyrelease-47&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;47&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;30/abril/2006&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_5.04&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;5.04&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Hoary Hedgehog&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;8/abril/2005&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-hoaryrelase_48-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-hoaryrelase-48&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;48&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;31/octubre/2006&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_5.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;5.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Breezy Badger&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;13/octubre/2005&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-breezyrelrase_49-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-breezyrelrase-49&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;49&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;13/abril/2006&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_6.06_LTS&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;6.06 LTS&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Dapper Drake&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;1/junio/2006&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-dapperrelease_50-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-dapperrelease-50&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;50&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;14/julio/2009 (escritorio)&lt;br /&gt;
1/junio/2011 (servidor)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_6.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;6.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Edgy Eft&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;26/octubre/2006&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-edgyrelease_51-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-edgyrelease-51&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;51&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;25/abril/2008&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_7.04&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;7.04&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Feisty Fawn&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;19/abril/2007&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-feistyrelease_52-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-feistyrelease-52&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;52&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;19/octubre/2008&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_7.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;7.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Gutsy Gibbon&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;18/octubre/2007&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-gustyrelease_53-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-gustyrelease-53&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;53&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;18/abril/2009&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_8.04_LTS&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;8.04 LTS&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Hardy Heron&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;24/abril/2008&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-hardyrelease_54-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-hardyrelease-54&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;54&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;12/mayo/2011 (escritorio)&lt;br /&gt;
9/mayo/2013 (servidor)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_8.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;8.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Intrepid Ibex&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;30/octubre/2008&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-intrepidrelease_55-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-intrepidrelease-55&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;55&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;30/abril/2010&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_9.04&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;9.04&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Jaunty Jackalope&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;23/abril/2009&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-jauntyrelease_56-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-jauntyrelease-56&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;56&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;23/octubre/2010&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_9.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;9.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Karmic Koala&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;29/octubre/2009&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-karmikrelease_57-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-karmikrelease-57&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;57&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;30/abril/2011&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #fbde74; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_10.04_LTS&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;10.04 LTS&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Lucid Lynx&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;29/abril/2010&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-lucidrelease_58-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-lucidrelease-58&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;58&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;9/mayo/2013 (escritorio)&lt;br /&gt;
15/abril/2015 (servidor)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_10.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;10.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Maverick Meerkat&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;10/octubre/2010&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-maverickrelease_59-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-maverickrelease-59&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;59&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;10/abril/2012&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_11.04&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;11.04&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Natty Narwhal&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;28/abril/2011&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-nattyrelease_60-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-nattyrelease-60&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;60&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;28/octubre/2012&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_11.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;11.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Oneiric Ocelot&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;13/octubre/2011&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-oneiricrelease_61-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-oneiricrelease-61&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;61&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;9/mayo/2013&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #a0e75a; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_12.04_LTS&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;12.04 LTS&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Precise Pangolin&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;26/abril/2012&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-preciserelease_62-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-preciserelease-62&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;62&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;abril/2017&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #a0e75a; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_12.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;12.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Quantal Quetzal&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;18/octubre/2012&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-quantalrelease_63-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-quantalrelease-63&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;63&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;abril/2014&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #a0e75a; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_13.04&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;13.04&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Raring Ringtail&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;25/abril/2013&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-raringrelease_64-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-raringrelease-64&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;64&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;enero/2014&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background-color: #a0e75a; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Anexo:Versiones_de_Ubuntu#Ubuntu_13.10&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none;&quot; title=&quot;Anexo:Versiones de Ubuntu&quot;&gt;13.10&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;&lt;i&gt;Saucy Salamander&lt;/i&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;17/octubre/2013&lt;sup class=&quot;reference&quot; id=&quot;cite_ref-saucyrelease_65-0&quot; style=&quot;line-height: 1em; unicode-bidi: -webkit-isolate;&quot;&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu#cite_note-saucyrelease-65&quot; style=&quot;background-image: none; background-position: initial initial; background-repeat: initial initial; color: #0b0080; text-decoration: none; white-space: nowrap;&quot;&gt;65&lt;/a&gt;&lt;/sup&gt;&lt;/td&gt;&lt;td style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;julio/2014&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th colspan=&quot;1&quot; style=&quot;background-color: #dddddd; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Color&lt;/th&gt;&lt;th colspan=&quot;3&quot; style=&quot;background-color: #dddddd; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Significado&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;1&quot; style=&quot;background-color: salmon; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Rojo&lt;/td&gt;&lt;td colspan=&quot;3&quot; style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Versión ya sin soporte&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fbde74; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Amarillo&lt;/td&gt;&lt;td colspan=&quot;3&quot; style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Solo versión de servidor con soporte&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;1&quot; style=&quot;background-color: #a0e75a; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Verde&lt;/td&gt;&lt;td colspan=&quot;3&quot; style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Versión con soporte (escritorio y servidor)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;1&quot; style=&quot;background-color: skyblue; border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Azul&lt;/td&gt;&lt;td colspan=&quot;3&quot; style=&quot;border: 1px solid rgb(170, 170, 170); padding: 0.2em;&quot;&gt;Versión en futuro desarrollo&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; colspan=&quot;4&quot; style=&quot;text-align: center;&quot;&gt;Fuente: wikipedia.org&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://rm-rf.es/como-usar-apt-o-synaptic-en-versiones-antiguas-de-ubuntu-tras-end-of-life/&quot; target=&quot;_blank&quot;&gt;Cómo usar APT o Synaptic en versiones antiguas de Ubuntu (tras ‘end of life’)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Ubuntu&quot; target=&quot;_blank&quot;&gt; Wikipedia - Ubuntu &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ubuntu.com/server&quot; target=&quot;_blank&quot;&gt;Ubuntu Server - for scale-out computing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/859639099350532407/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/859639099350532407' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/859639099350532407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/859639099350532407'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/11/repositorios-para-versiones-antiguas-de.html' title='Repositorios para versiones antiguas de Ubuntu'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2IA9Qd9WdCeDINE-VhFNRr1oeTGz7XMMVKLFc7JoB0lFGYyru6fbBdteqWmrhbiOzXiKaSVhF_krs6bC_AgaOgvXIT4CXgYJObV28PowM07MoSpO8ufxJZL_vR-S-q6GtZJpy_GPJArU/s72-c/ubuntu_lts_release_cycle.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-1666117019425048398</id><published>2013-06-15T10:38:00.000+02:00</published><updated>2014-11-06T11:08:37.035+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Backup/Restore del MBR</title><content type='html'>Un registro de arranque principal, conocido también como registro de arranque maestro o por su nombre en inglés &lt;b&gt;Master Boot Record&lt;/b&gt; (abreviado MBR) es el primer sector (&quot;sector cero&quot;) de un dispositivo de almacenamiento de datos, como un disco duro. A veces, se emplea para el arranque del sistema operativo con bootstrap, otras veces es usado para almacenar una tabla de particiones y, en ocasiones, se usa sólo para identificar un dispositivo de disco individual, aunque en algunas máquinas esto último no se usa y es ignorado.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Backup del MBR&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En UNIX y GNU/Linux se puede usar el comando &lt;code&gt;dd&lt;/code&gt; para hacer una copia de seguridad del MBR (en este caso, del disco sda): &lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo dd if=/dev/sda of=/path/to/file/mbr.512.img bs=512 count=1&lt;/b&gt;&lt;/pre&gt;Si se quiere hacer una copia de seguridad del MBR, sería recomendable copiar los primeros 63 sectores del disco (que equivaldrían al primer cilindro del disco) y no sólo el primero, ya que nuestro sistema podría tener implementado el sistema GUID, el cual utiliza más sectores para guardar la información sobre las particiones del disco duro. La instrucción sería parecida:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo dd if=/dev/sda of=/path/to/file/mbr_63.512.img bs=512 count=63&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Borrado del MBR&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para borrar el MBR, si no tenemos una copia de seguridad pero necesitamos eliminar la información de este sector&lt;strike&gt;, tenemos que poner los 512 bytes a cero&lt;/strike&gt;. Para ello bastará con borrar los primeros 446 bits porque el resto de MBR contiene la tabla de particiones :&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo dd if=/dev/zero of=/dev/sda bs=446 count=1&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Restauración del MBR&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Desde la consola, igualmente, se puede restaurar el MBR&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo dd of=/dev/sda if=/path/to/file/mbr.512.img bs=512 count=1&lt;/b&gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot; style=&quot;background-color:#FFDDDD; margin-bottom:12px;&quot;&gt;&lt;b&gt;Advertencia&lt;/b&gt;: Restaurar el MBR con una tabla de particiones diferente hará que sus datos sean ilegibles y casi imposible de recuperar.&lt;/div&gt;&lt;div class=&quot;destacado&quot;&gt;En los sistemas operativos de Microsoft no hay acceso directo al MBR. En DOS o Windows 9x, el programa de DOS &lt;code&gt;fdisk&lt;/code&gt; junto con &lt;code&gt;fdisk /mbr&lt;/code&gt; (del que no hay documentación) reescribirá el código del MBR. En Windows 2000 y posteriores, la consola de recuperación puede usarse para escribir el nuevo código del MBR al disco duro. Existen otras utilidades para editar la tabla de particiones del MBR directamente.&lt;br /&gt;
&lt;br /&gt;
Si se está haciendo un backup del disco duro (lo que en inglés se conoce como &lt;i&gt;ghosting&lt;/i&gt;) y da avisos de que no se encuentra el fichero de paginación, seguramente se pueda solucionar con &lt;code&gt;fdisk /fixmbr&lt;/code&gt; (ejecutado desde un disquete, ya que no se podrá entrar en Windows).&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuente&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Registro_de_arranque_principal&quot; target=&quot;_blank&quot;&gt;Wikipedia - Registro de arranque principal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.archlinux.org/index.php/Master_Boot_Record_(Espa%C3%B1ol)&quot; target=&quot;_blank&quot;&gt;ArchLinux - Master Boot Record (Español)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/1666117019425048398/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/1666117019425048398' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1666117019425048398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1666117019425048398'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/06/backuprestore-del-mbr.html' title='Backup/Restore del MBR'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-3665345616637906569</id><published>2013-06-13T17:13:00.000+02:00</published><updated>2013-11-09T13:29:35.001+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Cambiar el UUID de una partición</title><content type='html'>Después de haber realizado un volcado de una partición sobre otra con el comando &lt;code&gt;dd&lt;/code&gt;, es habitual que los &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt; de ambas particiones queden iguales. En el caso del ejemplo, hemos hecho un volcado de la partición &lt;code&gt;/dev/sda5&lt;/code&gt; sobre la partición &lt;code&gt;/dev/sda3&lt;/code&gt;. De ahí que ambas particiones tengan el mismo &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo blkid&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;/dev/loop0: TYPE=&quot;squashfs&quot;
/dev/sda1: LABEL=&quot;DELLUTILITY&quot; UUID=&quot;805E-EA66&quot; TYPE=&quot;vfat&quot;
/dev/sda2: LABEL=&quot;OS&quot; UUID=&quot;50A5-D2A7&quot; TYPE=&quot;vfat&quot;
/dev/sda3: UUID=&quot;&lt;span class=&quot;remark&quot;&gt;294a6668-e7ac-46d6-9394-f5c19061fed4&lt;/span&gt;&quot; TYPE=&quot;ext4&quot;
/dev/sda5: UUID=&quot;&lt;span class=&quot;remark&quot;&gt;294a6668-e7ac-46d6-9394-f5c19061fed4&lt;/span&gt;&quot; TYPE=&quot;ext4&quot;
/dev/sda6: UUID=&quot;3e2e04c1-f76a-43a3-865e-2cb3e415e140&quot; TYPE=&quot;swap&quot;&lt;/span&gt;&lt;/pre&gt;Lógicamente, el hecho de que dos particiones distintas tengan el mismo &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt; va a generar un problema puesto que el sistema no va a poder distinguir entre ambas particiones. Para solucionarlo, vamos a cambiar el &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt; de la partición &lt;code&gt;/dev/sda3&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
En nuestro caso, hemos consultado el archivo &lt;code&gt;/boot/grub/grub.cfg&lt;/code&gt; y hemos podido recuperar el &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt; original de la partición &lt;code&gt;/dev/sda3&lt;/code&gt; (147589f2-5680-4727-b1d6-acbc43d335c1). Si no fuera posible recuperar el &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt;, siempre se puede generar uno nuevo con el comando &lt;code&gt;uuidgen&lt;/code&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ uuidgen&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;fdd9b2c0-ae0e-4c2b-a833-084462e97bd9&lt;/span&gt;&lt;/pre&gt;Finalmente, una vez conocemos el nuevo &lt;a href=&quot;http://es.wikipedia.org/wiki/Universally_unique_identifier&quot; target=&quot;_blank&quot; title=&quot;¿Qué es el UUID?&quot;&gt;UUID&lt;/a&gt; para la partición podemos proceder al cambio y a la posterior comprobación.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo tune2fs /dev/sda3 -U 147589f2-5680-4727-b1d6-acbc43d335c1&lt;/b&gt;
&lt;b&gt;$ sudo blkid&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;/dev/loop0: TYPE=&quot;squashfs&quot;
/dev/sda1: LABEL=&quot;DELLUTILITY&quot; UUID=&quot;805E-EA66&quot; TYPE=&quot;vfat&quot;
/dev/sda2: LABEL=&quot;OS&quot; UUID=&quot;50A5-D2A7&quot; TYPE=&quot;vfat&quot;
/dev/sda3: UUID=&quot;147589f2-5680-4727-b1d6-acbc43d335c1&quot; TYPE=&quot;ext4&quot;
/dev/sda5: UUID=&quot;294a6668-e7ac-46d6-9394-f5c19061fed4&quot; TYPE=&quot;ext4&quot;
/dev/sda6: UUID=&quot;3e2e04c1-f76a-43a3-865e-2cb3e415e140&quot; TYPE=&quot;swap&quot;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.sudo-juice.com/how-to-change-the-uuid-of-a-linux-partition/&quot; target=&quot;_blank&quot;&gt;Sudo Juice - How to Change the UUID of a Linux Partition&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/3665345616637906569/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/3665345616637906569' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/3665345616637906569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/3665345616637906569'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/06/cambiar-el-uuid-de-una-particion.html' title='Cambiar el UUID de una partición'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-5826482366453028824</id><published>2013-05-29T13:15:00.000+02:00</published><updated>2013-11-09T13:31:26.133+01:00</updated><title type='text'>Eliminar el sufijo de país en Blogger</title><content type='html'>Desde hace ya un tiempo, Blogger añade a todos sus blogs el sufijo correspondiente al &lt;a href=&quot;http://es.wikipedia.org/wiki/Dominio_de_nivel_superior&quot;&gt;dominio &lt;span title=&quot;Top Level Domain&quot;&gt;TLD&lt;/span&gt;&lt;/a&gt; del país desde el que se realiza la consulta (.es si se visita desde España, .mx desde Mexico, .fr desde Francia, etc.). De este modo, si se visita este blog (ubicado en &lt;b&gt;barralog.blogspot.com&lt;/b&gt;) desde Alemania, Blogger nos intentará redirigir automáticamente hacia &lt;b&gt;barralog.blogspot.com.de&lt;/b&gt;. &lt;br /&gt;
&lt;br /&gt;
Hay diversas razones por las que esto puede llegar a ser una molestia, por eso os indico una forma de solventarlo. Basta con insertar el siguiente código dentro del &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; de la plantilla.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt; 
   //&amp;lt;![CDATA[
   // Eliminar el sufijo del TLD de cada país en blogger
   var host = document.location.hostname;
   var ruta = document.location.pathname;
   var positive = host.substr(host.lastIndexOf(&quot;.&quot;));
   if (positive != &quot;.com&quot;) {
      var output = &quot;http://&quot; + host.substr(0, host.indexOf(&quot;.&quot;));
      output += &quot;.blogspot.com/ncr&quot; + ruta;
      window.location.replace(output);
   }
   //]]&amp;gt;
&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;b&gt;Nota&lt;/b&gt;: Esta acción no está penalizada en absoluto por Blogger y tampoco afecta a AdSense.&lt;/div&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Información relacionada&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://support.google.com/blogger/answer/2402711?hl=es&quot;&gt;Blogger - ¿Por qué mi blog se redirecciona a una URL específica de un país?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://ajmrdesign.com/2012/03/eliminar-el-prefijo-en-blogger.html&quot;&gt;AJRM DESIGN - Ocultar el sufijo en blogger&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/5826482366453028824/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/5826482366453028824' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5826482366453028824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5826482366453028824'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/05/eliminar-sufijo-tld-de-cada-pais.html' title='Eliminar el sufijo de país en Blogger'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-6941606306508759089</id><published>2013-05-13T14:52:00.000+02:00</published><updated>2013-11-09T13:32:57.234+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Desconectar sesión remota</title><content type='html'>En algunas ocasiones se puede dar el caso de establezcamos una conexión por ssh a un servidor remoto y que, por la razón que sea, al cerrar esa conexión, la sesión haya quedado abierta. En este artículo veremos una forma de eliminar esa sesión remota &quot;fantasma&quot;.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
A través del comando &lt;code&gt;who&lt;/code&gt; se pueden consultar las sesiones que están abiertas en este momento. En el caso del ejemplo nos damos cuenta de que existe una sesión remota en &lt;code&gt;pts/0&lt;/code&gt;, abierta desde hace días, que no debería estar activa.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ who&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;root  tty1         2013-05-03 14:41
root  pts/0        2013-04-30 19:26 (remote-host.local)&lt;/span&gt;&lt;/pre&gt;Consultamos todos los procesos asociados a esa sesión remota (con identificador &lt;code&gt;pts/0&lt;/code&gt;).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ ps ax | grep pts/0&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;(standard input):76: 1504 ?        S      0:02 sshd: root@pts/0 
(standard input):77: 1505 pts/0    Ss+    0:01 -bash
(standard input):104: 5172 tty1    S+     0:00 grep pts/0&lt;/span&gt;&lt;/pre&gt;En primer lugar, eliminaremos el proceso &quot;padre&quot; (pid=1504) que es el que mantiene la sesión abierta. Posteriormente podemos comprobar que la sesión remota ya ha quedado cerrada.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo kill -9 1504&lt;/b&gt;
&lt;b&gt;$ ps ax | grep pts/0&lt;/b&gt;
&lt;b&gt;$ who&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;root  tty1         2013-05-03 14:41&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://glosario-x.blogspot.com.es/2009/12/desconectar-un-usuario-remoto-en-linux.html&quot;&gt;Glosario X - Desconectar un usuario remoto en Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/6941606306508759089/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/6941606306508759089' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/6941606306508759089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/6941606306508759089'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/05/desconectar-sesion-remota.html' title='Desconectar sesión remota'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-1185102410336080054</id><published>2013-05-13T13:02:00.000+02:00</published><updated>2013-11-09T13:36:11.309+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache"/><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Habilitar HTTPS en apache</title><content type='html'>En algunas ocasiones (envío de formularios, páginas de autenticación, etc.) es necesario que nuestro servidor web pueda entregar páginas cifradas bajo el protocolo seguro HTTPS. En este artículo se muestran cuales son los pasos a seguir para i) generar un certificado SSL autofirmado y ii) configurar convenientemente el servidor apache2 para que pueda entregar la página &lt;code&gt;https://www.midominio.com&lt;/code&gt;.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;1. Creación de un certificado SSL autofirmado&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En primer lugar crearemos el directorio &lt;code&gt;/etc/apache2/ssl&lt;/code&gt; que es el lugar donde dejaremos las claves pública y privada del certificado SSL. Posteriormente, crearemos un certificado SSL para el dominio &quot;midominio.com&quot; con una validez de 365 días.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo mkdir /etc/apache2/ssl&lt;/b&gt;
&lt;b&gt;$ sudo openssl req -new -x509 -days 365 -nodes \
  -out /etc/apache2/ssl/midominio.com.pem \
  -keyout /etc/apache2/ssl/midominio.com.key&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Generating a 1024 bit RSA private key
................................................................+++
........................................................+++
writing new private key to &#39;/etc/apache2/ssl/midominio.com.key&#39;
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter &#39;.&#39;, the field will be left blank.
-----
Country Name (2 letter code) [AU]:&lt;span class=&quot;remark&quot;&gt;ES&lt;/span&gt;
State or Province Name (full name) [Some-State]:&lt;span class=&quot;remark&quot;&gt;Provincia&lt;/span&gt;
Locality Name (eg, city) []:&lt;span class=&quot;remark&quot;&gt;Ciudad&lt;/span&gt;
Organization Name (eg, company) [Internet Widgits Pty Ltd]:&lt;span class=&quot;remark&quot;&gt;Mi organización&lt;/span&gt;
Organizational Unit Name (eg, section) []:&lt;span class=&quot;remark&quot;&gt;Departamento&lt;/span&gt;
Common Name (e.g. server FQDN or YOUR name) []:&lt;span class=&quot;remark&quot;&gt;www.midominio.com&lt;/span&gt;
Email Address []:&lt;span class=&quot;remark&quot;&gt;contacto@midomino.com&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;Por defecto, cuando se crean los archivos para las claves pública y privada del certificado SSL, se le asignan unos permisos que permiten el acceso de cualquier usuario. Dado que la clave privada debe de ser privada (únicamente debe de ser accesible por su propietario), procederemos a cambiar los permisos del fichero.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo chmod 400 /etc/apache2/ssl/midomino.com.key&lt;/b&gt;
&lt;b&gt;$ ls -l /etc/apache2/ssl&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;total 8
&lt;span class=&quot;remark&quot;&gt;-r--------&lt;/span&gt; 1 root root 1505 mai 10 13:12 midominio.com.key
&lt;span class=&quot;remark&quot;&gt;-r--r--r--&lt;/span&gt; 1 root root 1708 mai 10 13:12 midominio.com.pem&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;2. Configuración del servidor apache2&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora que ya tenemos ubicadas las claves pública y privada para nuestro domino, ya podemos proceder a la configuración de apache2.&lt;br /&gt;
&lt;br /&gt;
El primer paso será el de habilitar el módulo SSL de apache.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo a2enmod ssl&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Enabling module ssl.
See /usr/share/doc/apache2.2-common/README.Debian.gz on how to configure SSL and create self-signed certificates.
To activate the new configuration, you need to run:
service apache2 restart&lt;/span&gt;&lt;/pre&gt;A continuación, modificaremos la configuración de Apache para que también escuche peticiones por el puerto 443 (que es el puerto por defecto para el protocolo HTTPS).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo vim /etc/apache2/ports.conf&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Listen 80
&lt;span class=&quot;remark&quot;&gt;Listen 443&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;Comprobamos, para nuestro servidor, los sites que están disponibles y los que están habilitados&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ ls -l /etc/apache2/sites-available/&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;total 12
-rw-r--r-- 1 root root 1779 mai  3 13:14 default
-rw-r--r-- 1 root root 7469 feb  7  2012 default-ssl&lt;/span&gt;

&lt;b&gt;$ ls -l /etc/apache2/sites-enabled/&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;total 0
lrwxrwxrwx 1 root root 26 mar 11 13:50 &lt;b&gt;000-default&lt;/b&gt; -&amp;gt; ../sites-available/default&lt;/span&gt;&lt;/pre&gt;De los listados anteriores se comprueba que, aunque se habilite el módulo SSL, esta acción no habilita el sitio (&lt;code&gt;default-ssl&lt;/code&gt;) automáticamente. Hay que activarlo de forma manual. Una vez habilitado el sitio, podemos comprobar que, efectivamente, el sitio &lt;code&gt;default-ssl&lt;/code&gt; está activado.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo a2ensite default-ssl&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Enabling site default-ssl.
To activate the new configuration, you need to run:
service apache2 reload&lt;/span&gt;

&lt;b&gt;$ ls -l /etc/apache2/sites-enabled/&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;total 0
lrwxrwxrwx 1 root root 26 mar 11 13:50 &lt;b&gt;000-default&lt;/b&gt; -&amp;gt; ../sites-available/default
lrwxrwxrwx 1 root root 30 mai 10 11:50 &lt;b&gt;default-ssl&lt;/b&gt; -&amp;gt; ../sites-available/default-ssl&lt;/span&gt;&lt;/pre&gt;Ya solo queda editar el fichero de configuración del nuevo site para añadir la configuración del &lt;code&gt;VirtualHost&lt;/code&gt; para el dominio www.midominio.com permitiendo así el acceso a la página cifrada &lt;code&gt;https://www.midominio.com&lt;/code&gt;&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo vim /etc/apache2/sites-available/default-ssl&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;&amp;lt;VirtualHost *:443&amp;gt;
   ServerAdmin contacto@midominio.com
   ServerName www.midominio.com
   DocumentRoot /var/www/vhosts/midominio.com/
   ErrorLog /var/log/apache2/midominio.com-error-ssl.log
   CustomLog /var/log/apache2/midominio.com-access-ssl.log combined
   SSLEngine On
   SSLCertificateFile /etc/apache2/ssl/midominio.com.pem
   SSLCertificateKeyFile /etc/apache2/ssl/midominio.com.key
&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;&lt;/pre&gt;Finalmente, para que todos los cambios efectuados sean operativos, hay que reiniciar el servicio apache.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo service apache2 restart&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt; * Restarting web server apache2... 
waiting                                                           [ OK ]&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;b&gt;Error de confianza&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Dado que el certificado que hemos generado más arriba no está generado por una CA (Autoridad Certificadora) de confianza, cuando intentemos acceder a la página en cuestión, el navegador mostrará un error en el certificado.&lt;br /&gt;
&lt;div style=&quot;margin-top:15px; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixETIsAeaq2F4pKZXFUDVvLtS2uxSWs67UcO4pXr-valoBA22FXKW4TgroPex5c6d5w3Qn13OQrPiocV9yhcFf1gW0kJOOi7gkWFVSQSq5TpNNsOlOgM7IiqTgk5Xe0ZT4zcPYfKv-Fmo/s640/untrusted.jpg&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Relacionado&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://barralog.blogspot.com.es/2012/05/redirigir-una-conexion-segura-https-en.html&quot;&gt;Redirigir a una conexión segura https en Apache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://betatwits.wordpress.com/2010/07/21/activar-ssl-en-apache2-ubuntu-10-04/&quot;&gt;Activar SSL en Apache2 (Ubuntu&amp;nbsp;10.04)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/1185102410336080054/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/1185102410336080054' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1185102410336080054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1185102410336080054'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/05/habilitar-https-en-apache.html' title='Habilitar HTTPS en apache'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixETIsAeaq2F4pKZXFUDVvLtS2uxSWs67UcO4pXr-valoBA22FXKW4TgroPex5c6d5w3Qn13OQrPiocV9yhcFf1gW0kJOOi7gkWFVSQSq5TpNNsOlOgM7IiqTgk5Xe0ZT4zcPYfKv-Fmo/s72-c/untrusted.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-4009667621318586376</id><published>2013-05-02T15:56:00.000+02:00</published><updated>2013-11-08T21:04:16.851+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Scripts"/><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Extraer lineas de un archivo</title><content type='html'>Actualmente estoy manipulando un &lt;a href=&quot;http://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format&quot; target=&quot;_blank&quot; title=&quot;¿Qué es un archivo LDIF?&quot;&gt;fichero LDIF&lt;/a&gt; que tiene alrededor de 6.800.000 líneas.&lt;br /&gt;
&lt;br /&gt;
El caso es que si utilizo un editor gráfico como por ejemplo &lt;b&gt;gedit&lt;/b&gt;, al tener que manejar un archivo de ese tamaño, el sistema se cuelga. Por otro lado, según qué tipo de operación se deba realizar, el uso de editores en modo consola como &lt;b&gt;nano&lt;/b&gt; o &lt;b&gt;vim&lt;/b&gt; puede llegar a ser incómodo.&lt;br /&gt;
&lt;br /&gt;
Para esos casos, puede servir de ayuda un pequeño script que nos permita la extracción de algunas líneas de código del archivo original. Basta con pasarle la &lt;i&gt;línea de inicio&lt;/i&gt;, la &lt;i&gt;línea final&lt;/i&gt; y el &lt;i&gt;nombre del archivo&lt;/i&gt; sobre el que realizar la extracción.&lt;br /&gt;
&lt;pre&gt;&lt;span class=&quot;result&quot;&gt;if [ $# -eq 3 ]; then 
   first=$1 
   last=$2 
   file=$3
   head -n $last $file | tail -n `expr $last - $first + 1` 
else 
   echo &quot;Usage: `basename $0` [firstLine] [lastLine] [file]&quot; 
fi&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuente&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://manelperez.com/linux/extraer-lineas-de-un-archivo/&quot;&gt;[Blog de Manel Pérez] Extraer lineas de un archivo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/4009667621318586376/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/4009667621318586376' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/4009667621318586376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/4009667621318586376'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/05/extraer-lineas-de-un-archivo.html' title='Extraer lineas de un archivo'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-8542280598931171195</id><published>2013-04-05T11:09:00.001+02:00</published><updated>2013-11-08T21:09:45.998+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>perl: warning: Setting locale failed.</title><content type='html'>Al instalar cualquier paquete&amp;nbsp;mediante el uso de apt-get&amp;nbsp;en&amp;nbsp;&lt;b&gt;Ububtu Server 12.04 LTS&lt;/b&gt;, el sistema genera un error como este:&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
 LANGUAGE = &quot;en_US:en&quot;,
 LC_ALL = (unset),
 LC_TIME = &quot;es_ES.UTF-8&quot;,
 LC_MONETARY = &quot;es_ES.UTF-8&quot;,
 LC_ADDRESS = &quot;es_ES.UTF-8&quot;,
 LC_TELEPHONE = &quot;es_ES.UTF-8&quot;,
 LC_NAME = &quot;es_ES.UTF-8&quot;,
 LC_MEASUREMENT = &quot;es_ES.UTF-8&quot;,
 LC_IDENTIFICATION = &quot;es_ES.UTF-8&quot;,
 LC_NUMERIC = &quot;es_ES.UTF-8&quot;,
 LC_PAPER = &quot;es_ES.UTF-8&quot;,
 LANG = &quot;en_US.UTF-8&quot;
    are supported and installed on your system.
perl: warning: Falling back to the standard locale (&quot;C&quot;).
locale: Cannot set LC_ALL to default locale: No such file or directory
&lt;/pre&gt;La forma de solucionarlo (fijando los locales en inglés y español) es la siguiente&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo locale-gen en_US en_US.UTF-8 es_ES es_ES.UTF-8&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Generating locales...
en_US.ISO-8859-1... done
en_US.UTF-8... up-to-date
es_ES.ISO-8859-1... done
es_ES.UTF-8... done
Generation complete.&lt;/span&gt;

&lt;b&gt;$ sudo dpkg-reconfigure locales&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Generating locales...
en_AG.UTF-8... done
en_AU.UTF-8... done
en_BW.UTF-8... done
en_CA.UTF-8... done
en_DK.UTF-8... done
en_GB.UTF-8... up-to-date
en_HK.UTF-8... done
en_IE.UTF-8... done
en_IN.UTF-8... done
en_NG.UTF-8... done
en_NZ.UTF-8... done
en_PH.UTF-8... done
en_SG.UTF-8... done
en_US.ISO-8859-1... up-to-date
en_US.UTF-8... up-to-date
en_ZA.UTF-8... done
en_ZM.UTF-8... done
en_ZW.UTF-8... done
es_ES.ISO-8859-1... up-to-date
es_ES.UTF-8... up-to-date
Generation complete.&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://ubuntuforums.org/showthread.php?t=1346581&quot;&gt;[Ubuntu forums] perl: warning: Setting locale failed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/8542280598931171195/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/8542280598931171195' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/8542280598931171195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/8542280598931171195'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2013/04/perl-warning-setting-locale-failed.html' title='perl: warning: Setting locale failed.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-2707314795061538491</id><published>2012-12-15T22:23:00.000+01:00</published><updated>2013-11-08T21:12:07.284+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programación Web"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Mi página web no se visualiza bien en IE</title><content type='html'>Uno de los principales retos a la hora de realizar un diseño web profesional es que la página se visualice correctamente en cualquier navegador. ¿Os imagináis que Facebook o Twitter sólo se vieran bien en Internet Explorer?&lt;br /&gt;
&lt;br /&gt;
Para ello, la primera premisa es realizar una &lt;b&gt;programación basada en estándares web&lt;/b&gt;. A pesar de eso, Internet Explorer suele dar algunos problemas ya que se trata de un navegador con una interpretación de los estándares un tanto &quot;peculiar&quot;.&lt;br /&gt;
&lt;br /&gt;
Es frecuente que un diseño web se vea bien en la mayoría de navegadores pero que Internet Explorer presente problemas de visualización. Para solventarlo, hay una solución muy simple y que suele funcionar: basta con añadir el siguiente &lt;i&gt;meta tag&lt;/i&gt; justo al inicio del &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; de la página.&lt;br /&gt;
&lt;pre&gt;&amp;lt;head&amp;gt; 
&lt;span class=&quot;remark&quot;&gt;&amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=8&quot; /&amp;gt;&lt;/span&gt;
[...]
&amp;lt;/head&amp;gt;&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Para saber más&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.maestrosdelweb.com/editorial/estandaresweb/&quot;&gt;Maestros del web: Estándares web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Relacionado&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://validator.w3.org/&quot;&gt;W3C: Markup Validation Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://jigsaw.w3.org/css-validator/validator.html.es&quot;&gt;W3C: CSS Validation Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://validator.w3.org/feed/&quot;&gt;W3C: Feed Validation Service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/2707314795061538491/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/2707314795061538491' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/2707314795061538491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/2707314795061538491'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/12/pagina-web-no-visualiza-bien-en-ie.html' title='Mi página web no se visualiza bien en IE'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-7019636770944154685</id><published>2012-12-14T10:30:00.000+01:00</published><updated>2015-07-20T10:59:15.791+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><title type='text'>Ajustar el huso horario en PHP</title><content type='html'>Cuando invocamos la función &lt;code&gt;&lt;a href=&quot;http://php.net/date&quot; target=&quot;_blank&quot; title=&quot;Información PHP de la función date()&quot;&gt;string &lt;b&gt;date&lt;/b&gt;( string $format [, int $timestamp = time() ] )&lt;/a&gt;&lt;/code&gt; en PHP, ésta nos devuelve una cadena con formato del tiempo indicado por el parámetro &lt;code&gt;$timestamp&lt;/code&gt; o, en el caso de no indicar ningún &lt;i&gt;timestamp&lt;/i&gt;, del momento actual.&lt;br /&gt;
&lt;br /&gt;
Un problema típico con el que nos podemos encontrar al leer la fecha y la hora actual es que el servidor se encuentre en un &lt;a href=&quot;http://es.wikipedia.org/wiki/Huso_horario&quot; target=&quot;_blank&quot; title=&quot;¿Qué es un huso horario?&quot;&gt;huso horario&lt;/a&gt; distinto al de la prestación del servicio. Por ejemplo, cuando el hosting está en algún punto de EEUU y el servicio se está prestando en alguna parte de Europa.&lt;br /&gt;
&lt;br /&gt;
Este problema se puede solucionar fácilmente de forma sencilla con la función &lt;code&gt;&lt;a href=&quot;http://php.net/manual/es/function.date-default-timezone-set.php&quot; target=&quot;_blank&quot; title=&quot;Información PHP de la función putenv()&quot;&gt;bool date_default_timezone_set    ( string $timezone_identifier   )&lt;/a&gt;&lt;/code&gt; tal y como se muestra en este ejemplo:&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&amp;lt;?php
   $now = time();
   date_default_timezone_set( &#39;Europe/Madrid&#39; );
   $fecha = date( &quot;d/m/Y&quot;, $now );
   $hora  = date( &quot;H:i:s&quot;, $now );
?&amp;gt;&lt;/pre&gt;
Sigue un listado con todos los husos horarios clasificados por área&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.africa.php&quot;&gt;África&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.america.php&quot;&gt;América&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.antarctica.php&quot;&gt;Antártida&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.arctic.php&quot;&gt;Ártico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.asia.php&quot;&gt;Asia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.atlantic.php&quot;&gt;Atlántico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.australia.php&quot;&gt;Australia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.europe.php&quot;&gt;Europa&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.indian.php&quot;&gt;India&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.pacific.php&quot;&gt;Pacífico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.others.php&quot;&gt;Otros&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;fuentes&quot;&gt;
&lt;b&gt;Para saber más&lt;/b&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://es2.php.net/manual/es/function.date.php&quot;&gt;PHP: date()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/function.date-default-timezone-set.php&quot; target=&quot;_blank&quot;&gt;PHP: date_default_timezone_set()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/es/timezones.php&quot;&gt;PHP: Listado de zonas horarias soportadas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/7019636770944154685/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/7019636770944154685' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7019636770944154685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7019636770944154685'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/12/ajustar-huso-horario-en-php.html' title='Ajustar el huso horario en PHP'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-3665059713833790957</id><published>2012-12-11T13:53:00.000+01:00</published><updated>2013-11-08T21:30:21.592+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="NTP"/><title type='text'>Sincronizar el reloj con NTP en servidores Debian</title><content type='html'>Para los administradores de sistemas con multitud de equipos y servidores a su cargo es muy conveniente mantener los relojes de todos los equipos sincronizados. De ese modo, en el caso de producirse algún incidente de seguridad (pero no solo en ese caso), como todos los ficheros de log estarán sincronizados,&amp;nbsp;el rastreo y secuenciación de los hechos es mucho más fácil.&lt;br /&gt;
&lt;br /&gt;
Lo primero que necesitamos es &lt;b&gt;instalar el paquete &lt;code&gt;ntpdate&lt;/code&gt;&lt;/b&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# apt-get install ntpdate&lt;/b&gt;&lt;/pre&gt;El paso siguiente es el de &lt;b&gt;sincronizar el reloj&lt;/b&gt; de cada sistema &lt;b&gt;con un servidor de NTP&lt;/b&gt;. Para hacer eso basta con ejecutar el comando &lt;code style=&quot;color: navy;&quot;&gt;ntpdate nombre.del.servidor&lt;/code&gt;. Si nuestro equipo está detrás de un firewall es conveniente usar el parámetro -u del ntpdate para que use un puerto no privilegiado en la comunicación con el servidor NTP (&lt;code style=&quot;color: navy;&quot;&gt;ntpdate -u nombre.del.servidor&lt;/code&gt;).&lt;br /&gt;
&lt;br /&gt;
Un servidor que funciona suficientemente bien para estos menesteres es &lt;code&gt;swisstime.ethz.ch&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Sincronización automática&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a asegurarnos que la sincronización se realice de forma periódica. Para ello, editaremos el fichero &lt;code&gt;/etc/cron.hourly/ntp&lt;/code&gt; con el siguiente contenido para que se ejecute cada hora:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# vim /etc/cron.hourly/ntp&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;#!/bin/bash 
/usr/sbin/ntpdate -u swisstime.ethz.ch&lt;/span&gt;&lt;/pre&gt;Para asegurarnos que se ejecutará sin problemas debemos de asignar permisos de ejecución al fichero /etc/cron.hourly/ntp&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# chmod a+x /etc/cron.hourly/ntp&lt;/b&gt;

$ ls -lF /etc/cron.hourly/ntp 
&lt;span class=&quot;result&quot;&gt;-rwxr-xr-x 1 root root 46 dec 11 13:39 &lt;b class=&quot;remark&quot;&gt;/etc/cron.hourly/ntp&lt;/b&gt;*&lt;/span&gt;&lt;/pre&gt;Esto es todo. A partir de ahora, todos los equipos tendrán la misma (buena) hora.&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://bulma.net/body.phtml?nIdNoticia=408&quot; target=&quot;_blank&quot;&gt;BULMA: Sincroniza tu reloj con NTP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Para saber más&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://bulma.net/body.phtml?nIdNoticia=153&quot; target=&quot;_blank&quot;&gt;BULMA: Configuración del reloj I (teoría)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bulma.net/body.phtml?nIdNoticia=154&quot; target=&quot;_blank&quot;&gt;BULMA: Configuración del reloj II (práctica)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/3665059713833790957/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/3665059713833790957' title='4 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/3665059713833790957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/3665059713833790957'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/12/sincronizar-reloj-ntp-debian.html' title='Sincronizar el reloj con NTP en servidores Debian'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-5246032145240240474</id><published>2012-10-16T00:38:00.000+02:00</published><updated>2013-11-09T13:45:06.047+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Tricks"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Cómo volver a crear el icono Mostrar escritorio en la barra de herramientas Inicio rápido en Windows XP</title><content type='html'>Para volver a crear el icono Mostrar escritorio usted mismo, siga estos pasos&lt;br /&gt;
&lt;br /&gt;
Haga clic en &lt;b&gt;Inicio&lt;/b&gt; y, en &lt;b&gt;Ejecutar&lt;/b&gt;, escriba notepad en el cuadro Abrir y haga clic en &lt;b&gt;Aceptar&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Copie y pegue el texto siguiente en la ventana del Bloc de notas.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop&lt;/pre&gt;En el menú &lt;b&gt;Archivo&lt;/b&gt;, haga clic en &lt;b&gt;Guardar como&lt;/b&gt; y, a continuación, guarde el archivo en el escritorio como &quot;&lt;b&gt;Show Desktop.scf&lt;/b&gt;&quot;. El icono &lt;b&gt;Mostrar escritorio&lt;/b&gt; se crea en el escritorio.&lt;br /&gt;
&lt;br /&gt;
Haga clic y arrastre el icono Mostrar escritorio a la barra de herramientas Inicio rápido.&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://support.microsoft.com/kb/190355/es&quot;&gt;Cómo volver a crear el icono Mostrar escritorio en la barra de herramientas Inicio rápido en Windows XP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/5246032145240240474/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/5246032145240240474' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5246032145240240474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5246032145240240474'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/10/como-volver-crear-el-icono-mostrar.html' title='Cómo volver a crear el icono Mostrar escritorio en la barra de herramientas Inicio rápido en Windows XP'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-7375032574820199492</id><published>2012-08-04T13:33:00.001+02:00</published><updated>2013-11-08T22:17:06.325+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instalacion"/><category scheme="http://www.blogger.com/atom/ns#" term="Mac"/><category scheme="http://www.blogger.com/atom/ns#" term="Symphony"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Instalando symfony 1.4 en Mac OS X</title><content type='html'>Symfony es un completo &lt;a href=&quot;http://es.wikipedia.org/wiki/Framework&quot;&gt;&lt;i&gt;framework&lt;/i&gt;&lt;/a&gt; diseñado para optimizar, gracias a sus características, el desarrollo de las aplicaciones web. Para empezar, &lt;b&gt;separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.&lt;br /&gt;
&lt;br /&gt;
En su momento vimos como realizar la &lt;a href=&quot;http://barralog.blogspot.com.es/2012/05/instalando-symfony-14-en-ubuntu.html&quot; target=&quot;_blank&quot;&gt;instalación de symfony para Ubuntu&lt;/a&gt;. Hoy vamos a ver como realizar la instalación para Mac OS X&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;title&quot;&gt;Requisitos previos&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Antes de iniciar todo el proceso, debemos asegurarnos de tener en marcha una &lt;a href=&quot;http://es.wikipedia.org/wiki/MAMP&quot; title=&quot;Mac-Apache-Mysql-PHP&quot;&gt;arquitectura MAMP&lt;/a&gt; (Mac-Apache-Mysql-PHP) en nuestro equipo.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Nota:&lt;/b&gt; Si el sistema MAMP ya está instalado, se puede saltar directamente al &lt;a href=&quot;http://www.blogger.com/blogger.g?blogID=2861649065273936462#instalacion&quot;&gt;proceso de instalación de symfony&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Existen herramientas como &lt;a href=&quot;http://www.apachefriends.org/en/index.html&quot;&gt;apachefriends&lt;/a&gt; ó &lt;a href=&quot;http://www.mamp.info/en/index.html&quot;&gt;MAMP&lt;/a&gt; que instalan todo lo necesario de una forma cómoda y sin complicaciones. En este tutorial, en cambio, vamos a aprovechar, las versiones de Apache y PHP que ya vienen instaladas en Mac OS X Lion e instalaremos manualmente mySQL.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Apache&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia de lo que pasa en Windows, Mac OS ya trae instalado el servidor Apache. Simplemente hay que activarlo. Para ello iremos a las «Preferencias del sistema», seleccionaremos el icono «Compartir» y marcaremos la opción «Compartir Web». Una vez activado el servicio, podemos comprobar el funcionamiento del servidor Apache escribiendo &lt;code&gt;http://localhost&lt;/code&gt; en la barra de direcciones del navegador. Se mostrará una página básica que nos indicará que funciona correctamente.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqftRI4QXcG_p_Cj42x0LBQFamnl9C1GVk5vbOn4szedBOX1ylZbTFhpVdR7PfVHtzbIXZk-7JJjMMFFVh-SaEu-WUC8qYcGjIM-eeUSHD2fO8D-Ct-_97OhmaPdeist0WAtGsMtuvN8/s1600/localhost.jpg&quot; style=&quot;margin-top: 15px; padding: 0px;&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
Por defecto, la raíz de los documentos de la página web (ficheros HTML, PHP, imágenes, etc.) se encuentra en el directorio &lt;code&gt;/Library/Webserver/Documents&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;PHP&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Una vez activado Apache, para que éste pueda cargar el módulo PHP, bastará con editar el fichero de configuración del servicio &lt;code&gt;/etc/apache2/httpd.conf&lt;/code&gt; y descomentar la línea donde se carga el múdulo de PHP (descomentar LoadModule php5_module)&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo vim /etc/apache2/httpd.conf&lt;/strong&gt;
&lt;span class=&quot;result&quot;&gt;## Descomentamos (eliminamos el # inicial) la siguiente línea:
&lt;strong&gt;LoadModule php5_module libexec/apache2/libphp5.so&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;A continuación, hacemos una copia del fichero de configuración por defecto del PHP y lo editamos:&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo cp /etc/php.ini.default /etc/php.ini
$ sudo vim /etc/php.ini&lt;/strong&gt;
&lt;span class=&quot;result&quot;&gt;## Cambiamos el tamaño máximo de subida de ficheros hasta 30M:
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
&lt;strong&gt;upload_max_filesize = 30M&lt;/strong&gt;

## Fijamos la zona horaria correspondiente:
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
&lt;strong&gt;date.timezone = &quot;Europe/Madrid&quot;&lt;/strong&gt;&lt;/span&gt;&lt;/pre&gt;Para que todos estos cambios tengan efecto, hay que reiniciar el servicio de Apache&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo apachectl restart&lt;/strong&gt;&lt;/pre&gt;Para comprobar el correcto funcionamiento del PHP dentro de Apache, crearemos una página en PHP con una llamada a &lt;code&gt;phpinfo()&lt;/code&gt; en la raíz de la web y la visualizaremos en el navegador:&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo vim /Library/WebServer/Documents/info.php&lt;/strong&gt;
&lt;span class=&quot;result&quot;&gt;&amp;lt;?php phpinfo(); ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;Cargando esta página en el navegador podremos comprobar el correcto funcionamiento de PHP:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCeGyDw6v_YUNmBRUmuZzh4_f9thyphenhyphenMuN6_09-YBWmazK2aAc5V-v1N_X4B2b2t029L5hthJoI09ZrlkglIDEzRgI8FoptFZOD75ryFLkTKuy-WQY1KGiHquxzQ49HsRIatQ9YLmWrL7Lk/s1600/phpinfo.jpg&quot; padding=&quot;0&quot; style=&quot;margin-top: 15px;&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;mySQL&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
A diferencia de Apache y PHP que, como ya hemos visto, sí vienen con el sistema y solo hay que activarlos, mySQL no viene viene incorporado (Mac OS X Lion incluye el soporte a postgreSQL).&lt;br /&gt;
&lt;br /&gt;
Para poder instalarlo, deberemos descargarlo desde &lt;a href=&quot;http://dev.mysql.com/downloads/mysql/#downloads&quot;&gt;Download MySQL Community Server&lt;/a&gt;. En nuestro caso, elegimos «Mac OS X ver. 10.6 (x86, 64-bit), DMG Archive». Para realizar la descarga, no es preciso registrarse, basta con hacer click en «No thanks, just start my download!».&lt;br /&gt;
&lt;br /&gt;
Una vez abierto el paquete DMG que nos acabamos de descargar, tenemos un ventana como esta:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0RomTir63UurluIsGOai0e8gji1QYAxedssxw3SbyOowKp8FAq5p3Fcxl7lit3rHKooHEBbvFLBDxPxMch-lpMZqNNb6cuvAKJ9cueHBsMt95XeWh0BdPghEtWS6qALYNrOpHgHQT2VM/s1600/mysql.jpg&quot; padding=&quot;0&quot; style=&quot;margin-top: 15px;&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;El orden de instalación:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Mysql-5.5.15-osx10.6-x86_64.pkg&lt;/li&gt;
&lt;li&gt;MySQL.prefPane&lt;/li&gt;
&lt;li&gt;MySQLStartupItem.pkg&lt;/li&gt;
&lt;/ol&gt;Tal y como ha quedado instalado el sistema, la contraseña de &lt;code&gt;root&lt;/code&gt; para mySQL está en blanco, lo cual es un potencial agujero de seguridad. Para ello, habrá que proceder a cambiar la contraseña siguiendo las indicaciones de &quot;&lt;a href=&quot;http://barralog.blogspot.com/2012/06/cambiar-la-contrasena-root-de-mysql.html&quot;&gt;Cambiar la contraseña root de mySQL&lt;/a&gt;&quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;Para trabajar desde la cónsola de una forma más eficaz, nos puede interesar añadir el directorio donde se encuentran los ejecutables de mySQL dentro de la variable &lt;code&gt;PATH&lt;/code&gt; del sistema. Para ello, editaremos el archivo &lt;code&gt;.bash_profile&lt;/code&gt; dentro de nuestra carpeta personal y añadiremos la siguiente línea:&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ vim ~/.bash_profile&lt;/strong&gt;
&lt;span class=&quot;result&quot;&gt;export PATH=&quot;/usr/local/mysql/bin:$PATH&quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
Para terminar con la configuración de mySQL, vamos a crear el fichero my.conf. Copiaremos el fichero de ejemplo que viene con la instalación y luego lo editaremos:&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
$ sudo vim /etc/my.cnf&lt;/strong&gt;&lt;/pre&gt;Dentro del apartado &lt;code&gt;[client]&lt;/code&gt;, añadiremos al usuario&amp;nbsp;&lt;span style=&quot;font-family: monospace;&quot;&gt;root&lt;/span&gt;, descomentaremos la línea de password (eliminando el primer carácter #) y le indicaremos la contraseña de &lt;code&gt;root&lt;/code&gt; de mySQL.&amp;nbsp;Más abajo, en la sección&amp;nbsp;&lt;code&gt;[mysqld]&lt;/code&gt;&amp;nbsp;nos aseguraremos de que la localización del socket sea la misma que la indicada por la variable &lt;code&gt;pdo_mysql.default_socket&lt;/code&gt; del archivo de configuración &lt;code&gt;/etc/php.ini&lt;/code&gt;&amp;nbsp;(en el caso de los Mac, suele ser&amp;nbsp;&lt;span style=&quot;font-family: monospace;&quot;&gt;/tmp/mysql.sock&lt;/span&gt;):&lt;br /&gt;
&lt;pre&gt;[client]
user = root
password        = &lt;span class=&quot;remark&quot;&gt;nuestra_contraseña&lt;/span&gt;

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock

[...]&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;INSTALACIÓN DE SYMFONY&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Antes de instalar symfony, es necesario crear el directorio que contendrá todos los ficheros relacionados con el proyecto. Para el ejemplo que nos ocupa, dispondremos de un contenedor global de proyectos en &lt;code&gt;/Users/sfprojects/&lt;/code&gt; y, en su interior, colocaremos una carpeta diferente para cada proyecto que vayamos a crear (en este tutorial, nuestro proyecto se llamará &lt;code&gt;proyecto&lt;/code&gt;):&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo mkdir -p /Users/sfprojects/proyecto&lt;/b&gt;
&lt;b&gt;$ sudo chown -R username /Users/sfproject/proyecto&lt;/b&gt;
&lt;b&gt;$ cd /Users/sfproject/proyecto&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Elección de la versión de Symfony&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En el momento de escribir este artículo, symfony tiene dos ramas estables del &lt;i&gt;framework&lt;/i&gt;: la 1.4.18 y la 2.0.0. En este tutorial asumimos que se desea instalar symfony 1.4.&lt;br /&gt;
&lt;br /&gt;
Se puede instalar symfony a nivel global en el servidor o incrustarlo en cada uno de los proyectos. Esta segunda opción es la preferida porque nos permitirá que los proyectos sean totalmente independientes unos de otros.&lt;br /&gt;
&lt;br /&gt;
La actualización del &lt;i&gt;framework&lt;/i&gt; instalado localmente en un proyecto no romperá ninguno de los otros proyectos de forma inesperada. Esto significa que se pueden tener proyectos en diferentes versiones de Symfony, y actualizarlos cada uno a la vez que mejor convenga.&lt;br /&gt;
&lt;br /&gt;
Siguiendo la práctica recomendada, instalaremos los archivos de symfony en el directorio &lt;code&gt;lib/vendor&lt;/code&gt;. Así pues, en primer lugar, vamos a crear ese directorio dentro de la estructura del proyecto:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ mkdir -p lib/vendor&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Instalando Symfony&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La forma más fácil de instalar symfony es &lt;a href=&quot;http://www.symfony-project.org/installation&quot; target=&quot;_blank&quot;&gt;descargándose el archivo desde la página web oficial del proyecto&lt;/a&gt;. Tenemos disponibles para la descarga las versiones en formatos&amp;nbsp;&lt;code&gt;.tgz&lt;/code&gt; y &lt;code&gt;.zip&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Descargamos el archivo (en nuestro caso, la versión&amp;nbsp;&lt;span style=&quot;font-family: monospace;&quot;&gt;.tgz&lt;/span&gt;) y lo colocamos en el directorio recién creado&amp;nbsp;&lt;code&gt;proyecto/lib/vendor&lt;/code&gt;, lo descomprimimos, y le cambiamos el nombre a symphony:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cd lib/vendor&lt;/b&gt;
&lt;b&gt;$ curl http://www.symfony-project.org/get/symfony-1.4.18.tgz -o symfony-1.4.18.tgz&lt;/b&gt;
&lt;b&gt;$ tar zxpf symfony-1.4.18.tgz&lt;/b&gt;
&lt;b&gt;$ mv symfony-1.4.18.tgz symfony&lt;/b&gt;
&lt;b&gt;$ rm symfony-1.4.18.tgz&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Creación del proyecto&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Nos situamos en el directorio &lt;code&gt;proyecto/&lt;/code&gt;&amp;nbsp;y,&amp;nbsp;para crear el proyecto symfony,&amp;nbsp;ejecutaremos la tarea&amp;nbsp;&lt;code&gt;generate:project&lt;/code&gt;&amp;nbsp;:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cd ../..&lt;/b&gt;
&lt;b&gt;$ php lib/vendor/symfony/data/bin/symfony generate:project proyecto&lt;/b&gt;&lt;/pre&gt;La tarea &lt;code&gt;generate:project&lt;/code&gt; genera la estructura predeterminada de directorios y archivos necesarios para un proyecto symfony:&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Directorio&lt;/strong&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;apps/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Contiene todas las aplicaciones del proyecto&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;cache/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos almacenados en caché por el &lt;i&gt;framework&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;config/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de configuración del proyecto&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;data/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de datos como los accesorios iniciales&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;lib/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Las bibliotecas y clases del proyecto&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;log/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de registro del &lt;i&gt;framework&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;plugins/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los plugins instalados&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;test/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;La unidad y los archivos de prueba funcional&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;web/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;El directorio raíz web (véase más adelante)&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;¿Por qué Symfony genera tantos archivos?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los principales beneficios de usar un framework completo es la normalización de los desarrollos. Gracias a la estructura de archivos y directorios por defecto de Symfony, cualquier desarrollador con algunos conocimientos de Symfony puede asumir el mantenimiento de un proyecto. En cuestión de minutos, será capaz de bucear en el código, corregir errores y añadir nuevas funcionalidades.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
La tarea &lt;code&gt;generate:project&lt;/code&gt; también crea,&amp;nbsp;en el directorio raíz del proyecto,&amp;nbsp;un acceso directo hacia&amp;nbsp;&lt;code&gt;symfony&lt;/code&gt;&amp;nbsp;&amp;nbsp;para acortar el número de caracteres a escribir cuando se ejecuta una tarea. Por lo tanto, a partir de ahora, en lugar de utilizar la ruta completa al programa de Symfony (&lt;code&gt;proyecto/lib/vendor/symfony/data/bin/symfony&lt;/code&gt;), podemos utilizar el acceso directo de &lt;code&gt;symfony&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Verificación de la instalación&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora que Symfony está instalado, desde&amp;nbsp;el directorio&amp;nbsp;&lt;code&gt;proyecto/&lt;/code&gt;,&amp;nbsp;comprobaremos que todo funciona correctamente. Para ello, utilizaremos la línea de comandos de &lt;code&gt;symfony&lt;/code&gt; para que nos muestre la versión instalada (notar el uso de la V mayúscula):&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ php symfony -V&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;symfony version &lt;b&gt;1.4.18&lt;/b&gt; (/Users/sfprojects/proyecto/lib/vendor/symfony/lib)&lt;/span&gt;&lt;/pre&gt;La opción &lt;code&gt;-V&lt;/code&gt; (en mayúscula) también muestra la ruta al directorio de instalación de Symfony, que se almacena en &lt;code&gt;config/ProjectConfiguration.class.php&lt;/code&gt;. Si en el fichero de configuración muestra una ruta absoluta hacia Symfony (siguiendo las instrucciones al pie de la letra, no debería serlo), con el fin de obtener una mejor portabilidad, la cambiaremos por lo que se sigue:&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;// config/ProjectConfiguration.class.php
require_once  dirname(__FILE__).&#39;/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php&#39;;&lt;/pre&gt;De este modo, podremos mover el directorio del proyecto a cualquier otra parte del servidor y seguirá funcionando igual.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Configurando la base de datos&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Al crear un nuevo proyecto, se activa por defecto &lt;a href=&quot;http://es.wikipedia.org/wiki/Doctrine_(PHP)&quot;&gt;Doctrine&lt;/a&gt;. Configurar la base de datos utilizada por &lt;a href=&quot;http://es.wikipedia.org/wiki/Doctrine_(PHP)&quot;&gt;Doctrine&lt;/a&gt; es tan sencillo como llamar la tarea &lt;code&gt;configure:database&lt;/code&gt;:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ php symfony configure:database &quot;mysql:host=localhost;dbname=dbname&quot; dbuser dbpassword&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Creación de la aplicación&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear el frontend de la aplicación ejecutando la tarea &lt;code&gt;generate:app&lt;/code&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ php symfony generate:app frontend&lt;/b&gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;Debido a que el acceso directo a symfony es ejecutable, de ahora en adelante, se pueden reemplazar todas las apariciones de &lt;code&gt;«php symfony»&lt;/code&gt; por &lt;code&gt;«./symfony»&lt;/code&gt;.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
Basado en el nombre de la aplicación dada como argumento, la tarea &lt;code&gt;generate:app&lt;/code&gt; crea la estructura de directorios predeterminada necesaria para la aplicación dentro del directorio &lt;code&gt;apps/frontend/&lt;/code&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Directorio&lt;/strong&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;config/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de configuración de la aplicación&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;i18n/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos para la internacionalización y localización&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;lib/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Las bibliotecas de aplicaciones y clases&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;modules/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;El código de la aplicación (MVC)&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;templates/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de plantillas globales&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;Seguridad&lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, la tarea &lt;code&gt;generate:aplication&lt;/code&gt; fortifica nuestra aplicación para prevenirla de las dos vulnerabilidades más extendidas en la web: &lt;a href=&quot;http://es.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;XSS&lt;/a&gt; y &lt;a href=&quot;http://es.wikipedia.org/wiki/CSRF&quot;&gt;CSRF&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Para evitar ataques XSS, se ha activado el mecanismo de escape de caracteres, y para prevenir los ataques CSRF, se habilita la generación de tokens.&lt;br /&gt;
&lt;br /&gt;
Por supuesto, se puede ajustar la configuración de estos parametros, mediante las opciones:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;--escaping-strategy&lt;/code&gt;: Activa o desactiva el mecanismo de escape de caracteres&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;--csrf-secret&lt;/code&gt;: Permite tokens de sesión en los formularios&lt;br /&gt;
&lt;br /&gt;
En caso de no saber nada acerca de &lt;a href=&quot;http://es.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;XSS&lt;/a&gt; y &lt;a href=&quot;http://es.wikipedia.org/wiki/CSRF&quot;&gt;CSRF&lt;/a&gt;, es recomendable que se tome un tiempo para aprender más de estas vulnerabilidades de seguridad.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Permisos de la estructura de directorios&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Antes de intentar acceder a un proyecto de nueva creación, es necesario asegurarse de que se han establecido de forma correcta los permisos de escritura para los directorios &lt;code&gt;cache/&lt;/code&gt; y &lt;code&gt;log/&lt;/code&gt;, de modo que el servidor web pueda escribir en ellos:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ chmod 777 cache/ log/&lt;/b&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Configuración del servidor web&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Una buena práctica es poner bajo el directorio raíz web únicamente los archivos que necesiten tener acceso desde el exterior mediante un navegador web, como las hojas de estilo, el código JavaScript y las imágenes. Por defecto, se recomienda almacenar estos archivos en el subdirectorio &lt;code&gt;web/&lt;/code&gt; del proyecto symfony.&lt;br /&gt;
&lt;br /&gt;
Si echamos un vistazo a este directorio, nos encontraremos algunos subdirectorios (&lt;code&gt;css/&lt;/code&gt;, &lt;code&gt;images/&lt;/code&gt;, &lt;code&gt;js/&lt;/code&gt; y &lt;code&gt;uploads/&lt;/code&gt;) y los archivos de los controladores del frontend (&lt;code&gt;index.php&lt;/code&gt; y &lt;code&gt;frontend_dev.php&lt;/code&gt;). Estos son los únicos archivos PHP que necesitan estar bajo el directorio raíz de la web. Todos los demás archivos se pueden ocultar al navegador, lo cual es una buena idea en cuanto a seguridad se refiere.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Configuración del apache&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora es el momento de cambiar la configuración de Apache para que el nuevo proyecto sea accesible a través de la web. Editaremos el fichero de configuración &lt;code&gt;/etc/apache2/httpd.conf&lt;/code&gt; para habilitar la carga de los VirtualHost.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;## Descomentamos la línea que incluye la configuración de los Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf&lt;/pre&gt;A continuación, editamos el fichero de definición de los Virtual Host:&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo vim /etc/apache2/extra/httpd-vhosts.conf&lt;/strong&gt;
&lt;span class=&quot;result&quot;&gt;# Debemos asegurarnos de que esta línea exista una sola vez en nuestra configuración
NameVirtualHost 127.0.0.1:8080

# Esta es la configuración de nuestro proyecto
Listen 127.0.0.1:8080

&amp;lt;VirtualHost 127.0.0.1:8080&amp;gt;
   DocumentRoot &quot;/Users/sfprojects/proyecto/web&quot;
   DirectoryIndex index.php
   &amp;lt;Directory &quot;/Users/sfprojects/proyecto/web&quot;&amp;gt;
      AllowOverride All
      Allow from All
   &amp;lt;/Directory&amp;gt;
   Alias /sf /Users/sfprojects/proyecto/lib/vendor/symfony/data/web/sf
   &amp;lt;Directory &quot;/Users/sfprojects/proyecto/lib/vendor/symfony/data/web/sf&quot;&amp;gt;
      AllowOverride All
      Allow from All
   &amp;lt;/Directory&amp;gt;
   ErrorLog &quot;/private/var/log/apache2/proyecto-error_log&quot;
   CustomLog &quot;/private/var/log/apache2/proyecto-access_log&quot; common
&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;El Alias &lt;code&gt;/sf&lt;/code&gt;&amp;nbsp;permite el acceso a las imágenes y los archivos JavaScript necesarios para mostrar adecuadamente las páginas symfony por defecto y, también, la barra de herramientas de depuración web.&lt;/div&gt;&lt;br /&gt;
Para que todos estos cambios sean efectivos, hay que reiniciar el servidor apache.&lt;br /&gt;
&lt;pre&gt;&lt;strong&gt;$ sudo apachectl restart&lt;/strong&gt;&lt;/pre&gt;La configuración indicada &amp;nbsp;hace que Apache escuche peticiones web por el puerto 8080 del servidor. De este modo, el sitio será accesible a través de la siguiente URL:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;http://localhost:8080/&lt;/b&gt;&lt;/pre&gt;Se puede cambiar 8080 por cualquier otro número. En favor de los números de puerto superiores a 1024 como éste, hay que decir que no requieren de derechos de administrador.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;&lt;strong&gt;Configuración con un nombre de dominio dedicado&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Si somos administradores del equipo, lo mejor será configurar un VirtualHost en lugar de añadir un nuevo puerto cada vez que se inicia un proyecto.&lt;br /&gt;
&lt;br /&gt;
Así pues, en vez de elegir un puerto y agregarle la correspondiente declaración &lt;code&gt;Listen&lt;/code&gt;, elegiremos un nombre que identifique el proyecto (con el sufijo &lt;code&gt;.localhost&lt;/code&gt; para distinguirlo de un dominio de Internet real) y añadimos una declaración &lt;code&gt;ServerName&lt;/code&gt;:&lt;/em&gt;&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&lt;em&gt;# Esta es la configuración de nuestro proyecto&lt;/em&gt;
&lt;em&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ServerName proyecto.localhost&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DocumentRoot &quot;/Users/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/web&quot;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;DirectoryIndex index.php&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Directory &quot;/Users/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/web&quot;&amp;gt;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AllowOverride All&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Allow from All&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Directory&amp;gt;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Alias /sf /home/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/lib/vendor/symfony/data/web/sf&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Directory &quot;/home/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/lib/vendor/symfony/data/web/sf&quot;&amp;gt;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AllowOverride All&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Allow from All&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Directory&amp;gt;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;ErrorLog &quot;/private/var/log/apache2/proyecto-error_log&quot;&lt;/em&gt;
&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;CustomLog &quot;/private/var/log/apache2/proyecto-access_log&quot; common&lt;/em&gt;
&lt;em&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/em&gt;&lt;/pre&gt;&lt;em&gt;Para poder utilizar este nombre de dominio (&lt;code&gt;proyecto.localhost&lt;/code&gt;) tendremos que declararlo localmente en el fichero &lt;code&gt;/etc/hosts&lt;/code&gt; añadiéndole la siguiente línea:&lt;/em&gt;&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&lt;em&gt;127.0.0.1    proyecto.localhost&lt;/em&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Comprobando la nueva configuración&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Reiniciamos Apache, y verificamos que tenemos acceso a la aplicación escribiendo en el navegador &lt;code&gt;http://localhost:8080/index.php&lt;/code&gt; o &lt;code&gt;http://proyecto.localhost/index.php&lt;/code&gt; (dependiendo de la configuración elegida en el apartado anterior). Si todo ha ido correctamente, visualizaremos una página como esta:&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV-Dmacwx-NrK9VUGz4-bn2DnFc9x9opIgsqAYclgUw49E0tYNs50HkIPCT4FfiAGD2i1RJ0T8jcZtqU9Gsi4bmY5uHr3H_2irz7JtyRc65p0385iQGxExD9WupCuwqvTbTG6IGeJkrc0/s1600/project_created.png&quot; style=&quot;margin-top: 15px;&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;Si Apache tiene instalado el módulo &lt;code&gt;mod_rewrite&lt;/code&gt; no será necesario escribir &lt;code&gt;index.php&lt;/code&gt; en la URL. Esto es posible gracias a las reglas de reescritura configuradas en el fichero &lt;code&gt;web/.htaccess&lt;/code&gt;.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
Se puede acceder al entorno de desarrollo (en otro documento hablaremos de los entornos) de la aplicación escribiendo la siguiente URL en el navegador:&lt;br /&gt;
&lt;pre&gt;http://proyecto.localhost/frontend_dev.php&lt;/pre&gt;Debería de mostrarse la barra de &lt;em&gt;debug&lt;/em&gt; web en la esquina superior derecha, incluidos los iconos.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF8wz6BMRDG07vbYpoZXcoDF0L_R8JtqFK5PeBwxEpL_os18VIrm52IBl-xyWfwMLGNv2m179ZVAZA53pfyymQOSo4v_ZipfWqye_F6KurTCnfHCKNt5y16lIYBmdnWywyckTOQduVaZ4/s1600/frontend_dev.png&quot; style=&quot;margin-top: 15px;&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
En este punto, Symfony 1.4.18 ya está instalado y es completamente operativo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Relacionado&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://barralog.blogspot.com.es/2012/05/instalando-symfony-14-en-ubuntu.html&quot; target=&quot;_blank&quot;&gt;Instalando symfony 1.4 en Ubuntu&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Para saber más&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/jobeet/1_4/Doctrine/es/&quot; target=&quot;_blank&quot;&gt;Tutorial Jobeet (versión española con Doctrine)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/installation&quot;&gt;Symfony: Download and Install&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/getting-started/1_4/en/&quot;&gt;[PDF] Symfony: Getting started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.blogpocket.com/2006/02/20/como-configurar-el-servidor-local-con-php-en-mac-os-x/&quot;&gt;BlogPocket: Cómo configurar el servidor local con PHP en Mac OS X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joseantoniovilar.com/2011/08/apache-mysql-y-php-en-mac-os-x-lion-parte-1/&quot;&gt;Apache, Mysql y php en Mac OS X Lion (Parte 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joseantoniovilar.com/2011/08/apache-mysql-y-php-en-mac-os-x-lion-parte-2/&quot;&gt;Apache, Mysql y php en Mac OS X Lion (Parte 2)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/7375032574820199492/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/7375032574820199492' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7375032574820199492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7375032574820199492'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/08/instalando-symfony-14-en-mac-os-x.html' title='Instalando symfony 1.4 en Mac OS X'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqftRI4QXcG_p_Cj42x0LBQFamnl9C1GVk5vbOn4szedBOX1ylZbTFhpVdR7PfVHtzbIXZk-7JJjMMFFVh-SaEu-WUC8qYcGjIM-eeUSHD2fO8D-Ct-_97OhmaPdeist0WAtGsMtuvN8/s72-c/localhost.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-7433898818118823238</id><published>2012-06-01T13:56:00.000+02:00</published><updated>2013-11-13T00:10:53.255+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Cambiar la contraseña root de MySQL</title><content type='html'>Es posible que tengamos que administrar una base de datos MySQL y, por la razón que sea, no tengamos la contraseña de root. Esta situación, que es más habitual de lo que nos imaginamos, presenta un grave problema porque nos impide crear nuevas base de datos, nuevos usuarios, etc.&lt;br /&gt;
&lt;br /&gt;
En este tutorial vamos a ver cómo se puede cambiar la contraseña de root de MySQL desde la cónsola del sistema y de una forma muy sencilla.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
En primer lugar debemos detener el servicio MySQL.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# /etc/init.d/mysql stop&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Stopping MySQL database server: mysqld.&lt;/span&gt;&lt;/pre&gt;A continuación iniciamos de nuevo el servicio, pero en &quot;modo abierto&quot; y en &lt;i&gt;background&lt;/i&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# mysqld_safe --skip-grant-tables --skip-networking &amp;amp;&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;[1] 18305
120601 12:56:45 mysqld_safe Logging to syslog.
120601 12:56:45 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql&lt;/span&gt;&lt;/pre&gt;En el comando anterior, la opción&amp;nbsp;&lt;code&gt;--skip-grant-tables&lt;/code&gt;&amp;nbsp;hace que el servidor no utilice el sistema de permisos, con lo que podremos obtener acceso sin restricciones a todos los usuarios y a todas las bases de datos.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;NOTA: Si MySQL fue configurado y compilado con la opción &#39;&lt;code&gt;--disable-grant-options&lt;/code&gt;&#39; entonces lo anterior no funcionará y no hay mucho que hacer para poder cambiar la contraseña. En la práctica, por suerte, esta opción no se suele usar.&lt;/div&gt;&lt;br /&gt;
La opción &lt;code&gt;--skip-networking&lt;/code&gt; indicada más arriba hace que MySQL deje de escuchar (LISTEN) conexiones TCP/IP provenientes de la red y opere únicamente en el ámbito local.&lt;br /&gt;
&lt;br /&gt;
Una vez reiniciado el servicio en modo &quot;abierto&quot; y &quot;local&quot;, ya podemos acceder al monitor y proceder. Para trabajar con ella, capturaremos la base de datos &lt;code&gt;mysql&lt;/code&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# mysql -u root&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Welcome to the MySQL monitor. &amp;nbsp;Commands end with ; or \g.
Your MySQL connection id is 1
[...]

&lt;b&gt;mysql&amp;gt;&lt;/b&gt; use mysql;&lt;/span&gt;&lt;/pre&gt;Procedemos a la actualización del campo &#39;password&#39; del usuario &#39;root&#39; y, como ya hemos terminado, abandonamos del monitor.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;mysql&amp;gt;&lt;/b&gt; UPDATE user SET password=PASSWORD(&#39;NUEVA_CONTRASEÑA&#39;) WHERE user=&#39;root&#39;;
&lt;span class=&quot;result&quot;&gt;Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 &amp;nbsp;Changed: 2 &amp;nbsp;Warnings: 0

&lt;b&gt;mysql&amp;gt;&lt;/b&gt; exit&lt;/span&gt;&lt;/pre&gt;Solo queda reiniciar el servicio mysql. &lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# /etc/init.d/mysql restart&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Stopping MySQL database server: mysqld
120601 12:58:35 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended.
Starting MySQL database server: mysqld.
Checking for corrupt, not cleanly closed and upgrade needing tables..
[1]+  Hecho          mysqld_safe --skip-grant-tables --skip-networking&lt;/span&gt;&lt;/pre&gt;Lo que ha ocurrido es que se detenido el servicio (que operaba en background y modo &quot;abierto&quot; y &quot;local&quot;) y se ha vuelto a iniciar en modo &quot;normal&quot;.  Desde este momento ya se puede acceder al sistema con la nueva contraseña. &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Fuentes&lt;/b&gt; &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.linuxtotal.com.mx/index.php?cont=info__tips_018&quot;&gt;LinuxTotal - Cambiar la contraseña root de MySQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/7433898818118823238/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/7433898818118823238' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7433898818118823238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/7433898818118823238'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/06/cambiar-la-contrasena-root-de-mysql.html' title='Cambiar la contraseña root de MySQL'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-6698425372155057033</id><published>2012-05-15T13:23:00.001+02:00</published><updated>2013-11-08T22:32:27.134+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apache"/><category scheme="http://www.blogger.com/atom/ns#" term="Debian"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Redirigir a una conexión segura https en Apache</title><content type='html'>Puede que, como administradores de un sistema, nos interese que todos los accesos a una determinada página web, se realicen siempre bajo protocolo seguro HTTPS.&lt;br /&gt;
&lt;br /&gt;
Veremos dos posibilidades: Redirección permanente o Reescritura&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Método de redirección permanente&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
El procedimiento será definir un &lt;code&gt;Virtualhost&lt;/code&gt; para HTTPS y otro para HTTP. Desde el &lt;code&gt;Virtualhost&lt;/code&gt;&amp;nbsp;HTTP fijaremos una redirección permanente hacia HTTPS.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;# /etc/apache2/sites-enabled/000-default
&amp;lt;VirtualHost *:80&amp;gt;
   ServerName &amp;nbsp;www.ejemplo.com
   ServerAdmin webmaster@ejemplo.com
   &lt;b&gt;Redirect permanent / https://www.ejemplo.com&lt;/b&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Método de reescritura&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Para que este método funcione, deberemos asegurarnos de tener instalado el módulo&amp;nbsp;&lt;code&gt;mod_rewrite&lt;/code&gt;. En caso de estar presente, el módulo se puede instalar mediante el siguiente comando (para que sea operativo, después habrá que reiniciar apache).&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;# a2enmod rewrite&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Enabling module rewrite.
Run &#39;/etc/init.d/apache2 restart&#39; to activate new configuration!&lt;/span&gt;&lt;/pre&gt;Una vez instalado el módulo &lt;code&gt;mod_rewrite&lt;/code&gt;&amp;nbsp;ya estamos en disposición de preparar la reescritura de todo el sitio web añadiendo el siguiente código dentro del correspondiente VirtualHost de HTTP&amp;nbsp;o, alternativamente, en un fichero &lt;code&gt;.htaccess&lt;/code&gt; en la raíz del sitio web.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}&lt;/pre&gt;O, alternativamente&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.dominio.com/$1 [R,L]&lt;/pre&gt;Si se quiere redireccionar el contenido de una carpeta específica&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} folder
RewriteRule ^(.*)$ https://www.dominio.com/folder/$1 [R,L]&lt;/pre&gt;Finalmente, si lo que se quiere redireccionar es únicamente una página concreta (por ejemplo, un formulario) podemos utilizar el siguiente código.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;RewriteEngine On
RewriteRule ^formulario\.html$ https://www.ejemplo.com/formulario.html [R=301,L]&lt;/pre&gt;&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Para saber más&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html&quot;&gt;Apache Module mod_rewrite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://ciclope.fi.upm.es/recetas/tiki-index.php?page=Apache%202.%20C%C3%B3mo%20redirigir%20autom%C3%A1ticamente%20una%20petici%C3%B3n%20HTTP%20a%20HTTPS&amp;amp;structure=Recetas%20Ciclope&quot;&gt;Apache 2. Cómo redirigir automáticamente una petición HTTP a HTTPS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sslshopper.com/apache-redirect-http-to-https.html&quot;&gt;Apache Redirect HTTP to HTTPS using mod_rewrite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://microbuffer.wordpress.com/2012/02/13/redireccionar-de-http-a-https-con-htaccess/&quot;&gt;Redireccionar de http a https con htaccess&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/6698425372155057033/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/6698425372155057033' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/6698425372155057033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/6698425372155057033'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/05/redirigir-una-conexion-segura-https-en.html' title='Redirigir a una conexión segura https en Apache'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-1617631084206635522</id><published>2012-05-11T15:25:00.000+02:00</published><updated>2013-11-13T00:16:24.113+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Seguridad"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><title type='text'>Autenticación mediante clave pública en SSH</title><content type='html'>El uso de claves públicas para acceder a servicios como SSH,&amp;nbsp;SCP o SFTP, resulta una técnica más segura para autenticar dichos servicios que&amp;nbsp;el esquema clásico de usuario y contraseña, al que estamos tan acostumbrados. Además, nos permite realizar una&amp;nbsp;identificación automática y transparente, sin necesidad de tener que interaccionar, lo cual será de gran utilidad en la automatización de ciertas tareas rutinarias que, preferiblemente, deban realizarse de forma desatendida como por ejemplo la realización de copias de seguridad.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Algoritmos de cifrado&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
SSH permite crear claves usando los algoritmos RSA y DSA, pero… ¿cuál de ellos nos conviene más?&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;RSA&lt;/b&gt;: (&lt;i&gt;de las siglas de sus autores, Rivest, Shamir y Adleman&lt;/i&gt;) Es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye y otra privada, guardada en secreto por su propietario. Su funcionamiento reside en el uso de expresiones exponenciales dentro de la aritmética modular. Obteniendo una completa seguridad, debido a que aún no se conocen formas óptimas de factorizar  un número grande en sus factores primos utilizando ordenadores personales. El RSA se basa en dos problemas matemáticos: el problema de factorizar números grandes y el problema RSA. El descifrado completo de un texto cifrado con RSA es computacionalmente intratable.&lt;br /&gt;
Por otro lado la factorización de números grandes proponen métodos para longitudes de 600-700 bits de longitud. Y generalmente, las claves RSA usan entre 1024-2048 bits.&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DSA&lt;/b&gt;: (&lt;i&gt;Digital Signature Algorithm&lt;/i&gt;) es el algoritmo de firmado digital incluido en el DSS (Digital Signature Standard) del NIST Norteamericano. Está basado en el problema de los logaritmos discretos y únicamente puede emplearse para las firmas digitales (a diferencia del RSA, que puede emplearse también para encriptar). La elección de este algoritmo como estándar de firmado generó multitud de críticas puesto que perdía bastante flexibilidad respecto al RSA.&lt;/li&gt;
&lt;/ul&gt;En general, se comprueba que el algoritmo DSA es más rápido para generar la firma que para verificarla, al contrario de lo que sucede con RSA. Por lo que, para realizar la autentificación en nuestro servidor SSH, usaremos este último. Además, si comparamos el tamaño de las llaves generadas por ambos algoritmos, comprobaremos que las utilizadas por RSA son superiores a las de DSA. Razones por las que nos decantaremos&amp;nbsp;por usar el algoritmo RSA.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Configuración en el servidor&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Vamos a comprobar que el equipo remoto tiene activada la versión 2 del protocolo SSH y, además, que tenga habilitada la opción para utilizar claves RSA. Para ello buscamos las siguientes directivas en el fichero de configuración del servidor SSH &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;:&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;Protocol 2
RSAAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys&lt;/pre&gt;Para cada usuario que vaya a conectarse remotamente, debe de existir el directorio &lt;code&gt;/home/nombre_usuario/.ssh/&lt;/code&gt; y en él el archivo &lt;code&gt;authorized_keys&lt;/code&gt;. En caso de no existir, deberemos crearlo de forma manual, asignarle los permisos correspondientes y, posteriormente, (re)iniciar el servidor.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&lt;b&gt;$ cd ~&lt;/b&gt;
&lt;b&gt;$ mkdir .ssh&lt;/b&gt;
&lt;b&gt;$ chmod 600 .ssh/&lt;/b&gt;
&lt;b&gt;$ touch .ssh/authorized_keys&lt;/b&gt;
&lt;b&gt;$ sudo /etc/init.d/sshd start&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Generación de los pares de claves RSA&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Como antes comentamos, SSH nos permite generar indistintamente claves RSA o DSA (en nuestro caso usaremos claves RSA), creándose una clave pública y una clave privada.&lt;br /&gt;
&lt;br /&gt;
Dichas claves, pueden generarse en el servidor, en la estación cliente, o en cualquier otra máquina.&lt;br /&gt;
&lt;br /&gt;
Al final sólo la clave pública debe de aparecer en el fichero &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; del servidor remoto.&lt;br /&gt;
&lt;br /&gt;
Para generar el par de claves utilizaremos el comando &lt;code&gt;ssh-keygen&lt;/code&gt;. Durante el proceso, se nos pedirá la introducción de una &lt;i&gt;passphrase&lt;/i&gt;, lo que viene a ser una contraseña para poder generar unas claves más fuertes y seguras.&lt;br /&gt;
&lt;br /&gt;
En nuestro caso, vamos a dejar la &lt;i&gt;passphrase&lt;/i&gt; en blanco para que no nos la pida y, de ese modo, poder acceder al servidor remoto de forma desatendida.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ ssh-keygen -t rsa&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Generating public/private rsa key pair.
Enter file in which to save the key (/home/nombre_usuario/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in &lt;span class=&quot;remark&quot;&gt;/home/nombre_usuario/.ssh/id_rsa&lt;/span&gt;.
Your public key has been saved in &lt;span class=&quot;remark&quot;&gt;/home/nombre_usuario/.ssh/id_rsa.pub&lt;/span&gt;.
The key fingerprint is:
8d:34:58:47:33:4a:ff:98:bd:a8:a9:cc:65:ba:6c:02 nombre_usuario@mi_ordenador_portatil
The key&#39;s randomart image is:
+--[ RSA 2048]----+
|        o.=      |
|       + + o     |
|      . + .      |
|       . + =     |
|        S + o    |
|  E       . .    |
|   .    o . .    |
|    .+.+ o       |
|     oBoo        |
+-----------------+&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Instalación de clave pública y protección de la clave privada&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Una vez generado el par de claves, el siguiente paso es copiar la clave pública en el servidor (o los servidores) donde tengamos pensado autentificarnos a través de clave pública y guardar en un lugar seguro la clave privada.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;Particularidades de las claves pública/privada&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La misma &lt;b&gt;clave pública&lt;/b&gt; nos puede servir para acceder a cualquier servidor. No hay que generar una nueva clave cada vez.&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;La &lt;b&gt;clave privada&lt;/b&gt; debe de ser PRIVADA y debe custodiarse en un lugar seguro (típicamente, en ~/.ssh con los permisos adecuados para que solo pueda acceder el propietario de la clave).&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
Procedemos a copiar la clave pública al servidor remoto. Una vez realizada la copia, accedemos al servidor y comprobamos que los permisos de los ficheros &lt;code&gt;authorized_keys&lt;/code&gt; y &lt;code&gt;known_hosts&lt;/code&gt; sea la correcta:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ ssh-copy-id usuario@host_remoto&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;usuario@host_remoto&#39;s password: 
Now try logging into the machine, with &quot;ssh &#39;usuario@host_remoto&#39;&quot;, and check in:

.ssh/authorized_keys

to make sure we haven&#39;t added extra keys that you weren&#39;t expecting.&lt;/span&gt;

&lt;b&gt;$ ssh usuario@host_remoto&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;Last login: Fri May 11 13:46:05 2012 from 192.168.0.15
Linux host_remoto 2.6.32-5 #1 SMP Mon Jan 16 20:48:30 UTC 2012 x86_64 GNU/Linux

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.&lt;/span&gt;

&lt;b&gt;$ ls -l .ssh/&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;total 8
-rw------- 1 usuario usuario 1226 May 11 14:39 authorized_keys
-rw-r--r-- 1 usuario usuario 2017 Nov 26  2011 known_hosts&lt;/span&gt;&lt;/pre&gt;Ahora nos encargamos de la clave privada que debe de estar en nuestro equipo. Forzamos que las claves sólo sean accesibles por su propietario.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ chmod 600 ~/.ssh/{id_dsa,id_dsa.pub}
$ ls -l ~/.ssh/&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;total 48
-rw------- 1 usuario usuario   668 2012-05-11 14:38 id_dsa
-rw------- 1 usuario usuario   613 2012-05-11 14:38 id_dsa.pub
-rw-r--r-- 1 usuario usuario 37372 2012-05-07 11:31 known_hosts&lt;/span&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Pasos finales&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Una vez copiada la clave pública en el servidor y asegurado que podemos establecer una conexión remota, vamos a aumentar la seguridad del servidor remoto introduciendo algunos cambios en el fichero de configuración del servicio ssh (&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt;). Impediremos la conexión con el usuario root y la autenticación mediante password.&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;PermitRootLogin no
PasswordAuthentication no&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;Para incrementar la seguridad del equipo remoto, es recomendable activar siempre la primera directiva. Con ella evitamos el acceso remoto como root. En este sentido, lo más seguro es acceder como usuario sin privilegios y, una vez ganado el acceso al sistema, cambiar a usuario root con los comandos &lt;code&gt;su&lt;/code&gt; o &lt;code&gt;sudo&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
En cuanto a la segunda directiva, hay que tener en cuenta que impedirá que NINGÚN usuario pueda conectarse remotamente mediante usuario/contraseña. TODOS los usuarios remotos deberán validarse mediante su clave pública. A efectos prácticos, en algunos entornos, puede que esto no sea lo más recomendable.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Para saber más&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://es.wikipedia.org/wiki/Infraestructura_de_clave_p%C3%BAblica&quot;&gt;Wikipedia - Infraestructura de clave pública&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://linuxcode.wordpress.com/2009/08/08/autentificacion-mediante-claves-publicas-en-ssh/&quot;&gt;Linux Code - Autentificación mediante claves públicas en SSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.howtoforge.com/set-up-ssh-with-public-key-authentication-debian-etch&quot;&gt;How To Set Up SSH With Public-Key Authentication On Debian Etch&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/1617631084206635522/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/1617631084206635522' title='2 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1617631084206635522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/1617631084206635522'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/05/autenticacion-mediante-clave-publica-en.html' title='Autenticación mediante clave pública en SSH'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-8342393278915732780</id><published>2012-05-11T02:35:00.001+02:00</published><updated>2013-11-08T23:09:45.299+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Instalacion"/><category scheme="http://www.blogger.com/atom/ns#" term="Symphony"/><category scheme="http://www.blogger.com/atom/ns#" term="Tutorials"/><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu"/><title type='text'>Instalando symfony 1.4 en Ubuntu</title><content type='html'>Symfony es un completo &lt;a href=&quot;http://es.wikipedia.org/wiki/Framework&quot;&gt;&lt;i&gt;framework&lt;/i&gt;&lt;/a&gt; diseñado para optimizar, gracias a sus características, el desarrollo de las aplicaciones web. Para empezar, &lt;b&gt;separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;span class=&quot;title&quot;&gt;Inicialización del directorio del proyecto&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Antes de instalar symfony, es necesario crear el directorio que contendrá todos los ficheros relacionados con el proyecto. Para el ejemplo que nos ocupa, dispondremos de un contenedor global de proyectos en&amp;nbsp;&lt;code&gt;/home/sfprojects/&lt;/code&gt;&amp;nbsp;&amp;nbsp;y, en su interior, colocaremos una carpeta diferente para cada proyecto que vayamos a crear (en este tutorial, nuestro proyecto se llamará&amp;nbsp;&amp;nbsp;&lt;code&gt;proyecto&lt;/code&gt;):&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ sudo mkdir -p /home/sfprojects/proyecto&lt;/b&gt;
&lt;b&gt;$ sudo chown -R username.username /home/sfproject/proyecto&lt;/b&gt;
&lt;b&gt;$ cd /home/sfproject/proyecto&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Elección de la versión de Symfony&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
En el momento de escribir este artículo, symfony tiene dos ramas estables del &lt;i&gt;framework&lt;/i&gt;: la 1.4.17 y la 2.0.0. En este tutorial asumimos que se desea instalar symfony 1.4.&lt;br /&gt;
&lt;br /&gt;
Se puede instalar symfony a nivel global en el servidor o incrustarlo en cada uno de los proyectos. Esta segunda opción es la preferida porque nos permitirá que los proyectos sean totalmente independientes unos de otros.&lt;br /&gt;
&lt;br /&gt;
La actualización del&amp;nbsp;&lt;i&gt;framework&lt;/i&gt;&amp;nbsp;instalado localmente en un proyecto no romperá ninguno de los otros proyectos de forma inesperada. Esto significa que se pueden tener proyectos en diferentes versiones de Symfony, y actualizarlos cada uno a la vez que mejor convenga.&lt;br /&gt;
&lt;br /&gt;
Siguiendo la práctica recomendada, instalaremos los archivos de symfony en el directorio &lt;code&gt;lib/vendor&lt;/code&gt;. Así pues, en primer lugar, vamos a crear ese directorio dentro de la estructura del proyecto:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ mkdir -p lib/vendor&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Instalando Symfony&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
La forma más fácil de instalar symfony es &lt;a href=&quot;http://www.symfony-project.org/installation&quot; target=&quot;_blank&quot;&gt;descargándose el archivo desde la página web oficial del proyecto&lt;/a&gt;. Tenemos disponibles para la descarga las versiones en formatos&amp;nbsp;&lt;code&gt;.tgz&lt;/code&gt; y &lt;code&gt;.zip&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
Descargamos el archivo (en nuestro caso, la versión&amp;nbsp;&lt;span style=&quot;font-family: monospace;&quot;&gt;.tgz&lt;/span&gt;) y lo colocamos en el directorio recién creado&amp;nbsp;&lt;code&gt;proyecto/lib/vendor&lt;/code&gt;, lo descomprimimos, y le cambiamos el nombre a symphony:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cd lib/vendor&lt;/b&gt;
&lt;b&gt;$ wget http://www.symfony-project.org/get/symfony-1.4.17.tgz&lt;/b&gt;
&lt;b&gt;$ tar zxpf symfony-1.4.17.tgz&lt;/b&gt;
&lt;b&gt;$ mv symfony-1.4.17.tgz symfony&lt;/b&gt;
&lt;b&gt;$ rm symfony-1.4.17.tgz&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Creación del proyecto&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Nos situamos en el directorio &lt;code&gt;proyecto/&lt;/code&gt;&amp;nbsp;y,&amp;nbsp;para crear el proyecto symfony,&amp;nbsp;ejecutaremos la tarea&amp;nbsp;&lt;code&gt;generate:project&lt;/code&gt;:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ cd ../..&lt;/b&gt;
&lt;b&gt;$ php lib/vendor/symfony/data/bin/symfony generate:project proyecto&lt;/b&gt;&lt;/pre&gt;La tarea &lt;code&gt;generate:project&lt;/code&gt; genera la estructura predeterminada de directorios y archivos necesarios para un proyecto symfony:&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Directorio&lt;/strong&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;apps/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Contiene todas las aplicaciones del proyecto&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;cache/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos almacenados en caché por el &lt;i&gt;framework&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;config/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de configuración del proyecto&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;data/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de datos como los accesorios iniciales&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;lib/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Las bibliotecas y clases del proyecto&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;log/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de registro del &lt;i&gt;framework&lt;/i&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;plugins/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los plugins instalados&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;test/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;La unidad y los archivos de prueba funcional&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;web/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;El directorio raíz web (véase más adelante)&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;¿Por qué Symfony genera tantos archivos?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Uno de los principales beneficios de usar un framework completo es la normalización de los desarrollos. Gracias a la estructura de archivos y directorios por defecto de Symfony, cualquier desarrollador con algunos conocimientos de Symfony puede asumir el mantenimiento de un proyecto. En cuestión de minutos, será capaz de bucear en el código, corregir errores y añadir nuevas funcionalidades.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
La tarea &lt;code&gt;generate:project&lt;/code&gt; también crea,&amp;nbsp;en el directorio raíz del proyecto,&amp;nbsp;un acceso directo hacia&amp;nbsp;&lt;code&gt;symfony&lt;/code&gt;&amp;nbsp;&amp;nbsp;para acortar el número de caracteres a escribir cuando se ejecuta una tarea. Por lo tanto, a partir de ahora, en lugar de utilizar la ruta completa al programa de Symfony (&lt;code&gt;proyecto/lib/vendor/symfony/data/bin/symfony&lt;/code&gt;), podemos utilizar el acceso directo de &lt;code&gt;symfony&lt;/code&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Verificación de la instalación&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora que Symfony está instalado, desde&amp;nbsp;el directorio&amp;nbsp;&lt;code&gt;proyecto/&lt;/code&gt;,&amp;nbsp;comprobaremos que todo funciona correctamente. Para ello, utilizaremos la línea de comandos de &lt;code&gt;symfony&lt;/code&gt; para que nos muestre la versión instalada (notar el uso de la V mayúscula):&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ php symfony -V&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;symfony version &lt;b&gt;1.4.17&lt;/b&gt; (/home/sfprojects/proyecto/lib/vendor/symfony/lib)&lt;/span&gt;&lt;/pre&gt;La opción &lt;code&gt;-V&lt;/code&gt; también muestra la ruta al directorio de instalación de Symfony, que se almacena en &lt;code&gt;config/ProjectConfiguration.class.php&lt;/code&gt;. Si en el fichero de configuración muestra una ruta absoluta hacia Symfony (siguiendo las instrucciones al pie de la letra, no debería serlo),&amp;nbsp;con el fin de obtener una mejor portabilidad, la cambiaremos por lo que se sigue:&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;// config/ProjectConfiguration.class.php
require_once dirname(__FILE__).&#39;/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php&#39;;&lt;/pre&gt;De este modo, podremos mover el directorio del proyecto a cualquier otra parte del servidor y seguirá funcionando igual.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Configurando la base de datos&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Al crear un nuevo proyecto, se activa por defecto &lt;a href=&quot;http://es.wikipedia.org/wiki/Doctrine_(PHP)&quot;&gt;Doctrine&lt;/a&gt;. Configurar la base de datos utilizada por &lt;a href=&quot;http://es.wikipedia.org/wiki/Doctrine_(PHP)&quot;&gt;Doctrine&lt;/a&gt; es tan sencillo como llamar la tarea &lt;code&gt;configure:database&lt;/code&gt;:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ php symfony configure:database &quot;mysql:host=localhost;dbname=dbname&quot; dbuser dbpassword&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Creación de la aplicación&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a crear el frontend de la aplicación ejecutando la tarea &lt;code&gt;generate:app&lt;/code&gt;.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ php symfony generate:app frontend&lt;/b&gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;Debido a que el acceso directo a symfony es ejecutable, de ahora en adelante, se pueden reemplazar todas las apariciones de &lt;code&gt;«php symfony»&lt;/code&gt; por &lt;code&gt;«./symfony»&lt;/code&gt;.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
Basado en el nombre de la aplicación dada como argumento, la tarea &lt;code&gt;generate:app&lt;/code&gt; crea la estructura de directorios predeterminada necesaria para la aplicación dentro del directorio &lt;code&gt;apps/frontend/&lt;/code&gt;:&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Directorio&lt;/strong&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;strong&gt;Descripción&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;config/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de configuración de la aplicación&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;lib/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Las bibliotecas de aplicaciones y clases&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;modules/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;El código de la aplicación (MVC)&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;&lt;code&gt;templates/&lt;/code&gt;&lt;/td&gt;    &lt;td style=&quot;padding: 2px 8px;&quot;&gt;Los archivos de plantillas globales&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;Seguridad&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
De forma predeterminada, la tarea &lt;code&gt;generate:aplication&lt;/code&gt; fortifica nuestra aplicación para prevenirla de las dos vulnerabilidades más extendidas en la web: &lt;a href=&quot;http://es.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;XSS&lt;/a&gt; y &lt;a href=&quot;http://es.wikipedia.org/wiki/CSRF&quot;&gt;CSRF&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Para evitar ataques XSS, se ha activado el mecanismo de escape de caracteres, y para prevenir los ataques CSRF, se habilita la generación de tokens.&lt;br /&gt;
&lt;br /&gt;
Por supuesto, se puede ajustar la configuración de estos parametros, mediante las opciones:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;--escaping-strategy&lt;/code&gt;: Activa o desactiva el mecanismo de escape de caracteres&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;code&gt;--csrf-secret&lt;/code&gt;: Permite tokens de sesión en los formularios&lt;br /&gt;
&lt;br /&gt;
En caso de no saber nada acerca de &lt;a href=&quot;http://es.wikipedia.org/wiki/Cross-site_scripting&quot;&gt;XSS&lt;/a&gt; y &lt;a href=&quot;http://es.wikipedia.org/wiki/CSRF&quot;&gt;CSRF&lt;/a&gt;, es recomendable que se tome un tiempo para aprender más de estas vulnerabilidades de seguridad.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Permisos de la estructura de directorios&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Antes de intentar acceder a un proyecto de nueva creación, es necesario establecer los permisos de escritura en los directorios &lt;code&gt;cache/&lt;/code&gt; y &lt;code&gt;log/&lt;/code&gt; a los niveles apropiados, de modo que el servidor web pueda escribir en ellos:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ chmod 777 cache/ log/&lt;/b&gt;&lt;/pre&gt;&lt;span class=&quot;title&quot;&gt;Configuración del servidor web&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Una buena práctica es poner bajo el directorio raíz web únicamente los archivos que necesiten tener acceso desde el exterior mediante un navegador web, como las hojas de estilo, el código JavaScript y las imágenes. Por defecto, se recomienda almacenar estos archivos en el subdirectorio &lt;code&gt;web/&lt;/code&gt; del proyecto symfony.&lt;br /&gt;
&lt;br /&gt;
Si echamos un vistazo a este directorio, nos encontraremos algunos subdirectorios (&lt;code&gt;css/&lt;/code&gt;, &lt;code&gt;images/&lt;/code&gt;, &lt;code&gt;js/&lt;/code&gt; y &lt;code&gt;uploads/&lt;/code&gt;) y los archivos de los controladores del frontend (&lt;code&gt;index.php&lt;/code&gt; y &lt;code&gt;frontend_dev.php&lt;/code&gt;). Estos son los únicos archivos PHP que necesitan estar bajo el directorio raíz de la web. Todos los demás archivos se pueden ocultar al navegador, lo cual es una buena idea en cuanto a seguridad se refiere.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Configuración del apache&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Ahora es el momento de cambiar la configuración de Apache para que el nuevo proyecto sea accesible a través de la web. Editaremos el fichero de configuración &lt;code&gt;httpd.conf&lt;/code&gt; para añadirle la siguiente configuración:&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;# Debemos asegurarnos de que esta línea exista una sola vez en nuestra configuración
NameVirtualHost 127.0.0.1:8080

# Esta es la configuración de nuestro proyecto
Listen 127.0.0.1:8080

&amp;lt;VirtualHost 127.0.0.1:8080&amp;gt;
   DocumentRoot &quot;/home/sfprojects/proyecto/web&quot;
   DirectoryIndex index.php
   &amp;lt;Directory &quot;/home/sfprojects/proyecto/web&quot;&amp;gt;
      AllowOverride All
      Allow from All
   &amp;lt;/Directory&amp;gt;
   Alias /sf /home/sfprojects/proyecto/lib/vendor/symfony/data/web/sf
   &amp;lt;Directory &quot;/home/sfprojects/proyecto/lib/vendor/symfony/data/web/sf&quot;&amp;gt;
      AllowOverride All
      Allow from All
   &amp;lt;/Directory&amp;gt;
   ErrorLog &quot;/var/log/apache2/proyecto-error_log&quot;
   CustomLog &quot;/var/log/apache2/proyecto-access_log&quot; common
&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;div class=&quot;destacado&quot;&gt;El Alias &lt;code&gt;/sf&lt;/code&gt;&amp;nbsp;permite el acceso a las imágenes y los archivos JavaScript necesarios para mostrar adecuadamente las páginas symfony por defecto y, también, la barra de herramientas de depuración web.&lt;/div&gt;&lt;br /&gt;
La configuración indicada &amp;nbsp;hace que Apache escuche peticiones web por el puerto 8080 del servidor. De este modo, el sitio será accesible a través de la siguiente URL:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;http://localhost:8080/&lt;/b&gt;&lt;/pre&gt;Se puede cambiar 8080 por cualquier otro número. En favor de los números de puerto superiores a 1024 como éste, hay que decir que no requieren de derechos de administrador.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;&lt;span style=&quot;font-size: 1.1em;&quot;&gt;Configuración de un nombre de dominio dedicado&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Si somos administradores del equipo, lo mejor será configurar un VirtualHost en lugar de añadir un nuevo puerto cada vez que se inicia un proyecto.&lt;br /&gt;
&lt;br /&gt;
Así pues, en vez de elegir un puerto y agregarle la correspondiente declaración &lt;code&gt;Listen&lt;/code&gt;, elegiremos un nombre que identifique el proyecto (con el sufijo &lt;code&gt;.localhost&lt;/code&gt; para distinguirlo de un dominio de Internet real) y añadimos una declaración &lt;code&gt;ServerName&lt;/code&gt;:&lt;/em&gt;&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&lt;em&gt;# Esta es la configuración de nuestro proyecto&lt;/em&gt;
&lt;em&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;/em&gt;
&lt;em&gt;   ServerName proyecto.localhost&lt;/em&gt;
&lt;em&gt;   DocumentRoot &quot;/home/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/web&quot;&lt;/em&gt;
&lt;em&gt;   DirectoryIndex index.php&lt;/em&gt;
&lt;em&gt;   &amp;lt;Directory &quot;/home/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/web&quot;&amp;gt;&lt;/em&gt;
&lt;em&gt;      AllowOverride All&lt;/em&gt;
&lt;em&gt;      Allow from All&lt;/em&gt;
&lt;em&gt;   &amp;lt;/Directory&amp;gt;&lt;/em&gt;
&lt;em&gt;   Alias /sf /home/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/lib/vendor/symfony/data/web/sf&lt;/em&gt;
&lt;em&gt;   &amp;lt;Directory &quot;/home/sfproject&lt;/em&gt;s/proyecto&lt;em&gt;/lib/vendor/symfony/data/web/sf&quot;&amp;gt;&lt;/em&gt;
&lt;em&gt;      AllowOverride All&lt;/em&gt;
&lt;em&gt;      Allow from All&lt;/em&gt;
&lt;em&gt;   &amp;lt;/Directory&amp;gt;&lt;/em&gt;
&lt;em&gt;   ErrorLog &quot;/var/log/apache2/proyecto-error_log&quot;&lt;/em&gt;
&lt;em&gt;   CustomLog &quot;/var/log/apache2/proyecto-access_log&quot; common&lt;/em&gt;
&lt;em&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/em&gt;&lt;/pre&gt;&lt;em&gt;Para poder utilizar este nombre de dominio (&lt;code&gt;proyecto.localhost&lt;/code&gt;) tendremos que declararlo localmente en el fichero &lt;code&gt;/etc/hosts&lt;/code&gt; añadiéndole la siguiente línea:&lt;/em&gt;&lt;br /&gt;
&lt;pre class=&quot;result&quot;&gt;&lt;em&gt;127.0.0.1 &amp;nbsp; &amp;nbsp;proyecto.localhost&lt;/em&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span class=&quot;title&quot;&gt;Comprobando la nueva configuración&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Reiniciamos Apache, y verificamos que tenemos acceso a la aplicación escribiendo en el navegador &lt;code&gt;http://localhost:8080/index.php&lt;/code&gt; o &lt;code&gt;http://proyecto.localhost/index.php&lt;/code&gt; (dependiendo de la configuración elegida en el apartado anterior). Si todo ha ido correctamente, visualizaremos una página como esta:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXrLlF6a4vhA0TUicyMOpQb41b4RICGXJ56On9WngG1CcnxY4JklHvZt1_1HE5axzKOTBxYNwiqQ4ndtHmEKYkExJ01k3qENW6Pzzs4fmy4AjaL3S6g2KJB0Jk_OnSxfIyTvGK1tkLW9A/s1600/project_created.jpg&quot; style=&quot;margin-top: 15px;&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;destacado&quot;&gt;&lt;em&gt;Si Apache tiene instalado el módulo &lt;code&gt;mod_rewrite&lt;/code&gt;&amp;nbsp;no es necesario escribir&amp;nbsp;&lt;code&gt;index.php&lt;/code&gt; en la URL. Esto es posible gracias a las reglas de reescritura configuradas en el fichero &lt;code&gt;web/.htaccess&lt;/code&gt;.&lt;/em&gt;&lt;/div&gt;&lt;br /&gt;
Podemos acceder al entorno de desarrollo (en otro documento hablaremos de los entornos) de la aplicación escribiendo la siguiente URL en el navegador:&lt;br /&gt;
&lt;pre&gt;http://proyecto.localhost/frontend_dev.php&lt;/pre&gt;La barra de &lt;em&gt;debug&lt;/em&gt; web debería mostrarse en la esquina superior derecha, incluidos los iconos. La prueba de que la configuración del alias &lt;code&gt;sf/&lt;/code&gt; es correcta.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1pVBR97tmi9detGhG7mkdm2QYID2WygQN4qW-SmpIsJfjym-Xrg9dFjU7X0Es6b87XSAlnoL41rD60OEVxipx4u7kuAISG1u8US__SJPldXIDWXHBrOVDiTbspG-Tmw0cIC29t33o2bg/s1600/frontend_dev.jpg&quot; style=&quot;margin-top: 15px;&quot; width=&quot;550&quot; /&gt;&lt;/div&gt;&lt;br /&gt;
En este punto, Symfony 1.4.17 ya está instalado y es completamente operativo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;&lt;b&gt;Relacionado&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://barralog.blogspot.com.es/2012/08/instalando-symfony-14-en-mac-os-x.html&quot;&gt;Instalando Symfony 1.4 en Mac OS X&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Para saber más&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/jobeet/1_4/Doctrine/es/&quot; target=&quot;_blank&quot;&gt;Tutorial Jobeet (versión española con Doctrine)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/installation&quot;&gt;Symfony: Download and Install&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/getting-started/1_4/en/&quot;&gt;[PDF] Symfony: Getting started&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/8342393278915732780/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/8342393278915732780' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/8342393278915732780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/8342393278915732780'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/05/instalando-symfony-14-en-ubuntu.html' title='Instalando symfony 1.4 en Ubuntu'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXrLlF6a4vhA0TUicyMOpQb41b4RICGXJ56On9WngG1CcnxY4JklHvZt1_1HE5axzKOTBxYNwiqQ4ndtHmEKYkExJ01k3qENW6Pzzs4fmy4AjaL3S6g2KJB0Jk_OnSxfIyTvGK1tkLW9A/s72-c/project_created.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2861649065273936462.post-5386278361060015100</id><published>2012-05-04T00:57:00.000+02:00</published><updated>2014-05-01T17:41:17.720+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Background"/><category scheme="http://www.blogger.com/atom/ns#" term="Ejecución"/><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>3 formas de ejecutar comandos en segundo plano en linux</title><content type='html'>En algunas ocasiones puede ser necesario ejecutar un script en segundo plano; ya sea porque tarde mucho en finalizar o porque el programa tiene que ejecutarse de forma indefinida&amp;nbsp;y al mismo tiempo se quieren analizar sus salidas/salidas en tiempo real, o cuando, en el caso de conexiones remotas, por el motivo que sea, se pueda producir una desconexión.&lt;br /&gt;
&lt;br /&gt;
Analizaremos 3 posibilidades:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;
&amp;amp; y bg&lt;/div&gt;
Si añadimos un ampersand (&amp;amp;) al final del comando o del script que queremos ejecutar, éste se ejecutará en segundo plano.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ ./my-shell-script.sh &amp;amp;&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;[1] 10233&lt;/span&gt;&lt;/pre&gt;
Si ejecutamos un comando de la forma habitual (en primer plano o &lt;i&gt;foreground&lt;/i&gt;) y, después de pasado un cierto tiempo, nos damos cuenta que hubiera sido mejor ejecutarlo en segundo plano o &lt;i&gt;background&lt;/i&gt;, lo podemos hacer sin necesidad de tener que matar el proceso y volver a ejecutarlo de nuevo con el ampersand. Esto se hace presioando &quot;CTRL+Z&quot; para suspender la ejecución del comando actual, y después invocando el comando bg.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ ./my-shell-script.sh&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;^Z
[2]+  Detenido                my-shell-script.sh&lt;/span&gt;

&lt;b&gt;$ bg&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;[2]+ my-shell-script.sh &amp;amp;&lt;/span&gt;&lt;/pre&gt;
Este proceso que se acaba de pasar al segundo plano, también se puede volver al primer plano con el comando fg.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ fg 2&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;my-shell-script.sh&lt;/span&gt;&lt;/pre&gt;
&lt;div class=&quot;title&quot;&gt;
nohup y &amp;amp;&lt;/div&gt;
Al finalizar una sesion en un terminal se envía un signal (&lt;a href=&quot;http://en.wikipedia.org/wiki/SIGHUP&quot; style=&quot;color: #0071bb; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot; target=&quot;_blank&quot;&gt;SIGHUP&lt;/a&gt;) a todos los procesos que esté ejecutando nuestro usuario. Como resultado, dichos procesos se mueren (aunque les hayamos puesto &amp;amp; al final)&lt;br /&gt;
&lt;br /&gt;
Para evitar esto utilizamos el comando nohup. Este comando hace que un proceso ignore la señal SIGHUP, y redirige la salida de nuestro script a un archivo nohup.out que es creado en el directorio actual.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ nohup ./my-shell-script.sh &amp;amp;&lt;/b&gt;&lt;/pre&gt;
Una buena practica sería redireccionar stdin, stdout y stderr. Básicamente, por dos razones: i) rastrear la salida de nuestro script en caso de producirse algún error, y ii) evitar problemas al terminar nuestra sesión ssh, si es que la ejecutamos en un servidor remoto.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ nohup ./my-shell-script.sh &amp;gt; foo.out 2&amp;gt; foo.err &amp;lt; /dev/null &amp;amp;&lt;/b&gt;&lt;/pre&gt;
Esta opcion es muy útil cuando necesitamos ejecutar un proceso largo y no nos interesa saber nada de él hasta que finalice. Podemos desconectarnos irnos, regresar al día siguiente y analizar el resultado del proceso.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;title&quot;&gt;
screen&lt;/div&gt;
Si invocamos un comando en segundo plano (usando &lt;b&gt;nohup&lt;/b&gt; y &lt;b&gt;&amp;amp;&lt;/b&gt;), éste se ejecutará incluso después de que cerremos nuestra sesión. Pero, en ninguno de los casos anteriores, podemos conectarnos a la misma sesión otra vez y ver exactamente qué es lo que está pasando en la pantalla, como si no nos hubieramos desconectado. Para lograr esto, usaremos el comando &lt;b&gt;screen&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
El primer paso es ejecutar el script que necesitamos como parametro del comando screen.&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ screen ./my-shell-script.sh&lt;/b&gt;&lt;/pre&gt;
Si después de ejecutar la linea anterior tecleamos “CTRL+A d”, el sistema nos separara de la sesión actual (en la que estamos ejecutando my-shell-script.sh) y nos retornará a la terminal a la espera de teclear un nuevo comando.&lt;br /&gt;
&lt;br /&gt;
Llegados a este punto, podemos cerrar la sesión, irnos, regresar, iniciar una nueva sesión y recuperar la pantalla (&lt;i&gt;screen&lt;/i&gt;) que esta corriendo nuestro script. Para ello, invocaremos el comando screen con el parámetro&amp;nbsp;-ls para obtener un listado de las sesiones actuales:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ screen -ls&lt;/b&gt;
&lt;span class=&quot;result&quot;&gt;[detached from 1788.ttys000.milleniumfalcon]&lt;/span&gt;&lt;/pre&gt;
A continuación, mediante el parámetro -r y el identificador de la sesión recuperamos la pantalla que necesitemos:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;$ screen -r 1788.ttys000.milleniumfalcon&lt;/b&gt;&lt;/pre&gt;
&lt;div class=&quot;title&quot;&gt;
¿Qué opcion usar?&lt;/div&gt;
Bueno, pues eso dependerá de cada caso, habrá veces que con el ampersand será suficiente y otras en las que tenemos que optar por una opción diferente. Para saber más acerca de &lt;b&gt;nohup&lt;/b&gt; y &lt;b&gt;screen&lt;/b&gt; recomiendo leer las páginas del manual.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;fuentes&quot;&gt;
&lt;b&gt;Fuentes&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.cesargama.mx/2011/03/15/3-maneras-de-ejecutar-comandos-en-segundo-plano-en-linux/&quot;&gt;3 maneras de ejecutar comandos en segundo plano en linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://jdbaldoma.blogspot.com/feeds/5386278361060015100/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/2861649065273936462/5386278361060015100' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5386278361060015100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2861649065273936462/posts/default/5386278361060015100'/><link rel='alternate' type='text/html' href='http://jdbaldoma.blogspot.com/2012/05/3-formas-de-ejecutar-comandos-en.html' title='3 formas de ejecutar comandos en segundo plano en linux'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/12781876219253652585</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry></feed>