Utilizar la terminal vía proxy

El otro día se cayo la salida principal a Internet cuando estaba realizando unas descargas en la terminal, pues bien o me esperaba a que el tiempo mejorara y la salida principal a Internet estuviese operativa o modificaba algunas variables y así poder utilizar la terminal vía proxy  y continuar con lo que estaba haciendo.

Pues bien, me decidí a modificar o añadir las variables para poder redirigir el trafico por uno de los proxys.

Para ello basta con ejecutar en la terminal los siguientes comandos:

export http_proxy='http://$username:$password@$internet_proxy:$proxy_port/'
export https_proxy='http://$username:$password@$internet_proxy:$proxy_port/'
export ftp_proxy='http://$username:$password@$internet_proxy:$proxy_port/'
export no_proxy='localhost,127.0.0.1,192.168.0.0/16,dominio_interno.com'

Bien, con el primer export hemos indicado que todo lo que sea http vaya por el proxy, con el segundo ya lo habéis adivinado y el tercero no hace falta decirlo.

Ahora bien con el cuarto indicamos que localhost,127.0.0.1,192.168.0.0/16,dominio_interno.com no pase por el proxy, de esta forma este trafico no sera redirigido al exterior y podremos acceder a la red interna sin problemas.

Para dejar de salir por el proxy una vez se recupere la salida principal a Internet realizamos un unset de las variables.

unset http_proxy
unset https_proxy
unset ftp_proxy

Otro uso es cuando el ancho de banda de la salida principal a Internet esta a full.

Actualizar youtube-dl

Debido al mensaje de error de youtube-dl al querer realizar una descarga de una playlist, he tenido que actualizarlo de la siguiente forma.

Este era el mensaje de error:

ERROR: Unable to extract title; please report this issue on https://yt-dl.org/bug . Be sure to call youtube-dl with the –verbose flag and include its complete output. Make sure you are using the latest version; type youtube-dl -U to update.

test@test:~/Vídeos$ youtube-dl -U
It looks like you installed youtube-dl with a package manager, pip, setup.py or a tarball. Please use that to update.

Para realizar la instalación como root:

apt-get install python-setuptools
easy_install pip
pip install --upgrade youtube-dl

test@test:~# file /usr/bin/youtube-dl
/usr/bin/youtube-dl: Python script, ASCII text executable

Y con esto es todo.
Ahora a descargar la playlist, exportar los vídeos a la tablet y verlos por el camino.

Grabar vídeo con audio interno y micrófono con ffmpeg en debian

El otro día me hicieron una pregunta, como podía grabar el audio interno del escritorio y el micrófono a la vez, en este caso mi respuesta fue con pulseaudio y ffmpeg, aunque la cuestión era grabar vídeo con audio interno y micrófono con ffmpeg en debian.

Pues bien para ello tenemos que tener instalado pulseaudio, no voy a explicar como hacerlo, solo el concepto de capturar el audio interno y micrófono y también tenemos que tener ffmpeg.

Para proceder a capturar el audio crearemos un modulo nulo module-null-sink el cual envía toda la salida a /dev/null, lo creamos así:

pactl load-module module-null-sink sink_name=conmimodulo

ahora dentro del modulo creado “conmimodulo” nombre descriptivo vamos a añadir la entrada de audio del micrófono de esta forma:

pactl load-module module-loopback source="alsa_input.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam.analog-mono" sink=conmimodulo

Una vez cargado este modulo cargaremos la salida de audio del escritorio de la misma manera:

pactl load-module module-loopback source="alsa_output.pci-0000_00_14.2.analog-stereo.monitor" sink=conmimodulo

Para saber que fuente escoger lo podemos ver así:

pacmd list-sources   esta es la salida del micrófono

index: 1
name: <alsa_input.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam.analog-mono>
driver: <module-alsa-card.c>
flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
state: RUNNING
suspend cause:
priority: 9049
volume: mono: 44647 /  68% / -10,00 dB
balance 0,00
base volume: 9619 /  15% / -50,00 dB
volume steps: 65537
muted: no
current latency: 0,42 ms
max rewind: 0 KiB
sample spec: s16le 1ch 48000Hz
channel map: mono
Mono
used by: 2
linked by: 2
fixed latency: 99,94 ms
card: 1 <alsa_card.usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam>
module: 7
properties:
alsa.resolution_bits = "16"
device.api = "alsa"
device.class = "sound"
alsa.class = "generic"
alsa.subclass = "generic-mix"
alsa.name = "USB Audio"
alsa.id = "USB Audio"
alsa.subdevice = "0"
alsa.subdevice_name = "subdevice #0"
alsa.device = "0"
alsa.card = "2"
alsa.card_name = "A4 TECH PC Cam"
alsa.long_card_name = "PixArt Imaging Inc. A4 TECH PC Cam at usb-0000:00:12.2-1, high speed"
alsa.driver_name = "snd_usb_audio"
device.bus_path = "pci-0000:00:12.2-usb-0:1:1.2"
sysfs.path = "/devices/pci0000:00/0000:00:12.2/usb1/1-1/1-1:1.2/sound/card2"
udev.id = "usb-PixArt_Imaging_Inc._A4_TECH_PC_Cam-02-Cam"
device.bus = "usb"
device.vendor.id = "093a"
device.vendor.name = "Pixart Imaging, Inc."
device.product.id = "2700"
device.product.name = "A4 TECH PC Cam"
device.serial = "PixArt_Imaging_Inc._A4_TECH_PC_Cam"
device.form_factor = "webcam"
device.string = "hw:2"
device.buffering.buffer_size = "9594"
device.buffering.fragment_size = "2398"
device.access_mode = "mmap"
device.profile.name = "analog-mono"
device.profile.description = "Mono Analógico"
device.description = "A4 TECH PC Cam Mono Analógico"
alsa.mixer_name = "USB Mixer"
alsa.components = "USB093a:2700"
module-udev-detect.discovered = "1"
device.icon_name = "camera-web-usb"
ports:
analog-input-mic: Micrófono (priority 8700, latency offset 0 usec, available: unknown)
properties:
device.icon_name = "audio-input-microphone"
active port: <analog-input-mic>

Para ver los sinks

pacmd list-sinks   este es el que he creado para realizar el vídeo con el nombre conmimodulo

index: 5
name: <conmimodulo>
driver: <module-null-sink.c>
flags: DECIBEL_VOLUME LATENCY FLAT_VOLUME DYNAMIC_LATENCY
state: RUNNING
suspend cause:
priority: 1000
volume: front-left: 65536 / 100% / 0,00 dB, front-right: 65536 / 100% / 0,00 dB
balance 0,00
base volume: 65536 / 100% / 0,00 dB
volume steps: 65537
muted: no
current latency: 9,05 ms
max request: 3 KiB
max rewind: 3 KiB
monitor source: 6
sample spec: s16le 2ch 44100Hz
channel map: front-left,front-right
Estéreo
used by: 2
linked by: 5
configured latency: 20,00 ms; range is 0,50 .. 2000,00 ms
module: 28
properties:
device.description = "Salida Nula"
device.class = "abstract"
device.icon_name = "audio-card"

Y para ver las fuentes:

pacmd list-modules

 

Bueno como podemos observar se nos han dado unos indices y creado los modulos, proseguimos para grabar el vídeo .

El vídeo lo grabaremos de la siguiente forma y lo adaptaremos a lo que queramos grabar

ffmpeg -f x11grab -s 1280x1005 -r 25 -i :0.0+1280,19 -f pulse -i conmimodulo.monitor -ac 2 -b:v 25000k -y conmimodulo.avi

bien indicamos a ffmpeg que queremos grabar el escritorio indicando x11grab con un tamaño de 1280×1005 este sera el tamaño del vídeo y siempre se tiene que ajustar al tamaño que podemos grabar si hubiese puesto 1006 un pixel mas este seria el resultado:

[x11grab @ 0x155cc80] Capture area 1280x1006 at position 1280.19 outside the screen size 2560x1024
:0.0+1280,19: Invalid argument

He indicado que quiero grabar 25 FPS  y la región a grabar esta ubicada en :0.0+1280,19 pues bien empezando desde las coordenadas 0.0 grábame a partir de la 1280,19 que significa, pues grábame la pantalla de la derecha 1280 a partir del pixel 19, osea elimina la barra superior, el error anterior indica el tamaño de mi escritorio 2560×1024 del cual solo grabaremos 1280×1006 empezando por el pixel 1280,19, si queremos saber las coordenadas podemos utilizar xwininfo, queda claro, ¿no?.

Seguimos indico que utilice pulse y en este caso que utilice conmimodulo.monitor en estereo (-ac 2) con una velocidad de salida de bits de 25000k aceptamos sobreescribir conmimodulo.avi

Para ver si funciona vamos a grabar un vídeo en este caso uno incrustado dentro del otro.

 

Para visualizarlo he utilizado mplayer.

mplayer conmimodulo.avi

Eso es todo.

Instalar Nginx, PHP-7.0 y MariaDB en Windows

Debido a que tenemos un proyecto entre manos, ayer me decidi a realizar una instalacion de NGINX, PHP-7.0 y MariaDB en Windows, de esta forma, puedo testear en Windows dicha instalacion, aunque no me gusta nada, hay a quien si le gusta y este interesado en estos tipos de instalaciones.

Pues bien vamos a empezar.

Nos drigimos a NGINX ahi descargamos NGINX para windows, esta en formato zip, lo descomprimimos en la C:\ ,la carpeta la podemos llamar nginx o yo la he llamado por su verison C:\nginx-1.10.2

Hasta aqui facil no, seguimos con PHP 7

Nos dirigimos a la pagina de descarga de php-7.0 para windows

http://windows.php.net/download#php-7.0

Yo he elejido la Non Thread Safe, ya que se ejecutara como binario CGI

VC14 x64 Non Thread Safe

Una vez descargado le descomprimimos en la C:\ o com en mi caso en C:\nginx-1.10.2\php

Vamos a configurar NGINX para ejecutar PHP

Dentro de la carpeta conf en el directorio de NGINX, tenemos el fichero nginx.conf, sobre la linea 65 tenemos que descomentar las siguientes lineas y modificar con nuestra eleccion de directorios etc

location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}

por la linea 45 anadimos index.php, quedandonos asi

index  index.html index.htm index.php;

Yo he seguido este hilo https://www.nginx.com/resources/wiki/start/topics/examples/phpfastcgionwindows/ y he creado estos scripts

start_nginx.bat

@echo off
echo Starting PHP FastCGI...
set PATH=c:\nginx-1.10.2\php;%PATH%
cd c:\nginx-1.10.2\
start nginx
c:\nginx-1.10.2\php\RunHiddenConsole.exe c:\nginx-1.10.2\php\php-cgi.exe -b 127.0.0.1:9000 -c c:\nginx-1.10.2\php\php.ini
exit

stop_nginx.bat

@echo off
taskkill /f /im nginx.exe
taskkill /f /im php-cgi.exe
exit

Con esto ya tenemos NGINX funionando con php-7.0, ahora vamos por MariaDB

Nos dirigimos  la web de descarga https://downloads.mariadb.org/mariadb/10.1.18/

Ahi seleccionamos mariadb-10.1.18-winx64.msi

Una vez descargado el ejecutable clic clic clic, atotclic.

Para configurar mysqli descomentamos o modificamos las siguientes lineas en C:\nginx-1.10.2\php\php.ini

extension_dir = C:/nginx-1.10.2/php/ext

extension=php_mysqli.dll

extension=php_pdo_mysql.dll

Si habiamos ejecutado el script start_nginx.bat ejecutamos estop o hacemos un reload a nginx

accedemos al directorio de NGINX y

nginx.exe -s reload

Para comprobar php info.php

<?php
phpinfo();
?>

Para comprobar MariaDB

mysql_test.php

<?php
// Conexión a la base de datos
$base = mysqli_connect("127.0.0.1", "root", "password", "mysql");
if ($base) {
echo 'Conexión realizada.<br />';
echo 'Información del servidor:'.mysqli_GET_host_info($base).
'<br />';
$sql = "select host, user FROM user";
// Preparación de la consulta
$resultado = mysqli_prepare($base, $sql);
// Ejecución de la consulta.
$ok = mysqli_stmt_execute($resultado);
if ($ok == FALSE) {
echo "Error en la ejecución de la consulta.<br />";
}
else {
// Asociación de variables de resultado.
$ok = mysqli_stmt_bind_result($resultado,$host,$user);
// Lectura de valores.
echo "Host y usuario tabla user<br />";
while (mysqli_stmt_fetch($resultado)) {
echo $host.", ".$user."<br />";
}
mysqli_stmt_close($resultado);
}
if (mysqli_close($base)) {
echo 'Desconexión realizada.<br />';
}
else {
echo 'Error en la desconexión.';
}
}
else {
printf('Error %d : %s.<br/ >',mysqli_connect_errno(),
mysqli_connect_error());
}
?>

Esto es todo, un servidor web funcionando en menos de una hora.