Difference between revisions of "Improve pacman performance (Español)"

From ArchWiki
Jump to: navigation, search
(Script para el mirror pacget (aria2))
(Usar Powerpill)
Line 33: Line 33:
  
 
La [[Powerpill | página wiki de Powerpill]] proporciona una configuración básica y ejemplos de uso, junto con el paquete y enlaces upstream.
 
La [[Powerpill | página wiki de Powerpill]] proporciona una configuración básica y ejemplos de uso, junto con el paquete y enlaces upstream.
 +
 +
=== Usar powerpill-light (en desuso)===
 +
[http://xyne.archlinux.ca/projects/pacman2aria2/ pacman2aria2] proporcina un script llamado «powerpill-light», que era un recurso provisional creado tras el desuso de powerpill original escrito en Perl. Ahora que [[Powerpill|Powerpill]] se ha vuelto a publicar, powerpill-light está desatendido.
  
 
=== Usar wget ===
 
=== Usar wget ===

Revision as of 21:10, 16 July 2013

Mejorar la velocidad de acceso a la base de datos

Pacman almacena toda la información relativa a los paquetes en una colección de archivos pequeños, uno por cada paquete. Mejorar la velocidad de acceso a la base de datos, reduce el tiempo necesario para completar las operaciones para las que aquellas se utilizan, por ejemplo, buscar paquetes y resolver las dependencias de los mismos. El método más seguro y rápido es ejecutar la siguiente orden, como root:

# pacman-optimize

De este modo, el sistema intentará reagrupar todos los archivos pequeños con la información de los paquetes en un ubicación (física) del disco duro, evitando que la cabeza del disco duro tenga que moverse en exceso cuando tenga que acceder a todos los paquetes. Este método es seguro, pero no es infalible. Su eficacia dependerá de factores como el sistema de archivos utilizado, del uso que se haga del disco y de la fragmentación del espacio vacío. Otra opción más agresiva sería quitar primero, de la caché, los paquetes desinstalados y eliminar los repositorios no utilizados, antes de optimizar la bases de datos:

# pacman -Sc && pacman-optimize

Mejorar la velocidad de las descargas

Nota: Si las velocidades de descarga son mínimas, asegúrese de que está utilizando uno de los mirrors, y no ftp.archlinux.org, cuyo ancho de banda está reducido desde marzo de 2007.

La velocidad con que pacman descarga los paquetes se puede mejorar mediante el uso de una aplicación diferente para descargarlos, en lugar del descargador de archivos compilados de pacman.

En todos los casos, asegúrese de tener instalada la última versión de pacman antes de realizar cualquier modificación.

# pacman -Syu

Usar Powerpill

PowerPill es un wrapper completo para Pacman que utiliza descargas paralelas y fragmentadas para acelerar el proceso de descarga. Normalmente Pacman descargará un paquete a la vez, y esperará a que se complete antes de comenzar la próxima descarga. PowerPill adopta un enfoque diferente: trata de acceder a la vez a tantos paquetes como sea posible.

La página wiki de Powerpill proporciona una configuración básica y ejemplos de uso, junto con el paquete y enlaces upstream.

Usar powerpill-light (en desuso)

pacman2aria2 proporcina un script llamado «powerpill-light», que era un recurso provisional creado tras el desuso de powerpill original escrito en Perl. Ahora que Powerpill se ha vuelto a publicar, powerpill-light está desatendido.

Usar wget

Esta opción es muy útil si necesita configuraciones más avanzadas para el proxy respecto a las capacidades incorporadas en pacman.

Para usar wget, primero instálelo con pacman -S wget y, luego, modifique el archivo /etc/ pacman.conf, para agregar la siguiente línea a la sección [options]:

XferCommand = /usr/bin/wget -c --passive-ftp -c %u

En lugar de poner los parámetros de wget en el archivo /etc/pacman.conf, puede modificar el archivo de configuración de wget directamente (el archivo que afecta a todo el sistema es /etc/wgetrc, mientras que los archivos que afectan únicamente a los usuarios están contenidos en $HOME/.wgetrc).

Usar aria2

aria2 es una utilidad ligera de descarga con apoyo para descargas fragmentadas y reanudables desde HTTP/HTTPS y FTP. aria2 permite conexiones HTTP/HTTPS y FTP mútiples y simultáneas a un mirror de Arch, que debería traducirse en un aumento en la velocidad de descarga de los archivos y la posibilidad de recuperación de los paquetes.

Nota: El uso de aria2c en el parámetro XferCommand de pacman no da como resultado descargas paralelas de varios paquetes. Pacman invoca la orden XferCommand con respecto a un único paquete a la vez y espera a que se complete antes de invocar el siguiente. Para descargar varios paquetes al mismo tiempo, véase cómo usar powerpill-light en la siguiente sección.

Instalación

Descargue e instale aria2 y sus dependencias:

# pacman -S aria2

Configuración

Modifique el archivo /etc/pacman.conf agregando la siguiente línea a la sección [options]:

XferCommand = /usr/bin/aria2c --allow-overwrite=true -c --file-allocation=none --log-level=error -m2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=60 -t5 -d / -o %o %u

Detalles de las opciones

/usr/bin/aria2c
La ruta completa al ejecutable aria2.
--allow-overwrite=true
Reinicia la descarga si el archivo de control correspondiente no existe. (Por defecto: false).
-c, --continue
Continua la descarga de un archivo descargado parcialmente, si el archivo de control correspondiente existe.
--file-allocation=none
No preasigna al archivo un espacio en el disco antes de que comience la descarga. (Por defecto: prealloc) 1
--log-level=error
Establece el nivel de salida del registro solamente en caso de error. (Por defecto: debug).
-m2, --max-tries=2
Hace 2 intentos como máximo por mirror para descargar el archivo(s) especificado. (Por defecto: 5).
--max-connection-per-server=2
Establece un máximo de 2 conexiones para cada mirror por archivo. (Por defecto: 1).
--max-file-not-found=5
Fuerza la descarga al ser considerada como fallida si no se recibe un solo byte después de 5 intentos. (Por defecto: 0).
--min-split-size=5M
Divide el archivo si el tamaño es mayor que 2; 5 MB = 10 MB. (Por defecto: 20M).
--no-conf
Desactiva la carga si es que existe un archivo aria2.conf. (Por defecto: ~/.aria2/aria2.conf)
--remote-time=true
Aplica marcas de tiempo de los archivos remotos a los archivo locales. (Por omisión: false).
--summary-interval=60
Muestra la salida del resumen del progreso de descarga cada 60 segundos. (Por defecto: 60) 2
-t5, --timeout=5
Permite definir un tiempo de espera de 5 segundos por mirror después de establecer la conexión. (Por defecto: 60).
-d, --dir
El directorio para guardar el archivo(s) descargado como se especifica en pacman.
-o, --output
Salida del nombre del archivo(s) descargado.
%o
Variable que representa el nombre del archivo(s) local, según lo especificado por pacman.
%u
Variable que representa la dirección URL de descarga, según lo especificado por pacman.

Notas adicionales

1 --file-allocation=falloc
Se recomienda para los sistemas de archivos más recientes, como ext4 (con soporte a las extensiones habilitadas), btrfs o xfs, ya que asigna la ubicación de archivos grandes (GB) casi al instante. No utilice falloc, para la preubicación, con sistemas de archivos antiguos como ext3, que consumen aproximadamente la misma cantidad de tiempo que la que consumiría la asignación estándar, bloqueando entre tanto el proceso de aria2 para realizar la descarga.
2 --summary-interval=0
Suprime la salida del resumen del proceso de descarga y puede mejorar el rendimiento general. Los registros seguirán siendo escritos, de acuerdo con el valor especificado en la opción log-level.
3 XferCommand = /usr/bin/printf 'Downloading ' && echo %u | awk -F/ '{printf $NF}' && printf '...' && /usr/bin/aria2c -q --allow-overwrite=true -c --file-allocation=none --log-level=error -m2 --max-connection-per-server=2 --max-file-not-found=5 --min-split-size=5M --no-conf --remote-time=true --summary-interval=0 -t5 -d / -o %o %u && echo ' Complete!'
El uso de la orden XferCommand proporciona una salida menos útil, pero mucho más fácil de leer.

Usar powerpill-light

pacman2aria2 proporcina un script llamado «powerpill-light», que era un recurso provisional creado tras el desuso de powerpill original escrito en Perl. Ahora que Powerpill se ha vuelto a publicar, powerpill-light está desatendido.

Script para el mirror pacget (aria2)

Este script mejora notablemente la velocidad de descarga para los usuarios de banda ancha. Utilice los servidores en /etc/pacman.d/mirrorlist como mirrors en aria2. Lo que hace aria2 es descargar desde múltiples servidores al mismo tiempo, lo que le da un gran impulso a la velocidad de descarga.

Nota: Es necesario insertar «exec» antes de /usr/bin/pacget en XferCommand, de modo que al terminar pacget o aria2 (proceso utilizado por pacget), pacman también termine. Esto evitará inconvenientes, porque Pacman no insistirá en la descarga de un archivo cuando se le ordene interrumpirla.
Advertencia: Se pueden experimentar algunos problemas si los mirrors utilizados no están sincronizados o simplemente no están al día. Solo tiene que usar el script Reflector para generar una lista de mirrors actualizados y rápidos. Además, ftp.archlinux.org viene resuelta con dos IPs. Es posible que desee elegir solo una de ellas y forzar al sistema a utilizar ftp.archlinux.org y la dirección IP elegida mediante /etc/hosts.
/usr/bin/pacget
#!/bin/bash

msg() {
  echo ""
  echo -e "   \033[1;34m->\033[1;0m \033[1;1m${1}\033[1;0m" >&2
}

error() {
  echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2
}

CONF=/etc/pacget.conf
STATS=/etc/pacget.stats
ARIA2=$(which aria2c 2> /dev/null)

# ----- do some checks first -----
if [ ! -x "$ARIA2" ]; then
  error "aria2c was not found or isn't executable."
  exit 1
fi

if [ $# -ne 2 ]; then
  error "Incorrect number of arguments"
  exit 1
fi

filename=$(basename $1)
server=${1%/$filename}
arch=$(grep ^Architecture /etc/pacman.conf | cut -d '=' -f2 | sed 's/ //g')
if [[ $arch = "auto" ]]; then
  arch=$(uname -m)
fi
# Determine qué repositorio se está utilizando
repo=$(awk -F'/' '$(NF-2)~/^(community|core|extra|testing|comunity-testing|multilib)$/{print $(NF-2)}' <<< $server)
[ -z $repo ] && repo="custom"

# Para los archivos db, o cuando se utiliza un repositorio personalizado (que muy probablemente no tiene ningún mirror),
# Use solo la URL que le ha facilitado pacman, de lo contrario, extraiga la lista de servidores (desde el archivo «include» del repositorio) para la descarga desde
url=$1
if ! [[ $filename = *.db || $repo = "custom" ]]; then
  mirrorlist=$(awk -F' *= *' '$0~"^\\["r"\\]",/Include *= */{l=$2} END{print l}' r=$repo /etc/pacman.conf)
  if [ -n mirrorlist ]; then
    num_conn=$(grep ^split $CONF | cut -d'=' -f2)
    url=$(sed -r '/^Server *= */!d; s/Server *= *//; s/\$repo'"/$repo/"'; s/\$arch'"/$arch/; s/$/\/$filename/" $mirrorlist | head -n $(($num_conn *2)) )
  fi
fi

msg "Downloading $filename"
cd /var/cache/pacman/pkg/

touch $STATS

$ARIA2 --conf-path=$CONF --max-tries=1 --max-file-not-found=5 \
  --uri-selector=adaptive --server-stat-if=$STATS --server-stat-of=$STATS \
  --allow-overwrite=true --remote-time=true --log-level=error --summary-interval=0 \
  $url --out=${filename}.pacget && [ ! -f ${filename}.pacget.aria2 ] && mv ${filename}.pacget $2 && chmod 644 $2

exit $?
/etc/pacget.conf
# El archivo de registro
log=/var/log/pacget.log
# El número de servidores para la descarga
split=5
# Tamaño mínimo del archivo a partir del cual justifica su división, es decir descarga simultánea (default 20M)
min-split-size=1M
# Velocidad máxima de descarga (0 = sin restricciones)
max-download-limit=0
# Velocidad mínima de descarga (0 = no importa)
lowest-speed-limit=0
# Período de tiempo de espera del servidor
timeout=5
# «none» (ninguno) o «falloc» (preubicación)
file-allocation=none

Guarde este script como /usr/bin/pacget.

# chmod 755 /usr/bin/pacget

La orden anterior hace que el script sea ejecutable.

En la sección [options], del archivo /etc/pacman.conf, añada lo siguiente:

XferCommand = exec /usr/bin/pacget %u %o
Nota: Si utiliza ftp.archlinux.org como el primer servidor listado en los archivos «include» (/etc/pacman.d/*), pueden ocurrir algunos problemas cuando los otros mirror que utiliza no se hayan sincronizado. Para hacer un mejor uso de este script, elija un mirror (que sincronice de manera oportuna) que sea el más apropiado para su caso, y colóquelo en la parte superior de la lista de servidores. Esto es para evitar descargar de ftp.archlinux.org, y hacer uso de este último solo para cuando los otros mirrors no han sido sincronizados aún. El script rankmirrors puede ser útil en este caso.

Utilizar otras aplicaciones

Existen otras aplicaciones para realizar las descargas, que se pueden utilizar con Pacman. Vienen presentadas a continuación, con sus correspondientes ajustes en XferCommand:

  • snarf: XferCommand = /usr/bin/snarf -N %u
  • lftp: XferCommand = /usr/bin/lftp -c pget %u
  • axel: XferCommand = /usr/bin/axel -n 2 -v -a -o %o %u

Elegir el mirror más rápido

Pacman utiliza los mirrors en el orden que aparecen contenidos en /etc/pacman.d/mirrorlist para la descarga de los paquetes. El primer mirror de la lista puede no ser el más rápido.

Nota: Esto no se aplica a powerpill-light, que se conecta a varios servidores al mismo tiempo para aumentar la velocidad de descarga total. La velocidad de las conexiones individuales se vuelve menos relevante, y powerpill-light puede ser configurado para requerir velocidades mínimas por conexión.

Elegir un mirror local

La forma más sencilla, es editar el archivo mirrorlist para colocar un mirror local en la parte superior de la lista. Entonces pacman utilizará este mirror preferentemente.

Como alternativa, el archivo pacman.conf se puede editar para colocar un mirror antes de la línea «sourcing» del archivo mirrorlist, es decir, donde dice add your preferred servers here («agregar los servidores preferidos aquí»). Es aconsejable utilizar el mismo servidor para todos los repositorios.

Usar rankmirrors

Se puede utilizar rankmirrors para ordenar los mirrors listados en pacman, en base a la velocidad de conexión.

Usar Reflector

También puede usar Reflector para recuperar una lista personalizada de mirrors según la velocidad de descarga.

Después de cambiar los mirrors

Después de cambiar un mirror, es una buena idea actualizar la base de datos de pacman. El uso de dos «y» fuerza a refrescar una copia de la lista maestra de paquetes desde el servidor, aunque estime que están al día.

# pacman -Syy

Compartir paquetes a través de una red LAN

Si se dispone de más de una máquina con Arch Linux conectadas a una red local, se pueden compartir paquetes para disminuir los tiempos de descarga. Tenga presente que no se pueden compartir paquetes entre diferentes arquitecturas (es decir, i686 y x86_64) o generarán problemas.

Véase Pacman_Tips#Network_shared_pacman_cache.