verificación google

jueves, 19 de julio de 2018

Ampliar disco máquina virtual

Este es un pequeño manual que describe el procedimiento a seguir para ampliar el tamaño de un disco duro virtual. En mi caso he utilizado una máquina virtual KVM con un disco virtual de tipo ".qcow2". Depende del tipo de máquina virtual que utilices podrás aprovechar algunas partes de este manual.

1. Modificar tamaño de la imagen

En primer lugar tenemos que modificar la definición del fichero ".qcow2" para que tenga un tamaño mayor. Cuando se crea se define un tamaño y este será el tamaño máximo que tomará. Depende del sistema de virtualización que utilices te permitirá hacerlo desde el entorno de administración o no.

Por ejemplo Proxmox (versión 3.1) permite modificar el tamaño de las imágenes ".qcow2" de una forma muy sencilla; desde un botón "Resize disk", donde nos pregunta cuanto queremos ampliar el tamaño de la imagen.

Pero si no utilizas Proxmox, puedes utilizar la herramienta "qemu-img" para modificar el tamaño máximo de tu ".qcow2". Para modificar el tamaño aumentando en 10GB utiliza:
qemu-img resize fichero.qcow2 +10G
Para consultar el tamaño que tiene actualmente definido el fichero puedes utilizar el siguiente comando:
qemu-img info fichero.qcow2

2. Modificar tabla de particiones

Bien ahora nuestra máquina virtual ya tiene más capacidad, pero el sistema operativo que la gestiona aún no se ha enterado. Tenemos que modificar la tabla de particiones de nuestro disco para hacer que aumente el tamaño de la partición y así poder comenzar a utilizar este nuevo espacio.

Este tipo de operaciones sobre la tabla de particiones del disco, hay que hacerlas con el sistema de ficheros desmontado. Si estamos trabajando sobre el sistema de ficheros principal, será necesario arrancar con un CD Live (digo cd live, pero puede ser usb live) para poder trabajar con el sistema desmontado.

Existen muchas herramientas para la manipulación de tablas particiones de los discos desde sistemas "live", yo he utilizado clonezilla. Es un poco tosca y posiblemente nada amigable, pero una vez que sabes utilizar las herramientas básicas desde linea de comando no tendrás problemas con ninguna otra y podrás utilizarlas en cualquier sistema.

El disco que yo quería aumentar su tamaño era el disco principal y tenía; por un lado la partición principal del sistema y a continuación de esta una partición extendida que contenía la partición para swap. Y tras todas las particiones tenía el nuevo espacio libre sin definir.

Para aumentar el tamaño de la partición principal tenía que eliminar la partición extendida y así poder aumentar el tamaño a la partición principal sin pisar el espacio que ocupa la partición para la swap.

Con herramientas como gparted se puede directamente redimensionar el tamaño de una partición, pero en mi caso utilicé fdisk y éste no tiene un procedimiento directo para la redimensión de una partición, así que hay que hacerlo manualmente. Para hacer la redimensión de la partición principal hay que eliminarla. Sí, parece arriesgado y da algo de miedo hacerlo sobre un sistema en explotación, pero según he buscado por internet es el único modo. Así que con fdisk:

  1. Borramos la partición principal.
  2. Creamos una nueva partición que comienza donde la que hemos borrado y termina donde queramos.
  3. Creamos la partición para swap.
  4. Establecemos la marca de arranque si fuera necesario para la nueva partición principal.
  5. Escribimos los cambios y salimos de fdisk.



http://vostorga.org/?p=42
https://wiki.debian.org/Swap








Limpiar paquetes nvidia en debian


Desinstalar todo rasto de paquetes nvidia.

El primer paso es localizar los paquetes con relación nvidia he utilizado:
aptitude search nvidia | grep ^i
En la instalación de Ubuntu por defecto no está instalado el paquete aptitude. Para instalar apt-get install aptitude.

Simplemente hacemos un aptitude remove de todos los paquetes que hemos obtenido en el listado anterior.

Ahora ha llegado el momento de instalar los nuevos drivers.

Descargamos el drivers para Linux 64bit desde nvidia.com; wget http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run

jmruiz@jmruiz-Aspire-V3-571G:~/Descargas$ wget http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run
--2012-11-17 11:46:06--  http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run
Resolviendo es.download.nvidia.com (es.download.nvidia.com)... 217.212.238.51, 217.212.238.64, 217.212.238.59
Conectando con es.download.nvidia.com (es.download.nvidia.com)[217.212.238.51]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 68022245 (65M) [application/octet-stream]
Grabando a: “NVIDIA-Linux-x86_64-310.19.run”
100%[=======================================================================================================>] 68.022.245  3,84M/s   en 20s  
2012-11-17 11:46:26 (3,24 MB/s) - “NVIDIA-Linux-x86_64-310.19.run” guardado [68022245/68022245]

sudo stop lightdm

chmod 775 NVIDIA-Linux-x86_64-310.19.run

(sudo) ./NVIDIA-Linux-x86_64-310.19.run





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, 3 de julio de 2018

Instalar tablefunc extension en PostgreSQL 9.6 para utilizar crosstab


El módulo "tablefunc" incluye varias funciones que devuelven tablas, es decir, obtendremos varias filas. En el siguiente enlace os dejo disponible la documentación para su correcto uso.

https://www.postgresql.org/docs/9.6/static/tablefunc.html

Tengo una entrada en este blog sobre como instalar PostgreSQL en un linux Debian partiendo del código fuente (tengo pendiente hacer una actualización de esta entrada) y en lugar de utilizar el repositorio de paquetes del sistema.

En esta entrada veremos como partiendo de esa instalación compilando el código fuente de PostgreSQL, incorporaremos la extensión tablefunc. Si buscas un poco encontrarás que para hacer uso de las funciones contenidas en tablefunc será necesario ejecutar como usuario administrador la sentencia "create extension tablefunc". Y posiblemente si has llegado hasta aquí, obtuviste como resultado algo parecido a "ERROR:  could not access file "$libdir/tablefunc": No existe el fichero o el directorio".
echo 'create extension tablefunc' | psql -U usuario base_de_datos
ERROR:  could not access file "$libdir/tablefunc": No existe el fichero o el directorio
Si es así está es tu solución. ¿Recuerdas cuando compilaste PostgreSql? Pues mira en aquel directorio donde encontrarás dentro de contrib al directorio contrib/tablefunc. Dirígete a ese directorio y ejecuta "make" y "make install".
root@myhost:~/descargas/postgresql-9.6.3/contrib/tablefunc# make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -I. -I. -I../../src/include -D_GNU_SOURCE   -c -o tablefunc.o tablefunc.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -fpic -L../../src/port -L../../src/common -Wl,--as-needed -Wl,-rpath,'/opt/postgresql-9.6.3/lib',--enable-new-dtags -lm  -shared -o tablefunc.so tablefunc.o
root@myhost:~/descargas/postgresql-9.6.3/contrib/tablefunc# make install
/bin/mkdir -p '/opt/postgresql-9.6.3/share/extension'
/bin/mkdir -p '/opt/postgresql-9.6.3/share/extension'
/bin/mkdir -p '/opt/postgresql-9.6.3/lib'
/usr/bin/install -c -m 644 ./tablefunc.control '/opt/postgresql-9.6.3/share/extension/'
/usr/bin/install -c -m 644 ./tablefunc--1.0.sql ./tablefunc--unpackaged--1.0.sql  '/opt/postgresql-9.6.3/share/extension/'
/usr/bin/install -c -m 755  tablefunc.so '/opt/postgresql-9.6.3/lib/'
Ahora sí al ejecutar "CREATE EXTENSION tablefunc;" se instalará sin problemas y ya tendrás disponibles las funciones incluidas en tablefunc.

Ejemplo de utilización de crosstab

Una de las funciones más utilizadas de tablefunc es crosstab. Aquí dejo un simple ejemplo de ventas donde pivotaremos los costes de cada uno de los meses a columnas, de forma que nos quedará un registro (fila) por ejercicio.

Crearemos unos datos de prueba para trabajar

CREATE TABLE sales(year int, month int, qty int);
INSERT INTO sales VALUES(2017, 1, 1000);
INSERT INTO sales VALUES(2017, 2, 1500);
INSERT INTO sales VALUES(2017, 7, 500);
INSERT INTO sales VALUES(2017, 11, 1500);
INSERT INTO sales VALUES(2017, 12, 2000);
INSERT INTO sales VALUES(2018, 1, 1000);
INSERT INTO sales VALUES(2019, 5, 2500);
INSERT INTO sales VALUES(2019, 9, 800);

SELECT * FROM sales;
 year | month | qty 
------+-------+------
 2017 |     1 | 1000
 2017 |     2 | 1500
 2017 |     7 |  500
 2017 |    11 | 1500
 2017 |    12 | 2000
 2018 |     1 | 1000
 2019 |     5 | 2500
 2019 |     9 |  800
(8 rows)

Uso de crosstab

SELECT * FROM crosstab(
  $$ SELECT year, month, qty FROM sales ORDER BY 1 $$,
  $$ SELECT m FROM generate_series(1,12) m $$
) AS (
  year int, "Jan" int, "Feb" int, "Mar" int, "Apr" int, "May" int, "Jun" int, "Jul" int, "Aug" int, "Sep" int, "Oct" int, "Nov" int, "Dec" int
);

 year | Jan  | Feb  | Mar | Apr | May  | Jun | Jul | Aug | Sep | Oct | Nov  | Dec 
------+------+------+-----+-----+------+-----+-----+-----+-----+-----+------+------
 2017 | 1000 | 1500 |     |     |      |     | 500 |     |     |     | 1500 | 2000
 2018 | 1000 |      |     |     |      |     |     |     |     |     |      |   
 2019 |          |      |     |     | 2500 |     |     |     | 800 |     |      |   
(3 rows)