Manejar GNU/Linux Manjaro con conexión deficiente a Internet

Para empezar defino conexión deficiente como aquella que sólo permite un ancho de banda pequeño y/o que se cae a cada momento. Este es el caso con la única conexión que tengo por el momento en mi residencia: un BAM de Digitel.

El meollo del asunto es sustituir las descargas automatizadas por algo más controlado, de forma tal que se cubran dos objetivos: minimizar las descargar al monitorizar y decidir directamente las que se quieren hacer y por otra parte la de no descargar nada a archivos temporales, que cuando se cierre la sesión se pierda lo adelantado.

Adicionalmente se emplea preferiblemente el terminal, ya que no se descarga ningún elemento gráfico que ralentiza aún más el proceso.

También se pueden generar listas de archivos a descargar, que pueden ser obtenidos en algún sitio con buena conexión y a través de cualquier sistema operativo con Firefox y el complemento DownThemAll

Y de postre, las implementaciones de estas ideas las suelo plasmar como funciones en ~/.bashrc, de forma que llamarlos desde terminal es bastante simple.

Manjaro/Arch Linux

Se usa el poder de la simplicidad de pacman, casi siempre con –needed, para descargar solamente lo que no está actualizado.

Paquetes de AUR

El único momento en que se va a usar yaourt para descargar un paquete, será para descargar packer, o packer-color.

Es simple: packer permite retomar las descargas de códigos fuentes, etc. en dónde se dejó, en una carpeta temporal, por lo general /tmp/packerbuild-1000/

Si el archivo es muy grande y al tardarse mucho se requiere apagar la PC o se puede descargar en otro lugar más rápidamente; se puede revisar el archivo PKGBUILD que suele estar dentro del .tar.gz que descarga packer. Allí encontramos en el segmento “source” la dirección de lo que queremos descargar, completando con lo que valen las variables que incluya dicha dirección. Por ejemplo para Musescore en este momento:

pkgver=1.3

source=(“http://downloads.sourceforge.net/mscore/mscore-${pkgver}.tar.bz2”

lo que se convierte entonces en: http://downloads.sourceforge.net/mscore/mscore-1.3.tar.bz2 como el archivo a descargar.

Se puede entonces descargar a otra carpeta, de forma que sin completar se pueda apagar la máquina y no se pierda lo descargado:

wget -cNS http://downloads.sourceforge.net/mscore/mscore-1.3.tar.bz2 -O ~/Descargas/mscore-1.3.tar.bz2.part

Se debe usar el “.part” porque así busca descargarlo packer y -una vez que revisa su suma de verificación- se convierte en el archivo definitivo que usará en la formación del paquete.

Luego que se descarga el archivo, se mueve a la posición correcta dentro del subdirectorio de /tmp/packerbuild-1000/ correspondiente y se ejecuta de nuevo la llamada a packer, con lo cual se continuará la compilación e instalación.

Si queremos tener los paquetes compilados, podemos ejecutar la función:

postpacker() {

echo “Busca paquetes en /tmp y los copia a ~/Paquetes AUR/”

mkdir -p ~/Paquetes\ AUR/

sudo find /tmp -type f -iname “*.pkg.*” -exec cp -vura {} ~/Paquetes\ AUR/ \;

}

¿Y los apagones qué?

Luego de casi media hora descargando el MuseScore con packer, ¡pum! Apagón…., todos esos megas de descarga perdidos (si, el BAM está limitado por cantidad de bytes navegados), así que se quemaron unos cuantos Bs.

Para evitar eso, dejo al packer trabajando en una instancia de terminal y en otra, voy copiando regularmente lo que ya está listo. Si hay apagón, al retornar la energía, copia la carpeta otra vez a /tmp y no ha pasado nada -bueno cuando muchos los últimos 30 segundos-:

let “n=0”; while [ “$n” -lt 120 ]; do #Hasta 120 para una hora…. se puede ajustar

echo $n #Muestra el número para monitorear

/bin/cp -vura /tmp/packerbuild-1000/ ~/Descargas/ #con /bin/cp para saltarse la opción -i predeterminada en el .bashrc original

let “n+=1”

sleep 30 #Cada 30 segundos, que no se pierde mucho

done

Primero descarga, luego instala

Esto lo suelo tener en cuenta sobre todo al actualizar el sistema, pues si no se descargan completas las dependencias u archivos relacionados, suelen aparecer problemas… o por lo menos los que hasta ahora se me han presentado, han sido por no hacer actualizaciones completas, sobre todo de paquetes fundamentales del sistema.

Una de las estrategias que sigo, es descargar categorizados los paquetes por repositorio, de forma de descargar primero los de core, etc. Y verificando el tamaño de cada uno, para poder tomar decisiones como “este paquete lo descargaré en otra parte porque es muy grande”. Para ello tengo de función:

act(){

echo “Descarga actualización categorizada uno por uno para verificar tamaño”

for j in core extra community multilib; do

echo “#####

Iniciando desde $j”

for i in $(sudo pacman -Sup –quiet –needed –print-format ‘%r %n’|grep $j|cut -f2 -d ” “| uniq| grep -v “::”); do

sudo pacman -Sw ${i}

done

done

}

Para llamarlo:

act

Cuando ocurre el milagro,¡aprovéchalo!

De cuando en cuando la conexión parece ser decente -sobre todo en altas horas de insomnio o fiestas nacionales cuando el pueblo se queda desierto-. En ese caso uso múltiples descargas para lo que quiero instalar u actualizar. La estrategia es simple: un comando de pacman para obtener la información del archivo a descargar y de allí pasar a wget para hacer el trabajo real, mientras pacman está libre, pudiendo repetir el proceso con otros paquetes en otra instancia del terminal. Veamos:

itd() {

echo “Descarga paquetes señalados, liberando pacman para otros fines mientras.

*********************”

inicio=`pwd`

cd /var/cache/pacman/pkg/

for i in `sudo pacman -Sp –quiet –needed –print-format ‘%l’ ${@}`; do

if [ -e “`basename ${i}`” ]; then

sudo mv `basename ${i}` `basename ${i}.part`

fi

sudo wget -c $i -O `basename ${i}.part` && sudo mv -v `basename ${i}.part` `basename ${i}`

done

cd ${inicio}

}

Uso:

Para Libreoffice Es (español), Calc y Writer (con las dependencias que falten automáticamente):

itd libreoffice-es libreoffice-calc libreoffice-writer

o también:

itd libreoffice-{es,calc,writer}

Si se quiere simplemente verificar archivo por archivo el tamaño para descargarlo:

itu() {

echo “Descarga uno por uno y luego instala”

for i in ${@}; do

sudo pacman -Sw –needed ${i}

done

sudo pacman -S –needed ${@}

}

Siguiendo el ejemplo anterior:

itu libreoffice-{es,calc,writer}

Si se quiere descargar sin preguntar uno por uno -hasta que encontramos un paquete muy grande y detenemos con Ctrl+C-, simplemente añadimos –noconfirm luego de -Sw

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: