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

From ArchWiki
Jump to: navigation, search
(Script para el mirror pacget (aria2))
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:Package Management (Español)]]
+
[[Category:Package management (Español)]]
 
[[de:Pacman beschleunigen]]
 
[[de:Pacman beschleunigen]]
 
[[en:Improve Pacman Performance]]
 
[[en:Improve Pacman Performance]]
Line 9: Line 9:
 
[[zh-CN:Improve Pacman Performance]]
 
[[zh-CN:Improve Pacman Performance]]
 
[[zh-TW:Improve Pacman Performance]]
 
[[zh-TW:Improve Pacman Performance]]
{{Temporary i18n}}
+
== Mejorar la velocidad de acceso a la base de datos ==
==Mejorando la velocidad de acceso a la base de datos==
+
  
Pacman guarda todos la información de los paquetes en un conjunto de archivos pequeños (uno por cada paquete). Mejorando la velocidad de acceso de la base de datos, reduce el tiempo de, por ejemplo, búsqueda de paquetes y de resolución de dependencias. El primer paso es correr el script (como root):
+
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
+
  # pacman-optimize
  
Esto tratará de poner todos los archivos pequeños juntos (de manera física en el disco), entonces el disco duro no se tendrá que buscar mucho cuando esté buscando algun paquete. Este es un paso seguro, es decir, no dañará tu pacman :D.
+
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:
  
ody ha posteado un script en el foro oficial (en inglés) que reemplaza la base de datos de pacman con un "loopback filesystem", el cual asegura que los archivos pequeños continúan estando juntos en el disco duro. Muchos usuario han reportado incrementos en la velocidad de acceso, pero también ha habido problemas con esto, entonces no haga esto a menos que usted sea un usuario experto. Para usar el script de ody, debes tener un kernel compilado con soporte para "loopback filesystem". El kernel por defecto (el que viene con arch) ya trae esto, así que no te debes preocupar de compilar un kernel a medida.
+
# pacman -Sc && pacman-optimize
  
==Mejorar la velocidad de las descargas==
+
== Mejorar la velocidad de las descargas ==
  
Si la velocidad de las descargas se reducen a una porción, asegúrate de estar usando uno de los mirrows de los repositorios y no ftp.archlinux.org, el cual, desde Marzo del 2007, se controla su velocidad para que todos puedan descargar bien.
+
{{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á [https://www.archlinux.org/news/302/ reducido desde marzo de 2007].}}
  
La velocidad de descarga de paquetes por medio de Pacman puede ser mejorado utilizando otras aplicaciones para descargar paquetes en vez del que esta construido en Pacman.
+
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.
  
De todos modos, asegúrate que tienes la última versión de pacman por medio de:
+
En todos los casos, asegúrese de tener instalada la última versión de pacman antes de realizar cualquier modificación.
  
  pacman -Syu
+
  # pacman -Syu
  
=== Usando wget===
+
=== 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.
  
* Primero actualiza todo el sistema para comprobar que tienes la ultima versión de pacman:
+
La [[Powerpill | página wiki de Powerpill]] proporciona una configuración básica y ejemplos de uso, junto con el paquete y enlaces upstream.
pacman -Syu
+
  
* Instala wget:
+
=== Usar wget ===
pacman -S wget
+
  
* Ahora configura <code>/etc/pacman.conf</code>. Y agrega la siguiente linea en la sección de <code>[option]</code>:
+
Esta opción es muy útil si necesita configuraciones más avanzadas para el proxy respecto a las capacidades incorporadas en pacman.
 +
 
 +
Para usar {{ic|wget}}, primero instálelo con {{ic|pacman -S wget}} y, luego, modifique el archivo {{ic|/etc/ pacman.conf}}, para agregar la siguiente línea a la sección {{ic|[options]}}:
  
 
  XferCommand = /usr/bin/wget -c --passive-ftp -c %u
 
  XferCommand = /usr/bin/wget -c --passive-ftp -c %u
  
* Ahora pacman bajará todos los paquetes usando wget.
+
En lugar de poner los parámetros de {{ic|wget}} en el archivo {{ic|/etc/pacman.conf}}, puede modificar el archivo de configuración de {{ic|wget}} directamente (el archivo que afecta a todo el sistema es {{ic|/etc/wgetrc}}, mientras que los archivos que afectan únicamente a los usuarios están contenidos en {{ic|$HOME/.wgetrc}}).
  
Esto es recomendable si quieres usar configuraciones avanzadas de proxy que pacman no soporta.
+
=== Usar aria2 ===
  
=== Usando aria2 ===
+
[[aria2]] es una utilidad ligera de descarga con apoyo para descargas fragmentadas y reanudables desde HTTP/HTTPS y FTP. [http://aria2.sourceforge.net/ 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.
  
De acuerdo a la página de aria2, aria2 es "es una utilidad de descarga con pausa y resumen. Soporta HTTP/HTTPS/FTP/BitTorrent/Metalink." Esto significa que puedes hacer varias conexiones HTTP/FTP a un mirror de Arch al mismo tiempo, lo cual debería aumentar la velocidad.
+
{{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 [[Improve_Pacman_Performance#Usar powerpill-light|powerpill-light]] en la siguiente sección.}}
  
Instálalo con <code>pacman -S aria2</code> y edita <code>/etc/pacman.conf</code> agregando la siguiente línea a la sección <code>[option]</code>:
+
==== Instalación ====
  
XferCommand = /usr/bin/aria2c -s 2 -m 2 -o %o %u
+
Descargue e instale {{Pkg|aria2}} y sus dependencias:
  
Ahora veamos las configuraciones:
+
# pacman -S aria2
* ''/usr/bin/aria2c'' - ruta de la aplicación
+
* ''-s 2'' - usa 2 conexiones concurrentes (puedes colocar números mas altos,pero no va a incrementar mucho)
+
* ''-m 2'' - hace 2 intentos por mirror para bajar un paquete
+
* ''-o %o'' - salida que pacman le especifica
+
* ''%u'' - descarga el paquete que pacman le especifica pacman
+
  
 +
==== Configuración ====
  
==== Aria2 Mirror Script ====
+
Modifique el archivo {{ic|/etc/pacman.conf}} agregando la siguiente línea a la sección {{ic|[options]}}:
  
Este script generalmente mejorará mucho la velocidad en los usuarios de banda ancha. Toma la URL de pacman,entonces la busca en la lista de mirrors en /etc/pacman.d/<repo> y lo agrega como mirrors a aria2. Lo que hace que aria2 se conecte como a 10-20 servidores (por defecto son 4) al mismo tiempo, dando una mayor velocidad a usuarios de banda ancha,
+
{{bc|1=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}}
  
Ten en cuenta que debes poner 'exec' antes de /usr/bin/pacget en XferCommand. Esto es necesario para cuando se termine pacget ó aria2 (con un id de proceso usado por pacget), pacman podría terminar también. Esto permitiría evitar "inconvenientes" porque Pacman no persistiría en descargar un archivo cuando se le diga que no lo haga.
+
==== Detalles de las opciones ====
  
ADVERTENCIA: Puedes experimentar problemas si te vuelves ambicioso. Solo escoge unos 5 servidores confiables (5 ya es bastante) que se sincronicen regularmente con el servidor maestro. NO escogas servidores desactualizados ya que pueden causar problemas como paquetes corruptos, versiones incorrectas, etc. También, ftp.archlinux.org se limita a una IPs.  
+
; {{Ic|/usr/bin/aria2c}}: La ruta completa al ejecutable aria2.
 +
; {{Ic|1=--allow-overwrite=true}}: Reinicia la descarga si el archivo de control correspondiente no existe. (Por defecto: false).
 +
; {{Ic|-c, --continue}}: Continua la descarga de un archivo descargado parcialmente, si el archivo de control correspondiente existe.
 +
; {{Ic|1=--file-allocation=none}}: No preasigna al archivo un espacio en el disco antes de que comience la descarga. (Por defecto: prealloc) <b><sup>1</sup></b>
 +
; {{Ic|1=--log-level=error}}: Establece el nivel de salida del registro solamente en caso de error. (Por defecto: debug).
 +
; {{Ic|1=-m2, --max-tries=2}}: Hace 2 intentos como máximo por mirror para descargar el archivo(s) especificado. (Por defecto: 5).
 +
; {{Ic|1=--max-connection-per-server=2}}: Establece un máximo de 2 conexiones para cada mirror por archivo. (Por defecto: 1).
 +
; {{Ic|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).
 +
; {{Ic|1=--min-split-size=5M}}: Divide el archivo si el tamaño es mayor que 2; 5 MB = 10 MB. (Por defecto: 20M).
 +
; {{Ic|--no-conf}}: Desactiva la carga si es que existe un archivo {{ic|aria2.conf}}. (Por defecto: {{ic|~/.aria2/aria2.conf}})
 +
; {{Ic|1=--remote-time=true}}: Aplica marcas de tiempo de los archivos remotos a los archivo locales. (Por omisión: false).
 +
; {{Ic|1=--summary-interval=60}}: Muestra la salida del resumen del progreso de descarga cada 60 segundos. (Por defecto: 60) <b><sup>2</sup></b>
 +
; {{Ic|1=-t5, --timeout=5}}: Permite definir un tiempo de espera de 5 segundos por mirror después de establecer la conexión. (Por defecto: 60).
 +
; {{Ic|-d, --dir}}: El directorio para guardar el archivo(s) descargado como se especifica en [[pacman (Español)|pacman]].
 +
; {{Ic|-o, --output}}: Salida del nombre del archivo(s) descargado.
 +
; {{Ic|%o}}: Variable que representa el nombre del archivo(s) local, según lo especificado por pacman.
 +
; {{Ic|%u}}: Variable que representa la dirección URL de descarga, según lo especificado por pacman.
  
<pre>
+
==== Notas adicionales ====
#!/bin/bash
+
  
# ------------ Begin Configuration ------------ #
+
; <sup>1</sup> {{Ic|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.
  
# The log file
+
; <sup>2</sup> {{Ic|1=--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 {{Ic|log-level}}.
LOG=/var/log/pacget.log
+
# Number of connections per server (don't go beyond 2, please)
+
CONNECTIONS=2
+
# Max number of servers to download from (follows ordering in include file)
+
SERVERS=4
+
# Maximum download speed (0 = unrestricted)
+
MAX_SPEED=0
+
# Minimum download speed (0 = don't care)
+
MIN_SPEED=0
+
# Maximum tries per download
+
MAX_TRIES=2
+
# Server timeout period
+
TIMEOUT=15
+
# Passive FTP or not: 'yes' or 'no'
+
FTP_PASV="no"
+
# 'none' or 'prealloc'
+
FILE_ALLOC="none"
+
# Use color in messages
+
USE_COLOR="yes"
+
  
# ------------- End Configuration ------------- #
+
; <sup>3</sup> {{Ic|1=<nowiki>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!'</nowiki>}}: El uso de la orden XferCommand proporciona una salida menos útil, pero mucho más fácil de leer.
 +
 
 +
=== Usar powerpill-light ===
 +
[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.
 +
 
 +
=== Script para el mirror pacget (aria2) ===
 +
 
 +
Este script mejora notablemente la velocidad de descarga para los usuarios de banda ancha. Utilice los servidores en {{ic|/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 (Español)|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 {{ic|/etc/hosts}}.}}
 +
 
 +
{{hc|/usr/bin/pacget|<nowiki>
 +
#!/bin/bash
  
 
msg() {
 
msg() {
 
   echo ""
 
   echo ""
   if [ "${USE_COLOR}" = "yes" ]; then
+
   echo -e "  \033[1;34m->\033[1;0m \033[1;1m${1}\033[1;0m" >&2
    echo -ne "  \033[1;34m->\033[1;0m \033[1;1m${1}\033[1;0m" >&2
+
}
  else
+
 
    echo -n "   -> ${1}" >&2
+
error() {
  fi
+
  echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2
 
}
 
}
  
ARIA2_BIN=$(which aria2c 2> /dev/null)
+
CONF=/etc/pacget.conf
 +
STATS=/etc/pacget.stats
 +
ARIA2=$(which aria2c 2> /dev/null)
  
if [ ! -x ${ARIA2_BIN} ]; then
+
# ----- do some checks first -----
   echo "aria2c was not found or isn't executable."
+
if [ ! -x "$ARIA2" ]; then
 +
   error "aria2c was not found or isn't executable."
 
   exit 1
 
   exit 1
 
fi
 
fi
  
filename=$(basename ${1})
+
if [ $# -ne 2 ]; then
server=${1%/${filename}}
+
   error "Incorrect number of arguments"
 
+
   exit 1
# Determine which official repo is being used
+
if [ -n "$(grep "^Server = ${server}$" /etc/pacman.d/*)" ]; then
+
   repo=$(grep "^Server = ${server}$" /etc/pacman.d/* | head -n 1 | cut -d ':' -f 1 | cut -d '/' -f 4)
+
else
+
   repo="custom"
+
 
fi
 
fi
  
# Override number of connections for db files
+
filename=$(basename $1)
if [[ ${filename} = *.db.tar.gz ]]; then
+
server=${1%/$filename}
   CONNECTIONS=1
+
arch=$(grep ^Architecture /etc/pacman.conf | cut -d '=' -f2 | sed 's/ //g')
 +
if [[ $arch = "auto" ]]; then
 +
   arch=$(uname -m)
 
fi
 
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"
  
# For db files, or when using a custom repo (which most likely doesn't have any mirror),
+
# Para los archivos db, o cuando se utiliza un repositorio personalizado (que muy probablemente no tiene ningún mirror),
# use only the URL passed by pacman; Otherwise, extract the list of servers (from the include file of the repo) to download from
+
# 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
if [[ ${filename} = *.db.tar.gz || "${repo}" = "custom" ]]; then
+
url=$1
   url="${1}"
+
if ! [[ $filename = *.db || $repo = "custom" ]]; then
else
+
   mirrorlist=$(awk -F' *= *' '$0~"^\\["r"\\]",/Include *= */{l=$2} END{print l}' r=$repo /etc/pacman.conf)
   url=$(sed -n 's/^Server = //; s,$,/'"${filename}"', ; /^ftp/p; /^http/p' /etc/pacman.d/${repo} | head -n ${SERVERS})
+
   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
 
fi
  
# Passive FTP or not?
+
msg "Downloading $filename"
[ "${FTP_PASV}" = "yes" ] && OPT_FTP_PASV="--ftp-pasv" || OPT_FTP_PASV=""
+
cd /var/cache/pacman/pkg/
  
msg "Downloading ${filename}"
+
touch $STATS
  
${ARIA2_BIN} --log=${LOG} --timeout=${TIMEOUT} --max-tries=${MAX_TRIES} --allow-overwrite=true \
+
$ARIA2 --conf-path=$CONF --max-tries=1 --max-file-not-found=5 \
            --split=${CONNECTIONS} ${OPT_FTP_PASV} --file-allocation=${FILE_ALLOC} \
+
  --uri-selector=adaptive --server-stat-if=$STATS --server-stat-of=$STATS \
            --lowest-speed-limit=${MIN_SPEED} --max-download-limit=${MAX_SPEED} \
+
  --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}
+
  $url --out=${filename}.pacget && [ ! -f ${filename}.pacget.aria2 ] && mv ${filename}.pacget $2 && chmod 644 $2
  
exit 0
+
exit $?
</pre>
+
</nowiki>}}
  
Guarda este script como /usr/bin/pacget.
+
{{hc|/etc/pacget.conf|<nowiki>
chmod 755 /usr/bin/pacget
+
# El archivo de registro
Esto hace el script ejecutable
+
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
 +
</nowiki>}}
  
En /etc/pacman.conf se debe agregar lo siguiente:
+
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
 
  XferCommand = exec /usr/bin/pacget %u %o
  
PD: Si tu usas ftp.archlinux.org como el primer servidor listado en (/etc/pacman.d/*), algunos problemas pueden ocurrir cuando los mirrors todavía no se han sincronizado. Para hacer un buen uso del script escoge un mirror (que se sincronice frecuentemente) que sea mas apropiado para , y colócalo en el tope de la lista de servidores. Esto es para prevenir que solo descargue de ftp.archlinux.org cuando los mirrors no se han sincronizado.
+
{{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:
 +
 
 +
* {{ic|snarf}}: {{ic|1=XferCommand = /usr/bin/snarf -N %u}}
 +
* {{ic|lftp}}: {{ic|1=XferCommand = /usr/bin/lftp -c pget %u}}
 +
* {{ic|axel}}: {{ic|1=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 {{ic|/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 [[Improve_Pacman_Performance#Using_powerpill-light | 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 [[Mirrors#List_by_speed|rankmirrors]] para ordenar los mirrors listados en pacman, en base a la velocidad de conexión.
 +
 
 +
=== Usar Reflector ===
 +
 
 +
También puede usar [[Reflector (Español)|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
  
== Usar otras aplicaciones ==
+
== Compartir paquetes a través de una red LAN ==
  
Existen otras aplicaciones de descargas que se pueden usar con Pacman. Aquí están su configuración de XferCommand:
+
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.
  
    * snarf: XferCommand = /usr/bin/snarf -N %u
+
Véase [[Pacman_Tips#Network_shared_pacman_cache]].
    * lftp: XferCommand = /usr/bin/lftp -c pget %u
+

Revision as of 09:01, 19 March 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 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.