verificación google

Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

miércoles, 11 de julio de 2018

Ocultar versión de PHP en cabeceras

Si eres desarrollador de PHP esto te interesa cuando pases tus aplicaciones a producción. En tu servidor de explotación es recomendable modificar el fichero php.ini u poner en off la variable "expose_php", de esta forma nadie viendo tu aplicación en ejecución podrá saber qué versión de PHP corre en tu servidor.

Esto es altamente recomendable para evitar que la publicación de una vulnerabilidad para la versión de PHP que utilizas haga que tu servidor sea el foco de todas las miradas.
php.ini
expose_php = Off
Cuando ves las cabeceas de los paquetes podrás ver algo como:
X-Powered-By: PHP/5.3.8
Y simplemente cunado cuando cambiar la variable a off desaparece esta información.

IMPORTANTE: Esto no es una solución frente a vulnerabilidades, la solución es actualizar a una versión no vulnerable. Simplemente evitaremos que "gritar" al mundo qué versión de PHP utilizamos.

martes, 10 de julio de 2018

Contar lineas desde linux en /bin/bash con el comando wc

Seguro que en muchas ocasiones has necesitado contar lineas desde la consola de linux. Yo en alguna ocasión (antes de conocer el comando wc) he copiado desde el terminal para pegar en un calc o alguna otra aplicación de más alto nivel para contar un resultado. Pero puede que esto no lo tengas siempre disponible y sabemos que siempre es mucho más rápido realizar operaciones directamente en la linea de comandos.

Contar las líneas de un fichero con el comando wc

Los usuarios de GNU/Linux disponemos del comando wc (sigla de Word Count). Este comando nos permite contar las líneas (entendiendo como tal el número de caracteres nueva línea), bytes o palabras.

Para contar las líneas, simeplemente ejecutamos:
wc -l <fichero>
En <fichero> se introduce el nombre o nombres de los archivos en los que queremos efectuar el recuento. Cuando son varios los archivos, el comando devuelve, además, una línea resumen con la suma de los conteos efectuados.

Contar palabras de un fichero con el comando wc

Podemos también utilizar el comando wc para contar palabras, en cuyo caso se consideran como tal las secuencias de longitud no-nula delimitadas por espacios o directamente caracteres. En este caso, la llamada  sería:
wc -w 1<fichero>
Otras opciones interesantes son el uso de los modificadores -c y -m, que te devuelven el número de bytes y/o caracteres del archivo, respectivamente. Hay que destacar que el carácter de fin de línea también se cuenta. Para terminar destacamos el modificador -L, que nos devuelve la longitud máxima de línea.

Contar salida de un comando con wc

Esta será posiblemente la opción que más utilizo personalmente cuando necesito utilizar el comando wc. Consiste en desviar la salida de un comando utilizando tuberías (pipes) a la entrada del siguiente comando, en este caso wc.

Por hacer un ejemplo muy simple, en lugar de contar las lineas de un fichero utilizando:
wc -l mifichero.txt
También podríamos utilizar:
cat mifichero.txt | wc -l
Estos dos comandos realizarán la misma operación; contar el número de lineas del fichero mifichero.txt, pero con esta funcionalidad podríamos realizar operaciones mucho más interesantes. Podríamos crearnos un script que realice distintos procesos en su interior y posteriormente contar el resultado.
./miscript.bash | wc -l

Otras opciones

Si empleamos wc sin archivos de entrada, el conteo se hará sobre la entrada estándar y se contará sobre lo que escribamos en consola. para salir de este modo, se pulsará Ctrl+D y el programa nos devuelve los valores que hemos pedido al invocar el comando.

Por último, os indico que si invocamos el comando sin opciones de conteo (contar las líneas, las palabras, etc), el comando nos devolverá directamente cuatro columnas: la cuenta de palabras, de líneas y de bytes totales del archivo.

martes, 19 de junio de 2018

Buscar y reemplazar texto en bash

En muchas ocasiones me he encontrado con la necesidad de hacer un buscar reemplazar en el bash de linux. Hay muchas opciones para hacerlo, comentaré aquí algunas de las que yo utilizo por si a alguien la es de utilidad.

Utilizar editor nano desde bash para buscar y reemplazar un texto

La primera opción es utilizar un editor de texto cualquiera para hacer un buscar y reemplazar, yo utilizo nano por lo fácil y rápido que es. Te permite abrir fichero de texto muy pesados sin cargar demasiado tu equipo.

Una vez estas en nano simplemente presionas la combinación de teclas ctrl + w para buscar y después ctrl + r para reemplazar, esto te pedirá primero el texto a buscar, después el texto a reemplazar y para terminar preguntará si quieres reemplazar todas las coincidencias o únicamente la primera.





Una buena opción; crear un script /bin/bash para buscar y reemplazar un texto

Esta opción es muy útil cuando necesitamos hacer un buscar y reemplazar automatizado por ejemplo en un fichero de configuración. Yo lo utilizo en ficheros de configuración de apache para virtualhost, tengo una plantilla y cuando tengo que crear un nuevo virtualhost lo creo con un script automatizado de este estilo.
#!/bin/bash
primeraCadena="Amo con locura a mi hijo y a mi mujer."
segundaCadena="familia"
echo "${primeraCadena/hijo y a mi mujer/$segundaCadena}" 
Este script buscará en la cadena base "Amo con locura a mi hijo y a mi mujer." el texto "hijo y a mi mujer" y lo reemplazará por "familia", para después imprimir el resultado "Amo con locura a mi familia".

Esto puede ser útil pero cuando queremos hacer un buscar reemplazar en un fichero de configuración normalmente tenemos el mismo nombre en muchos sitios que tenemos que reemplazar (ficheros de configuración, ruta de directorios, nombre de dominios...). Para esto dejo aquí este pequeños script:
#!/bin/bash
apache=`cat apache.conf`
echo "${apache//instancia/$1}"
En primer lugar cargamos el fichero apache.conf en una variable, hay que destacar que las comillas utilizas son las comillas de ejecución y no las comillas de cadena de texto.

Después procedemos a reemplazar todas las palabras "instancia" por el primer parámetro que le pasamos en la ejecución del fichero.

El script tendríamos que ejecutarlo de la siguiente forma:
./buscar_reemplazar.bash nuevaInstancia
Su ejecución nos devolverá el contenido del fichero que necesitaremos para apache reemplazando la palabra "instancia" del fichero plantilla por "nuevaInstancia".

La opción más rápida; utiliza el comando sed para buscar y reemplazar textos

El comando sed es ampliamente utilizado en linux y lo puedes utilizar para escribir de forma sencilla y rápida una linea de comando para hacer un buscar y reemplazar en un fichero de texto.
sed -i 's/antigua/nueva/g' prueba.txt
Directamente con este simple comando buscará en el fichero prueba.txt todas las coincidencias con "antigua" y las reemplazará por "nueva". El resultado quedará guardado en el mismo fichero gracias al modificador " -i ".

Si prescindimos de este modificador obtendremos el resultado por la salida estandar de la consola. Y podemos desviar éste resultado a un fichero.
sed 's/antigua/nueva/g' prueba.txt > resultado.txt

miércoles, 30 de octubre de 2013

Calcular día par o impar #!/bin/bash

Hace poco necesité una acción dentro de un script que se ejecutase únicamente los días pares del calendario. Calculando el módulo 2 del número del día se puede calcular fácilmente.
#!/bin/bash
dia=`date +%_d`
check=$(($dia % 2))
if [ $check = 0 ]; then
        echo "es un día par";
fi

sábado, 24 de agosto de 2013

Cifrar particiones GNU/Linux

Pues el título lo dice todo, un pequeño manual sobre como cifrar particiones bajo GNU/Linux, como siempre yo los experimentos los hago bajo Debian, pero casi seguro que con algunas modificaciones funciona en otras distribuciones.

En primer lugar es necesario cargar los siguientes módulos, para ello utilizamos el comando "modprobe", recordad que tenemos el comando "lsmod" para ver los módulos cargados y que en el fichero "/etc/modules" definimos los módulos que queremos cargar en el inicio del sistema.
modprobe aes
modprobe dm-crypt
modprobe dm-mod
modprobe sha256
También necestiamos instalar el paquete "cryptsetup".
apt-get install cryptsetup
Y a continuación ejecutamos el siguiente grupo de comandos. Que en primer lugar encripta el dispositivo, accede a la información encriptada, crea el sistema de ficheros ext4 y finalmente monta el dispositivo.
cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 decrypt
mkfs.ext4 /dev/mapper/decrypt
mount /dev/mapper/decrypt /mnt
Para montar el dispositvo simplemtne tendremos que ejecutar estas dos. Tras el primer comando nos pedirála clave que utilizamos para cifrar la partición y poder acceder al contenido. El segundo comando simplemente monta el dispositivo para poder leer o escribir.
cryptsetup luksOpen /dev/sdb1 decrypt
mount /dev/mapper/decrypt /mnt
Se pueden utilizar modificardores para que NO solicite la clave y se la pasemos directamente, pero no recomiendo para nada, las claves NUNCA deben estar escritas en ningún sitio, las claves se memorizan y puto. Si el sistema se cae ahí tiene que estar el administrador para volver a iniciarlo.

Este es un pequeño script que podemos dejar a mano para montar el sistema si se cae.
#!/bin/bash
cryptsetup luksOpen /dev/sdb1 decrypt
mount /dev/sdb1 /opt

miércoles, 7 de diciembre de 2011

Múltiples consolas en segundo plano

Muchas veces he pensado en escribir este artículo y de hoy no pasa. Nunca recuerdo este comando y siempre pierdo un tiempo preciso es buscar y recordar como funciona. Y es realmente útil cuando tienes que dejar un proceso que previsiblemente tardará mucho tiempo en terminar y... no te fías de la conexión con el servidor ... se puede ir luz y el equipo desde el que estás conectado no tiene SAI... o simplemente te quieres conectar por SSH al servidor, lanzar el proceso y cerrar la conexión. Para hacer esto utilizaremos el comando "screen". Con el modificador "-dmS " vamos a crear "el terminal" desde el que lanzaremos los procesos en segundo plano. Podemos poner cualquier palabra, yo recomiendo que se utilice algo descriptivo para el fin que se utilizará. Por ejemplo si queremos mover las copias de seguridad que pesan procecientos GB de un disco a otro, podríamos llamar al terminar "ProcesoMueveCopiasSeguridad", así quedaría el comando:
screen -dmS ProcesoMueveCopiasSeguridad
Ahora su hacemos un "ps aux" podemos ver el proceso corriendo. Para acceder al terminar virtual, ejecutamremos:
screen -r ProcesoMueveCopiasSeguridad
Y si ejecutamos un "ps aux --forest" podemos ver que ahora el "ps" se está ejecutando desde la consola correspondiente al screen. Ahora si se corta la comunicación con el servidor no tendremos problemas, porque el proceso que lancemos no dependerá del proceso de nuestra conexión. Ahora bien, ¿Cómo volvemos a nuestro terminal anterior, el terminal que creamos al conectarnos? Pues simplemente pusando "ctrl+a+d" y volveremos al terminal anterior.

lunes, 28 de noviembre de 2011

Saltos de linea Linux vs Windows

Si sois usuarios de GNU/Linux os habréis encontrado alguna vez con el problema de pasar un fichero de texto plano a un usuario de windows y que no vea correctamente los saltos de linea. Pues esta herramienta puede ayudarnos a solventar este problema. Para instalarla desde Debian o Ubuntu, bastará con un simple: aptitude install recode y para transformar un fichero con saltos de linea de GNU/Linux a Windows haremos esto:
recode ../CR-LF in.txt
Siendo in.txt el fichero que queremos pasar al usuario Windows. Localicé esta información en http://www.stackoverflow.com.

lunes, 26 de septiembre de 2011

Listado de usuarios y alias dbmail

Para obtener la relación de usuarios y alias directamente desde la base de datos de dbmail, se puede obtener ejecutando la siguiente select:
SELECT userid, alias FROM dbmail_aliases a, dbmail_users u WHERE CAST(a.deliver_to AS bigint) = u.user_idnr ORDER BY userid

lunes, 14 de diciembre de 2009

Conectar unidad de red a un servidor SAMBA

Una forma útil de utilizar un servidor SAMBA desde un entorno de clientes Windows es conectar como unidad de red los recursos compartidos del servidor SAMBA.

Para hacer esto de forma automática es más cómodo generar un script (.bat) para que conecte las unidades de red en los equipos Windows.

El comando es muy sencillo, solo tendemos que ejecutar: net use \\\ /user:

El comando quedaría así para un servidor con IP 192.168.1.1, el recurso al que queremos conectar nuestra unidad de red se llama "compartido" y nos conectaremos con usuario "administrador" y clave "1234". Por último asignaremos a la unidad la letra "f".

net use f: \\192.168.1.1\compartido 1234 /user:administrador
Recuerda que para ejecutar este comando en un Windows XP, antes tienes que abrir la linea de comandos de Windows y para ello: inicio > Ejecutar > cmd.

martes, 9 de junio de 2009

Encender y Apagar máquinas virtuales en el inicio del sistema

Con este script podrás iniciar y apagar todas las máquinas virtuales de tu granja de servidores virtuales VirtualBox, sin preocuparte de corromper las máquinas virtuales al apagar la máquinas hospedadora.

Utilizo -type vrdp para no lanzarlas sobre ningún entorno gráfico. Las consolas serán accesibles desde la red.

Para apagar las máquinas windows utilizo el comando net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password para el apagado desde la red de una máquina windows. Me ha pasado que en algunas máquinas no he sido capaz de que funcione, pero en otras sí. No soy un experto en windows así que si alquien sabe porqué puede pasar esto que deje un comentario.

Las máquinas Gnu/Linux normalmente se apagarán correctamente con la opción VBoxManage controlvm Suse10serverOracle10g acpipowerbutton.

No os preocupéis, he pensado en todo. Las maquinas tardan un tiempo en apagarse, el script está programado para esperar 60 segundos. Y después guardará el estado de todas las máquinas virtuales, por si alguna no se apagó correctamente (VBoxManage controlvm Win2003serverMSSql savestate).

Definir el fichero /etc/init.d/maquinasvirtuales.bash:
#!/bin/bash
echo "Script de iniciado/apagardo de máquinas virtuales"
case $1 in
start)
echo "Iniciando máquinas vituales, espere a que inicien los sistemas..."
VBoxManage startvm Win2003serverMSSql -type vrdp
VBoxManage startvm Suse10serverOracle10g -type vrdp
VBoxManage startvm Debian5Nagios -type vrdp
;;
stop)
echo "Parando máquinas vituales, espere a que termien de apagar los sistemas..."

# apagar windows desde la red (Win2003serverMsSQL)
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password

# apagar como si pulsaras una vez el botón de apagar (aparagá correctamente)
VBoxManage controlvm Suse10serverOracle10g acpipowerbutton
VBoxManage controlvm Debian5Nagios acpipowerbutton

# espernado un tiempo prudencial para dar tiempo a las maquinas virtuales a que se apaguen
for i in `seq 1 60`; do
sleep 1
echo -n "."
done

# si no se apagaron las máquinas guardamos su estado, así no corromperemos los sistemas de ficheros

VBoxManage controlvm Win2003serverMSSql savestate
VBoxManage controlvm Debian5Nagios savestate
VBoxManage controlvm Suse10serverOracle10g savestate

echo "sistemas apagados"
;;
restart)
/etc/init.d/maquinasvirtuales.bash stop
/etc/init.d/maquinasvirtuales.bash start
;;
*)
echo "Usa: /etc/init.d/maquinasvirtuales.sh {start|stop|restart}"
;;
esac

martes, 5 de mayo de 2009

vlc reproduce musica desde linea de comandos

Un buen reproductor de música para la linea de comandos de GNU/Linux puede ser vlc. Lo he estado utilizando y es perfecto para no sobrecargar el sistema con reproductores lentos.

Para ejecutarlo simplemente. Desde ahí podemos ir buscando las canciones que queramos reproducir.
vlc -I ncurses
Lo mejor creo que puede ser hacr un script pasándole como argumento los ficheros que queramos reproducir. Es decir el directorio donde almacenamos nuestra música.
#!/bin/bash
vlc -I curses /home/jmruiz/musik/*

Como abrir Firefox u otra aplicacion remotamente

Seguro que en muchas ocasiones has necesitado abrir una aplicaciones en otro ordenador para ver la ejecución en local. SSH nos permite esta funcionalidad, pero con algunas restricciones, tenemos que tener instalada la aplicación también en el equipo desde el que lanzado el comando. Ya que utiliza las librería locales para poder ejecutar la aplicación.

Solo necesitamos la IP de la máquina remota y que esta tenga corriendo el servidor SSH y permisos de ejecución para el aplicativo "firefox" para "usuario".
ssh usuario@192.168.254.254 -CX -f firefox
Parece un comando muy tonto, pero muy útil para ver por ejemplo una aplicación Web que únicamente se puede acceder desde el escritorio de la máquina y poniendo "http://localhost". Es decir que Apache solo admite peticiones que venga de la propia máquina.
Con este comando SSH podríamos acceder remotamente a esa aplicación que solo admite peticiones en modo local.

Si piensas un poco verás que puede ser muy útil cuando estás trabajando con más de una subred y necesitas saltar de una a otra.

Eliminar disco duro VirtualBox

Sabemos como registrar discos duros virtuales que vienen de otros servidores de virtualización, también hemos creado discos duros desde cero y hemos hecho instalaciones directamente desde el servidor de virtualización.

Pero ¿Cómo borramos o desregistramos un disco duro que hemos registrado en nuestro sistema VirtualBox?, la respuesta a esta pregunta es poco elegante pero efectiva.
VirtualBox es sus versiones más actuales dispone un comando muy útil para la administración "VBoxManager list < vms |runningvms |ostypes |hostdvds |hostfloppies |hostifs |hostinfo |hddbackends |hdds |dvds |floppies |usbhost |usbfilters |systemproperties >" con este comando podremos ver entre otras cosas los identificadores de las máquinas virtuales que están corriendo, las máquinas virtuales registradas o el listado de discos duros registrados.

Disponemos también de comandos para parar y arrancar máquinas virtuales, así como para borrar máquinas virtuales, pero no tenemos comandos para borrar o desregistrar discos duros virtuales.
VirtualBox tiene un fichero .xml donde almacena toda esta información. Este se encuentra en el home del usuario donde se ha instalado VirtualBox en mi caso "/root/.VirtualBox/VirtualBox.xml".

En esto fichero no te costará encontrar la linea que corresponden al disco duro virtual que deseas borrar, ya que en esa misma linea vienen definida la ruta donde se encuentra el disco duro virtual que registraste. Si quitas esta linea ya no tendrás registrado tu disco duro y cuando lo borres con un "rm" no tendrás rastro de él.

Pero ten cuidado de no borrar un disco que esté asociado a una máquina virtual, si lo haces cuando intentes arrancar la máquina virtual está lanzará un error al no encontrar el disco.

Problemas al intentar borrar una máquina virtual de VirtualBox

Es muy posible que cuando intentas borrar una máquina virtual de VirtualBox tengas este error.
# VBoxManage unregistervm Win2003Server -delete
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

[!] FAILED calling a->virtualBox->UnregisterMachine(uuid, machine.asOutParam()) at line 791!
[!] Primary RC = VBOX_E_INVALID_OBJECT_STATE (0x80BB0007) - Current object state prohibits operation
[!] Full error info present: true , basic error info present: true
[!] Result Code = VBOX_E_INVALID_OBJECT_STATE (0x80BB0007) - Current object state prohibits operation
[!] Text = Cannot unregister the machine 'Win2003Server' because it has 1 hard disks attached
[!] Component = Machine, Interface: IMachine, {ea6fb7ea-1993-4642-b113-f29eb39e0df0}
[!] Callee = IVirtualBox, {339abca2-f47a-4302-87f5-7bc324e6bbde}

Esto pasa cuando intentas borrar una máquina virtual que está asociada a un disco duro virtual. La verdad que los desarrolladores de VirtualBox podrían poner un modificador --force para forzar el borrado incluso de los discos duros asociados, pero mientras lo hacen y no hay que hacerlo poco a poco.

Primero tendrás que quitar la relación entre máquina virtual y disco duro, es decir, dejar la máquina virtual sin disco duros asociados. En mi caso solo tenía un disco duro, pero podría darse el caso de tener más de un disco asociado a la máquina virtual.
# VBoxManage modifyvm Win2003Server -hda none
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

Una vez desconectado el disco de la máquina virtual, podrás borrar la máquina sin problemas. Pero recuerda que aún tienes el disco duro registrado en el sistema de máquinas virtuales VirtualBox.
# VBoxManage unregistervm Win2003Server -delete
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

martes, 20 de enero de 2009

rdesktop a pantalla completa sin perder funcionalidades

No conseguía hacer una conexión a un escritorio remoto Windows desde mi Ubuntu y después poder volver al escritorio de mi Ubuntu sin necesidad de cerrar la sesión del Windows, así que comencé a darle vueltas a ver que solución le podía dar. Y creo que la solución es buena.

Ejecutando desde linea de comandos directamente, utilicé el comando:
rdesktop -u Administrador -g 1024x720 -D xxx.xxx.xxx.xxx:3389
Este comando os abrirá la conexión con el escritorio remoto en una resolución de 1024x720, el standar es 1024x768. Así que ese puñado de pixeles que nos faltan son los de los paneles de Gnome (superior e inferior).

Al quitarle el decorador de ventanas (-D) no nos aparecerá el borde del terminal y simplemente nos tapará todo el escritorio dejando libres los dos paneles, de esta forma podemos seguir accediendo a las aplicaciones que tengamos en nuestro Ubuntu.

Yo tengo una pantalla pequeña (1024x768), si utilizas una pantalla con más resolución solo tendrás que ajustar el número de pixeles de alto, para dejar visibles los paneles de Gnome.

Ya solo tendrás que crear un lanzador para tener mucho más accesible la comunicación con el Windows que estás configurando.

martes, 30 de diciembre de 2008

Error al arrancar máquinas virtuales


Dicen que una imagen vale más que mil palabras, así que por eso cuelgo esta imagen. Muestra un error que nos devuelve VirtualBox al intentar arrancar una máquina virtual.

Esto nos pasa cuando hemos actualizado el kernel del sistema. Así que tendremos que ejecutar sudo /etc/init.d/vboxdrv setup, al ejecutarlo verás que recompila un módulo de VirtualBox en el kernel.




* Stopping VirtualBox kernel module * done.
* Recompiling VirtualBox kernel module * done.
* Starting VirtualBox kernel module * done.
Una vez que se ha recompilado el módulo y se ha iniciado el servicio vboxdrv, vuelve a intentar arrancar la máquina virtual y verás que funciona sin problemas.

miércoles, 17 de diciembre de 2008

Borrar copias de seguridad antiguas con bash

Con este script en bash podrás borrar las copias de seguridad antiguas de tu disco duro.

Hay que configurar la ruta donde están el disco duro donde volvamos las copias de seguridad (DirectorioBackup=/BACKUP), una vez configurado esto ya podemos programar su ejecución periódica antes de que se lance la copia de seguridad nueva, para que cuando intente copiar los ficheros tenga espacio.

El script mira el espacio de la última copia de seguridad y irá borrando directorio desde el más antiguo al más moderno, hasta dejar el espacio suficiente para que entre una copia de seguridad con el mismo tamaño que la última copia.
#!/bin/bash
DirectorioBackup=/BACKUP
EspacioMaxQueOcupaUnaCopia=`du -s $DirectorioBackup/* | sort | tail -n1 | awk '{print $1}' `
EspacioDisponibleHDD=`df -P $DirectorioBackup | grep -v -i S.ficheros | awk '{print $4}'`
while [ $EspacioMaxQueOcupaUnaCopia -gt $EspacioDisponibleHDD ]; do
DirectiorABorrar=`ls -t $DirectorioBackup | tail -n1`
rm -fr "$DirectorioBackup/$DirectiorABorrar"
EspacioDisponibleHDD=`df -P $DirectorioBackup | grep -v -i S.ficheros | awk '{print $4}'`
done
Para el correcto funcionamiento del script, el directorio /BACKUP tendrá que almacenar un directorio por copia de seguridad, por ejemplo:
/BACKUP/20081217
/BACKUP/20081216
/BACKUP/20081215
Si el script se encuentra con esta casuística, borrará primero el directorio /BACKUP/20081215 y si aún así no le queda espacio suficiente, borrará /BACKUP/20081216.

jueves, 27 de noviembre de 2008

vdi is already registered

Es posible que algún día necesitemos restaurar una copia de una máquina virtual que teníamos instala. O simplemente pretendemos copiar una máquina virtual para tener dos y no tener que esperar el tiempo de instalación.

Para hacer esto tenemos que registrar el fichero.vdi en el servidor de VirtualBox. Para hacer esto haremos:
VBoxManage registerimage disk fichero.vdi -type normal
Si este fichero.vdi ya ha estado funcionando en este servidor de VirtualBox no mostrará el siguiente error.
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

[!] FAILED calling virtualBox->RegisterHardDisk(hardDisk) at line 6478!
[!] Primary RC = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value
[!] Full error info present: true , basic error info present: true
[!] Result Code = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value
[!] Text = A hard disk with UUID {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} or with the same properties ('fichero.vdi') is already registered
[!] Component = VirtualBox, Interface: IVirtualBox, {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}
[!] Callee = IVirtualBox, {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}
Para solucionar esto podemos clonar el fichero.vdi, de forma que le asignará un nuevo identificador y podremos registrar el fichero.vdi resultante.
VBoxManage clonevdi DiscoAClonar.vdi DiscoResultante.vdi
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Una vez terminado el proceso de clonación podremos registrar el nuevo fichero.vdi.
VBoxManage registerimage disk DiscoResultante.vdi -type normal

jueves, 14 de agosto de 2008

ipcop backups

IpCop es una distribución muy sencilla de utilizar. Es una rápida solución para proxy y cortafuegos, con una muy cómoda interface web desde la que se puede hacer casi todo lo que necesites.

El problema lo encontré cunado intenté meter las copias de seguridad automáticamente en mi sistema de copias. El sistema de copias de seguridad está basado en claves publicas ssh, pero no sabía cual era el directorio donde IpCop deja las copias de seguridad cuando le dices desde la interface web que se generen.

Finalmente lo encontré, y los ficheros .dat que genera IpCop para su propia restauración los almacena en /home/httpd/html/backup así que solo me quedaba añadir el directorio en el sistema de copias de seguridad.

miércoles, 9 de abril de 2008

Cortar un fichero en trozos

Después de mucho pelearme con los sitemas de ficheros y distintos sitemas operativos, he decidido montar en mis discos externos (USB) el sistema de ficheros FAT32. Hasta el momento lo tenía con ext2, que me tiene un límite de tamaño de fichero superior a FAT32.

Pero ahora con mi nuevo Mac Book Pro, no he conseguido montar ext2 con modo lectura y escritura. Se monta en modo solo lectura.

Después de buscar encontré la fantastica aplicación split, en los lenguajes de programación se usa para cortar. Pues en GNU/Linux es lo mismo. Usando el comando split podemos hacer que nuestros ficheros grandes pasen a ser varios ficheros pequeños y somos nosotros quien decidimos el tamaño.

De esta forma podemos meter "ficheros grandes" en un disco duro con sistema de ficheros FAT32 que solo admite ficheros menores de 4GB.
split -b100m MiFicheroGrande.tgz MisFicherosChicos.
Al ejecutar eso, creará una sucesión de ficheros de 100MB (-b100m) del estilo a:
MisFicherosChicos.aa
MisFicherosChicos.ab
MisFicherosChicos.ac
MisFicherosChicos.ad
MisFicherosChicos. ...
Para pegar esos trozos es aún más sencillo.
cat MisFicherosChicos.* > MiFicheroGrandore.tgz
Y volveremos a tener todos los trozos pegados en uno solo, eso sí recuerda ejecutar este último comando en un disco duro donde el sistema de ficheros soporte el tamaño de la suma total de todos los ficheros pequeños.