Jump to content

pacman (हिन्दी)

From ArchWiki

pacman package manager Arch Linux की मुख्य विशिष्ट विशेषताओं में से एक है। यह एक सरल binary package format को आसानी से उपयोग होने वाले Arch build system के साथ जोड़ता है। pacman का लक्ष्य packages को आसानी से manage करना संभव बनाना है, चाहे वे official repositories से हों या user के खुद के build किए हुए।

pacman package lists को master server के साथ synchronize करके system को up-to-date रखता है। यह server/client model user को एक सरल command के साथ सभी required dependencies सहित packages download/install करने की अनुमति भी देता है।

pacman C programming language में लिखा गया है और packaging के लिए bsdtar(1) tar format का उपयोग करता है।

Tip pacman package में makepkg और vercmp(8) जैसे tools शामिल हैं। अन्य उपयोगी tools जैसे pactree और checkupdates pacman-contrib में मिलते हैं (formerly pacman का हिस्सा थे)। पूरी list देखने के लिए pacman -Ql pacman pacman-contrib | grep -E 'bin/.+' run करें।

Usage

निम्नलिखित केवल उन operations का एक छोटा सा नमूना है जो pacman perform कर सकता है। अधिक examples पढ़ने के लिए, pacman(8) देखें।

Tip जिन लोगों ने पहले अन्य Linux distributions का उपयोग किया है, उनके लिए एक सहायक Pacman/Rosetta लेख है।

Installing packages

एक package एक archive होता है जिसमें निम्नलिखित होते हैं:

  • एक application की सभी (compiled) files
  • application के बारे में metadata, जैसे application name, version, dependencies, आदि।
  • pacman के लिए installation files और directives

Arch का package manager pacman उन packages को install, update और remove कर सकता है। खुद programs को compile और install करने के बजाय packages का उपयोग करने के कई लाभ हैं:

  • आसानी से updatable: pacman जैसे ही updates available होते हैं, existing packages को update कर देगा
  • dependency checks: pacman आपके लिए dependencies handle करता है, आपको केवल program specify करना होता है और pacman उसे उसकी जरूरत के हर दूसरे program के साथ install कर देता है
  • clean removal: pacman के पास एक package की हर file की list होती है; इस तरह, जब आप किसी package को remove करने का निर्णय लेते हैं तो कोई भी file अनजाने में पीछे नहीं छूटती।
Note
  • Packages में अक्सर optional dependencies होती हैं जो ऐसे packages होते हैं जो application को अतिरिक्त functionality प्रदान करते हैं लेकिन इसे चलाने के लिए strictly required नहीं होते। किसी package को install करते समय, pacman एक package की optional dependencies को list करेगा, लेकिन वे pacman.log में नहीं मिलेंगी। किसी package की optional dependencies देखने के लिए #Querying package databases command का उपयोग करें।
  • जब आप किसी package को केवल किसी अन्य package की (optional) dependency के रूप में install कर रहे हों (अर्थात आपके द्वारा explicitly required नहीं), तो --asdeps option का उपयोग करने की सिफारिश की जाती है। विवरण के लिए, #Installation reason section देखें।
Warning Arch में packages install करते समय, package list को system upgrade किए बिना refresh करने से बचें (उदाहरण के लिए, जब कोई package official repositories में नहीं मिलता)। व्यवहार में, pacman -Syu package_name के बजाय pacman -Sy package_name चलाएं, क्योंकि पहले वाले से dependency issues हो सकते हैं। System maintenance#Partial upgrades are unsupported और BBS#89328 देखें।

Installing specific packages

एक single package या packages की list को dependencies सहित install करने के लिए, निम्न command चलाएँ:

# pacman -S package_name1 package_name2 ...
Tip उसी command का उपयोग किसी package को reinstall करने के लिए भी किया जा सकता है।

regex के साथ packages की list install करने के लिए (देखें यह forum thread):

# pacman -S $(pacman -Ssq package_regex)

कभी-कभी एक package के multiple versions अलग-अलग repositories में होते हैं (जैसे extra और extra-testing)। इस उदाहरण में extra repository से version install करने के लिए, repository को package name के सामने define करना होगा:

# pacman -S extra/package_name

ऐसे कई packages को install करने के लिए जिनके नामों में समान patterns हैं, कोई curly brace expansion का उपयोग कर सकता है। उदाहरण के लिए:

# pacman -S plasma-{desktop,mediacenter,nm}

इसे जितनी आवश्यकता हो उतने levels तक expand किया जा सकता है:

# pacman -S plasma-{workspace{,-wallpapers},pa}
Virtual packages

Virtual package एक विशेष package होता है जो अपने आप में exist नहीं करता, बल्कि एक या अधिक अन्य packages द्वारा provided किया जाता है। Virtual packages अन्य packages को किसी specific package को dependency के रूप में नामित न करने देते हैं, यदि कई candidates हों। Virtual packages को उनके नाम से install नहीं किया जा सकता, इसके बजाय वे आपके system में तब install हो जाते हैं जब आपने कोई ऐसा package install कर लिया होता है जो उस virtual package को provide करता है। एक उदाहरण है dbus-units package.

Tip जब multiple candidates हों, तो प्रस्तुत विकल्पों की list पहले repositories द्वारा उसी क्रम में sort होगी जिसमें वे pacman.conf में appear होते हैं, फिर alphabetically जब एक ही repository से multiple results हों।

Installing package groups

कुछ packages packages के group से संबंधित होते हैं जिन्हें सभी एक साथ install किया जा सकता है। उदाहरण के लिए, command चलाने पर:

# pacman -S gnome

आपको gnome group में से उन packages को select करने के लिए प्रेरित करेगा जिन्हें आप install करना चाहते हैं।

कभी-कभी एक package group में बहुत सारे packages होते हैं, और हो सकता है कि आप केवल कुछ ही install करना चाहते हों या नहीं करना चाहते हों। उन सभी numbers को enter करने के बजाय जिन्हें आप नहीं चाहते, कभी-कभी निम्नलिखित syntax के साथ packages या packages के ranges को select या exclude करना अधिक convenient होता है:

Enter a selection (default=all): 1-10 15

जो installation के लिए packages 1 से 10 और 15 select करेगा, या:

Enter a selection (default=all): ^5-8 ^2

जो 5 से 8 और 2 को छोड़कर सभी packages को installation के लिए select करेगा।

यह देखने के लिए कि gnome group में कौन से packages हैं, run करें:

$ pacman -Sg gnome

यह देखने के लिए कि कौन से package groups उपलब्ध हैं, https://archlinux.org/groups/ भी देखें।

Note यदि list में कोई package पहले से ही system पर install है, तो उसे reinstall किया जाएगा, भले ही वह पहले से up-to-date हो। इस behavior को --needed option से override किया जा सकता है।

Removing packages

एक single package को remove करने के लिए, उसकी सभी dependencies को install छोड़ते हुए:

# pacman -R package_name

किसी package और उसकी dependencies को remove करने के लिए जो किसी अन्य install किए गए package द्वारा required न हों:

# pacman -Rs package_name
Warning किसी group को remove करते समय, जैसे gnome, यह group में packages के install reason को ignore करता है, क्योंकि यह ऐसे कार्य करता है जैसे group का हर package अलग से listed हो। Dependencies का install reason अभी भी respected होता है।

उपरोक्त कभी-कभी ऐसे group को remove करते समय चलने से मना कर सकता है जिसमें अन्यथा needed packages हों। इस स्थिति में try करें:

# pacman -Rsu package_name

किसी package, उसकी dependencies और target package पर depend करने वाले सभी packages को remove करने के लिए:

Warning यह operation recursive है, और सावधानी से उपयोग किया जाना चाहिए क्योंकि यह कई potentially needed packages को remove कर सकता है।
# pacman -Rsc package_name

किसी package को, जो किसी अन्य package द्वारा required है, dependent package को remove किए बिना remove करने के लिए:

Warning निम्नलिखित operation system को break कर सकता है और इसे avoid किया जाना चाहिए। System maintenance#Avoid certain pacman commands देखें।
# pacman -Rdd package_name

pacman कुछ applications को remove करते समय important configuration files को save करता है और उन्हें extension .pacsave के साथ नाम देता है। इन backup files के creation को रोकने के लिए -n option का उपयोग करें:

# pacman -Rn package_name
Note Pacman उन configurations को नहीं remove करेगा जो application स्वयं create करता है (उदाहरण के लिए home directory में "dotfiles")।

Upgrading packages

Warning
  • Users से अपेक्षा की जाती है कि वे अपने systems को नियमित रूप से upgrade करने के लिए System maintenance#Upgrading the system section में दिए गए मार्गदर्शन का पालन करें और निम्न command को आँख बंद करके न चलाएँ।
  • Arch केवल full system upgrades का समर्थन करता है। विवरण के लिए System maintenance#Partial upgrades are unsupported और #Installing packages देखें।

pacman केवल एक command से system पर सभी packages को update कर सकता है। system कितना up-to-date है, इसके आधार पर इसमें काफी समय लग सकता है। निम्न command repository databases को synchronize करती है और system के packages को update करती है, configured repositories में न होने वाले "local" packages को छोड़कर:

# pacman -Syu

Querying package databases

pacman local package database को -Q flag के साथ, sync database को -S flag के साथ और files database को -F flag के साथ query करता है। प्रत्येक flag के संबंधित suboptions के लिए pacman -Q --help, pacman -S --help और pacman -F --help देखें।

Note Up-to-date results पाने के लिए files database को query करने से पहले sync करें:
# pacman -Fy
Tip आप pacman files database को weekly refresh करने के लिए pacman-filesdb-refresh.timer (pacman-contrib package के अंदर प्रदान किया गया) को enable/start कर सकते हैं।

pacman database में packages को खोज सकता है, packages के नाम और descriptions दोनों में खोज कर:

$ pacman -Ss string1 string2 ...

कभी-कभी, -s का builtin ERE (Extended Regular Expressions) बहुत सारे unwanted results का कारण बन सकता है, इसलिए इसे केवल package name से match करने तक सीमित करना होता है; description या किसी अन्य field से नहीं:

$ pacman -Ss '^vim-'

पहले से install किए गए packages को खोजने के लिए:

$ pacman -Qs string1 string2 ...

remote packages में package file names खोजने के लिए:

$ pacman -F string1 string2 ...

किसी दिए गए package के बारे में extensive information प्रदर्शित करने के लिए (जैसे उसकी dependencies):

$ pacman -Si package_name

locally install किए गए packages के लिए:

$ pacman -Qi package_name

दो -i flags pass करने से backup files और उनके modification states की list भी प्रदर्शित होगी:

$ pacman -Qii package_name

किसी package द्वारा install की गई files की list प्राप्त करने के लिए:

$ pacman -Ql package_name

किसी remote package द्वारा install की गई files की list प्राप्त करने के लिए:

$ pacman -Fl package_name

किसी package द्वारा install की गई files की उपस्थिति सत्यापित करने के लिए:

$ pacman -Qk package_name

k flag को दो बार pass करने से अधिक गहन जांच होगी।

यह जानने के लिए database query करें कि file system में कोई file किस package से संबंधित है:

$ pacman -Qo /path/to/file_name

यह जानने के लिए database query करें कि कोई file किस remote package से संबंधित है:

$ pacman -F /path/to/file_name

उन सभी packages को list करने के लिए जो अब dependencies के रूप में required नहीं हैं (orphans):

$ pacman -Qdt

उन सभी packages को list करने के लिए जो explicitly install किए गए हैं और dependencies के रूप में required नहीं हैं:

$ pacman -Qet

अधिक examples के लिए pacman/Tips and tricks देखें।

उन्नत functionality के लिए, pkgfile install करें, जो सभी files और उनसे संबंधित packages के साथ एक अलग database का उपयोग करता है।

Pactree

Note pactree(8) अब pacman package का हिस्सा नहीं है। इसके बजाय यह pacman-contrib में पाया जा सकता है।

किसी package का dependency tree देखने के लिए:

$ pactree package_name

किसी package का dependent tree देखने के लिए, pactree में reverse flag -r pass करें।

Database structure

pacman databases आमतौर पर /var/lib/pacman/sync पर स्थित होते हैं। /etc/pacman.conf में specified प्रत्येक repository के लिए, वहाँ एक corresponding database file होगी। Database files gzipped tar archives होती हैं जिनमें प्रत्येक package के लिए एक directory होती है, उदाहरण के लिए which package के लिए:

$ tree which-2.21-5
which-2.21-5
|-- desc

desc file में meta data होता है जैसे package description, dependencies, file size और MD5 hash.

Cleaning the package cache

Pacman अपने downloaded packages को /var/cache/pacman/pkg/ में store करता है और पुराने या uninstalled versions को स्वचालित रूप से नहीं हटाता। इसके कुछ लाभ हैं:

  1. यह किसी package को downgrade करने की अनुमति देता है बिना पिछले version को अन्य माध्यमों से प्राप्त करने की आवश्यकता के, जैसे Arch Linux Archive
  2. एक package जो uninstall किया जा चुका है, उसे cache directory से सीधे आसानी से reinstall किया जा सकता है, repository से नए download की आवश्यकता नहीं होती।

हालाँकि, directory को अनिश्चित काल तक size में बढ़ने से रोकने के लिए समय-समय पर cache को साफ करना आवश्यक है।

pacman-contrib package के अंदर प्रदान की गई paccache(8) script, default रूप से install और uninstall किए गए packages के सभी cached versions को हटा देती है, सबसे recent तीन को छोड़कर:

# paccache -r

अप्रयुक्त packages को weekly discard करने के लिए paccache.timer को Enable और start करें। आप service के लिए arguments को /etc/conf.d/pacman-contrib में configure कर सकते हैं, उदाहरण के लिए नीचे दो examples के लिए PACCACHE_ARGS='-k1' या PACCACHE_ARGS='-uk0' के साथ।

Tip
Template error Are you trying to use the = sign? Visit Help:Template#Escape template-breaking characters for workarounds.

आप यह भी define कर सकते हैं कि आप कितने recent versions रखना चाहते हैं। केवल एक past version रखने के लिए उपयोग करें:

# paccache -rk1

paccache की कार्रवाई को uninstalled packages तक सीमित करने के लिए -u/--uninstalled switch जोड़ें। उदाहरण के लिए uninstalled packages के सभी cached versions को हटाने के लिए, निम्नलिखित का उपयोग करें:

# paccache -ruk0

अधिक options के लिए paccache -h देखें।

pacman के पास cache और उन repositories से leftover database files को साफ करने के लिए कुछ built-in options भी हैं जो अब configuration file /etc/pacman.conf में listed नहीं हैं। हालाँकि pacman past versions की संख्या रखने की possibility प्रदान नहीं करता है और इसलिए paccache default options की तुलना में अधिक aggressive है।

उन सभी cached packages को हटाने के लिए जो वर्तमान में install नहीं हैं, और अप्रयुक्त sync databases को, execute करें:

# pacman -Sc

cache से सभी files को हटाने के लिए, clean switch का दो बार उपयोग करें, यह सबसे aggressive approach है और cache directory में कुछ भी नहीं छोड़ेगा:

# pacman -Scc
Warning किसी को install किए गए packages के सभी past versions और सभी uninstalled packages को cache से हटाने से बचना चाहिए, जब तक कि किसी को desperately कुछ disk space खाली करने की आवश्यकता न हो। यह बिना उन्हें फिर से download किए packages को downgrade या reinstall करने से रोकेगा।

pkgcachecleanAUR और pacleanerAUR cache को साफ करने के दो और alternatives हैं।

Additional commands

बिना install किए package download करें:

# pacman -Sw package_name

एक 'local' package install करें जो remote repository से नहीं है (उदाहरण के लिए package AUR से है):

# pacman -U /path/to/package/package_name-version.pkg.tar.zst

pacman के cache में local package की एक copy रखने के लिए, उपयोग करें:

# pacman -U file:///path/to/package/package_name-version.pkg.tar.zst

एक 'remote' package install करें (pacman की configuration files में बताए गए repository से नहीं):

# pacman -U http://www.example.com/repo/example.pkg.tar.zst

Dry run

pacman install या remove किए जाने वाले packages को हमेशा list करता है, और कोई भी कार्रवाई करने से पहले permission माँगता है।

एक processable format में list प्राप्त करने के लिए, और -S, -U और -R की कार्रवाइयों को रोकने के लिए, आप -p का उपयोग कर सकते हैं, जो --print का संक्षिप्त रूप है।

इस list को विभिन्न तरीकों से format करने के लिए --print-format जोड़ा जा सकता है। --print-format %n package versions के बिना एक list return करेगा।

Installation reason

pacman database install किए गए packages को installation reason के अनुसार दो groups में व्यवस्थित करता है:

  • explicitly-installed: वे packages जो शाब्दिक रूप से एक सामान्य pacman -S या -U command को pass किए गए थे;
  • dependencies: वे packages जो, सामान्यतः कभी भी pacman installation command को pass नहीं किए गए थे, लेकिन implicitly install किए गए क्योंकि वे explicitly install किए गए packages द्वारा required थे।

किसी package को install करते समय, उसके installation reason को dependency में बदलना संभव है:

# pacman -S --asdeps package_name

यह command सामान्यतः इसलिए उपयोग की जाती है क्योंकि explicitly-installed packages optional packages प्रदान कर सकते हैं, आमतौर पर non-essential features के लिए जिनके बारे में user को discretion होता है।

Tip --asdeps के साथ optional dependencies install करना यह सुनिश्चित करेगा कि, यदि आप orphans remove करते हैं, तो pacman इस तरह set किए गए optional packages को भी remove कर देगा।

हालाँकि, किसी package को reinstall करते समय, वर्तमान installation reason default रूप से preserved रहता है।

Explicitly-installed packages की list pacman -Qe के साथ दिखाई जा सकती है, जबकि dependencies की complementary list pacman -Qd के साथ दिखाई जा सकती है।

पहले से install किए गए package के installation reason को बदलने के लिए, execute करें:

# pacman -D --asdeps package_name

विपरीत operation करने के लिए --asexplicit का उपयोग करें।

Note Upgrade करते समय --asdeps और --asexplicit options का उपयोग करना, जैसे कि pacman -Syu package_name --asdeps के साथ, हतोत्साहित किया जाता है। यह न केवल install किए जा रहे package के installation reason को बदल देगा, बल्कि upgrade किए जा रहे packages के भी।

What happens during package install/upgrade/removal

सफल होने पर, एक transaction का workflow पाँच high-level steps के साथ-साथ pre/post transaction hooks का पालन करता है:

  1. Transaction initialize करें यदि कोई database lock नहीं है।
  2. चुनें कि transaction में कौन से packages जोड़े या हटाए जाएंगे।
  3. Transaction prepare करें, flags के आधार पर, sync databases, packages और उनकी dependencies पर sanity checks perform करके।
  4. Transaction commit करें:
    1. जहाँ applicable हो, packages download करें (_alpm_sync_load).
    2. यदि पूर्व-मौजूद pacman PreTransaction hooks apply होते हैं, तो वे execute किए जाते हैं।
    3. जो packages to-be-replaced हैं, conflicting हैं, या remove किए जाने के लिए explicitly targeted हैं, उन्हें remove किया जाता है।
    4. यदि add करने के लिए packages हैं, तो प्रत्येक package commit किया जाता है:
      1. यदि package में install script है, तो उसका pre_install function execute किया जाता है (या upgraded या removed package के मामले में pre_upgrade या pre_remove).
      2. pacman package के पूर्व-मौजूद version से सभी files को delete करता है (upgraded या removed package के मामले में)। हालाँकि, जिन files को package में configuration files के रूप में marked किया गया था, उन्हें रखा जाता है (देखें Pacnew and Pacsave).
      3. pacman package को untar करता है और उसकी files को file system में डालता है (installed या upgraded package के मामले में)। जो files रखी गई और manually modified configuration files (पिछला step देखें) को overwrite करेंगी, उन्हें एक नए नाम (.pacnew) के साथ store किया जाता है।
      4. यदि package में install script है, तो उसका post_install function execute किया जाता है (या upgraded या removed package के मामले में post_upgrade या post_remove).
    5. यदि transaction के अंत में मौजूद pacman PostTransaction hooks apply होते हैं, तो वे execute किए जाते हैं।
  5. Transaction और transaction resource (यानी database lock) release करें।

Configuration

pacman settings /etc/pacman.conf में स्थित हैं: यह वह स्थान है जहाँ user प्रोग्राम को desired तरीके से काम करने के लिए configure करता है। Configuration file के बारे में गहन जानकारी pacman.conf(5) में पाई जा सकती है।

General options

General options [options] section में हैं। यहाँ क्या किया जा सकता है, इसकी जानकारी के लिए pacman.conf(5) पढ़ें या default pacman.conf में देखें।

Comparing versions before updating

उपलब्ध packages के old और new versions देखने के लिए, /etc/pacman.conf में "VerbosePkgLists" line को uncomment करें। pacman -Syu का output इस प्रकार होगा:

Package (6)             Old Version  New Version  Net Change  Download Size

extra/libmariadbclient  10.1.9-4     10.1.10-1      0.03 MiB       4.35 MiB
extra/libpng            1.6.19-1     1.6.20-1       0.00 MiB       0.23 MiB
extra/mariadb           10.1.9-4     10.1.10-1      0.26 MiB      13.80 MiB

Parallel downloads

एक साथ (समानांतर) download किए जा रहे packages की संख्या /etc/pacman.conf में [options] के तहत ParallelDownloads option के साथ configure की जाती है। pacman package के साथ shipped /etc/pacman.conf इसे 5 पर set करता है। यदि option unset है, तो packages sequentially download किए जाएंगे।

Skip package from being upgraded

Warning Packages को skip करने में सावधानी बरतें, क्योंकि partial upgrades समर्थित नहीं हैं।

सिस्टम को upgrade करते समय किसी specific package को skip करने के लिए, [options] section में यह line जोड़ें:

IgnorePkg=linux

कई packages के लिए space-separated list का उपयोग करें, या अतिरिक्त IgnorePkg lines का उपयोग करें। साथ ही, glob patterns का उपयोग किया जा सकता है। यदि आप packages को केवल एक बार skip करना चाहते हैं, तो आप command-line पर --ignore option का भी उपयोग कर सकते हैं - इस बार comma-separated list के साथ।

Ignored packages को pacman -S का उपयोग करके upgrade करना अभी भी संभव होगा: इस स्थिति में pacman आपको याद दिलाएगा कि packages को IgnorePkg statement में शामिल किया गया है।

Skip package group from being upgraded

Warning Package groups को skip करने में सावधानी बरतें, क्योंकि partial upgrades समर्थित नहीं हैं।

Packages की तरह, पूरे package group को skip करना भी संभव है:

IgnoreGroup=gnome

Skip file from being upgraded

NoUpgrade directive के साथ listed सभी files को package install/upgrade के दौरान कभी नहीं छुआ जाएगा, और नई files .pacnew extension के साथ install की जाएंगी।

NoUpgrade=path/to/file

कई files को इस तरह specified किया जा सकता है:

NoUpgrade=path/to/file1 path/to/file2
Note Path package archive में files को संदर्भित करता है। इसलिए, leading slash शामिल न करें।

Skip files from being installed to system

Specific files या directories के installation को हमेशा skip करने के लिए उन्हें NoExtract के तहत list करें। उदाहरण के लिए, bash completion scripts को install करने से बचने के लिए, उपयोग करें:

NoExtract=usr/share/bash-completion/completions/*

बाद के rules पिछले ones को override करते हैं, और आप ! जोड़कर किसी rule को negate कर सकते हैं।

Maintain several configuration files

यदि आपके पास कई configuration files हैं (उदाहरण के लिए main configuration और testing repository enabled के साथ configuration) और आपको configurations के बीच options share करने हों, तो आप configuration files में declared Include option का उपयोग कर सकते हैं, उदाहरण के लिए:

Include = /path/to/common/settings

जहाँ /path/to/common/settings file में दोनों configurations के लिए समान options होते हैं।

Hooks

pacman /usr/share/libalpm/hooks/ directory से pre- और post-transaction hooks चला सकता है; अधिक directories को pacman.conf में HookDir option के साथ specified किया जा सकता है, जो default रूप से /etc/pacman.d/hooks है। Hook file names के अंत में .hook होना चाहिए। pacman hooks interactive नहीं हैं।

pacman hooks का उपयोग, उदाहरण के लिए, packages के installation के दौरान system users और files को स्वचालित रूप से create करने के लिए systemd-sysusers और systemd-tmpfiles के साथ combination में किया जाता है। उदाहरण के लिए, tomcat8AUR specifies करता है कि वह tomcat8 नामक एक system user और इस user के स्वामित्व वाली कुछ directories चाहता है। pacman hooks systemd-sysusers.hook और systemd-tmpfiles.hook systemd-sysusers और systemd-tmpfiles को invoke करते हैं जब pacman यह निर्धारित करता है कि tomcat8AUR में users और tmp files specified करने वाली files हैं।

alpm hooks के बारे में अधिक जानकारी के लिए, alpm-hooks(5) देखें।

Repositories and mirrors

विशेष [options] section के अलावा, pacman.conf में प्रत्येक अन्य [section] एक package repository को परिभाषित करता है जिसका उपयोग किया जाना है। एक repository packages का एक logical संग्रह है, जो physically एक या अधिक servers पर store होते हैं: इस कारण प्रत्येक server को repository के लिए एक mirror कहा जाता है।

Repositories को official और unofficial के बीच distinguish किया जाता है। Configuration file में repositories का क्रम महत्वपूर्ण है; पहले listed repositories बाद में listed repositories पर precedence लेंगी जब दो repositories में packages के identical names हों, चाहे version number कुछ भी हो। किसी repository को add करने के बाद उसका उपयोग करने के लिए, आपको पहले पूरे system को upgrade करना होगा।

प्रत्येक repository section अपने mirrors की list को सीधे या Include directive के माध्यम से एक dedicated external file में define करने की अनुमति देता है; उदाहरण के लिए, official repositories के mirrors /etc/pacman.d/mirrorlist से included हैं। Mirror configuration के लिए Mirrors लेख देखें।

Package cache directory

pacman downloaded package files को cache में store करता है, pacman.conf के [options] section में CacheDir द्वारा निरूपित एक directory में (यदि set न हो तो default /var/cache/pacman/pkg/ होता है)।

Cache directory समय के साथ बढ़ सकती है, भले ही install किए गए packages के केवल सबसे fresh versions ही रखे जाएँ।

यदि आप उस directory को किसी अधिक convenient स्थान पर ले जाना चाहते हैं, तो निम्न में से एक करें:

  • pacman.conf में CacheDir option को new directory पर set करें। Trailing slash बनाए रखना याद रखें। यह recommended solution है
  • /var/cache/pacman/pkg/ में एक dedicated partition या उदाहरण के लिए Btrfs subvolume mount करें।
  • चयनित directory को /var/cache/pacman/pkg/ में bind-mount करें।
Warning /var/cache/pacman/pkg/ directory को किसी अन्य स्थान पर symlink न करें। यह pacman को गलत व्यवहार करने का कारण बनेगा , खासकर जब pacman स्वयं को update करने का प्रयास करता है।

Package security

pacman package signatures का समर्थन करता है, जो packages में सुरक्षा की एक अतिरिक्त layer जोड़ते हैं। Default configuration, SigLevel = Required DatabaseOptional, सभी packages के लिए वैश्विक स्तर पर signature verification सक्षम करता है। इसे per-repository SigLevel lines द्वारा override किया जा सकता है। Package signing और signature verification के बारे में अधिक जानकारी के लिए, pacman-key देखें।

Troubleshooting

"Failed to commit transaction (conflicting files)" error

यदि आपको निम्नलिखित error दिखाई देता है: [१]

error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.

ऐसा इसलिए हो रहा है क्योंकि pacman ने एक file conflict detect किया है, और design के अनुसार, आपके लिए files को overwrite नहीं करेगा। यह design के अनुसार है, कोई flaw नहीं।

समस्या आमतौर पर हल करने में trivial है (हालाँकि सुनिश्चित करने के लिए, आपको यह पता लगाने का प्रयास करना चाहिए कि ये files पहले स्थान पर वहाँ कैसे पहुँचीं)। एक सुरक्षित तरीका यह है कि पहले जाँच करें कि क्या कोई अन्य package file का स्वामी है (pacman -Qo /path/to/file)। यदि file किसी अन्य package के स्वामित्व में है, तो bug report file करें। यदि file किसी अन्य package के स्वामित्व में नहीं है, तो उस file को rename करें जो "filesystem में exists" है और update command को फिर से जारी करें। यदि सब ठीक रहता है, तो file को बाद में हटाया जा सकता है।

यदि आपने pacman का उपयोग किए बिना मैन्युअल रूप से कोई प्रोग्राम install किया था, उदाहरण के लिए make install के माध्यम से, तो आपको इस प्रोग्राम को उसकी सभी files के साथ remove/uninstall करना होगा। Pacman tips#Identify files not owned by any package भी देखें।

प्रत्येक install किया गया package एक /var/lib/pacman/local/package-version/files file प्रदान करता है जिसमें इस package के बारे में metadata होता है। यदि यह file corrupted हो जाती है, खाली है या गायब हो जाती है, तो इसके परिणामस्वरूप package को update करने का प्रयास करते समय file exists in filesystem errors आते हैं। ऐसी error आमतौर पर केवल एक package से संबंधित होती है। मैन्युअल रूप से rename करने और बाद में प्रश्न में package की सभी files को हटाने के बजाय, आप स्पष्ट रूप से pacman -S --overwrite glob package चला सकते हैं ताकि pacman को उन files को overwrite करने के लिए मजबूर किया जा सके जो glob से match करती हैं।

Warning सामान्यतः --overwrite switch का उपयोग करने से बचें। System maintenance#Avoid certain pacman commands देखें।

"Failed to commit transaction (invalid or corrupted package)" error

This article or section is out of date.

Reason: With pacman 7.1.0, expired keys should have updates fetched automatically (reliability depends on key infrastructure...) - this should remove the "package is corrupt" messages when keys need updated. (Discuss in Talk:Pacman (हिन्दी))

/var/cache/pacman/pkg/ में .part files (partially downloaded packages) देखें और उन्हें हटाएँ (अक्सर pacman.conf में कस्टम XferCommand के उपयोग के कारण होता है)।

# find /var/cache/pacman/pkg/ -iname "*.part" -delete

यही error तब भी appear हो सकता है यदि archlinux-keyring out-of-date है, जो pacman को signatures verify करने से रोकता है। इसे ठीक करने और भविष्य में इससे बचने के तरीके के लिए Pacman/Package signing#Upgrade system regularly देखें।

"Failed to init transaction (unable to lock database)" error

जब pacman package database को बदलने वाला होता है, उदाहरण के लिए package install करना, तो यह /var/lib/pacman/db.lck पर एक lock file बनाता है। यह pacman के किसी अन्य instance को एक ही समय में package database को बदलने का प्रयास करने से रोकता है।

यदि pacman database को बदलते समय बाधित होता है, तो यह stale lock file रह सकती है। यदि आप सुनिश्चित हैं कि pacman का कोई instance नहीं चल रहा है, तो lock file हटाएँ:

# rm /var/lib/pacman/db.lck
Tip आप यह सत्यापित करने के लिए root के रूप में fuser /var/lib/pacman/db.lck चला सकते हैं कि क्या कोई process अभी भी इसका उपयोग कर रहा है।

Packages cannot be retrieved on installation

यह error Not found in sync db, Target not found या Failed retrieving file के रूप में प्रकट होता है।

सबसे पहले, सुनिश्चित करें कि package वास्तव में exists करता है। यदि package के exists होने का certainty है, तो आपकी package list out-of-date हो सकती है। सभी package lists को refresh करने और upgrade करने के लिए pacman -Syu चलाने का प्रयास करें। यह भी सुनिश्चित करें कि चयनित mirrors up-to-date हैं और repositories correctly configured हैं। आप mirrors को up-to-date रखने के लिए Reflector का भी उपयोग कर सकते हैं।

यदि pacman रिपोर्ट करता है कि update करने के लिए कुछ नहीं है, लेकिन Failed retrieving file error print होता रहता है, तो pacman -Syyu के साथ database download को force करने पर विचार करें। सामान्य परिस्थितियों में इसकी कभी आवश्यकता नहीं होती है, इसलिए mirror की status और consistency का अधिक बारीकी से निरीक्षण करें।

यह भी हो सकता है कि package वाली repository आपके system पर enabled न हो, उदाहरण के लिए package multilib repository में हो सकता है, लेकिन multilib आपके pacman.conf में enabled न हो।

FAQ#Why is there only a single version of each shared library in the official repositories? भी देखें।

Fixing an unbootable system caused by an interrupted upgrade

This article or section needs expansion.

चाहे power loss, kernel panic या hardware failure के कारण, कोई update बाधित हो सकता है। अधिकांश मामलों में, बहुत अधिक damage नहीं होगा लेकिन system likely unbootable होगा।

  1. एक USB flash installation medium तैयार करें और उसे boot करें।
  2. root filesystem और आपके ESP को Mount करें।
  3. mounted root filesystem में arch-chroot करें।
  4. /var/log/pacman.log जाँचें और failed transaction के दौरान upgrade किए गए packages की entire list को pacman -Syu में supply करके सटीक update को replicate करें, जिससे यह मूल update को resume करते हुए reinstall कर सके:
# pacman -Syu $(grep "\[2025-07-27T22.*\] \[ALPM\] upgraded" /var/log/pacman.log | cut -d " " -f4 | tr "\n" " ")

सही scriptlets और hooks के चलने को सुनिश्चित करने के लिए exact upgrade को replicate करना आवश्यक है।

pacman crashes during an upgrade

यदि pacman packages को remove करते समय "database write" error के साथ crash करता है, और उसके बाद packages को reinstall या upgrade करना विफल हो जाता है, तो निम्नलिखित करें:

  1. Arch USB flash installation medium का उपयोग करके boot करें। अधिमानतः एक recent media का उपयोग करें ताकि pacman version system से match करे या नया हो।
  2. System के root filesystem को mount करें, उदाहरण के लिए root के रूप में mount /dev/sdaX /mnt, और df -h के साथ जाँचें कि mount में पर्याप्त space है।
  3. proc, sys और dev filesystems को भी mount करें: mount -t proc proc /mnt/proc; mount --rbind /sys /mnt/sys; mount --rbind /dev /mnt/dev
  4. यदि system default database और directory locations का उपयोग करता है, तो आप अब root के रूप में pacman --root=/mnt --cachedir=/mnt/var/cache/pacman/pkg -Syu के माध्यम से system के pacman database को update और upgrade कर सकते हैं।
  5. Upgrade के बाद, not upgraded लेकिन still broken packages के लिए double-check करने का एक तरीका: find /mnt/usr/lib -size 0
  6. उसके बाद pacman --root /mnt --cachedir=/mnt/var/cache/pacman/pkg -S package के माध्यम से किसी भी still broken package को re-install करें।

pacman: command not found

यदि /var/cache/pacman/pkg एक symlink है, तो pacman इसके बजाय एक directory बनाने का प्रयास करेगा और इस प्रकार self-upgrade के दौरान इस symlink को हटा देगा। इससे update विफल हो जाएगा। परिणामस्वरूप, /usr/bin/pacman और pacman package की अन्य contents गायब होंगी।

कभी भी /var/cache/pacman/pkg को symlink न करें क्योंकि यह pacman द्वारा नियंत्रित है। इसके बजाय CacheDir option या bind mount का उपयोग करें; #Package cache directory देखें।

यदि आप पहले ही इस समस्या का सामना कर चुके हैं और अपना system तोड़ चुके हैं, तो आप pacman को पुनर्स्थापित करने के लिए package से /usr contents को मैन्युअल रूप से extract कर सकते हैं और फिर इसे ठीक से reinstall कर सकते हैं; विवरण के लिए FS#73306 और संबंधित forum thread देखें।

Manually reinstalling pacman

Using pacman-static

pacman-staticAUR pacman का statically compiled version है, इसलिए यह तब भी चलने में सक्षम होगा जब system पर libraries काम नहीं कर रही हों। यह तब भी काम आ सकता है जब partial upgrade किया गया हो और pacman अब नहीं चल सकता।

Using a precompiled pacman-static binary when PKGBUILD build fails

कुछ स्थितियों में, आपका system makepkg चलाने या pacman-staticAUR package build करने के लिए बहुत अधिक broken हो सकता है (उदाहरण के लिए, missing या incompatible libraries के कारण)। इस स्थिति में, आप किसी trusted source से एक precompiled pacman-static binary download कर सकते हैं। यह static binary system libraries पर निर्भर नहीं करता है और इसका उपयोग आपके system पर एक कार्यशील pacman को पुनर्स्थापित करने के लिए किया जा सकता है।

एक outdated binary https://pkgbuild.com/~morganamilo/pacman-static/x86_64/bin/pacman-static द्वारा प्रदान की गई है।

इसे download करें, इसे executable बनाएँ, फिर:

# ./pacman-static -Syu pacman

यह आपके system को update करेगा और pacman को reinstall करेगा, जिससे missing shared libraries से संबंधित broken dependencies ठीक हो जाएँगी।

Using an external pacman

यदि pacman-static भी काम नहीं करता है, तो बाहरी pacman का उपयोग करके recover करना संभव है। ऐसा करने के सबसे आसान तरीकों में से एक है archiso का उपयोग करना और केवल --sysroot या --root का उपयोग करके उस system के mount point को specify करना जिस पर operation perform करना है। --sysroot के लिए आवश्यक necessary filesystems को mount करने के तरीके पर Chroot#Using chroot देखें।

By manually extracting

Warning इस approach का उपयोग करके अपने system को और भी बदतर तोड़ना अत्यंत आसान है। इसे केवल अंतिम उपाय के रूप में उपयोग करें यदि #pacman crashes during an upgrade की विधि कोई option नहीं है।

भले ही pacman बुरी तरह से broken हो, आप latest packages को download करके और उन्हें सही locations पर extract करके इसे मैन्युअल रूप से ठीक कर सकते हैं। करने के लिए मोटे तौर पर steps हैं:

  1. pacman की dependencies install करने के लिए निर्धारित करें
  2. प्रत्येक package को अपनी पसंद के mirror से download करें
  3. प्रत्येक package को root में extract करें
  4. तदनुसार package database को update करने के लिए इन packages को pacman -S --overwrite के साथ reinstall करें
  5. एक full system upgrade करें

यदि आपके पास एक स्वस्थ Arch system उपलब्ध है, तो आप इसके साथ dependencies की पूरी list देख सकते हैं:

$ pacman -Q $(pactree -u pacman)

लेकिन आपकी समस्या के आधार पर आपको केवल उनमें से कुछ को update करने की आवश्यकता हो सकती है। किसी package को extract करने का एक उदाहरण है:

# tar -xvpwf package.tar.zst -C / --exclude .PKGINFO --exclude .INSTALL --exclude .MTREE --exclude .BUILDINFO

Interactive mode के लिए w flag के उपयोग पर ध्यान दें। Non-interactively चलाना बहुत जोखिम भरा है क्योंकि आप एक महत्वपूर्ण file को overwrite कर सकते हैं। सही क्रम में packages को extract करने का भी ध्यान रखें (अर्थात पहले dependencies)। यह forum post इस प्रक्रिया का एक उदाहरण contains करता है जहाँ केवल कुछ pacman dependencies broken हैं।

"Unable to find root device" error after rebooting

सबसे अधिक संभावना है कि kernel update के दौरान initramfs corrupted हो गया (pacman के --overwrite option का अनुचित उपयोग एक कारण हो सकता है)। दो options हैं; पहले, Fallback entry try करें।

Tip यदि आपने Fallback entry हटा दी है, तो आप boot loader menu दिखाई देने पर हमेशा Tab key (Syslinux के लिए) या e (GRUB या systemd-boot के लिए) दबा सकते हैं, इसे initramfs-linux-fallback.img में rename करें और नए parameters के साथ boot करने के लिए Enter या b (आपके boot loader के आधार पर) दबाएँ।

एक बार system शुरू हो जाने पर, initramfs image को rebuild करने के लिए console या terminal से यह command (stock linux kernel के लिए) चलाएँ:

# mkinitcpio -p linux

यदि यह काम नहीं करता है, तो एक current Arch release (CD/DVD या USB stick) से, अपने root और boot partitions को क्रमशः /mnt और /mnt/boot पर mount करें। फिर arch-chroot का उपयोग करके chroot करें:

# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Note
  • यदि आपके पास current release नहीं है या यदि आपके पास केवल कोई अन्य "live" Linux distribution पड़ा है, तो आप पुराने तरीके से chroot कर सकते हैं। जाहिर है, केवल arch-chroot script चलाने की तुलना में अधिक typing होगी।
  • यदि pacman Could not resolve host के साथ विफल होता है, तो कृपया अपना internet connection जाँचें
  • यदि आप arch-chroot या chroot environment में प्रवेश नहीं कर सकते लेकिन packages को re-install करने की आवश्यकता है, तो आप अपने root partition पर pacman का उपयोग करने के लिए command pacman --sysroot /mnt -Syu foo bar का उपयोग कर सकते हैं।

Kernel (linux package) को reinstall करना स्वचालित रूप से mkinitcpio -p linux के साथ initramfs image को re-generate कर देगा। इसे अलग से करने की कोई आवश्यकता नहीं है।

बाद में, यह अनुशंसा की जाती है कि आप exit, umount /mnt/{boot,} और reboot चलाएँ।

"Warning: current locale is invalid; using default "C" locale" error

जैसा कि error message कहता है, आपका locale सही ढंग से configured नहीं है। Locale देखें।

Missing locales warning messages

जब locale files को intentionally bleachbit या localepurgeAUR जैसे tools द्वारा हटा दिया जाता है, तो pacman package updates के दौरान missing locales के बारे में warnings जारी कर सकता है।

इन warnings को दबाने के लिए, आप pacman.conf में CheckSpace option को comment out कर सकते हैं। ध्यान रखें कि CheckSpace को disable करने से सभी package installations के लिए space-checking functionality बंद हो जाती है, इसलिए इस workaround का उपयोग केवल तभी करें जब आपके पास disk space की निगरानी के लिए वैकल्पिक साधन हों।

pacman does not honor proxy settings

सुनिश्चित करें कि relevant environment variables ($http_proxy, $ftp_proxy आदि) set up हैं। यदि आप sudo के साथ pacman का उपयोग करते हैं, तो आपको sudo को इन environment variables को pacman में pass करने के लिए configure करना होगा। साथ ही, सुनिश्चित करें कि dirmngr के configuration में /etc/pacman.d/gnupg/dirmngr.conf में honor-http-proxy हो ताकि keys को refresh करते समय proxy का सम्मान किया जा सके।

How do I reinstall all packages, retaining information on whether something was explicitly installed or as a dependency?

सभी native packages को reinstall करने के लिए: pacman -Qnq | pacman -S - या pacman -S $(pacman -Qnq) (-S option default रूप से installation reason को preserve करता है)।

फिर आपको सभी foreign packages को reinstall करना होगा, जिन्हें pacman -Qmq के साथ list किया जा सकता है।

"Cannot open shared object file" error

ऐसा लगता है कि पिछले pacman transaction ने pacman के लिए आवश्यक shared libraries को हटा दिया या corrupted कर दिया।

इस स्थिति से उबरने के लिए, आपको आवश्यक libraries को मैन्युअल रूप से अपने filesystem में unpack करना होगा। पहले पता करें कि किस package में missing library है और फिर उसे pacman cache (/var/cache/pacman/pkg/) में locate करें। आवश्यक shared library को filesystem में unpack करें। यह pacman को चलाने की अनुमति देगा।

अब आपको broken package को reinstall करना होगा। ध्यान दें कि आपको --overwrite flag का उपयोग करना होगा क्योंकि आपने अभी system files unpack की हैं और pacman को इसके बारे में पता नहीं है। pacman हमारी shared library file को package वाली file से सही ढंग से replace कर देगा।

बस इतना ही। बाकी system को update करें।

Freeze of package downloads

नेटवर्क समस्याओं के बारे में कुछ issues reported किए गए हैं जो pacman को repositories update/synchronize करने से रोकते हैं। [२] [३] Arch Linux को natively install करते समय, default pacman file downloader को एक alternative से replace करके इन issues को हल किया गया है (अधिक जानकारी के लिए Improve pacman performance देखें)। Arch Linux को VirtualBox में guest OS के रूप में install करते समय, machine properties में NAT के बजाय Host interface का उपयोग करके भी इस issue को संबोधित किया गया है।

Failed retrieving file 'core.db' from mirror

यदि आपको सही mirrors के साथ यह error message प्राप्त होता है, तो एक अलग name server set करने का प्रयास करें।

error: 'local-package.pkg.tar': permission denied

यदि आप sshfs mount पर pacman -U का उपयोग करके package install करना चाहते हैं और यह error प्राप्त करते हैं, तो package को किसी local directory में ले जाएँ और फिर से install करने का प्रयास करें।

error: could not determine cachedir mount point /var/cache/pacman/pkg

उदाहरण के लिए, chroot environment के अंदर pacman -Syu execute करने पर एक error का सामना करना पड़ता है:

error: could not determine cachedir mount point /var/cache/pacman/pkg
error: failed to commit transaction (not enough free disk space)

यह अक्सर chroot directory के mountpoint न होने के कारण होता है जब chroot में प्रवेश किया जाता है। समाधान के लिए Install Arch Linux from existing Linux#Downloading basic tools पर दिए गए note को देखें, और chroot directory को mountpoint बनाने के लिए bind mounting का उपयोग करने के स्पष्टीकरण और उदाहरण के लिए arch-chroot(8) देखें।

error: GPGME error: No data

यदि आप packages update करने में असमर्थ हैं और यह error प्राप्त करते हैं, तो update का प्रयास करने से पहले rm -r /var/lib/pacman/sync/ try करें।

यदि sync files को हटाने से मदद नहीं मिलती है, तो update का प्रयास करने से पहले file /var/lib/pacman/sync/* का उपयोग करके जाँचें कि sync files gzip compressed data हैं। कोई router या proxy downloads को corrupt कर सकता है। Corruption संभवतः HTML type हो सकता है।

यदि sync files सही type की हैं, तो mirror server के साथ कोई issue हो सकता है। pacman-conf -r core और pacman-conf -r extra के साथ उपयोग में लिए जा रहे mirror server(s) को देखें। पहले returned url को browser में paste करें और जाँचें कि कोई file listing return होती है। यदि mirror कोई error return करता है, तो उसे /etc/pacman.d/mirrorlist में comment out करें। आप mirrors को update या re-ranking करने का प्रयास कर सकते हैं।

error: GPGME error: General error and ":: File /var/cache/pacman/pkg/<package>.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).

यदि यह error occur होता है और आप, उदाहरण के लिए, अपने system या किसी भी package को update करने में असमर्थ हैं, तो यह संभव है कि आपने DISPLAY को एक blank value पर set कर रखा है, जो GPG-Flow को तोड़ता हुआ प्रतीत होता है।

इस स्थिति में, unset DISPLAY या इसे एक arbitrary value पर set करना सबसे अधिक संभावना है कि फिर से update करने की अनुमति देगा, यदि ऊपर दिए गए किसी अन्य option ने अभी तक काम नहीं किया है। आगे के विवरण के लिए this post देखें।

Reinstall broken or out-of-sync packages

कोई यह जाँचने के लिए pacman -Qk $pkg का उपयोग कर सकता है कि $pkg package की installed files उसके database version की files से match करती हैं या नहीं। कई packages के लिए, कोई उन सभी packages को reinstall करने के लिए निम्नलिखित loop का उपयोग कर सकता है जिनमें missing file(s) हैं:

# LC_ALL=C.UTF-8 pacman -Qk 2>/dev/null | grep -v ' 0 missing files' | cut -d: -f1 |
    while read -r package; do
        pacman -S "$package" --noconfirm
    done

मान लीजिए कि /var/lib/pacman में स्थित आपका local database / filesystem में install किए गए packages की तुलना में अधिक up-to-date है (उदाहरण के लिए, partial rollback के कारण), तो यह method root filesystem को local database के साथ re-synchronize करने के लिए उपयुक्त है।

See also