Añadir las claves públicas de los repositorios oficiales de Ubuntu
# apt-key adv --recv-keys --keyserver keyserver.ubuntu.com pubkey
Donde -pubkey- es la clave que necesitamos importar. Este dato nos lo dice normalmente el comando apt-get update al final, cuando nos informa del error PUBKEY
Convertir imagen .jpg -> .png escalando la imagen original y extendiendola a un tamaño determinado.
$ convert -filter Lanczos -scale 346x300 -extent 346x300 -gravity center -density 90 imagen.jpg imagenout.png
Opciones:
Convertir imagen .jpg -> .jpg escalando, extendiendo y recomprimiendo para dejar el mismo formato.
En este caso no se puede hacer directamente en el mismo comando, sinó que hay que hacer un paso intermedio
convirtiendo el .jpg a bmp por ejemplo y después convertir el .bmp a .jpg
$ convert -filter Lanczos -scale 346x300 -extent 346x300 -gravity center -density 90 imagen.jpg imagen.bmp && sleep 1 && convert imagen.bmp -quality 90 imagencomprimida.jpg
Opciones:
Hay que añadir un retardo entre un comando y el otro, para dar tiempo a que haga la primera conversión a bmp, ya que tarda algo más
Convertir imagen .jpg -> .png y hacer transparente el color de fondo
$ convert imagen.jpg -fuzz 10% -transparent white salida.png
Opciones:
Tablas para las resoluciones de pantalla y colores para la consola TTY
 | Colores | 640x400 | 640x480 | 800x600 | 1024x768 | 1280x1024 | 1600x1200 |
|---|---|---|---|---|---|---|
| 4 bits | 0x302 | ----- | ----- | ----- | ----- | ----- |
| 8 bits | 0x300 | 0x301 | 0x303 | 0x305 | 0x307 | 0x31C |
| 15 bits | 0x310 | 0x313 | 0x316 | 0x319 | 0x31D | ----- |
| 16 bits | 0x311 | 0x314 | 0x317 | 0x31A | 0x31E | ----- |
| 24 bits | 0x312 | 0x315 | 0x318 | 0x31B | 0x31F | ----- |
| 32 bits | 0x792 | ----- | ----- | ----- | ----- | ----- |
Exportar base de datos desde phpMyAdmin
Para exportar una base de datos desde phpMyAdmin, la abrimos y a continuación seguimos estos pasos:
En Salida seleccionamos las siguientes opciones:
Guardar salida a un archivo.
En Opciones específicas al formato seleccionamos:
En Opciones de creación de objetos seleccionamos:
Abregar sentencia CREATE TABLE
En opciones de creación de datos seleccionamos:
Sintaxis a utilizar al insertar datos:
El resto de opciones que no se indican aquí se dejan por defecto. Para finalizar pulsamos en Continuar.
Enmascarar email usando CSS
Añadir esta regla al archivo css.
#em-info:after {
content: "info\40 costt.es";
Lo que hacemos es utilizar el elemento :after para que el contenido indicado por la propiedad content se escriba después del texto al que asignemos la clase em-info.
En este caso hemos sustituido la @ por el caracter especial \40 y en lugar del punto se usa su caracter especial \2E. Es importante dejar después un espacio, sino puede no funcionar correctamente la sustitucion y escribirse cualquier otro caracter.
Ahora en el código html o php de nuestra página se debe introducir lo siguiente
<p id=”em-info”> Email: </p>
Configurar servidor VPS para habilitar las conexiones ODBC con IBM iSeries por PHP
El servidor es un Debian 7 con Apache y PHP. Tal y como lo entregan no tiene instalados ni configurados los módulos ODBC.
1. Instalar el módulo php5-odbc. Versión instalada 5.4.4.
# apt-get install php5-odbc
2. Es necesario instalar los paquetes siguientes desde los repositorios Debian Testing. Necesitamos como mínimo la versión 2.3.1 de ambos paquetes. Con ello obtendremos las librerías libodbcinst.so.2 y libodbc.so.2. Son imprescincibles para que el unixODBC manager trabaja correctamente.
# apt-get install odbcinst1debian2 libodbc1 odbcinst
3. Descargar la versión más actual del unixODBC Manager desde la página oficial http://www.unixodbc.com
A fecha de este manual el archivo se llama unixODBC-2.3.2.tar.gz
4. Descomprimir y extraer el contenido. Compilamos e instalamos.
# cd /tmp
# wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz
# tar -xvzf unixODBC-2.3.2.tar.gz
# cd unixODBC-2.3.2
# ./configure
# make
# make install
5. Descargamos desde IBM el i Access for Linux en su última versión. Los ficheros más actuales son
iSeriesAccess-7.1.0-1.0.i386.rpm
iSeriesAccess-7.1.0-1.0.x86_64.rpm
Usando el comando alien como root, generamos el paquete .deb y después lo instalamos.
# alien iSeriesAccess-7.1.0-1.0.x86_64.rpm
# dpkg -i iSeriesAccess-7.1.0-2_amd64.deb
iSeriesAccess se instala por defecto en la ruta /opt/ibm/iSeriesAccess.
La instalación debería también registrar el driver ODBC específico de IBM para conectar con las bases de datos DB2, es conveniente comprobarlo y se debe hacer manualmente. Para ello.
7. Comprobamos las rutas a los archivos de configuración ODBC.
$ odbcinst -j
unixODBC 2.3.2
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /home/alberto/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
El comando nos dice que los archivos de configuración están en la carpeta /usr/local/etc
7. Registramos el driver ODBC del iSeriesAccess.
# odbcinst -i -d -f /opt/ibm/iSeriesAccess/unixodbcregistration64
Este comando nos añadirá al archivo /usr/local/etc/odbcinst.ini lo siguiente:
[iSeries Access ODBC Driver]
Description = iSeries Access for Linux ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
NOTE1= If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2= the following Driver64/Setup64 keywords will provide that support.
Driver64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading = 2
DontDLClose = 1
[iSeries Access ODBC Driver 64-bit]
Description = iSeries Access for Linux 64-bit ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading = 2
DontDLClose = 1
Nota importante. La configuración del archivo /usr/local/etc/odbcinst.ini se usa para los usuarios normales. Sin embargo es importante inroducir los mismos datos también en el archivo /etc/odbcinst.ini
8. Añadimos la ruta a las librerias del iSeriesAccess al path y recargamos el cache de librerias.
# echo “/opt/ibm/iSeriesAccess/lib64/” > /etc/ld.so.conf.d/iSeriesAccess.conf
# ldconfig
Con esto ya debería quedar el servidor configurado con el ODBC Manager (unixODBC) y el driver ODBC especifico de IBM para aceder a bases de datos DB2 en un servicor iSeries.
Referencias:
http://www-03.ibm.com/systems/power/software/i/access/linux/guide.html#intro
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzatv%2Frzatvrestodbc.htm
http://www14.software.ibm.com/webapp/download/nochargesearchquery.jsp?pgel=lnav
(buscar “iSeries Access”)
http://www.unixodbc.com/
http://www.cosmocode.de/en/blog/gohr/2010-09/14-accessing-a-db2-from-php
Enlace al nuevo IBM Data Server Driver for ODBC and CLI.
http://www-01.ibm.com/support/docview.wss?rs=4020&uid=swg21385217
Enlaces sobre configuración Intel HDA
Busquedas en Google de:
ValueError: wrong proc file format (unknown dig1 bit)
"hda-analyzer" "unknown dig1 bit"
http://software.techassistbox.com/intellow-volume-mixer-correctasound-pre-amp-not-added-to-mixerhda-analyzer-crash_180198.html
http://www.alsa-project.org/main/index.php/Help_To_Debug_Intel_HDA
http://helllabs.org/codecgraph/
Busqueda en Google de:
hda-verb envy 17
http://www.asyndetic.com/blog/
Inkscape falla cuando se intena importar o abrir un archivo PDF
El fallo ocurre solo con la versión 0.48.4. Con la versión 0.48.3 no se reproduce el problema. Ejecutando Inkscape desde un terminal, el error que se obtiene es el siguiente:
alberto@envy:~$ inkscape
*** Error in `inkscape': malloc(): memory corruption: 0x0000000009bc6590 ***
Emergency save activated!
El problema no está extrictamente en Inkscape, sino en las librerias Poppler. La solucción es actualizar las librerias Poppler.
Múltiples versiones de PHP en el panel Plesk
Logearse en el servidor VPS como root.
Descargar la versión de PHP que necesitemos desde la página web https://php.net/downloads.php y descomprimir el ficher. En este ejemplo usaremos la versión 5.5.10.
tar -xvzf php-5.5.10.tar.gz
Instalar las dependencias.
apt install libxml2 libxml2-dev
Configurar PHP, compilar e instalar.
cd php-5.5.10
./configure --prefix /usr/local/php-5.5.10
make
make install
Establecer el archivo php.ini
cp php.ini-development /usr/local/lib/php.ini
Editar el php.ini para adaptar las opciones que se necesiten. En caso de que se quiera configurar otra localización del archivo php.ini, ejecutar ./configure con la opción --with-config-file-path=/ruta en el paso 4.
Registrar la nueva versión de PHP en el panel Plesk.
/usr/local/bin/php_handler --add -displayname NN -path RUTA AL PHP CGI -phpini RUTA EL PHP.INI -type PHP HANDLER -id NN-CUSTOM
Donde:
Ejemplo:
/usr/local/psa/bin/php_handler --add -displayname 5.5.10 -path /usr/local/php-5.5.10/bin/php-cgi -phpini /usr/local/lib/php.ini -type fastcgi -id 5.5.10
NOTA IMPORTANTE: Aunque habría que hacer más comprobaciones para estar seguro, parece que si habilitamos como PHP handler al módulo de Apache en lugar del FastCGI, no se producen tantos desbordamientos de momeria. Esta configuración es para la versión de PHP existente por defecto en el servidor VPS, es decir la 5.4.4.
Crear paquetes .deb a partir de código fuente
Además de las dependencias específicas de cada programa, lo que necesitamos para poder crear los paquetes .deb es lo siguiente:
# apt-get install dh-make devscript fakeroot build-essential
Para este ejemplo vamos a compilar Gimp a partir de los fuentes y crear el paquete .deb.
$ mkdir gimp-deb
$ cd gimp-deb
$ tar -xvjf gimp-2.8.14.tar.bz2
$ cd gimp-2.8.14
$ dh_make -e email@localhost
En lugar de email@localhost se puede poner cuaquier otro correo.
El comando anterior nos pregunta que tipo de paquete deseamos crear y nos da varias opciones. En este caso tenemos que escoger la opción single s
$ ./configure
Si todo ha ido bien, la configuración terminará sin errores. Si se muestra alguno debido a dependencias incumplidas, ver cuales son, instalarlas y volver a repetir el proceso hasta que termine sin errores.
$ dpkg-buildpackage -rfakeroot
El proceso es posible que nos haga algunas preguntas, respondemos lo que nos interese y después de un tiempo, si no hay errores, creará en la carpeta superior el archivo .deb, junto con los fuentes.
Cliente de correo para consola Mutt.
$ echo “Este es el texto del mensaje” | mutt -s “Asunto del correo” destinatario@correo.com
- Para enviar uno o varios archivos adjuntos.
$ echo “Texto del mensaje” | mutt -s “Asunto” destinatario@correo.com -a fichero.txt imagen.jpg
- Para enviar con copia CC.
$ echo “Texto del mensaje” | mutt -s “Asunto” destinatario@correo.com -c otromail@mail.com
- Escribir el cuerpo del email con el comando echo es útil cuando el texto es de una línea, pero sino se hace complicado y demasiado largo para una sola línea de comandos. En este caso lo mejor es no usar echo. Mutt nos abrirá el editor de textos que tengamos predefinido en consola y podremos componer el mensaje con más comodidad, guardamos el texto y se abrirá el interfaz de mutt. Pulsamos “y” para enviar.
$ mutt -s “Asunto” destinatario@correo.com -c otromail@mail.com
Copias de seguridad y restauración en PostgreSQL
En primer lugar hay que cambiar al usuario postgres u otro con los permisos adecuados para la base de datos que deseamos manejar. En este caso el usuario alberto tiene permisos totales sobre la base de datos costtes01.
Para hacer un backup de una base de datos:
$ su postgres
postgres@debian:/$ pg_dump [conexión] [opciones] basededatos > ficherobackup
Cuando hacemos el backup con el usuario postgres, debemos hacer la copia en el directorio temporal /tmp, después como usuario postgres le cambiamos el propietario, y finalmente con nuestro propio usuario la movemos a nuestra carpeta de copias de seguridad.
Ejemplo donde el usuario actual ya tiene privilegios en la base de datos:
$ pg_dump -v -F custom -d costtes02 -f costtes02-20150717-1.backup
Las opciones de conexión pueden ser estas:
-h, --host=hostname Indica el nombre de la máquina donde corre el servidor Postgresql.
-p, --port=port Indica el puerto, por defecto es 5432.
-U, --username=username Indica el usuario con el que se conectará. Como ya hemos abierto sesión en consola con el usuario postgres, no es necesario volver a introducirlo.
-W, --password Fuerza a pg_dump a solicitar la contraseña de usuario.
-w, --no-password No solicita contraseña de usuario. Se suele poner cuando la contraseña ya se envía por otros medios. Como en este caso donde ya se ha iniciado sesión con el usuario postgres.
Donde tenemos las siguientes opciones:
-v, --verbose Habilita la salida detallada en pantalla.
-a, --data-only Hace un backup solo de los datos y no del esquema.
-c, --clean Incluye en el backup instrucciones para eliminar los elementos antes de restaurarlos. De esta forma se evitan los errores de que los elementos ya existen cuando se restauran.
-C, --create Incluye las instrucciones para crear la base de datos. Esto es útil si pretendemos restaurar un crear la base de datos al mismo tiempo.
-f <archivo>, --file=<archivo> Escribe la salida en el archivo especificado, si no se indica nada se envia el volcado a la salida estándar.
-F <formato>, --format=<formato> Especifica el formato de salida. Los tipos de formato pueden ser:
p, plain Texto plano.
c, custom Formato personalizable. En este tipo de formato siempre se hace compresión.
t, tar Crea una salida en formato tar.
-n <nombre_esquema>, --schema=<nombre_esquema> Realiza la copia unicamente de los esquemas indicados junto con todos los objetos que contengan. Si no se indica nada se hace el dump de todos los esquemas que no sean del sistema. Para incluir múltiples esquemas se pueden tantas opciones -n como sean necesarias.
-N <nombre_esquema>, --exclude-schema=<nombre_esquema> Omite los esquemas indicados a la hora de realizar el backup. Si se desea excluir múltiples esquemas, se pueden añadir tantas opciones -N como sean necesarias.
-s, --schema-only Hace el backup solo del esquema, no incluye los datos.
-t <nombre_tabla>, --table=<nombre_tabla> Hace un backup solo de la tabla indicada. Si se desean incluir múltiples tablas, se pueden añadir tantas opciones -t como sean necesarias. Hay que tener en cuenta que pg_dump no tiene en cuentas las dependencias, por tanto se ha de prestar atención en incluir todas las tablas necesarias y que tengan realación con llaves primarias o foráneas y así garantizar que la posterior restauración se hace exitosamente.
-T <nombre_tabla>, --exclude-table=<nombre_tabla> Exluye del backup las tablas indicadas. Se pueden añadir tantas opciones -T como sean necesarias.
--inserts Utilizará inserts en lugar de copy en las instrucciones SQL.
--port=<puerto> Especifica el puerto. Por defecto es 5432.
Para restaurar una base de datos usando pg_restore
Atención. pb_restore solo debe usarse con los backups creados con pg_dump usando la opción de formato personalizable -F c
pg_restore [opciones] [archivo]
Opciones generales:
-d, --dbname=NOMBRE nombre de la base de datos a la que conectarse
-f, --file=ARCHIVO nombre del archivo de salida
-F, --format=c|d|t formato del volcado (debería ser automático)
-l, --list imprime una tabla resumida de contenidos del archivador
-v, --verbose modo verboso
--help muestra esta ayuda y termina
--version muestra información de la versión y termina
Opciones que controlan la recuperación:
-a, --data-only reestablece sólo los datos, no el esquema
-c, --clean tira (drop) la base de datos antes de recrearla
-C, --create crea la base de datos de destino
-e, --exit-on-error abandonar al encontrar un error por omisión, se continúa la restauración
-I, --index=NOMBRE reestablece el índice nombrado
-j, --jobs=NUM máximo de procesos paralelos para restaurar
-L, --use-list=ARCHIVO usa la tabla de contenido especificada para ordenar la salida de este archivo
-n, --schema=NAME reestablece sólo los objetos en este esquema
-O, --no-owner no reestablece los dueños de los objetos
-P, --function=NOMBRE(args) reestablece la función nombrada
-s, --schema-only reestablece el esquema únicamente, no los datos
-S, --superuser=NOMBRE especifica el nombre del superusuario que se usa para deshabilitar los disparadores (triggers)
-t, --table=NOMBRE reestablece la tabla nombrada
-T, --trigger=NOMBRE reestablece el disparador (trigger) nombrado
-x, --no-privileges no reestablece los privilegios (grant/revoke)
-1, --single-transaction reestablece en una única transacción
--disable-triggers deshabilita los disparadores (triggers) durante el restablecimiento sólo de datos
--no-data-for-failed-tables no reestablece datos de tablas que no pudieron ser creadas
--no-security-labels no restaura etiquetas de seguridad
--no-tablespaces no vuelca asignaciones de tablespace
--use-set-session-authorization usa órdenes SET SESSION AUTHORIZATION en lugar de ALTER OWNER para reestablecer dueños
Opciones de la conexión:
-h, --host=ANFITRIÓN anfitrión de la base de datos o directorio del enchufe (socket)
-p, --port=PUERTO número del puerto de la base de datos
-U, --username=USUARIO nombre de usuario con el cual conectarse
-w, --no-password nunca pedir una contraseña
-W, --password fuerza un prompt para la contraseña (debería ser automático)
--role=ROLENAME hace SET ROLE antes de restaurar
Si no se especifica un archivo de entrada, se usa la entrada estándar.
Soluciones para búsquedas en Postresql ignorando acentos.
Solución 1: Crear una función que intercambie las vocales acentuadas por su homólogas sin acento.
CREATE OR REPLACE FUNCTION sp_ascii(character varying)
RETURN text AS $BODY$
SELECT TRANSLATE
($1,
'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ',
'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC');
$BODY$
LANGUAGE 'sql';
Solución 2. Usar la extensión unaccent que viene dentro del paquete postgresql-contrib.
- Instalamos el paquete contrib.
# apt-get install postgresql-contrib
- Como root nos cambiamos al usuario postgres, nos situamos en la base de datos donde queremos instalar la extensión y la instalamos.
# su - postgres
postgres@envy:~$ psql basededatos
psql (9.1.13, servidor 9.1.14)
Digite «help» para obtener ayuda.
basededatos=# CREATE EXTENSION unaccent;
La extensión unaccent instalará en la base de datos indicada, un diccionario, una plantilla y cuatro funciones.
Un uso habitual de la funcion unaccent es el siguiente:
SELECT * FROM articulos
WHERE unaccent(descripcion) ILIKE unaccent('%sillon%')
Esta consulta buscará en la tabla “articulos” todos los registros, donde el campo “descripcion” contenga la palabra “sillon”, ignorando los acentos. Como además usamos ILIKE, la consulta ignorará también mayúsculas y minúsculas. Al utilizar los comodiles %, la consulta buscará la cadena “sillon” en cualquier parte del campo.
Configurar phpmyadmin en virtualmin.
Cuando se instala Virtualmin, por defecto configura los virtual servers para que ejecuten los scripts php usando fcgi. Esto se hace para aumentar la seguridad, ya que así los scripts se ejecutaran con el usuario de cada virtual server, no afectanto a los demás. Si se usara el módulo mod_php todos los scripts se ejecutarían desde el usuario de apache www-data lo cual siempre es más peligroso.
Sin embargo esto supone un problema cuando instalamos phpmyadmin, ya que por defecto presupone que php se ejecutará desde el módulo mod_php y no desde fcgi. Si intentamos lanzar phpmyadmin justo después de instalarlo, apache no ejecutará los ficheros php y se limitará a abrirlos como texto plano.
Para hacer que phpmyadmin corra usando el módulo mod_fcgi hay que editar el archivo de configuración /etc/phpmyadmin/apache.conf y añadir lo siguiente:
<Directory /usr/share/phpmyadmin>
...
Options +ExecCGI
...
<IfModule mod_fcgid.c>
AddHandler fcgid-script .php
FCGIWrapper /ruta_servidor/fcgi-bin/php5.fcgi .php
AllowOverride All
Order allow,deny
allow from all
</IfModule>
...
</Directory>
ruta_servidor en un entorno virtualmin suele ser siempre /home/nombre_servidor
Virtualmin añade el archivo php5.fcgi cuando creamos el servidor virtual.
El contenido del archivo php5.fcgi será algo parecido a esto:
#!/bin/bash
PHPRC=$PWD/../etc/php5
export PHPRC
umask 022
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=99999
export PHP_FCGI_MAX_REQUESTS
SCRIPT_FILENAME=$PATH_TRANSLATED
export SCRIPT_FILENAME
exec /usr/bin/php5-cgi
Hay que notar que en esto caso los archivos de configuración de php5 usados son los que hay dentro de cada servidor virtual “$PWD/../etc/php5” y no los que genéricos de /etc/php5.
También hay que tener en cuenta que Virtualmin modifica las ruta de los scripts ejecutables por el módulo mod_suexec, que normalmente es /var/www, pero que este caso se cambia por /home. El fichero de configuracion es /etc/apache2/suexec/www-data
Streamripper con retransmisión de la pista en red local
Esto sirve para grabar en un directorio la música que que capturamos desde una url determinada, y al mismo tiempo la retransmitimos por un puerto para que cualquiera en la red local pueda reproducirla.
streamripper url-o-direccion-ip -r 9000 -d /directoriobase -D “%q - %A - %T”
Donde:
url-o-direccion-ip Es la url o dirección ip de la emisora (P. ej: listen.cinemix.fr)
-r 9000 Es el número de puerto de retransmisión.
-d /directoriobase Es el directorio donde se grabarán las pistas (P. ej: /mnt/datos1/Musica/Cinemix)
-D “%q - %A - %T”Es el patrón utilizado para el nombre de la pista.
%q = número secuencial.
%A = artísta.
%T = título de la pista.
Reset del error 6C10 en la impresora Canon Pixma iP3600
Con este procedimiento lo que hacemos es resetear el contador del absorvedor de tinta de limpieza.
Referencia: http://www.fixkb.com/2011/06/reset-canon-printer-ink-absorber.html
Vídeo que explica las razones del error 6C10 y como solucionarlo: http://www.youtube.com/watch?v=-0tb07N1dIo
VMware 11 en sistemas Debian Testing (stretch)
Es posible que VMware Workstation 11 no arranque correctamente con la nueva versión testing de Debian. Eso es porque hay algun que otro problema con las versiones de algunas librerías. Para que arranque hay que ejecutar el siguiente comando:
$ /usr/lib/vmware/bin/launcher.sh /usr/lib/vmware/lib /usr/lib/vmware/bin/vmware /usr/lib/vmware/libconf
La acceleración 3D no funciona correctamente en guest con sistemas Windows 7 de 64 bits (no he probado en otros). Para que funcione es necesario editar el archivo .vmx de la máquina virtual y añadir al final la siguiente línea:
[...]
mks.gl.allowBlacklistedDrivers = “TRUE”
ACTUALIZACIÓN: Con la versión de VMware 12 no es necesario lanzar las librerías específicas de VMware.
VMware 11 no carga correctamente los módulos del kernel al iniciar el servicios
El problema ocurre cuando intentamos arrancar una máquina virtual y nos indica que no se encuentran cargados los módulos vmmon, vmnet y vmci. Sin embargo estos módulos se compilan correctamente y se pueden encontrar en /lib/modules/$(uname -r)/misc.
Cuando compilamos los módulos, el proceso se realiza correctamente pero optenemos el siguiente resultado al intentar cargarlos al final de la compilación:
# vmware-modconfig --console --install-all
[...]
Starting VMware services:
Virtual machine monitor done
Virtual machine communication interface failed
VM communication interface socket family failed
Blocking file system done
Virtual ethernet done
VMware Authentication Daemon done
Unable to start services
Indica que falla la carga del Virtual machine communication interface (vmci) y el VM communication interface socket family (vsock).
Si intentamos iniciar manualmente el servicio vmware vemos que devuelve un error.
# systemctl start vmware
Job for vmware.service failed. See 'systemctl status vmware.service' and 'journalctl -xn' for details.
La salida del systemctl status vmware es:
# systemctl status vmware
● vmware.service - LSB: VMware VMX service for virtual machines
Loaded: loaded (/etc/init.d/vmware)
Active: failed (Result: exit-code) since vie 2015-06-26 19:51:03 CEST; 1min 10s ago
Docs: file:///etc/insserv/overrides/vmware
Process: 6510 ExecStart=/etc/init.d/vmware start (code=exited, status=1/FAILURE)
jun 26 19:51:03 debian vmware[6510]: Starting VMware services:
jun 26 19:51:03 debian vmware[6510]: [33B blob data]
jun 26 19:51:03 debian vmware[6510]: [50B blob data]
jun 26 19:51:03 debian vmware[6510]: [51B blob data]
jun 26 19:51:03 debian vmware[6510]: [30B blob data]
jun 26 19:51:03 debian vmware[6510]: [26B blob data]
jun 26 19:51:03 debian vmware[6510]: [38B blob data]
jun 26 19:51:03 debian systemd[1]: vmware.service: control process exited, code=exited status=1
jun 26 19:51:03 debian systemd[1]: Failed to start LSB: VMware VMX service for virtual machines.
jun 26 19:51:03 debian systemd[1]: Unit vmware.service entered failed state.
Y si ejecutamos journalctl -xn obtenemos lo siguiente:
# journalctl -xn
-- Logs begin at vie 2015-06-26 19:39:57 CEST, end at vie 2015-06-26 19:51:03 CEST. --
jun 26 19:51:03 debian kernel: vmw_vsock_vmci_transport: Unknown symbol vmci_event_unsubscribe (err -22)
jun 26 19:51:03 debian kernel: vmw_vsock_vmci_transport: disagrees about version of symbol vmci_get_context_id
jun 26 19:51:03 debian kernel: vmw_vsock_vmci_transport: Unknown symbol vmci_get_context_id (err -22)
jun 26 19:51:03 debian vmware[6510]: [51B blob data]
jun 26 19:51:03 debian vmware[6510]: [30B blob data]
jun 26 19:51:03 debian vmware[6510]: [26B blob data]
jun 26 19:51:03 debian vmware[6510]: [38B blob data]
jun 26 19:51:03 debian systemd[1]: vmware.service: control process exited, code=exited status=1
jun 26 19:51:03 debian systemd[1]: Failed to start LSB: VMware VMX service for virtual machines.
-- Subject: Unit vmware.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit vmware.service has failed.
--
-- The result is failed.
jun 26 19:51:03 debian systemd[1]: Unit vmware.service entered failed state.
SOLUCCIÓN:
El error lo localizamos en el script que lanza el servicio vmware, /etc/init.d/vmware. Incomprensiblemente las funciones que se encargan de cargar y descargar los módulos del kernel, llaman a estos por un nombre que no es el correcto. Por lo tanto editamos el script y hacemos los siguientes cambios:
# nano /etc/init.d/vmware
- Buscamos la función vmwareStartVmci() y cambiamos la línea que pone:
vmwareLoadModule “$mod” por vmwareLoadModule “$vmci”
- Buscamos la función vmwareStopVmci() y cambiamos la línea que pone:
vmwareUnloadModule “${mod}” por vmwareUnloadModule “${vmci}”
- Buscamos la función vmwareStartVsock() y cambiamos la línea que pone:
vmwareLoadModule “$mod” por vmwareLoadModule “vsock”
- Buscamos la función vmwareStopVsock y cambiamos la línea que pone:
vmwareUnloadModule “$mod” por vmwareUnloadModule “$vsock”
Guardamos el fichero y ya podemos iniciar el servicio y cargará los módulos correctamente.
# systemctl start vmware
Para comprobar que los módulos están cargados.
# lsmod | grep -e vmmon -e vmnet -e vmci -e vsock
vmnet 50198 13
vmci 80223 0
vsock 30772 0
vmmon 81251 0
Parche para Vmware Workstation 11 y kernel 3.19 y superiores.
Vmware Workstation 11.1.0 y Player (Pro) 7.1.0, soportan solo hasta la versión de kernel 3.18. Cuando se intenta compilar el módulo vmnet sobre un kernel 3.19 o superior, la compilación falla.
Primero descargamos el parche.
$ curl http://pastie.org/pastes/9934018 -o /tmp/vmnet-3.19.patch
Cambiamos a la carpeta de los fuentes de Vmware y extraemos los fuentes del módulo vmnet.
$ cd /usr/lib/vmware/modules/source
# tar -xf vmnet.tar
Aplicamos el parche.
# patch -p0 -i /tmp/vmnet-3.19.patch
Volvemos a crear el archivo tar.
# tar -cf vmnet.tar vmnet-only
Borramos la carpeta vmnet-only
# rm -R *-only
Para finalizar compilamos los módulos
# vmware-modconfig --console --install-all
Referencias:
https://wiki.archlinux.org/index.php/VMware
VMWare 11/12 no arranca en sistemas con kernel 4.2
El problema sucede después de actualizar a la versión de kernel 4.2. Ni VMware Workstation ni VMPlayer son capaces de cargarse. Descartados los problemas habituales de compilación de los módulos para la versión del kernel. Hay que tener en cuenta que para la versión 12 no son necesarios parches.
Si miramos en el log de vmware, situado en /tmp/vmware-[usuario]/vmware-apploader-xxxxxx.log, vemos al final del archivo algo similar a lo siguiente:
[...]
2015-10-20T18:44:52.821+02:00| appLoader| W115: Unable to load libvmwareui.so from /usr/lib/vmware/lib/libvmwareui.so/libvmwareui.so: /usr/lib/vmware/lib/libvmwareui.so/libvmwareui.so: undefined symbol: _ZN4Glib10spawn_syncERKSsRKNS_11ArrayHandleISsNS_17Container_Helpers10TypeTraitsISsEEEENS_10SpawnFlagsERKN4sigc4slotIvNSA_3nilESC_SC_SC_SC_SC_SC_EEPSsSG_Pi
2015-10-20T18:44:52.821+02:00| appLoader| W115: Unable to load dependencies for /usr/lib/vmware/lib/libvmware.so/libvmware.so
2015-10-20T18:44:52.821+02:00| appLoader| W115: Unable to execute /usr/lib/vmware/bin/vmware.
Lo que nos indica que el problema está en la carga del módulo “libvmwareui.so”.
En la web de Techezone nos indican donde está el problema y como soluccionarlo.
http://www.techezone.com/question/ws-12-on-linux-undefined-symbol-in-libvmwareui-so/
Basicamente sucede que al instalar el kernel 4.2, se actualizan varios módulos, concretamente el módulo “libglibmm-2.4.so.1.3.0” que es incompatible con las versiones 11/12 de VMware. La solucción es borrar el enlace simbólico que apunta a este módulo y crear un nuevo enlace que apunte al módulo que está en el directorio de instalación de VMware. Los pasos son estos:
# rm /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1
# ln -s /usr/lib/vmware/lib/libglibmm-2.4.so.1/libglibmm-2.4.so.1 /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1
CUIDADO: Estamos sobreescribiendo un enlace simbólico a un módulo de una versión diferente. Se ha de estar muy seguro de que ninguna otra aplicación pueda necesitar la versión del sistema. Si se usa GNOME es probable que surgan problemas, mientras que si se utiliza KDE es menos problable que haya problemas. Aun así habrá que tener cuidado con las palicaciones GTK que corramos sobre KDE.
En caso de incompatiblidad con otros programas, se puede optar por crear un script que lance VMware y cambie el enlace y que lo vuelva a restaurar después de terminar la aplicación.
Optimizar NFS para un mayor rendimiento
- Opciones para el fichero /etc/exports:
Formato: directorio_compartido nombre_maquina(opciones)
Ejemplo:
/exports 192.168.0.0/24(rw,no_subtree_check,no_root_squash,crossmnt,fsid=0,sync)
directorio_compartido El directorio que se exportará por NFS.
nombre_maquina Máquinas de clientes autorizados, puede ser un nombre de máquina, una dirección IP o un rango de direcciones IP. 192.168.0.0/24 o 19.168.0.0:255.255.255.0 autorizan toda la red.
opciones Las diferentes opciones disponibles para el servidor NFS. Por ejemplo:
--------------------
rw/ro Exporta el directorio en modo lectura-escritura o solo lectura.
root_squash Mapea los requerimientos del UID/GID 0 (user root) al usuario anónimo (defecto)
no_root_squash No mapea root al usuario anónimo.
all_squash Mapea todos los usuarios al usuario anónimo.
subtree_check/no_subtree_check Si se exporta un subdirectorio, el servidor comprueba que el fichero solicitado esté en el arbol de directorios exportado (defecto no).
sync Modo síncrono. Requiere que todas las operaciones de escritura se completen antes de continuar (defecto).
async Modo asíncrono. No requiere que las escrituras se completen para continuar. Es más rápido pero puede provocar pérdida de datos ante una caida o apagado acidental del servidor.
secure Los requerimientos deben de provenir de un puerto por debajo de 1024.
insecure Los requerimientos pueden provenir de cualquier número de puerto.
fsid=0 Designa este path como la raíz de los directorios exportados por NFSv4.
crossmnt Permite que los directorios debajo de raíz se muestren adecuadamente. Alternativamente se puede poner la opción nohide en cada uno de esos directorios.
- Opciones de montaje para el cliente NFS:
Ejemplo de entrada en /etc/fstab
...
192.168.0.10:/ /mnt/dir_remoto nfs4 rw,user,noauto,dev,nosuid,rsize=1048576,wsize=1048576,hard,intr
...
Opciones:
rw Monta el directorio remoto en modo lectura-escritura.
user Permite que cualquier usuario, no solo root, pueda montar el directorio remoto.
auto/noauto El directorio remoto se monta o no se monta de forma automática al iniciar el sistema.
dev
nosuid
rsize/wsize Especifican el tamaño del datagrama utilizado por los clientes NFS cuando realizan peticiones de lectura (r) y escritura (w). El valor mínimo es 1024 y el máximo 1048576 (un megabyte). Se debe indicar en múltiplos de 1024. Si se indica un valor inferior a 1024, el servidor asigna automáticamente el valor de 4096. Si el valor indicado es mayor que el soportado por el servidor o cliente, entonces estas opciones se negocian a los valores máximos que soporten ambos.
hard El programa que acceda a un fichero en un sistema de ficheros montado por NFS, se colgará cuando el servidor falle. El proceso no puede interrumpirse ni matarse, a menos que uno también especifique la opción intr. Cuando el servidor NFS esté de nuevo disponible, el programa continuará por donde estuviera como si nada hubiera ocurrido. Esta es la opción más recomendable.
soft Esta opción permite al kernel esperar un rato y rendirse después, si el servidor NFS no responde durante un tiempo determinado. El tiempo se puede especificar con la opción timeo=x. Esta opción podría ser de utilidad si el servidor NFS no respondierá a veces, o si fuera rearrancado mientras algún proceso estuviera intentando obtener un fichero de el. Esta opción normalmente dará muchos problemas.
intr/nointr Selecciona si se permiten señales para interrumpir las operaciones de archivos en este punto de montaje. Si no se especifica ninguna opción (o si se especifica nointr), las señales no interrumpen las operaciones de archivos NFS. Si se especifica intr, llamadas al sistema devuelven EINTR si una operación NFS en curso es interrumpida por una señal. Estas opciones están obsoletas desde el kernel 2.6.25 (solo para NFSv4).
Ejemplo de montaje desde la línea de comandos:
# mount -t nfs4 192.168.0.10:/ /mnt/remoto -o rsize=1048576,wsize=1048576,hard,intr
Para más información ver las entradas del manual nfs(5), exports(5)
EDIT: He leido que puede mejorar el rendimiento de NFS con ficheros grandes (de varios GB) y también evitar cuelgues del cliente, si se usa la versión 3 de NFS en lugar de la 4. Para ello sería necesario indicar en el montaje -t nfs y en las opciones añadir nfsvers=3
No lo he probado todavía.
Se pueden modificar el número de threads que el servidor NFS puede procesar, lo que aumentará ligeramente el rendimiento. Para ello editamos /etc/default/nfs-kernel-server y cambiamos el valor de RPCNFSDCOUNT de 8 a 32.
# Number of servers to start up
RPCNFSDCOUNT=32
[...]
Enlaces interesantes:
https://wiki.archlinux.org/index.php/NFS/Troubleshooting#Performance_issues
http://www.slashroot.in/how-do-linux-nfs-performance-tuning-and-optimization
http://www.cyberciti.biz/faq/nfs4-server-debian-ubuntu-linux/
http://nfs.sourceforge.net/nfs-howto/
Solución al problema de las fotos en Google Earth 7.x.x
El problema está en esta versión de Google Earth y la compatibilidad de las librerías QT que trae el propio programa. La solución al problema la encontré en la web lamiradadelreplicante.com donde el autor 'tannhausser' publica la solución que el a su vez encontró en el foro de OpenSuse, del usuario Amirpli.
La solución original de Amirpli está orientada a OpenSuse y tannhausser la adapto para aplicarla a Gecko. Yo lo que he hecho es adaptar esta solución a Debian Stretch. Tan solo hay que cambiar algunas rutas y los nombres de algunas librerías necesarias.
Descargamos la última versión estable desde la web de Google Earth. En mi caso es la versión de 64 bits.
Si tenemos una versión previa instalada, antes tenemos que desinstalarla, si quedara rastro de la carpeta de instalación también la borramos junto con su contenido y como usuario borramos todos los archivos de configuración para evitar posibles problemas.
# apt-get purge google-earth-stable
# rm -R /opt/google/earth
$ rm -R $HOME/.googleearth $HOME/.config/Google
Instalamos Google Earth.
# dpkg -i google-earth-stable_current_amd64.deb
Como mi entorno de escritorio es KDE, la mayoría de las librerías QT ya están instaladas, en caso contrarío habría que instalarlas también. En mi caso solo tuve que instalar o comprobar que estuvieran instaladas las siguientes. También necesitamos el compilador gcc.
# apt-get install libfreeimage3 libqtwebkit4 libqt4-dev gcc
Nos situamos en la carpeta de instalación de Google Earth, creamos una nueva carpeta y movemos a ella las librerías QT originales que se instalan con el programa.
# cd /opt/google/earth/free
# mkdir originales-qtlib
# mv libQt* originales-qtlib
Sin salirnos de la carpeta de instalación de Google Earth, creamos un archivo c++ llamado baifaao.cpp y escribimos dentro el siguiente código.
# nano baifaao.cpp
/* amirpli 2013/11/28 */
#include <QtCore/QAtomicInt>
extern "C" {
int _Z34QBasicAtomicInt_fetchAndAddOrderedPVii(QAtomicInt *a, int b) {
return a->fetchAndAddOrdered(b);
}
}
A continuación compilamos el código.
# gcc -I/usr/include/qt4 -O3 -fPIC --shared baifaao.cpp -o baifaao.so
Si todo va bien obtendremos el archivo faifaao.so en la carpeta de instalación de Google Earth.
A continuación debemos modificar el script de inicio llamado googleearth que hay enl a carpeta de instalación del programa.
# nano googleearth
Nos desplazamos hacia el final del script y añadimos debajo de la línea “cd $script_path;” la siguiente línea:
“export LD_PRELOAD=/usr/lib/libfreeimage.so.3:/opt/google/earth/free/baifaao.so”
[...]
script_path=$(FindPath $0);
cd $script_path;
export LD_PRELOAD=/usr/lib/libfreeimage.so.3:/opt/google/earth/free/baifaao.so
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./googleearth-bin "$@"
Con esto ya podemos lanzar el programa y debería funcionar todo correctamente, mostrando sin problemas las fotos de Panoramio entre otras. Gracias a Amirpli por la solución y a tannhausser por plublicarla perfectamente explicada en su web.
Referencias:
http://lamiradadelreplicante.com/2014/07/11/solucion-al-problema-de-las-fotos-de-panoramio-en-google-earth/#comment-45338
http://forums.opensuse.org/showthread.php/485283-Google-Earth-7/page6
Operaciones con archivos de audio y vídeo
$ mencoder -oac copy -ovc copy -o videofinal.mp4 video1.mp4 video2.mp4 ...
$ mencoder -oac mp3lame -ovc x264 videoentrada.avi -o videosalida.mp4
$ ffmpeg -i audio-entrada.ac3 -acodec libmp3lame -ar 48000 -ab 256k -ac 2 audio-salida.mp3
$ ffmpeg -i audio-entrada.dts -acodec ac3 -ac 6 -ab 448k audio-salida.ac3
Donde:
-ac Indica los canales de audio. En este caso son 6 canales, es decir 5.1.
-ab Indica el bitrate del archivo de salida. En este caso serán 448 Kb/s.
$ ffmpeg -i “concat:audio-1.mp3|audio-2.mp3|...|audio-n.mp3” -acodec copy audio-salida.mp3
$ ffmpeg -i video-entrada -vcodec copy -acodec copy -ss 1 -t 3600 video-salida
Donde:
-ss 1 Indica el inicio de la extración en segundos. En este caso desde el segundo 1.
-t 3600 Indica el número de segundos que serán extraidos. En este caso 3600 segundos = 1 hora.
$ ffmpeg -f alsa -i plughw:0,0 -acodec mp3 -f X11grab -s 1920x1080 -r 25 -i :0.0 -s hd1080 -qscale 0 video.mp4
Donde:
1920x1080 Indica el tamaño de la pantalla que se va a grabar, puede ser toda o un area.
hd1080 Indica la resolución del vídeo de salida.
qscale 0 Indica que se mantenga el factor de escala.
plughw:0,0 Indica la tarjeta de audio usada para entrada de audio.
Tutorial de ffmpeg
La estructura básica del comando es la siguiente.
ffmpeg [global_options] {[input_file_options] -i input_file} ... {[output_file_options] output_file} ...
Algunas opciones genéricas.
-h Muestra la ayuda
-version Muestra la versión del programa
-encoders Muestra todos los codificadores disponibles
-decodecs Muestra todos los decodificadores disponibles
-formats Muestra los formatos disponibles
Opciones principales.
-f format (input/output) Fuerza un formato determinado para el fichero de entrada o salida. Normalmente se detecta el formato de los ficheros de entrada y en el caso de los ficheros de salida se adivina por su extensión.
-i filename Indica el fichero de entrada
-ss position Cuando se utiliza como opción de entrada (antes de -i), busca en input_file la position y lee los datos a partir de ahí. Duando se usa como opción de salida (antes de output_file), decodifica igual todo el fichero, pero descarta los datos hasta la position indicada.
-t duration Cuando se utiliza como opción de entrada (antes de -i), limita la duración de los datos leidos desde input_file hasta el valor indicado por duration. Cuando se utiliza como opción de salida (antes de output_file), detiene la escritura en output_file después de alcanzar duration.
-s Establece la resolución en píxeles del archivo de salida output_file (anchoXalto). Aunque esto funciona perfectamente, no es una solucción muy flexible, por lo que es mejor usar el filtro scale
Opciones de vídeo.
-c:v, -vcodec codec Indica el codificador de vídeo
-b:v, -vb rate Establece el bitrate de vídeo
-filter:v, -vf filtergraph Crea el gráfico de filtro/s especificado por filtergraph y lo usa para filtrar el vídeo
-vn Desactiva el vídeo
Opciones de audio.
-c:a, -acodec codec Indica el codificador de audio
-b:a, -ab rate Establece el bitrate de audio
-ac num Establece los canales de audio (2= estereo, 6=envolvente)
-filter:a, -af filtergraph Crea el gráfico de filtro/s especificado por filtergraph y lo usa para filtrar el audio
-an Desactiva el audio
Algunos filtros.
yadif Deinterlace el video. Algunos de los parámetros que acepta son:
mode Indica el modo de interlace a adoptar.
parity La paridad de campo asumida por el vídeo interlazado.
0, tff
1, bff
-1, auto (valor por defecto)
deint Especifica que marcos se desentrelazarán.
0, all (valor por defecto)
1, interlaced
filename, f Establece el nombre del fichero de imagen bitmap que se usará. Para crear esta imagen lo adecuado es hacer una captura de pantalla del vídeo u después editarlo con un programa como Gimp. Se hace una selección de la zona donde va el logo y se rellenadicha selección de color blanco, el resto de la imagen se rellena de negro. Se guarda el fichero en cualquiera de los formatos de imagen soportados por libavformat (jpg, png, bmp, etc).
iw, in_wEstablece el ancho de entrada
ih, in_hEstablece la altura de entrada
xLa posición horizontal, en el vídeo de entrada, del eje izquierdo del vídeo de salida
yLa posición vertical, en el vídeo de entrada, del eje superior del vídeo de salida
Ejemplos:
- Recorta un area con un tamaño de 100x100 en la posición 12,34
crop=100:100:12:34
crop=w=100:h=100:x=12:y=34
- Recorta el area central de la entrada con un tamaño de 100x100
crop=100:100
- Recorta 10 píxeles desde los bordes derecho e izquierdo, y 100 píxeles desde los bordes superior e inferior
crop=iw-2*10:ih-2*100
Donde: iw-2*10 significa que al ancho actual de la entrada (iw) se le resta 10 a cada lado (2*10) y al alto actual (ih) se le restan 100 arriba y 100 abajo (2*100)
scale Cambia el tamaño del vídeo de entrada, usando la librería libswscale. Esta es una mejor alternativa a la opción -s. Algunas opciones son:
w, width Establece la expresión que indica el ancho del vídeo de salida
h, height Establece la expresión que indica el alto del vídeo de salida
Ejemplos:
- Indica un tamaño del vídeo de salida de 1280x720
scale=1280:720
scale=w=1280:h=720
- Indica un ancho de 1920 y deja que ffmpeg decida el alto manteniendo la proporción de la entrada
scale=1920:trunc(ow/a/2)*2
Donde: ow es el ancho del vídeo de salida (1920), a es la proporción (iw/ih), trunc coge unicamente la parte entera de la operación entre paréntesis
Ejemplos de utilización de ffmpeg
ffmpeg -f image2 -framerate 12 -i foto-%02d.jpg -s 720x576 video_fotos.mp4
Sintaxis:
-f image2 Fuerza el formato de los fichero de entrada como imagen
-i foto-%02d.jpg Indica que la entrada la forman un grupo de imágenes cuyo nombre empieza por “foto-” seguido por un número de secuencia compuesto por dos dígitos que pueden tener un cero a la izquierda.
-framerate Establece el número de cuadros por segundo. Por defecto es 25
ffmpeg -i input_video.ts -vf "yadif, removelogo=f=logo.png, crop=in_w-2*1:in_h-2*138, scale=1920:trunc(ow/a/2)*2" -c:v libx264 -b:v 3000000 -c:a libfaac -ac 2 -b:a 128000 propo1.mp4
time ffmpeg -i video-entrada.ts -vf “yadif, scale=720:trunc(ow/a/2)*2” -c:v libx264 -b:v 1125000 -c:a libfdk_aac -b:a 128k video-salida.mp4
time ffmpeg -i video-entrada.ts -vf “yadif, scale=1024x576” -c:v libx264 -b:v 1120k -c:a libfdk_aac -b:a 128k video-salida.mp4
Pulseaudio sube bruscamente el volumen al máximo
El problema se produce cuando abrimos una aplicación que usa el sistema de sonido, si esa aplicación está configurada para tener el volumen al máximo, Pulseaudio sube el volumen maestro al máximo para todas las demás aplicaciones.
Por defecto el comportamiento de Pulseaudio es igualar todos los niveles de sonido, por lo tanto para evitar esta molesta situación, hay que editar el archivo “/etc/pulse/daemon.conf” y configurar el parámetro “flat-volumes = no”.
# nano /etc/pulse/daemon.conf
[...]
flat-volumes = no
[...]
Modificar “system.dat” de Android 5.x
Descargar las herramientas necesarias en una carpeta incluida en el path, por ejemplo $HOME/bin.
Les damos permisos de ejecución.
$ chmod +x make_extfs rimg2sdat sdat2img
Extaemos la rom desde el archivo zip.
$ unzip rom-original.zip -d nombredir
Donde:
rom-original.zip es la rom que queremos extraer.
nombredir es el directorio donde se extraerán los ficheros, si no existe se crea.
Nos cambiamos a la carpeta “nombredir” y extraemos la imagen de system desde el archivo system.new.dat
$ sdat2img.py system.transfer.list system.new.dat system.img
Creamos una carpeta de trabajo y montamos la imagen de system.img.
$ mkdir systemdev
# mount -t ext4 -o loop system.img systemdev/
Con esto tendremos dentro de systemdev todo el contenido de system, para poder editar y modificar todo lo necesario.
Para crear la nueva imagen “system.img”.
A partir de la versión 7.X.X (Nougat), el archivo file_contexts pasa a ser un archivo binario compilado (file_contexts.bin). Para poder crear la nueva imagen usando la herramienta make_ext4fs, necesitamos convertirlo primero a texto. Para ello usamos la herramienta sefcontext de la siguiente manera:
$ sefcontext -o file_context file_context.bin
Una vez obtenido el fichero “file_context” ya podemos crear la imagen.
# /home/alberto/bin/make_ext4fs -T 0 -S file_contexts -l 1073741824 -a system system_new.img systemdev/
Con ello obtendremos un nuevo archivo llamado system_new.img.
Nota. Como las herramientas las hemos guardado en la carpeta bin de nuestro $HOME, al ejecutar make_ext4fs como root debemos indicar la ruta completa. Otra opción sería copiar las herramientas a /usr/local/bin.
Creamos el nuevo .dat a partir del .img anterior.
$ rimg2sdat system_new.img
Nota. El comando anterior nos crea unos nuevos “system.new.dat” y “system.transfer.list”, reemplazando los archivos originales, por lo que no es mala idea previamente hacer un backup de los mismos por si algo saliera mal.
Para finalizar solo queda añadir al archivo .zip de la rom original, los nuevos archios creados: file_contexts, system.new.dat, system.patch.dat y system.transfer.list.
$ zip -r ../rom-original.zip file_contexts system.new.dat system.patch.dat system.transfer.list
Abrir aplicaciones GTK2 y GTK3 con un tema diferente al predeterminado
En ocasiones puede ser necesario abrir una determinada aplicacion GTK con un tema distinto al que tenemos asigando por defecto. Por ejemplo, la versión 0.91 de Inkscape no se lleva bien con el tema Oxygen-gtk.
Para ello debemos editar la orden que lanza el programa y añadir la variable para que cargue el tema que nosotros queramos. Por ejemplo:
env GTK2_RC_FILES=/usr/share/themes/gnome-breeze-master/gtk-2.0/gtkrc /usr/bin/inkscape %F
Arrancará Inkscape usando el tema gnome-breeze-master. Como Inkscape usa las librerías gtk 2, le indicamos que cargue el gtkrc para esta librería. En el caso de que la aplicación use las liberías gtk 3, hay que indicar el directorío gtk-3.0 en lugar de gtk-2.0.
Copia de seguridad completa del servidor VPS usando como almacenamiento MEGA
Con este procedimiento haremos una copia completa de todo el sistema y los datos de un servidor VPS. Una vez obtengamos el fichero comprimido con el backup, lo pasaremos al almacenamiento en la nube de Mega.
Instalar programas necesarios.
El primer paso es instalar en nuestro servidor VPS todo lo necesario para poder hacer la copia. Vamos a crear un fichero tar comprimido con gzip, una vez creado lo vamos a cifrar usando openssl enc y finalmente lo vamos a transferir a nuestro almacenamiento Mega. Tar y gzip ya estarán instalados y es de suponer que openssl y enc también, nos falta por instalar en nuestro servidor el programa que nos permitira conectar con el servidor Mega.
El programa necesario es megacmd. Podemos descargar los fuentes y compilarlo desde la web del autor.
# cd /tmp
# wget https://github.com/t3rm1n4l/megacmd/archive/master.zip
Descomprimimos el archivo megacmd-master.zip, lo compilamos y lo copiamos en /usr/local/bin.
# unzip megacmd-master.zip
# cd megacmd-master
# make
# cp megacmd /usr/local/bin
NOTA: En Debian 7 existe un problema con la versión de golang-go necesaria para poder compilar, ya que requiere una versión superior. Se puede soluccionar esto instalando golang-go desde los repositorios de Testing o también se puede compilar en otro PC y después copiar directamente el binario al VPS, ya que solo se requiere el binario para funcionar. Eso si, ha de estar compilado en la misma arquitectura.
Ahora tenemos que crear el archivo .megacmd.json en el home del usuario. Como estamos en el VPS lo vamos a crear para el usuario root.
# nano /root/.megacmd.json
Escribimos el siguiente contenido:
{
"User" : "USUARIO_MEGA",
"Password" : "PASSWORD_DE_USUARIO_MEGA",
"DownloadWorkers" : 4,
"UploadWorkers" : 4,
"SkipSameSize" : true,
"Verbose" : 1
}
A continuación probamos si funciona, para ello ejecutamos lo siguiente:
# megacmd list mega:/
Deberíamos obtener la lista de los archivos y directorios que hay en la raiz de nuestro sitio Mega.
Si no la tenemos ya creada, podemos crear una carpeta para almacenar nuestras copias. Por ejemplo:
# megacmd mkdir mega:/backup_vps
Con esto ya deberíamos tener todo lo necesario, lo siguiente es crear las copias, cifrarlas y pasarlas a Mega.
Hacer copia de seguridad.
Vamos a hacer una copia de seguridad de todo el sistema, incluyendo las carpetas de usuario, email, páginas web, etc. En la copia no vamos a incluir las carpetas /dev, /proc y /sys, ni tampoco los sockets que abren los servidores de Apache y Postfix. Esta copia de seguridad completa nos permitirá en caso de desastre restaurar el servidor al estado anterior, es decir haremos un snapshot del servidor.
Una buena práctica siempre que se pueda, es detener los servicios y servidores que modifican ficheros, para evitar que estos cambien durante el proceso de copia. Lo ideal sería detenerlos a un horario que no afecte al funcionamiento del servidor, es decir de madrugada, por lo que es casi obligado crear unas reglas de cron para hacerlo automáticamente.
Los servicios que deberían detenerse podrían ser estos: apache2, bind9, postgresql, mysql, rsyslog, webmin, usermin, postfix, dovecot, proftpd. Al terminar hay que acordarse de volver a iniciarlos.
Creamos un archivo de texto /tmp/lista-sockets con la lista de los sockets abiertos por Apache y Postfix.
# find /var /run -type s -print > /tmp/lista-sockets
Si no la tenemos ya creada, vamos a crear una carpeta para poder trabajar llamada backup y nos cambiamos a ella.
# mkdir /backup
# cd /backup
A continuación ya podemos crear el archivo .tar.gz con la copia completa, excluyendo lo comentado antes.
tar -czpvf backuptotal-fecha-hora.tar.gz --exclude=/backup/* --exclude=/dev/* --exclude=/proc/* --exclude=/sys/* -X /tmp/lista-sockets / 2>error.log
Donde:
-czpvf Crea un tar, comprimido con gzip, preservando permisos, en modo verbose, en el fichero indicado.
--exclude=/directorio/* Excluye de la copia unicamente el contenido de los directorios indicados, pero incluye el propio directorio (hay que poner al final el /*). En el caso de la carpeta /backup es necesario hacerlo para excluir de la copia el propio archivo .tar.gz del backup, de lo contrario se metería en un bucle muy poco recomendable.
-X nombrefichero Excluye de la copia los ficheros y directorios indicados dentro de nombrefichero.
2>error.log Dirigimos los mensajes de error generados hacia el fichero error.log.
Cifrar el archivo de copia de seguridad.
Después de crear el archivo .tar.gz de la copia de seguridad, vamos a cifrarlo para evitar que nadie puede ver su contenido. Esta fase podría evitarse si el archvio lo descargamos a nuestro PC local, pero cuando se almacena en la nube, es importante tomar todas las medidas posibles para intentar proteger su contenido.
Para cifrar el archivo vamos a usar openssl enc y cifraremos usando aes256, por lo que si aun no está instalado en el servidor hemos de instlarlo. Aquí damos por supuesto que ya lo tenemos instalado y configurado.
El cifrado con openssl consiste en utilizar una contraseña o frase para cifrar con aes256. La contraseña puede ser todo lo larga que se quiera, es recomendable no utilizar palabras que vengan en el diccionario, ya que podrían ser fácilmente descubiertas por fuerza bruta. Lo mejor es usar combinaciones de letras mayúsculas y minúsculas, números y todo tipo de caracteres especiales. La contraseña se puede pasar también desde un fichero.
Para cifrar introduciendo la contraseña manualmente:
# openssl enc -e -aes256 -in backuptotal-fecha-hora.tar-gz -out backuptotal-fecha-hora.bc
Nos pedirá la contraseña, que debemos introducir dos veces.
Para cifrar pasando la contraseña desde el archivo oculto .keyfile:
# openssl enc -kfile /root/.keyfile -e -aes256 -in backuptotal-fecha-hora.tar.gz -out backuptotal-fecha-hora.bc
Importante: La opción -kfile toma la contraseña de la primera línea del fichero .keyfile.
Nota: La extensión del archivo cifrado puede ser cualquiera. Por ejemplo: bc = backup cifrado
Una vez obtenido el archivo de copia de seguridad con cifrado aes256, podemos borrar el archivo tar.gz y también el archivo error.log, ya que únicamente queremos pasar a Mega el archivo cifrado.
# rm *.tar.gz *.log
Sincronizar la carpeta /backup del VPS con la carpeta backup_vps de Mega.
Como último paso tan solo nos quedaría guardar el archivo de copia de seguridad cifrado en el almacenamiento de Mega. Para ello ejecutamos lo siguiente:
# megacmd sync /backup mega:/backup_vps
En la consola veremos el progreso de transferencia.
Opcionalmente, una vez terminada la transferencia y hayamos comprobado que el archivo se copio correctamente, para ahorrar espacio en nuestro servidor VPS podemos borrar este archivo.
Restaurar copia de seguridad completa de sistema y datos en un servidor VPS
En el caso de desastre total de nuestro servidor VPS, siempre podremos devolverlo al estado que tenía restaurando la copia de seguridad, que previamente hemos guardado en nuestro almacenamiento en la nube de Mega. En el caso de que el servidor se haya corrompido por completo, lo mejor sería reinstalar el sistema operativo y devolverlo al estado incial que tiene cuando lo contratamos, es decir solo el sistema operativo, servidor SSH y muy poco más. Como tenemos un shapshot podemos recuperarlo fácilmente y por completo, sin tener que instalar y configurar todos los programas de nuevo y por supuesto restaurando todas las páginas web, buzones de email, etc, etc.
Actualizar Debian / Instalar openssl.
Como decíamos el servidor VPS recien instalado el S.O. viene totalmente límpio, con apenas el servidor SSH para poder acceder remotamente. En un servidor Debian básico ya debería venir instalado por defecto openssl, en caso contrario lo instalamos.
Como después vamos a restaurar por completo el sistema, no tiene mucho sentido hacer un upgrade ahora, ya que todo se cambiará con las versiones de la copia de seguridad. Por tanto simplemente verificamos que disponemos de openssl y sino está instalado lo instalamos.
# apt-get install openssl
Instalar megacmd.
Para poder conectar con nuestro almacenamiento en la nube, Mega, tenemos que descargar e instalar el programa megacmd.
Podemos descargar los fuentes y compilarlo desde la web del autor.
# cd /tmp
# wget https://github.com/t3rm1n4l/megacmd/archive/master.zip
Descomprimimos el archivo megacmd-master.zip, lo compilamos y lo copiamos en /usr/local/bin. Si es necesario, instalar los programas y dependencias necesarios para descomprimir (unzip) y compilar.
# unzip megacmd-master.zip
# cd megacmd-master
# make
# cp megacmd /usr/local/bin
NOTA: En Debian 7 existe un problema con la versión de golang-go necesaria para poder compilar, ya que requiere una versión superior. Se puede soluccionar esto instalando golang-go desde los repositorios de Testing o también se puede compilar en otro PC y después copiar directamente el binario al VPS, ya que solo se requiere el binario para funcionar. Eso si, ha de estar compilado en la misma arquitectura.
Ahora tenemos que crear el archivo .megacmd.json en el home del usuario. Como estamos en el VPS lo vamos a crear para el usuario root.
# nano /root/.megacmd.json
Y escribimos el siguiente contenido:
{
"User" : "USUARIO_MEGA",
"Password" : "PASSWORD_DE_USUARIO_MEGA",
"DownloadWorkers" : 4,
"UploadWorkers" : 4,
"SkipSameSize" : true,
"Verbose" : 1
}
A continuación probamos si funciona, para ello ejecutamos lo siguiente:
# megacmd list mega:/
Deberíamos obtener la lista de los archivos y directorios que hay en la raiz de nuestro sitio Mega.
Con esto ya deberíamos tener todo lo necesario, lo siguiente es crear las copias, cifrarlas y pasarlas a Mega.
Descargar el archivo de copia de seguridad cifrado desde Mega.
Vamos a descargar el archivo de copia de seguridad en la carpeta /backup de nuestro VPS, por tanto primero debemos crearla. Después nos cambiamos a su interior.
# mkdir /backup
# cd /backup
Descargamos el archivo de copia de seguridad.
# megacmd get mega:/backup_vps/backuptotal-fecha-dia.bc /backup/
Atención: Es importante poner la última en el nombre de la carpeta backup.
Desciframos el archivo de copia de seguridad.
Para descifrar el archivo usamos openssl pasando la misma contraseña que usamos para cifrarlo. Al igual que cuando lo ciframos, tenemos dos formas de hacerlo, pasando la contraseña manualmente o a través de un fichero.
Para descifrar el archivo pasando la contraseña manualmente:
# openssl enc -d -aes256 -in backuptotal-fecha-dia.bc -out backuptotal-fecha-dia.tar.gz
Para descifrar el archivo pasando la contraseña desde un fichero, primero creamos el fichero con la contraseña y lo guardamos oculto en el directorio root. Por ejemplo /root/.keyfile. Después ejecutamos:
# openssl enc -kfile /root/.keyfile -d -aes256 -in backuptotal-fecha-hora.bc -out backuptotal-fecha-dia.tar.gz
Importante: La opción -kfile toma la contraseña de la primera línea del fichero .keyfile.
Restaurar el sistema.
Al restaurar el sistema con la copia de seguridad sobreescribimos absolutamente todo el sistema, incluidas las carpetas de usuario de /home, bases de datos, páginas web, correo electrónico, etc. Como vamos a restaurar sobre un sistema límpio es de suponer que no hay ningún servidor instalado aun (apache, postfix, mysql, etc), por tanto no es necesario detener nada.
Para restaurar ejecutamos:
# tar -xzpvf backuptotal-fecha-hora.tar.gz -C / 2>error.log
Revisamos error.log para ver si ha habido algún error importante, aunque es de esperar que todo haya salido bien.
Reiniciar sistema.
Para finalizar con la restauración, reinciamos el sistema y una vez vuelva a estar operativo conectamos de nuevo por SSH y revisamos que todo esté correctamente restaurado y que todos los servidores y servicios funcionan bien, incluidos los buzones del correo electrónico.
Si todo está bien y para ahorrar espacio podemos borrar el contenido de la carpeta /backup.
Transferencia de archivos y directorios hacia/desde servidor remoto usando SCP
El comando scp usando desde consola nos permite enviar y descargar archivos y carpetas de forma segura entre un servidor remoto y nuestro PC local. El comando scp utiliza ssh para las transferencias, por lo que las comunicaciones son seguras. Estos son algunos ejemplos:
Para subir un archivo de local a remoto.
$ scp -p archivo.txt usuario@dominio.com:/tmp/
-p Preserva la fecha y hora de creación/modificación del archivo.
usuario@dominio.com Usuario con permisos de escritura y dominio del servidor remoto.
tmp Nombre del directorio donde se copiará el archivo.
El comando nos pedirá la contraseña del usuario remoto.
Para subir una carpeta completa desde local a remoto.
$ scp -pr /tmp/nombrecarpeta usuario@dominio.com:/tmp/
Para descargar un archivo desde remoto a una carpeta local.
$ scp usuario@dominio.com:/tmp/archivo.txt /tmp/
Podemos incluso copiar un archivo desde un servidor remoto hacia otro servidor remoto.
$ scp -p usuario1@domino1.com:/tmp/archivo.txt usuario2@dominio2.com:/tmp/carpeta/
En este caso nos pedirá la contraseña de cada uno de los usuarios remotos por separado.
Es posible limitar el ancho de banda para no sobrecargar el servidor o nuestra propia conexión local.
$ scp -p -l limitedescarga usuario@dominio.com:/tmp/archivo.txt /tmp/carpetalocal/
-l Es el límite de ancho de banda expresado en kbps.
Otra opción muy interesante es habilitar la compresión de datos.
$ scp -pC archivo.txt usuario@dominio.com:/tmp/
-C Pasa el flash -C a ssh para habilitar la compresión.
Para ver más opciones del comando scp ver las páginas del manual.
Configurar router Huawei HG556a para conexión a Movistar
Esta configuración se basa en un router con la versión de firmware V100R001C10B083, aunque es de suponer que pueda ser igual en otros.
Aunque el router soporta los idiomas inglés y español, es importante hacer todas las configuraciones desde la interface en inglés, ya que en español tiene algunas deficiencias en los menús.
Conectar el router a la red y acceder desde el navegador a la dirección http://192,168,0,1 accediendo con el usuario administrador, que por defecto debería ser este.
Usuario: admin
Contraseña: VF-EShg556
Configuramos los datos de conexión a la red de Movistar.
Advanced Setup → Seleccionamos ADSL Uplink y pulsamos Next. En la lista de configuraciones WAN borramos todas
las que haya.
Después pulsamos sobre Add y añadimos una nueva configuración con estos datos:
- VPI: 8
- VCI: 32
- Service Category: UBR Without PCR
- PPP over Ethernet (PPPoE)
- Encapsulation Mode: LLC/SNAP-BRIDGING
- PPP Username: adslppp@telefonicanetpa
- PPP Password: adslppp
- PPPoE Service Name: Movistar (es opcional, sirve para identificar el servicio)
- PPP's MTU: 1492
- PPP's LCP Echo-req Interval: 30
- PPP keepalive attempts number: 3
- Authentication Method: AUTO
- Connect method: auto
- Bridge PPPoE Frames Between WAN and Local Ports: Marcar
- Enable WAN Service: Marcar
- Service Name: Data
En la última pantalla nos muestra un resumen de la configuración. Pulsamos en Save.
Configuramos los DNS. Este router no los coge automáticamente desde el proveedor, por lo que hay que
introducirlos
manualmente.
Advanced Setup - DNS - DNS Server → Desmarcamos “Use the Data pvc's DNS” y “DNS Proxy Enable”.
- Primary DNS server: 80,58,61,250
- Secondary DNS server: 80,58,61,254
Hacemos un backup de la configuración y editamos el fichero manualmente ya que también hemos de modificar los
DNS en este
archivo.
Management - Settings - Backup → Backup Settings
- Guardamos el archivo backupsettings.conf y lo abrimos con un editor de texto.
- Buscamos la línea que comienza por: <entry1 address=”192,168,0,1”
- Sustituimos los valores asignados a “lanDNS1” y “lanDNS2” por los respectivos valores de DNS primario y
secundario
configurados en el apartado anterior.
- Salimos guardando los cambios en el archivo.
Downgrade de Debian testing (Stretch) a Debian stable (Jessie)
Hacer un downgrade en Debian es relativamente sencillo de hacer, pero se han de tener en cuenta otros factores que pueden hacer que algunas aplicaciones o programas no funcionen correctamente, por ejemplo Vmware, o las tarjetas de red Realtek. Lo que requerirá que después compilemos de nuevo los módulos desde sus respectivos fuentes.
¡NO ESTÁ SOPORTADO POR DEBIAN!. Aunque técnicamente es posible, este proceso no está soportado por Debian, ya que hacer un downgrade puede llevar a un sistema inestable y lleno de problemas.
¡IMPORTANTE!. Si aun sopesando los riesgos nos empeñamos en hacer el downgrade, antes de hacer nada es imprescindible realizar una copia de seguridad de la partición raiz / de nuestro Debian. Hemos de que tener en cuenta que vamos a cambiar todo el sistema operativo, incluidos todos los servicios, librerías y módulos, incluso el kernel y las cabederas del kernel. Para hacer un backup la mejor opción es usar Clonezilla desde un live CD o desde una memoria USB.
El primer paso para hacer el downgrade es editar el archivo /etc/apt/sources.list y borrar toda línea que haga referencia a la rama testing y sustituirla por la rama stable.
Cambiamos...
deb http://ftp.fr.debian.org/debian/ stretch main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ stretch main non-free contrib
deb http://security.debian.org/ stretch/updates main contrib non-free
deb-src http://security.debian.org/ stretch/updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ stretch-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ stretch-updates main contrib non-free
[...]
deb ftp://ftp.deb-multimedia.org stretch main non-free
[...]
Por esto:
deb http://ftp.fr.debian.org/debian/ jessie main non-free contrib
deb-src http://ftp.fr.debian.org/debian/ jessie main non-free contrib
deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free
deb http://ftp.fr.debian.org/debian/ jessie-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ jessie-updates main contrib non-free
[...]
deb ftp://ftp.deb-multimedia.org jessie main non-free
[...]
A continuación usaremos pinning para obtener la etiqueta correcta de la versión predeterminada de Debian. Para ello editamos o creamos si no existe, el fichero /etc/apt/preferences, y creamos una entrada para stable o modificamos la que exista, dejándola así:
Package: *
Pin: release a=stable
Pin-Priority: 1001
Para saber más podemos ver las páginas del manual: man apt-preferences o visitar esta página.
El siguiente paso es ejecutar un apt update, upgrade y dist-upgrade para hacer el downgrade todo el sistema.
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
Contestaremos afirmativamente a la pregunta de apt sobre si queremos hacer downgrading de todos los paquetes.
Es posible que algún paquete falle durante el downgrade, por lo que tomaremos nota de ellos para purgarlos manualmente y después volver a instalar la versión deseada. Echando un vistazo a /var/log/apt/history.log y /var/log/dpkg.log, podemos ver que paquetes se han instalado, actualizado o eliminado y los problemas que han podido surgir en el proceso.
Si hubiera algun tipo de problema con dependencias, podemos ejecutar el siguiente comando para intentar corregirlo.
# apt-get -f install
Si fuese necesario, volveríamos a ejecutar los apt-get upgrade y dist-upgrade hasta que el proceso no devuelva ningún tipo de error.
Kde Power Management ignora los tiempos de oscurecer y apagar pantalla
Este fallo sucede desde hace unas cuantas versiones para atras de la 4.14.2 y si no lo arregan supongo que se seguirá arrastrando este bug en versiones siguientes.
Power Management o Administrador de energía de Kde no respeta los tiempos fijados para los parámetros de “Oscureder pantalla” y “Apagar pantalla”. O al menos no tal y como se puede entender, sino que hace unos cálculos propios en función de los valores que nosotros pongamos ahí. Por ejemplo:
Configuración 1.
Oscurecer pantalla: 6 min.
Apagar pantalla: 8 min.
Brillo de pantalla: 50%
Lo que sucede es lo siguiente: Ocurece 25% a los 3 min. Oscurece 6% a los 4,5 mm. Apaga pantalla a los 6
min.
El valor de 8 min para apagar pantalla lo ignora por completo.
Configuración 2.
Oscurecer pantalla: 3 min.
Apagar pantalla: 8 min.
Brillo de pantalla: 50%.
Lo que sucede es: Oscurece 25% a los 1,5 min. Oscurece 6% a los 2,25 min. Apaga pantalla a los 3 min.
El valor asignado a Apagar pantalla de 8 min lo ignora.
Configuración 3.
Oscurecer pantalla: 6 min.
Apagar pantalla: 4 min.
Brillo de pantalla: 50%.
Lo que sucede es que a los 4 minutos se apaga la pantalla completamente, sin oscurecer primero.
Conclusión final:
Si el valor de “Apagar pantalla” es menor que “Oscurecer pantalla”, se apaga en el tiempo fijado en “Apagar pantalla”.
Si el valor de “Apagar pantalla” es mayor o igual que “Oscurecer pantalla”, la pantalla oscurece y después se
apaga:
- Primera fase: Al llegar a la mitad del tiempo fijado en “Oscurecer pantalla”, baja el brillo 1/2 del
inicial.
- Segunda fase: Al llegar a 3/4 del tiempo fijado en Oscurecer pantalla, baja el brillo 1/8 del inicial.
- Tercera fase: Al llegar al tiempo fijado en Oscurecer pantalla, la pantalla se apaga.
Por lo que he podido probar, lo anterior es válido tanto para el modo de energia AC como con batería.
Sin embargo hay veces, no tengo ni idea del porqué, todo esto se mantiene únicamente cuando el ordenador arranca desde un apagado total. Cuando le da la gana, si arranca después de hibernar o de una suspensión, los únicos tiempos que respeta son los fijados en el el perfil de “Batería baja”.
Mientras no arreglen este bug, esto es lo que hay.
Protección de wp-admin y wp-login de Wordpress
Lo que vamos a hacer es proteger con contraseña la carpeta wp-admin y el fichero wp-login.php. De forma que cuando se pretenda acceder a ellos, el servidor nos solicite un usuario y contraseña del sistema con permisos para acceder a esta carpeta y fichero.
En este ejemplo voy a usar Virtualmin para crear el usuario y proteger la carpeta, aunque la forma de hacerlo debería ser similar para otros paneles de control, Cpanel, Plesk, etc. Tambien se puede hacer manualmente desde SSH, pero eso sería otra historia.
Proteger carpeta wp-admin.
Dentro de Virtualmin, en el menú de la izquierda elegimos el dominio de Wordpress, más abajo desplegamos el menú de Servicios y pulsamos en Protected Directories.
Escogemos la opción de Sub-directory y escribimos wp-admin. (Nota. Si Wordpress no está alojado en la raiz del dominio, tendremos que indicar también la carpeta donde se encuentre).
En Authentication realm escribimos un nombre o descripción para esta carpeta protegida, (por ejemplo, “Carpeta privada”).
Debajo del listado de usuarios pulsamos sobre Agregar un usuario a este dominio.
Rellenamos los campos necesarios con el nombre de usuario, nombre real, contraseña, etc, dependiendo del uso que queramos darle a este nuevo usuario.
En Otros permisos de usuario, activamos la opción de DAV login enables y en la lista de directorios que aparece abajo seleccionamos wp-admin y lo movemos hacia la derecha.
Para terminar pulsamos sobre Salvar.
Para comprobar que hemos asignado correctamente permisos de acceso a este usuario a la carpeta wp-admin, volvemos al menú Servicios - Protected Directories y comprobamos que en la columna Users ahora aparece un usuario.
Con los pasos 1 y 2, hemos creado el fichero .htaccess de la carpeta wp-admin con el siguiente contenido:
AuthUserFile "/home/dominio/www/wp-admin/htusers"
AuthType Basic
AuthName "Carpeta privada"
require valid-user
<Files htusers>
deny from all
</Files>
Tambien se ha creado dentro de la carpeta wp-admin el fichero htusers con los datos de nombre de usuario y contraseña para el usuario que hemos creado. Si damos permiso a más usuarios, estos se añadirán a este fichero.
La ruta al fichero htusers puede ser diferente según el panel de control o configuración de Apache. Cambiarla según cada caso para poner la correcta.
Evitar errores de redirecciones en URL amigables y enlaces permanentes.
Cuando configuramos Wordpress para que trabaje con enlaces permanentes o URL amigables, es más que probable que tengamos errores de redirecciones al proteger la carpeta wp-admin.
Para evitar esto debemos editar el fichero .htaccess de la raiz del dominio Wordpress y añadir al principio del fichero la siguiente línea.
ErrorDocument 401 default
[...]
Proteger fichero wp-login.php
Este fichero es necesario también protegerlo con contraseña. Para ello editamos el fichero .htaccess de la raiz del Wordpress y a continuación de la línea ErrorDocument ... del paso anterior, añadimos lo siguiente.
ErrorDocument 401 default
<Files wp-login.php>
AuthUserFile “/home/dominio/www/wp-admin/htusers”
AuthType Basic
AuthName “Carpeta privada”
require valid-user
</Files>
[...]
No olvidar verificar la ruta en AuthUserFile y cambiarla por la correcta.
¿Qué inconvenientes tiene proteger wp-login.php?.
Como sabemos Wordpress es uno de los CMS más utilizados en el mundo, es fácil de instalar y de usar, es de código abierto y se publican regularmente actualizaciones que corrigen problemas de seguridad. Sin embargo el hecho de que sea tan popular y de código abierto hace que cualquiera pueda descubrir fácilmente los agujeros de seguridad y atacar por ahí.
Protegiendo las carpetas wp-admin y el fichero wp-login.php mediante contraseña, aumentamos la seguridad y evitaremos muchos ataques, pero ningún sistema es 100% seguro.
Ahora bien, si en nuestra web Wordpress queremos permitir el registro de usuarios, proteger wp-login.ph no es viable, ya que cada vez que un nuevo usuario quiera registrarse, se le solicitará la contraseña para acceder a este fichero protegido. Si optamos por mantener el fichero protegido, tendremos que implementar algún systema alternativo de registro y login, diferente al que usa Wordpress por defecto.
Permitir las solicitudes AJAX
Al proteger la carpeta wp-admin hemos evitado que se hagan peticiones a ese directorio, sin embargo debemos permitir que la api Ajax de Wordpress si pueda acceder, de lo contrario es posible que dejen de funcionar algunos plugins, temas o widgets que utilicen Ajax.
El api Ajax de Wordpress se ejecuta desde el archivo admin-ajax.php, para solucionar este problema debemos editar el fichero .htaccess de la raiz de Wordpress y permitir las solicitudes que vengan desde admin-ajax.php. Para ello añadimos al final lo siguiente.
[...]
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>
Permitir solicitudes de imágenes, CSS y JavaScript
Es posible que algunos plugins y temas necesiten acceder a contenido de la carpeta wp-admin, pero que al haber protegido no podrán acceder y en consecuencia no se podrán mostrar correctamente. Esto no siempre es necesario, pero en el caso de tener problemas con la visualización de imágenes, carga de ficheros CSS o JavaScript de la carpeta wp-admin, tendremos que crear un .htaccess para cada una de estas carpetas.
Creamos un fichero .htacces en las carpetas wp-admin/images, wp-admin/css y wp-admin/js con el siguiente contenido.
Order allow,deny
Allow from all
Satisfy any
Protección contra ataques a xmlrpc.php de Wordpress
Como ya explicaba en el anterior artículo “Protección de wp-admin y wp-login.php”, Wordpress, al ser uno de los CMS más utilizado en el mundo, es muy susceptible de recibir ataques que intentan aprovechar cualquier vulverabilidad o fallo, sea en el propio núcleo de Wordpres, como en plugins, plantillas, etc.
En esta entrada vamos a ver una manera sencilla de proteger el archivo xmlrpc.php, nuestro objetivo es protegernos contra ataques que intenten descubrir nuestra contraseñas por fuerza bruta y ataques por denegación de servicio DDoS. En otras palabras y para simplificar, evitar que nuestro servidor sea bombardeado por miles de peticiones entrantes y que por tanto pueda llegar a bloquearse.
Pero antes es mejor saber que es el protocolo xmlrpc y para que sirve. Evidentemente si está incluido en Wordpres, es porque se utiliza para algo.
¿Qué es el protocolo XML-RPC?
XML-RPC es un protocolo de llamada a procedimiento remoto que utiliza XML para codificar datos y HTTP como protocolo de transmisión de mensajes. Es un protocolo muy simple ya que solo define unos cuentos tipos de datos y comandos útiles, además de una descripción completa de corta extensión. Fuente: Wikipedia
¿Cómo se utiliza XML-RPC en Wordpress?
Este protocolo actúa como una interfaz que funciona como API entre aplicaciones externas y Wordpress. Es decir permite interactuar con Wordpress utilizando aplicaciones o servicios externos.
En otras palabras y al objeto de lo que nos interesa en este artículo, XML-RPC actua practicamente como una “puerta de entrada” a la instalación de Wordpress, y por tanto puede ser atacada desde el exterior con relativa facilidad. Si los ataques al fichero xmlrpc.php se producen de forma continuada, puede llegar a consumir gran parte de los recursos del servidor y provocar una caida del mismo al ejecutarse una y otra vez el proceso de autencificación de usuario de Wordpress.
En internet hay mucha más información de como se utiliza el protocolo XML-RPC en Wordpress. Por ejemplo se puede echar un vistazo a esta página. De la que he sacado el método de protección que indico a continuación.
Protección contra ataques al xmlrpc.php.
Este método es muy sencillo y consiste básicamente en impedir que se encuentre el archivo xmlrpc.php y desactivar las funcionalidades XML-RPC para que Wordpress no indique ningún error.
Renombrar el archivo xmlrpc.php que se encuentra en la raiz de Wordpress. En este artículo supondremos que la raiz del servidor es /var/www. Renombramos el archivo.
# mv /var/www/xmlrpc.php antiguo-xmlrpc.php.backup
A continuación editamos el archivo wp-config.php y añadimos al final, después de la última línea, lo siguiente.
[...]
add_filter('xmlrpc_enabled', '__return_false');
?>
Por último solo quedaría modificar el archivo functions.php de la plantilla que estemos utilizando. La ruta completa al archivo podría ser algo así como /var/www/wp-content/themes/mytheme/functions.php
Editamos y añadimos al final las siguientes líneas de código.
[...]
add_filter('xmlrpc_methods', function($methods) {
unset($methods['pingback.ping']);
return $methods;
});
?>
Es necesario dejar claro que, si bien con este método y otros similares, dejamos nuestra instalación de Wordpress mucho más protegida contra ataques que al principio, siempre tiene sus inconvenientes o al menos es algo que hay que tener en cuenta cuando se utilizan plugins como Jetpack for Wordpress que utiliza el protocolo XML-RPC. En este caso hay otros métodos de protección que pueden ser igual de efectivos, pero que al mismo tiempo permiten que estos plugins sigan funcionando con total normalidad.
Para finalizar, debemos tener en cuenta que cuando actualicemos Wordpress o nuestra plantilla, es posible que los archivos que hemos modificado se sustituyan por unos nuevos, por lo que sería necesario repetir estos pasos de nuevo.
Montar particiones LVM
Si queremos montar particiones LVM en un ordenador con Linux, no se puede hacer con el habitual comando 'mount', sino que neceistaremos algunas herramientas específicas para poder montar los volúmenes creados con el sistema de archivos LVM. Si todavía no lo hemos hecho, instalamos los paquetes lvm2 y fuse2fs. Este último es necesario cuando el disco con el volumen lógico fue creado en un sistema no Intel, por ejemplo un NAS con una arquitectura SPARC.
# apt-get install lvm2 fuse2fs
A partir de ahora ya podemos utilizar varias herramientas para manejar y montar los volúmenos lógicos.
En este ejemplo vamos a trabajar con un disco extraido de un Netgear ReadyNas Duo.
Para ver el nombre del grupo de volúmenos utilizamos 'vgscan'
# vgscan
Reading all physical volumes. This may take a while...
Found volume group "c" using metadata type lvm2
Nos dice que se encontró un grupo con el nombre “c”.
Para obtener mayor información sobre el grupo se puede utilizar el comando 'vgdisplay'
# vgdisplay
--- Volume group ---
VG Name c
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 929,09 GiB
PE Size 32,00 MiB
Total PE 29731
Alloc PE / Size 29731 / 929,09 GiB
Free PE / Size 0 / 0
VG UUID 1Rb25h-fTUs-p1nw-RuD1-IpMl-hAdg-v4r4Ez
En la línea VG Name nos dice que tenemos un grupo llamado “c”
A partir de este momento ya podríamos trabajar con los volúmenes lógicos, pero antes tenemos que ver si son accesibles, es decir, si están activados. Para ello usamos el comando 'lvscan'.
# lvscan
inactive '/dev/c/c' [929,09 GiB] inherit
Si el volumen está inactivo no se puede montar. Lo activamos con el comando 'vgchange'.
# vgchange -ay /dev/c/c
Si hubiera un grupo con varios volúmenes, se pueden activar todos usando 'vgchange -ay <nombre_grupo>'
Para desactivar un volúmen o todos los volúmenes de un grupo se usará la opción '-an'
Si volvemos a ejecutar 'lvscan' ahora obtendremos.
# lvscan
ACTIVE '/dev/c/c' [929,09 GiB] inherit
En este momento ya se puede montar el volumen. Si el disco fué creado en un PC, se podría usar el comando 'mount'.
# mount /dev/c/c <punto_de_montaje>
Pero como el disco viene de un NAS con una arhitectura distinta a x86, se tiene que usar FUSE y concretamente el comando 'fuse2fs'
# fuse2fs -o ro -o sync_read -o allow_other /dev/c/c /mnt/nas
Opciones:
-o roMonta el volúmen lógico de solo lectura
-o sync_readRealiza todas las lecturas de forma síncrona
-o allow_otherPermite que usuarios distintos de root puedan acceder al volumen montado
Configurar NGINX para PHP 7.4
Instalar el paquete nginx-full
# apt install nginx-full
Instalar los paquetes de php 7.4
# apt-get install php7.4-fpm php7.4-mbstring php7.4-mysql php7.4-curl php7.4-gd php7.4-curl php7.4-zip php7.4-xml
Si fueran necesarios otros, los instalamos también.
Editamos el fichero de configuración del sitio por defecto de nginx.
# nano /etc/nginx/sites-enabled/default
Añadimos index.php a la lista, dejándolo de esta forma.
index index.php index.html index.htm index.nginx-debian.html;
Buscamos.
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
Y lo modificamos para que quede así.
location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
}
Para finalizar reiniciamos nginx.
# systemctl restart nginx