Improve pacman performance (Español)
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
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.
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.
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.
/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
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
Seleccionar el mirror más rápido
Cuando pacman descarga paquetes utiliza los mirrors en el orden en que aparecen en /etc/pacman.d/mirrorlist
. El primer mirror puede no ser el más rápido de la lista por defecto. Para seleccionar un mirror más rápido, véase Mirrors.
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.