Noticia Script Bash: Controlar ancho de banda de Transmission automáticamente

Hola a todos. Este es mi segundo post. No suelo escribir posts a menos que tenga algo bueno para compartir y esta vez tengo algo que seguramente a muchos les va a interesar.

Hace unos meses pensaba hacer un script para limitar el ancho de banda de aplicaciones, pero tenía algunos problemas y errores que me dificultaban la tarea, entonces plantee mis dudas en el foro de <º DesdeLinux por si a alguien se le ocurría una idea.

Así lo dejé por un tiempo y un buen día me propuse retomar el script. Hice muchas pruebas, leí bastante sobre bash, y tuve dolores de cabeza en mis ratos libres ¡¡Pero lo logre!!

Tengo una satisfacción enorme y entonces he decidido compartir con ustedes mi pequeño script para que lo usen y mejoren. Pienso licenciarlo bajo GPLv3, pero es mi primer proyecto así que no estoy muy seguro cómo se hace ésto (necesito consejos de quien lo haya hecho antes).

Bien, ahora explicaré cuál era mi necesidad y qué hice para solucionar el problema.

Situación
Tengo un plan de Internet de 512Kbs, por lo tanto hago uso de Transmission como cliente BitTorrent para descargar archivos grandes (como LibreOffice y algunas distros de GNU/Linux). Con esa velocidad las descargas demoran bastante y el problema es al usar el navegador web Firefox: tarda bestante en cargar.

Cuando me conecto a Internet, activo los límites temporales de carga y descarga de Transmission y espero a que cargue Firefox, luego arranco nuevamente los torrents. Como verán, hacer esto un par de veces es tedioso. Ni hablar de que a veces directamente pauso todos los torrents y luego me olvido de activarlos de nuevo, lo que lleva a tiempo valioso perdido para la carga/descarga de los torrents.

Solución
Para este problema decidí crear un script en Bash que hace básicamente lo siguiente:

1. Comprueba que Transmission esté ejecutándose y no haya ningún torrent pausado. De ser así, activa nuevamente los torrents.

2. Verifica que Firefox esté en ejecución. Luego obtiene los KB/s enviados y recibidos por él y los guarda en un archivo.

3. Si los KB/s de carga o descarga del navegador superan un margen de referencia, se cambian los valores de subida/bajada de Transmission.

Esto permite que al querer acceder a una página web, cuando el navegador envía la petición, se limite la carga de archivos de Transmission y cuando se reciben los datos de la página, se limita la descarga. Esto funciona muy bien cuando se acceden a varias páginas a la vez y realmente los resultados son los mismos que con Transmission desactivado.

La gran ventaja es que es totalmente automático y no requiere de mi intervención.

El script
Si bien podría usarse para controlar el consumo de ancho de banda de cualquier aplicación, por el momento sólo está escrito para solucionar un problema muy particular. Pero no es muy difícil hacer modificaciones.

Requisitos
Para que funcione correctamente es necesario tener instalada la aplicación «nethogs».

En este caso como el script funciona con Firefox y Transmission, es necesario tener estas aplicaciones instaladas, además de «transmission-remote» que es la que cambia los valores de carga y descarga de los torrents. También uso en el script «awk». Lo menciono porque no sé si todas las distros lo traen instalado.

Software utilizado
Una lista de las aplicaciones que hace uso el script y el sistema donde funciona.

•Debian GNU/Linux 6.0.8
•Linux 2.6.32-5-686
•Firefox 24.0
•Transmission 2.03 (11030)
•Nethogs 0.7.0

Ejecución
Debe ejecutarse como root debido a que nethogs solo puede ejecutarse con ese usuario, pero transmission-remote se ejecuta con el usuario normal por medio del comando su.

El script usa el comando interno de Bash trap con el cual permite restaurar los valores predeterminados de carga/descarga de Transmission, cuando es detenido mediante las señales SIGINT (CTRL+c) o SIGTERM.

Aún no se bien cómo hacer para ejecutarlo al inicio y que se detenga cuando apago o reinicio el equipo. Pensaba colocar un enlace en el archivo /etc/rc.local pero no se si funcionaría, y no entiendo muy bien cómo funciona /etc/init.d (ví algunos scripts que allí se encuentran, incluso skeleton, pero no los entiendo). Si alguien puede ayudarme, le estaré muy agradecido.



Bueno amigos, eso es todo. Espero que mi pequeño aporte les resulte útil y que puedan mejorarlo si así lo desean. Con gusto leeré sus opiniones y recomendaciones como así también sugerencias en caso de que haya problemas de seguridad con el archivo (no soy programador, sólo hago algunas cosas de vez en cuando).

Se que con algunos arreglos puede llegar a ser una gran aplicación en el futuro, pues no conozco algún programa que haga lo mismo. Por ejemplo se me ocurre que podría tener una interfaz gráfica en zenity y poder elegir las aplicaciones a las que queremos priorizar en el uso de ancho de banda (navegador web, gestor de actualizaciones, transferencia de archivos, etc.) y los distintos valores de referencia. Sí, es algo ambicioso, pero bastante útil.

Pueden descargar el script en el paste. ¡¡Muchas gracias por leer!!


TzL3RhBnHQ8


Continúar leyendo...