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

From ArchWiki
Jump to: navigation, search
(categorize)
m (recat.)
Line 1: Line 1:
[[Category:Español]]
+
[[Category:Package Management (Español)]]
 
{{i18n|Improve Pacman Performance}}
 
{{i18n|Improve Pacman Performance}}
 
==Mejorando la velocidad de acceso a la base de datos==
 
==Mejorando la velocidad de acceso a la base de datos==

Revision as of 06:54, 17 September 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

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-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.

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.

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.

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.

De todos modos, asegúrate que tienes la última versión de pacman por medio de:

pacman -Syu

Usando wget

  • Primero actualiza todo el sistema para comprobar que tienes la ultima versión de pacman:
pacman -Syu
  • Instala wget:
pacman -S wget
  • Ahora configura /etc/pacman.conf. Y agrega la siguiente linea en la sección de [option]:
XferCommand = /usr/bin/wget -c --passive-ftp -c %u
  • Ahora pacman bajará todos los paquetes usando wget.

Esto es recomendable si quieres usar configuraciones avanzadas de proxy que pacman no soporta.

Usando aria2

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.

Instálalo con pacman -S aria2 y edita /etc/pacman.conf agregando la siguiente línea a la sección [option]:

XferCommand = /usr/bin/aria2c -s 2 -m 2 -o %o %u

Ahora veamos las configuraciones:

  • /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


Aria2 Mirror Script

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,

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.

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.

#!/bin/bash

# ------------ Begin Configuration ------------ #

# The log file
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 ------------- #

msg() {
  echo ""
  if [ "${USE_COLOR}" = "yes" ]; then
    echo -ne "   \033[1;34m->\033[1;0m \033[1;1m${1}\033[1;0m" >&2
  else
    echo -n "   -> ${1}" >&2
  fi
}

ARIA2_BIN=$(which aria2c 2> /dev/null)

if [ ! -x ${ARIA2_BIN} ]; then
  echo "aria2c was not found or isn't executable."
  exit 1
fi

filename=$(basename ${1})
server=${1%/${filename}}

# 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

# Override number of connections for db files
if [[ ${filename} = *.db.tar.gz ]]; then
  CONNECTIONS=1
fi

# For db files, or when using a custom repo (which most likely doesn't have any mirror),
# use only the URL passed by pacman; Otherwise, extract the list of servers (from the include file of the repo) to download from
if [[ ${filename} = *.db.tar.gz || "${repo}" = "custom" ]]; then
  url="${1}"
else
  url=$(sed -n 's/^Server = //; s,$,/'"${filename}"', ; /^ftp/p; /^http/p' /etc/pacman.d/${repo} | head -n ${SERVERS})
fi

# Passive FTP or not?
[ "${FTP_PASV}" = "yes" ] && OPT_FTP_PASV="--ftp-pasv" || OPT_FTP_PASV=""

msg "Downloading ${filename}"

${ARIA2_BIN} --log=${LOG} --timeout=${TIMEOUT} --max-tries=${MAX_TRIES} --allow-overwrite=true \
             --split=${CONNECTIONS} ${OPT_FTP_PASV} --file-allocation=${FILE_ALLOC} \
             --lowest-speed-limit=${MIN_SPEED} --max-download-limit=${MAX_SPEED} \
             ${url} --out=${filename}.pacget && [ ! -f ${filename}.pacget.aria2 ] && mv ${filename}.pacget ${2} && chmod 644 ${2}

exit 0

Guarda este script como /usr/bin/pacget.

chmod 755 /usr/bin/pacget

Esto hace el script ejecutable

En /etc/pacman.conf se debe agregar lo siguiente:

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 tí, 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.

Usar otras aplicaciones

Existen otras aplicaciones de descargas que se pueden usar con Pacman. Aquí están su configuración de XferCommand:

   * snarf: XferCommand = /usr/bin/snarf -N %u
   * lftp: XferCommand = /usr/bin/lftp -c pget %u