<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>4 bits blog &#187; Linux</title>
	<atom:link href="http://blog.4bits.es/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.4bits.es</link>
	<description>Ahora en 16 colores</description>
	<lastBuildDate>Thu, 05 Aug 2010 13:52:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Manejando varias claves con SSH</title>
		<link>http://blog.4bits.es/manejando-varias-claves-con-ssh/</link>
		<comments>http://blog.4bits.es/manejando-varias-claves-con-ssh/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 11:52:47 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Recursos]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=564</guid>
		<description><![CDATA[La mejor funcionalidad de SSH es poder usar pares de claves (pública/privada) para autenticarse en una máquina sin necesidad de introducir una contraseña. El problema radica cuando necesitas usar varios pares de claves, por ejemplo: para acceder diferentes máquinas sin compartir un mismo par de claves. Pero como con todo, siempre hay una solución para [...]]]></description>
			<content:encoded><![CDATA[<p>La mejor funcionalidad de SSH es poder usar pares de claves (pública/privada) para autenticarse en una máquina sin necesidad de introducir una contraseña. El problema radica cuando necesitas usar varios pares de claves, por ejemplo: para acceder diferentes máquinas sin compartir un mismo par de claves. Pero como con todo, siempre hay una solución para poder usar varios pares de claves distintos.</p>
<p>Partiendo de que se han generado dos pares de claves:</p>
<pre class="brush:text">$ ssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "fran@trabajo"
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa.home -C "fran@casa"</pre>
<p>La forma sencilla es crear el archivo «<code>~/.ssh/config</code>», añadiéndole las siguientes líneas:</p>
<pre class="brush:text">IdentityFile ~/.ssh/id_rsa.work
IdentityFile ~/.ssh/id_rsa.home</pre>
<p>De este modo, cada vez que SSH conecte con una máquina intentará usar alguna de esas dos claves. Sin embargo, SSH permite realizar un control más granular sobre las claves, para ello habría que tener un archivo «<code>~/.ssh/config</code>» similar al siguiente:</p>
<pre class="brush:text">Host 192.168.0.100
  IdentityFile ~/.ssh/id_dsa.home
  User franchukelly

Host ssh.trabajo.com
  IdentityFile ~/.ssh/id_rsa.work
  User fran
  Port 2211</pre>
<p>Dónde cada campo <code>Host</code> permite definir una pequeña configuración que se usará de forma predeterminada cuando se realice una conexión a la dirección indicada. Por ejemplo:</p>
<pre class="brush:text">$ ssh ssh.trabajo.com</pre>
<p>SSH usaría la clave «<code>id_rsa.work</code>», junto al usuario «fran» y el puerto 2211.</p>
<p>Basado en <a href="http://www.karan.org/blog/index.php/2009/08/25/multiple-ssh-private-keys">Multiple ssh private keys</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/manejando-varias-claves-con-ssh/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Convertir repositorio de subversion a uno de Git</title>
		<link>http://blog.4bits.es/convertir-repositorio-de-subversion-a-uno-de-git/</link>
		<comments>http://blog.4bits.es/convertir-repositorio-de-subversion-a-uno-de-git/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 08:00:19 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=538</guid>
		<description><![CDATA[Hace unos días tuve que convertir un repositorio de subversion a un repositorio de Git. Después de buscar un poco por Google, encontré la manera de hacerlo en una web del wiki de Debian sobre cómo configurar Git en su web de proyectos Alioth. Antes de nada, hay que crear un archivo con los nombres [...]]]></description>
			<content:encoded><![CDATA[<p>Hace unos días tuve que <strong>convertir un repositorio de subversion a un repositorio de Git</strong>. Después de buscar un poco por Google, encontré la manera de hacerlo en <a href="http://wiki.debian.org/Alioth/Git">una web del wiki de Debian sobre cómo configurar Git en su web de proyectos Alioth</a>.</p>
<p>Antes de nada, hay que crear un archivo con los nombres de los desarrolladores que han usado el repositorio de subversion, el archivo tendrá el siguiente formato:</p>
<pre>pepe = Pepe Garcia &lt;pepe@garcia.es&gt;
juan = Juan Gonzalez &lt;juan@gonzalez.es&gt;</pre>
<p>Los nombres de los desarrolladores del repositorio de subversion se pueden conseguir ejecutando:</p>
<pre>$ svn log "svn://REPOSITORIO-SVN/" | awk -F'|' '/^r[0-9]+/ { print $2 }' | sort -u</pre>
<p>Este archivo se debe guardar como «authors.txt» para que mi script lo localice, aunque no sería muy difícil cambiar mi script para que se le pase la ruta como pará.</p>
<h3>Mi script «svn2git.sh»</h3>
<p>Este script se descarga el repositorio indicado (usando git-svn) y convierte y/o borra todos los datos relativos a subversion, como las ramas, los tags, &#8230;</p>
<pre class="brush:bash">#!/bin/sh
# Converts a subversion repository to a Git one.
# git-svn must be installed.

if [ $# -lt 2 ]; then
   echo "Usage: $0 SVN-REPOSITORY LOCAL-PATH"
   exit 1
fi

git svn clone $1 --stdlayout --authors-file=authors.txt --no-metadata $2

cd $2 &gt; /dev/null

for t in `git branch -r | grep 'tags/' | sed s_tags/__`; do
    git tag $t tags/$t^
    git branch -d -r tags/$t
done

git branch -d -r trunk
git config --remove-section svn-remote.svn

rm -fr .git/svn .git/{logs/,}refs/remotes/tags/

cd - &gt; /dev/null

exit 0</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/convertir-repositorio-de-subversion-a-uno-de-git/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Configurar un servidor de Git</title>
		<link>http://blog.4bits.es/configurar-un-servidor-de-git/</link>
		<comments>http://blog.4bits.es/configurar-un-servidor-de-git/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 13:35:26 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=536</guid>
		<description><![CDATA[Para todos aquellos que tengan que configurar un servidor de repositorios de Git y lo quieran hacer a mano, como me pasó a mí hace unos días, aquí tienen un pequeño manual: Instalar git: # apt-get install git-core Crear la estructura de los directorios dónde se almacenarán los repositorios de Git: # install -d -m [...]]]></description>
			<content:encoded><![CDATA[<p>Para todos aquellos que tengan que <strong>configurar un servidor de repositorios de Git</strong> y lo quieran hacer a mano, como me pasó a mí hace unos días, aquí tienen un pequeño manual:</p>
<ol>
<li>Instalar git:
<pre># apt-get install git-core</pre>
</li>
<li>Crear la estructura de los directorios dónde se almacenarán los repositorios de Git:
<pre># install -d -m 0755 /srv/algo/git /srv/algo/git/repos /srv/algo/git/.ssh</pre>
</li>
<li>Crear el usuario de Git (llamado git):
<pre># adduser --system --home /srv/algo/git --no-create-home \
--shell /usr/bin/git-shell --gecos 'git version control' --group \
--disabled-password git</pre>
</li>
<li>Crear un repositorio:
<pre>$ cd /srv/algo/git/repos
# install -d -o git -g git -m 0700 PROYECTO.git
# sudo -H -u git env GIT_DIR=PROYECTO.git git --bare init</pre>
</li>
<li>Añadir una clave pública de SSH para poder acceder al repositorio:
<pre>$ cd /srv/algo/git/.ssh
# cat CLAVE >> authorized_keys</pre>
</li>
<li>Para clonar el repositorio hará falta tener la clave privada de la clave pública usada, y ejecutar:
<pre>$ git clone git@SERVIDOR:repos/PROYECTO.git</pre>
</li>
</ol>
<p>Basado en <a href="http://eagain.net/blog/2007/03/22/howto-host-git.html">Howto host git on your Linux box</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/configurar-un-servidor-de-git/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Autotools</title>
		<link>http://blog.4bits.es/autotools/</link>
		<comments>http://blog.4bits.es/autotools/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 09:36:40 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=359</guid>
		<description><![CDATA[Si alguien sabe lo que son las autotools, seguramente haya sufrido para saber cómo funcionan. Hacía mucho tiempo que no me peleaba con ellas, hasta que hace unos días leí un pequeño manual sobre cómo configurar los diferentes archivos necesarios y me acordé de un pequeño manual que hice cuando me tocó pegarme con ellas, [...]]]></description>
			<content:encoded><![CDATA[<p>Si alguien sabe lo que son <strong>las <em>autotools</em>, seguramente haya sufrido para saber cómo funcionan.</strong> Hacía mucho tiempo que no me peleaba con ellas, hasta que hace unos días leí un pequeño manual sobre cómo configurar los diferentes archivos necesarios y me acordé de un pequeño manual que hice cuando me tocó pegarme con ellas, que voy a recuperar.</p>
<h3>¿Qué son las <em>autotools</em>?</h3>
<p>Las <em>autotools</em>, son programas que se usan para crear un paquete de código fuente que se pueda distribuir y compilar de una manera sencilla (<code>configure</code>, <code>make</code> y <code>make install</code>). Los programas que forman las <em>autotools</em> son los siguientes:</p>
<ul>
<li><code>aclocal</code></li>
<li><code>autoconf</code></li>
<li><code>automake</code></li>
</ul>
<p>Estos programas son la base para crear el paquete de código fuente, para ello se tendrán que generar unos archivos concretos.</p>
<h3>Estructura del código fuente a distribuir</h3>
<p>Las <em>autotools</em> se usan para generar el paquete «tar.gz» que contiene el código fuente del programa que se va a distribuir, normalmente estos paquetes siguen una estructura estándar. La estructura básica es:</p>
<ul>
<li><code>src</code>: Directorio del código fuente.</li>
<li><code>AUTHORS</code>: Indica los autores del programa.</li>
<li><code>ChangeLog</code>: Indica los cambios que se han ido produciendo.</li>
<li><code>COPYING</code>: Indica la licencia de distribución que tiene el programa. (Autogenerado)</li>
<li><code>INSTALL</code>: Explica cómo instalar el programa. (Autogenerado)</li>
<li><code>NEWS</code>: Indica las noticias relacionadas con el programa.</li>
<li><code>README</code>: Un pequeño documento en el que se describe el programa y se explican temas concretos de éste.</li>
<li><code>THANKS</code>: Indica los agradecimientos que tenga el autor/es.</li>
<li><code>TODO</code>: Indica una pequeña lista de cosas por hacer.</li>
</ul>
<p>De este modo, si se van a utilizar las <em>autotools</em> sería aconsejable seguir la estructura anterior, y crear todos los archivos menos los como «autogenerado» que, obviamente, se generarán automáticamente, aunque siempre se pueden crear a mano ya que puede que no se quiera tener el contenido autogenerado.</p>
<h3>El archivo «configure.ac»</h3>
<p>Sobre este archivo gira toda la generación del programa para su distribución. En él se escriben las macros para los diferentes programas que se ejecutarán: <code>aclocal</code>, <code>autoconf</code> y <code>automake</code>.</p>
<pre class="brush:text">AC_PREREQ(2.52)
AC_INIT([hola mundo], [0.1])
AM_INIT_AUTOMAKE([])

AC_PROG_CC
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT</pre>
<ul>
<li><strong>Programa aclocal:</strong> Sirve para generar el archivo «aclocal.m4». ¡Sólo se generará si en el archivo «configure.ac» hay macros de <code>automake</code>!</li>
<li><strong>Macros de autoconf:</strong> Empiezan por <code>AC_*</code>, y se buscan en el archivo «configure.ac» y en el «aclocal.m4» si existe. Sirven para la configuración correcta del programa.</li>
<ul>
<li><code>AC_PREREQ(versión)</code> indica la versión de <code>autoconf</code> necesaria.</li>
<li><code>AC_INIT([aplicación], [versión])</code> inicializa <code>autoconf</code>, recibe como parámetros el nombre del programa y su versión.</li>
<li><code>AC_PROG_CC</code> indica que realizará una compilación de código escrito en C.</li>
<li><code>AC_CONFIG_FILES([Makefile src/Makefile])</code> indica los archivos «Makefile» que se van a generar a partir de sus respectivos «Makefile.am».</li>
<li><code>AC_OUTPUT</code> indica los archivos que ﬁnalmente debe generar el script «conﬁgure».</li>
</ul>
<li><strong>Macros de automake:</strong> Empiezan por <code>AM_*</code>, y sirven para la generación de los diferentes «Makefile».</li>
<ul>
<li><code>AM_INIT_AUTOMAKE([])</code> inicializa <code>automake</code>, se le puede pasar un parámetro que la verdad no sé lo que indica, para mi ejemplo no hace falta pasárselo.</li>
</ul>
</ul>
<p><strong>Aviso:</strong> Las macros no pueden llevar un espacio entre su nombre y el paréntesis de inicio.</p>
<h3>Los archivos «Makefile.am»</h3>
<p>Los archivos «Makefile.am» contienen las reglas para generar los archivos «Makefile» correspondientes a los directorios dónde se encuentran, por lo que habrá un archivo por directorio en el que se tenga que realizar alguna operación con <code>make</code>.</p>
<p>De este modo, siempre se debe tener un archivo «Makefile.am» en el directorio raíz del proyecto, este archivo contendrá algo similar a lo siguiente:</p>
<pre class="brush:text">SUBDIRS = src
EXTRA_DIST = AUTHORS ChangeLog NEWS README THANKS TODO</pre>
<ul>
<li><strong>SUBDIRS</strong> enumera los directorios que contienen otros archivos «Makefile.am».</li>
<li><strong>EXTRA_DIST</strong> enumera los distintos archivos que deberá tener el paquete, para distribuir el código fuente que se generará.</li>
</ul>
<p>En este caso el directorio «src» es dónde, supuestamente, deberá estar el código fuente de nuestra aplicación y tendrá un archivo «Makefile.am», que indicará las reglas para compilar nuestro código fuente correctamente.</p>
<p>El archivo «Makefile.am» tendrá el siguiente contenido:</p>
<pre class="brush:text">bin_PROGRAMS = hola−mundo
hola_mundo_SOURCES = hola−mundo.c</pre>
<ul>
<li><strong>bin_PROGRAMS</strong> indica el nombre del ejecutable final.</li>
<li><strong>hola_mundo_SOURCES</strong> indica los archivos con el código fuente de la aplicación.</li>
<li>Si se necesitarán bibliotecas se debería añadir <strong>hola_mundo_LDADD</strong> con las macros necesarias para dichas bibliotecas en el archivo «configure.ac».</li>
</ul>
<p><strong>Nota:</strong> Para generar una biblioteca, se debería usar <code>libexec_PROGRAMS</code> en lugar de <code>bin_PROGRAMS</code>.</p>
<h3>Generación del script «configure»</h3>
<p>Una vez creados los archivos necesarios, se deben realizar los siguientes pasos:</p>
<ol>
<li>Generación:
<pre class="brush:text">$ aclocal
$ autoconf
$ automake --add-missing</pre>
</li>
<li>Compilación y ejecución del programa:
<pre class="brush:text">$ ./configure
$ make
$ src/hola−mundo</pre>
</li>
<li>Distribución del programa:
<pre class="brush:text">$ make distcheck</pre>
</li>
</ol>
<p>Para ampliar un poco más <a href="http://smalltalk.gnu.org/blog/bonzinip/all-you-should-really-know-about-autoconf-and-automake">All you should really know about Autoconf and Automake</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/autotools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Truco para que APT no instale paquetes recomendados</title>
		<link>http://blog.4bits.es/truco-para-que-apt-no-instale-paquetes-recomendados/</link>
		<comments>http://blog.4bits.es/truco-para-que-apt-no-instale-paquetes-recomendados/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 08:00:29 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Recursos]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=331</guid>
		<description><![CDATA[Pongo aquí un pequeño truco (más que un truco es un archivo de configuración) para que APT no instale los paquetes recomendados por otro, suele pasar que hay paquetes que recomiendan instalar servidores de correo y, obviamente, no quiero tener un servidor de correo en muchos de mis ordenadores. # echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/90recommends [...]]]></description>
			<content:encoded><![CDATA[<p>Pongo aquí un pequeño truco (más que un truco es un archivo de configuración) para que <strong>APT no instale los paquetes recomendados por otro</strong>, suele pasar que hay paquetes que recomiendan instalar servidores de correo y, obviamente, no quiero tener un servidor de correo en muchos de mis ordenadores.</p>
<pre># echo 'APT::Install-Recommends "0";' > /etc/apt/apt.conf.d/90recommends</pre>
<p>Sacado de <a href="http://chris-lamb.co.uk/2009/06/03/checklist-configuring-debian-system/">Checklist for configuring a Debian system</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/truco-para-que-apt-no-instale-paquetes-recomendados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cifrar una memoria USB</title>
		<link>http://blog.4bits.es/cifrar-una-memoria-usb/</link>
		<comments>http://blog.4bits.es/cifrar-una-memoria-usb/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 17:59:28 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=255</guid>
		<description><![CDATA[Hace poco se me ocurrió una forma de aprovechar una memoria USB (o pendrive) antigua (de 256MB) que tenía por ahí. Simplemente, utilizarla para guardar, todo cifrado, un archivo con un listado de contraseñas, documentos personales, claves GPG y/o SSH, &#8230; Así que estuve buscando diferentes opciones, siendo importante que funcionase en Linux y en [...]]]></description>
			<content:encoded><![CDATA[<p>Hace poco se me ocurrió <strong>una forma de aprovechar una memoria USB</strong> (o <em>pendrive</em>) antigua (de 256MB) que tenía por ahí. Simplemente, <strong>utilizarla para guardar, todo cifrado, un archivo con un listado de contraseñas, documentos personales, claves GPG y/o SSH, &#8230;</strong></p>
<p>Así que estuve buscando diferentes opciones, siendo importante que funcionase en Linux y en Windows (por si las moscas). <strong>Al final había dos opciones Truecrypt (el archiconocido) y dm-crypt (un gestor de dispositivos cifrados de Linux)</strong>, me decanté por dm-crypt porque Truecrypt, curiosamente, no está en los repositorios de Debian y porque con dm-crypt no necesitaría de un programa a parte para utilizar mi dispositivo en Linux (aunque sí, en Windows).</p>
<h3>Pasos a seguir</h3>
<p>Directo al grano, estos son los pasos que realicé:</p>
<ol>
<li>Paquetes necesarios:
<pre># apt-get install cryptsetup hashalot dmsetup</pre>
</li>
<li>Rellenar la memoria con datos aleatorios (no es necesario, aunque sí recomendable):
<pre># dd if=/dev/urandom of=/dev/sdX</pre>
</li>
<li>Cargar los siguientes módulos si no lo están ya:
<pre># modprobe aes
# modprobe dm_crypt
# modprobe dm_mod
# modprobe sha256</pre>
</li>
<li>Crear el contenedor cifrado (pedirá la contraseña para poder luego descifrarlo):
<pre># cryptsetup -v --key-size 256 luksFormat /dev/sdX NOMBRE-CONTENEDOR</pre>
</li>
<li>Formatear el contenedor (yo utilicé FAT para que funcione en Windows) para ello primero hay que montar el contenedor utilizando <code>cryptsetup</code>:
<pre># cryptsetup -v luksOpen /dev/sdX NOMBRE-CONTENEDOR
# mkfs.vfat /dev/mapper/NOMBRE-CONTENEDOR</pre>
</li>
<li>Y ya está, ya se puede montar:
<pre># mount -t vfat /dev/mapper/NOMBRE-CONTENEDOR /mnt/usb_cifrado</pre>
</li>
</ol>
<h3>Uso</h3>
<p>Lo bueno de este método es que al enchufar la memoria en Linux, éste pedirá la contraseña y se montará automáticamente, aunque en la versión de GNOME que uso no lo monta. Así que, por si las moscas, siempre lo puedes montar ejecutando:</p>
<pre>$ pmount-hal /dev/sdX</pre>
<p>Y desmontar ejecutando:</p>
<pre>$ pumount /dev/sdX</pre>
<p>Para poder utilizar el dispositivo cifrado en Windows se necesita un programa llamado <a href="http://www.freeotfe.org/">FreeOTFE</a> que es compatible con este tipo de cifrado.</p>
<p>Basado en <a href="http://homer.shacknet.nu/docs/Cifrado.txt">Manual de Cifrado de una particion concreta desde Linux Debian/Ubuntu</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/cifrar-una-memoria-usb/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Backup utilizando alias</title>
		<link>http://blog.4bits.es/backup-utilizando-alias/</link>
		<comments>http://blog.4bits.es/backup-utilizando-alias/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 10:06:56 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Script]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=244</guid>
		<description><![CDATA[El título no es muy claro, lo sé, pero no podía resumir lo que voy a explicar en algo tan corto. Básicamente, a este script se le pasa una lista de directorios junto a un alias (o seudónimo) bajo el que se guardarán en el archivo que contenga el backup. Esto sirve: Para que en [...]]]></description>
			<content:encoded><![CDATA[<p>El título no es muy claro, lo sé, pero no podía resumir lo que voy a explicar en algo tan corto.</p>
<p>Básicamente, a este script se le pasa una lista de directorios junto a un alias (o seudónimo) bajo el que se guardarán en el archivo que contenga el backup. Esto sirve:</p>
<ol>
<li>Para que en el archivo del backup no se guarden las rutas absolutas de los directorios guardados.</li>
<li>Para no tener que realizar una copia local (duplicando el tamaño ocupado durante la realización del backup) de los archivos contenidos en los directorios a copiar en un directorio temporal.</li>
<li>Para poder guardar los directorios con el nombre que se quiera dentro del archivo del backup.</li>
</ol>
<h3>Script</h3>
<p>Este script está preparado para que <a href="http://blog.4bits.es/guia-del-cron/">lo ejecute <code>cron</code></a> con permisos de <code>root</code> y así poder copiar partes del sistema a las que otro usuario no podría acceder.</p>
<p>Si queréis que funcione con un usuario normal, sólo hace falta que eliminéis el <code>if</code> que está detrás del comentario <code># Check if the script is being run as root</code>.</p>
<p>Los directorios a copiar se guardan en la variable <code>DIRS</code> separados por un espacio y con el formato <code>alias:/ruta/al/directorio</code>.</p>
<pre class="brush:bash">#!/bin/bash
# This script makes backups of a list of directories.
# It must be executed by root.

# Backup data
DIRS="images:/home/user/images/ code:/home/user/projects/ docs:/home/user/docs"
TMP_DIR=`mktemp -d`
BACK_FILE="/mnt/backup/`hostname --fqdn`_`date "+%Y-%m-%d"`.tar.gz"

TAR=$(which tar)

# Check if the script is being run as root
if [ "$UID" -ne "0" ]; then
    echo "This script must be run as root!"
    exit -1
fi

# Logging backup
echo "[`date "+%Y-%m-%d"`] Starting backup"

# Create symbolic links
for dir in $DIRS
do
    SYM_DIR=${dir%:*}
    TARGET_DIR=${dir#*:}
    ln -s $TARGET_DIR $TMP_DIR/$SYM_DIR
done

# Create backup
cd $TMP_DIR > /dev/null
$TAR -chzf $BACK_FILE *

# Backup failed
if [ $? != 0 ]; then
    cd - > /dev/null
    rm -fR $TMP_DIR > /dev/null
    echo "[`date "+%Y-%m-%d"`] Backup failed."
    exit -1
fi

# Backup created
cd - > /dev/null
rm -fR $TMP_DIR > /dev/null
echo "[`date "+%Y-%m-%d"`] Backup done!"

exit 0</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/backup-utilizando-alias/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compartir directorios con Samba</title>
		<link>http://blog.4bits.es/compartir-directorios-con-samba/</link>
		<comments>http://blog.4bits.es/compartir-directorios-con-samba/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 13:46:58 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=224</guid>
		<description><![CDATA[En el anterior post explicaba cómo compartir impresoras con Samba. Como sé que os gustó, hoy os explico cómo compartir directorios con Samba. Instrucciones Voy a partir de qué tenemos la siguiente estructura de directorios que se quiere compartir: drwxr-x--- user group dir01 drwxr-x--- user group dir02 drwxr-x--- user group dir03 Como se puede ver, [...]]]></description>
			<content:encoded><![CDATA[<p>En el anterior post explicaba cómo <a href="http://blog.4bits.es/compartir-impresoras-con-samba/">compartir impresoras con Samba</a>. Como sé que os gustó, hoy os explico <strong>cómo compartir directorios con Samba</strong>.</p>
<h3>Instrucciones</h3>
<p>Voy a partir de qué tenemos la siguiente estructura de directorios que se quiere compartir:</p>
<pre>drwxr-x--- user group dir01
drwxr-x--- user group dir02
drwxr-x--- user group dir03</pre>
<p>Como se puede ver, a estos directorios sólo puede acceder el usuario <code>user</code> y los usuarios del grupo <code>group</code>, aunque estos últimos sólo con permisos de lectura sobre los directorios.</p>
<p>Lo primero que se debe hacer es añadir el usuario (o los usuarios) que podrán acceder a nuestros datos compartidos. Para ello se ejecuta:</p>
<pre># smbpasswd -a user</pre>
<p>Nos pedirá una contraseña, ésta puede ser distinta a la que tenga el usuario para acceder a la máquina.</p>
<p>Una vez añadido el usuario (o los usuarios), se podrá configurar Samba para que comparta los directorios. Para ello se modifica el archivo <code>/etc/samba/smb.conf</code> y se añade un elemento del siguiente tipo por cada directorio a compartir:</p>
<pre class="brush:text">[nombre_directorio_a_compartir]
  comment = Comentario del directorio compartido
  path = /ruta/al/directorio
  read only = yes # Indica si el acceso será sólo lectura
  write list = user # Usuarios/grupos que tendrán acceso de escritura
  create mask = 0640 # Máscara de los permisos al crear archivos
  directory mask = 0750 # Máscara de los permisos al crear directorios
  guest ok = no # Acceso sin autenticación</pre>
<p>De este modo, para el ejemplo que he puesto se tendrían que añadir tres elementos de este tipo, quedando el archivo similar a este:</p>
<pre class="brush:text">[global]
  display charset = UTF-8
  server string = NOMBRE-DE-LA-MAQUINA
  workgroup = GRUPO-DE-TRABAJO
  netbios name = NOMBRE-NETBIOS-MAQUINA
  invalid users = root # Para que no se pueda acceder como root

[dir01]
  comment = Directorio 01
  path = /home/user/dir01
  read only = yes
  write list = user
  create mask = 0640
  directory mask = 0750
  guest ok = no

[dir02]
  comment = Directorio 02
  path = /home/user/dir02
  read only = yes
  write list = user
  create mask = 0640
  directory mask = 0750
  guest ok = no

[dir03]
  comment = Directorio 03
  path = /home/user/dir03
  read only = yes
  write list = user
  create mask = 0640
  directory mask = 0750
  guest ok = no</pre>
<p>Después de esto sólo hay que reiniciar Samba y listo, ya se podrá acceder a dichos directorios compartidos utilizando el usuario <code>user</code>.</p>
<pre># /etc/init.d/samba restart</pre>
<p>Basado en <a href="http://lopezivan.blogspot.com/2007/03/compartir-directorios-con-samba.html">Compartir directorios con Samba</a> del blog de Iván López.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/compartir-directorios-con-samba/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Compartir impresoras con Samba</title>
		<link>http://blog.4bits.es/compartir-impresoras-con-samba/</link>
		<comments>http://blog.4bits.es/compartir-impresoras-con-samba/#comments</comments>
		<pubDate>Tue, 26 May 2009 17:28:57 +0000</pubDate>
		<dc:creator>Fran</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=211</guid>
		<description><![CDATA[Estos días en el trabajo me ha tocado lidiar con la configuración de un servidor que tenemos para almacenamiento e impresión, con sus directorios compartidos e impresora compartida. Hasta hace poco este servidor utilizaba Windows 2003, hasta que un día decidió morir en extrañas circunstancias, así que como los que nos encargamos de dicho servidor [...]]]></description>
			<content:encoded><![CDATA[<p>Estos días en el trabajo me ha tocado lidiar con la configuración de un servidor que tenemos para almacenamiento e impresión, con sus directorios compartidos e impresora compartida.</p>
<p>Hasta hace poco este servidor utilizaba Windows 2003, hasta que un día decidió morir en extrañas circunstancias, así que como los que nos encargamos de dicho servidor nos manejamos mejor en Linux decidimos <strong>instalar Debian Lenny y utilizar Samba para los directorios compartidos y la impresora compartida</strong>, ya que en nuestra red tenemos variedad de Windows y Linux.</p>
<h3>Instrucciones</h3>
<p>Hay que tener instalado CUPS. Una vez instalado, realizar los siguientes pasos para <strong>configurar CUPS</strong>:</p>
<ol>
<li>Añadir la siguiente línea al archivo <code>/etc/cups/cupsd.conf</code>, suponiendo que nuestra red sea <code>192.168.0.0/255.255.255.0</code>:
<pre>Allow From 192.168.0.*</pre>
</li>
<li>Descomentar la siguiente línea del archivo <code>/etc/cups/mime.convs</code>:
<pre>application/octet-stream application/vnd.cups-raw  0 - </pre>
</li>
</ol>
<p>De este modo, CUPS permitirá compartir remotamente la impresora. Ahora hay que <strong>configurar Samba</strong> para que las máquinas con Windows puedan usar la impresora, así que a seguir los siguientes pasos:</p>
<p>Editar el archivo <code>/etc/samba/smb.conf</code> de modo que quede similar a este que muestro:</p>
<pre class="brush:text">[global]
  workgroup = GRUPO-DE-TRABAJO
  netbios name = NOMBRE-NETBIOS-MAQUINA

  #this section is only to share the printer
  printcap name = cups
  disable spoolss = yes
  show add printer wizard = no
  printing = cups

[printers]
  comment = Printer in Linux
  path = /var/spool/samba
  create mode = 0700
  guest ok = yes
  print ok = yes
  use client driver = yes
  browseable = yes
  public = yes</pre>
<p>El directorio <code>/var/spool/samba</code> se debe crear si no existe y tener permisos 0777.</p>
<p>Con esta configuración se comparte la impresora sin necesidad de autenticarse, ya que el nivel de seguridad lo permite (<code>security = share</code>) y se permite autenticarse como invitado (<code>guest ok = yes</code>). El elemento <code>printers</code> permite que samba comparta automáticamente todas las impresoras conectadas con las propiedades que se le indiquen en dicho elemento.</p>
<p>Si se quisiera obligar a autenticarse para poder usar la impresora, habría que añadir un usuario a samba ejecutando:</p>
<pre># smbpasswd -a usuario</pre>
<p>Además, habría que cambiar el nivel de seguridad (con quitar la propiedad <code>security</code> valdría) y no permitir la autenticación como invitado (<code>guest ok = no</code>).</p>
<p>Para finalizar, sólo habría que reiniciar CUPS y Samba:</p>
<pre># /etc/init.d/cups restart
# /etc/init.d/samba restart</pre>
<p>Basado en  <a href="http://www.debian-administration.org/article/Sharing_a_printer_to_Windows_XP_clients_with_Samba_and_Cups">Sharing a printer to XP clients with Samba and Cups</a> de Debian Administration (en inglés).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/compartir-impresoras-con-samba/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Guía del Cron</title>
		<link>http://blog.4bits.es/guia-del-cron/</link>
		<comments>http://blog.4bits.es/guia-del-cron/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 21:22:09 +0000</pubDate>
		<dc:creator>Lek</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.4bits.es/?p=160</guid>
		<description><![CDATA[Para las tareas programadas en Linux se utiliza un programa llamado Cron. Su configuración puede resultar algo compleja para los que no estén acostumbrados a utilizar la línea de comandos. Para facilitar las cosas, aquí tenéis una guía gráfica que me envió Bellz esta mañana por correo (click para ver más grande): Más fácil imposible]]></description>
			<content:encoded><![CDATA[<p>Para las tareas programadas en Linux se utiliza un programa llamado <code>Cron</code>. Su configuración puede resultar algo compleja para los que no estén acostumbrados a utilizar la línea de comandos. Para facilitar las cosas, aquí tenéis una guía gráfica que me envió <a href="http://histrionicos.blogspot.com">Bellz</a> esta mañana por correo (click para ver más grande):</p>
<p><a href="http://blog.4bits.es/wp-content/uploads/2009/03/800px-cron1.png"><img src="http://blog.4bits.es/wp-content/uploads/2009/03/800px-cron1-300x148.png" alt="Cron Cheatsheet" title="Cron Cheatsheet" width="300" height="148" class="aligncenter size-medium wp-image-159" /></a></p>
<p>Más fácil imposible</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.4bits.es/guia-del-cron/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
