Pacman optimizasyonu
From ArchWiki
i18n |
---|
English |
Deutsch |
Português |
Türkçe |
繁体中文 |
简体中文 |
Contents |
Veritabanı Erişimini Hızlandırmak
Pacman her bir paket için paket bilgilerini küçük, ayrı dosyalar içinde saklar. Veritabanı erişimini hızlandırmak veritabanıyla ilgili görevler için gerekli süreyi kısaltır. Örneğin; paket aramak veya paket bağımlılıklarını çözmek gibi.
En güvenli ve kolay metot yolu "root" olarak şu komutu çalıştırmaktır:
pacman-optimize && sync
Böylece bütün küçük dosyalar sabit diskin fiziksel bir kısmında yanyana getirilecektir böylece sabit diskin kafası bütün paketlere erişmek için çok fazla hareket etmek zorunda kalmayacaktır. Bu yöntem güvenlidir fakat kesin değildir. Dosya sisteminize, disk kullanımınıza ve sabit diskinizdeki boş alana bağlıdır.
İleri Ayarlar
ody forumda Pacman veritabanını bir "loopback dosya sistemi" ile değiştirip küçük dosyaların sabit diskte bir arada kalmasını sağlayan bir betik yayımladı.Bir çok kullanıcı bu şekilde oldukça hızlanma olduğunu bildirdi. Fakat aynı zamanda bir çok da hata bildirildi. Bu yüzden eğer tecrübeli bir kullanıcı değilseniz bu yöntemi kullanmayın.
ody'nin betiğini kullanmak için loopback dosya sistemi desteğiyle derlenmiş bir kernele sahip olmalısınız. Öntanımlı kerneller zaten bu desteğe sahip. O yüzden eğer ki kendi kernelinizi derliyorsanız buna dikkat etmelisiniz.
Paket İndirme Hızını Arttırmak
Öncelikle eğer indirme hızınız düşük ise ftp.archlinux.org dışında bir sunucu seçtiğinizden emin olun. Çünkü 2007 Mart itibariyle o sunucuya limit konulmuştur.
Pacman'in paket indirme hızı Pacman'in kendi gömülü paket indirme sisteminin dışında farklı bir program kullanılarak kullanılarak arttırılabilir.
Herşeyden önce en en son Pacman sürümünü kullandığınızdan emin olun.
pacman -Sy pacman
wget Kullanmak
Bu yöntem aynı zamanda Pacman'in yerleşik özelliklerinden daha güçlü proxy ayarlarına ihtiyaç uyuyorsanız oldukça kullanışlıdır.
wget
'i kullanmak için önce pacman -S wget
ile wget'i sisteminize kurun ve /etc/pacman.conf
dosyasını düzenleyerek [options]
kısmına aşağıdaki satırı ekleyin:
XferCommand = /usr/bin/wget -c --passive-ftp -c %u
wget
parametrelerini /etc/pacman.conf
dosyasına koymak yerine doğrudan wget
konfigürasyon dosyasını (tüm sistem dosyası /etc/wgetrc
, her kullanıcı için olan dosya $HOME/.wgetrc
) düzenleyerek de ekleyebilirsiniz.
aria2 Kullanmak
aria2 web sitesine göre aria2; "Devam etme özelliği ve parçalı indirme özelliği olan bir indirme aracıdır. HTTP/HTTPS FTP/BitTorrent/Metalink destekler". Bu demek oluyor ki bir Arch yansısına aynı anda bir çok HTTP/FTP bağlantısı yapabilirsiniz. Böylece indirme hızı artacaktır.
Sisteme pacman -S aria2
ile kurun ve /etc/pacman.conf
dosyasını [option]
kısmına şu satırı ekleyerek düzenleyin:
XferCommand = /usr/bin/aria2c -s 2 -m 2 -d / -o %o %u
Seçenekleri bir gözden geçirelim:
- /usr/bin/aria2c - aria2 uygulamasının yeri
- -s 2 - Eşzamanlı 2 bağlantı kullan (isterseniz daha fazla ayarlayabilirsiniz ama gözle görülür bir değişiklik olmayacaktır)
- -m 2 - Her yansı için 2 indirme isteği gönder
- -o %o - Pacman'in belirlediği dosyaya çıktı ver
- %u - Pacman'in belirlediği dosyayı indir
Powerpill
Powerpill paketleri indirmek için aria2 kullanan bir pacman sarma paketidir. Diğer aria2 çözümlerinden farklı olarak powerpill tüm dosyalar için eşzamanlı indirme kullanır fakat sadece büyük dosyalar için parçalı indirme yapar. Böylece gereksiz yere küçük dosyaları bölmekle uğraşarak bant genişliğinizi boşa harcamaz. Powerpill hakkında daha fazla bilgiyi ve son versiyonunu Community Contributions forumundaki bu başlıkta bulabilirsiniz. AUR'da bu paketi bulabilirsiniz.
Pacget Aria2 Yansı Betiği
Bu betik geniş bant kullanıcılarının indirme hızlarını oldukça arttıracaktır. Betik önce Pacman'den indirme linkini alır, sonra /etc/pacman.d/mirrorlist dosyasına bakarak hepsini aria2 yansılarıymış gibi ekler. Böylece aria2 10-20 sunucuya hepsinden aynı anda indirecek şekilde bağlanır (normalde bu sayı 4'tür). Bu şekilde geniş bant kullanıcılarının hızında çok büyük bir artık görülür. Bu yöntem çoğu insan için indirme hızlarını en üst düzeye getirir.
Şunu unutmayın XferCommand'da /usr/bin/pacget in başına 'exec' koymak zorundasınız. Bu pacget ya da aria2'yi sonlandırdığınızda Pacman'in de sonlanması için gereklidir. Bu şekilde Pacman dosya indirmesi söylenmediği zaman indirmeyi sürdürmeyecektir.
UYARI: Eğer aç gözlü davranırsanız bir çok sorun yaşarsınız. Sadece ana sunucuyla düzenli güncellenen güvenilir ve işe yarar sunucuları (5 tane bile fazladır) seçin. Bozuk dosya gibi sorunlarla karşılaşmak istemiyorsanız güncel olmayan sunucuları seçmeyin.
UYARI: Özel depolarda test edilmesi gerekiyor.
#!/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 } error() { if [ "$USE_COLOR" = "yes" ]; then echo -e "\033[1;31m==> ERROR:\033[1;0m \033[1;1m$1\033[1;0m" >&2 else echo "==> ERROR: $1" >&2 fi } ARIA2_BIN=$(which aria2c 2> /dev/null) # ----- do some checks first ----- if [ ! -x "$ARIA2_BIN" ]; 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}} # Determine which repo is being used repo=$( awk -F'/' '$(NF-2)~/^(community|core|extra|testing)$/{print $(NF-2)}' <<<$server ) [ -z $repo ] && repo="custom" # Override number of connections for db files [[ ${filename} = *.db.tar.gz ]] && CONNECTIONS=1 # 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 url=${1} if ! [[ ${filename} = *.db.tar.gz || ${repo} = "custom" ]]; then mirrorlist=$( awk -F' *= *' '$0~"^\\["r"\\]",/Include *= */{l=$2} END{print l}' r=${repo} /etc/pacman.conf ) [ -n mirrorlist ] && url=$( sed -r '/^Server *= */!d; s/Server *= *//; s/\$repo'"/${repo}/; s:$:/${filename}:" ${mirrorlist}|head -n ${SERVERS} ) #awk way of doing the same thing, #url=$( awk -F' *= *' 'i<=n&&$1=="Server"{gsub(/\$repo/, r, $2);print $2"/"f;i++}' n=${SERVERS} r=${repo} f=${filename} ${mirrorlist} ) fi # Passive FTP or not? [ "${FTP_PASV}" = "yes" ] && OPT_FTP_PASV="--ftp-pasv" || OPT_FTP_PASV="" msg "Downloading ${filename}" cd /var/cache/pacman/pkg/ ${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 $?
Bu betiği /usr/bin/pacget olarak kaydedin.
chmod 755 /usr/bin/pacget
Bu komut betiği çalıştırılabilir yapar.
/etc/pacman.conf içinde [options] bölümüne aşağıdaki satır eklenmelidir.
XferCommand = exec /usr/bin/pacget %u %o
NOT: İlk sunucu olarak ftp.archlinux.org kullanıyorsanız, kullandığınız sunucular henüz senkronlanmamışsa bazı sorunlarla karşılaşabilirsiniz. Bu betiği etkili bir şekilde kullanabilmek için düzenli senkronlanan bir sunucu seçin ve sunucu listesinde en üste onu koyun. Bu işlem, sunucular henüz seknronlanmadığında sadece frp.archlinux.org'dan indirmenizi önler.
Diğer Uygulamaları Kullanmak
Pacman ile kullanabileceğiniz başka indirme uygulamaları da vardır. Bunlardan bazıları ve uygun olan XferCommand ayarları şunlardır:
-
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