pacman (Українська)

From ArchWiki
Jump to: navigation, search

Pacman це менеджер пакунків, який є однією з основних характерних особливостей Arch Linux. Він поєднує в собі простий формат двійкових пакунків з простою у використанні Arch Build System(система збірки Арча, скорочено ABS). Мета розробників pacman - зробити його, як можна легшим у керуванні пакунками, чи є вони з офіційних репозиторіїв Arch або власні версії користувачів.

Pacman тримає систему в актуальному стані за допомогою синхронізації списків пакунків з головного сервера. Ця модель, сервер / клієнт, також дозволяє користувачам завантажувати / встановлювати пакунки з допомогою простої команди, повністю з усіма необхідними залежностями.

Pacman написана на мові програмування C і використовує .pkg.tar.xz формат пакунків.

Tip: Офіційний пакунок pacman також містить інші корисні інструменти, такі як makepkg, pactree, vercomp і багато іншого. Ви можете отримати повний список виконавши pacman -Ql pacman | grep bin

Contents

Конфігурація

Налаштування pacman розташовані в /etc/pacman.conf. Це місце, де користувач настроює програму для роботи, як йому треба. Докладнішу інформацію про файл конфігурації можна знайти в man pacman.conf

Загальні параметри

Загальні параметри знаходяться в розділі [options]. Читайте man сторінки або дивіться в pacman.conf інформацію за замовчуванням про те, що можна зробити тут.

Заборона оновлення пакунків

Для заборони оновлення конкретного пакунку, вкажіть його в такому вигляді:

IgnorePkg=linux

При зазначенні декількох пакунків, розділяйте їх пробілами, або використовувати додаткові IgnorePkg лінії.

Заборона оновлення груп пакунків

Як і з пакунками, пропускати цілі групи пакунків також можливо:

IgnoreGroup=gnome

Заборона встановлення файлів в систему

Щоб уникнути встановлення у деякі каталоги, зазначте їх у NoExtract. Наприклад, щоб уникнути встановлення юнітів systemd вкажіть:

NoExtract=usr/lib/systemd/system/*

Репозиторії

Ця секція визначає, які репозиторії використовуються. Вони можуть бути зазначені у /etc/pacman.conf прямо або включені з іншого файлу (наприклад, /etc/pacman.d/mirrorlist), що робить його необхідним для підтримання лише одного списку. Докладніше про налаштування дзеркал читайте тут.

/etc/pacman.conf
#[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

#[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

# Users If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.

#[multilib-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

#[multilib]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

# An example of a custom package repository.  See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
Warning: Слід проявляти обережність при використанні [testing] репозиторія. Він знаходиться в активній розробці та оновленні, що може викликати неправильну роботу деяких пакунків. Людям, які використовують [testing] репозиторій рекомендується підписатися на arch-dev-public mailing list для отримання поточної інформації.

Безпека пакунків

Pacman 4 підтримує підписання пакунків, яке додає додатковий рівень безпеки. Щоб налаштувати це підписання, можна використовувати SigLevel на глобальному або для кожного сховища рівні. Конфігурація за замовчуванням
/etc/pacman.conf
SigLevel = Required DatabaseOptional
дозволяє перевірку підписів для всіх пакунків на глобальному рівні, яка може бути прописана для кожного сховища SigLevel, як показано вище. Більш детальну інформацію про підписання пакунків та перевірки підпису, дивіться тут.

Використання

Нижче наводиться лише невелика вибірка з операцій, які може виконати pacman. Щоб дізнатися більше прикладів, зверніться до man pacman.

Встановлення пакунків

Встановлення окремих пакунків

Для встановлення одного пакунку або списку пакунків (включаючи залежності), виконайте наступну команду:

# pacman -S ім'я_пакунку1 ім'я_пакунку2 ...

Іноді є кілька версій пакунку в різних сховищах, наприклад, [extra] і [testing]. Для установки попередньої версії, репозиторій повинен бути зазначен явно (інакше буде встановлений перший знайдений пакунок):

# pacman -S extra/ім'я_пакунку

Встановлення груп пакунків

Певні пакунки належать до групи пакунків, які можуть бути встановлені одночасно. Наприклад, ввівши таку команду:

# pacman -S gnome

встановите всі пакунки, які належать до групи gnome.

Іноді група пакунків може містити велику кількість пакунків, і там можуть бути пакунки, які ви не хочете встановити. Замість того, щоб вводити всі

номери пакунків, крім тих, які ви не хочете, іноді зручніше вибрати або виключити пакети або діапазони пакетів з наступним синтаксисом:

Введіть вибір (за замовчуванням = все): 1-10 15

будуть вибрані пакети з 1 по 10 і 15 для встановлення, або:

Введіть вибір (за замовчуванням = все): ^ 5-8 ^ 2

будуть вибрані всі пакети, окрім з 5 по 8 і 2 для встановлення.

Щоб дізнатися, які пакунки належать до групи gnome, виконайте:

# pacman -Sg gnome

Також завітайте https://www.archlinux.org/groups/ щоб побачити, в яких групах є пакунок.

Note: Якщо пакунок у списку вже встановлений в системі, він буде повторно встановлений, навіть якщо він не застарілий. Ця поведінка може бути змінена з опцією --needed.
Warning: При встановленні пакунків, не оновлення списку пакунків, таким чином не модернізація системи (тобто pacman -Sy ім'я_пакунку); може призвести до проблем з залежностями. Докладніше дивіться #Часткова модернізація не підтримується та https://bbs.archlinux.org/viewtopic.php?id=89328.

Видалення пакунків

Щоб видалити один пакунок, залишивши всі його залежності встановленими:

# pacman -R ім'я_пакунку

Для видалення пакунка і його залежностей, які не вимагаються будь-яким іншим встановленим пакунком:

# pacman -Rs ім'я_пакунку

Для видалення пакунка, його залежностей і всі пакунки, які залежать від цільового пакунку:

Warning: Ця операція є рекурсивною, і повинна бути виконана з обережністю, оскільки вона може видалити багато потенційно необхідних пакунків.
# pacman -Rsc ім'я_пакунку

Для видалення пакунка, який потрібно іншому пакунку, не видаляючи залежний пакунок:

# pacman -Rdd ім'я_пакунку

Pacman зберігає файли конфігурації при видаленні деяких додатків з розширенням: .pacsave. Для запобігання створення цих файлів резервних копій використовувати опцію -n:

# pacman -Rn ім'я_пакунку
Note: Pacman не буде видаляти конфігурації, що програма сама створює (наприклад, "dotfiles" в домашній теці).


Оновлення пакунків

Pacman може оновити всі пакунки в системі за допомогою всього однієї команди. Це може зайняти деякий час в залежності від того, наскільки актуальна система. Ця команда може синхронізувати репозиторії баз даних та поновлення пакунків системи (без урахування 'локальних' пакунків, та не налаштованих репозиторіїв):

# pacman -Syu
Warning: Не поспішайте відразу ж оновлюватися, як тільки доступні оновлення, ви повинні розуміти, що у зв'язку з тим, що Arch це ролінг-дистрибутив, оновлення може мати непередбачені наслідки. Це означає, що не розумно оновлювати, якщо, немає часу. Оновлюйтесь у вільний час і будьте готові вирішувати проблеми, які можуть виникнути.

Pacman це потужний інструмент для керування пакунками, але можливо існують ситуації в яких він не впорається. Читайте The Arch Way (Українська), якщо вас щось турбує. Користувачі повинні бути пильними і взяти на себе відповідальність за підтримання своєї власної системи. При виконанні оновлення системи, дуже важливо, щоб користувачі читали всю інформацію, яку видає pacman і мали здоровий глузд. Якщо користувач модифікував файл конфігурації пакунку, то при оновлені пакунка буде створений .pacnew файл, щоб уникнути перезапису налаштувань, які задав користувач. Pacman буде пропонувати користувачу об'єднати їх. Ці файли вимагають ручного втручання з боку користувача, і це хороша практика, обов'язково треба впоратися з цим відразу після оновлення чи видалення.Читайте Pacnew and Pacsave files щоби дізнатися про це більше.

Tip: Пам'ятайте, що pacman зберігає свій вихід у /var/log/pacman.log.

Перед оновленням бажано відвідати домашню сторінку Arch Linux, щоб перевірити останні новини (або підписатися на стрічку RSS, arch-announce mailing list, або стежте за@archlinux в Твітері): коли оновлення потребують надзвичайного втручання користувача (більше, ніж може бути зроблено, просто дотримуючись вказівок pacman), відповідне повідомлення буде розміщене.

Якщо стикаєтеся з проблемами, які не можуть бути вирішені в цих інструкціях, скористайтеся пошуком по форуму. Цілком імовірно, що інші зіткнулися з тією ж проблемою і опублікували інструкцію по її вирішенню.

Запити до баз даних пакунків

Pacman шукає в локальній базі даних пакунків з опцією -Q, дивиться:

$ pacman -Q --help

та шукає у базі даних(репозиторіях) з опцією -S, дивиться:

$ pacman -S --help

Pacman можете шукати пакунки в базі даних(репозиторіях), пошук як в назвах пакунків так й в описах:

$ pacman -Ss умова1 умова2 ...

Для пошуку вже встановлених пакунків:

$ pacman -Qs умова1 умова2 ...

Пошук пакунка за ім'ям в базі даних(репозиторіях)(виводиться без додаткової інформації):

$ pacman -Sqs умова1 умова2 ...

Щоб показати детальну інформацію по пакунку:

$ pacman -Si ім'я_пакунку

Показати детальну інформацію по пакунку вже встановленому:

$ pacman -Qi ім'я_пакунку

Вказавши подвійно опцію -i - буде також відображати список файлів резервних копій і їх модифікацій:

$ pacman -Qii ім'я_пакунку

Для отримання списку файлів встановленого пакунку:

$ pacman -Ql ім'я_пакунку

Для не встановлених пакунків, можна використовувати pkgfile.

Можна також надсилати запити до бази даних, щоб дізнатися, якому пакунку належить файл:

$ pacman -Qo /шлях/до/файлу

Отримати список всіх пакунків, які більше не потрібні:

$ pacman -Qdt

Отримати дерево залежностей пакунку:

$ pactree ім'я_пакунку

Для отримання списку пакунків які залежать від встановленого пакунку можете скористатися whoneeds з пакунка pkgtools:

$ whoneeds ім'я_пакунку

Додаткові команди

Оновити систему та встановити деякі пакунки:

# pacman -Syu ім'я_пакунку1 ім'я_пакунку2 ...

Завантажити пакунок без встановлення:

# pacman -Sw ім'я_пакунку

Встановити 'локальний' пакунок, який не з віддаленого репозиторію (наприклад, пакунок з AUR):

# pacman -U /шлях/до/пакунку/ім'я_пакунку-версія.pkg.tar.xz
Tip: Щоб зберегти копію локального пакунка в кеш pacman, використовуйте:
# pacman -U файл://шлях/до/пакунку/ім'я_пакунку-версія.pkg.tar.xz

Встановити "віддалений" пакунок (не з репозиторіів зазначених в файлах конфігурації pacman):

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

Очистити кеш пакунків, які в даний час не встановлені (/var/cache/pacman/pkg):

Warning: Тільки робіть це, якщо впевнені, що встановлені пакунки є стабільними і, що у відкоті пакунків не буде необхідності, так як очищення видалить всі старі версії з теки кеша, залишивши тільки версії пакунків, які в даний час встановлені. Більш старі версії пакунків можуть стати в нагоді у випадку, якщо майбутні оновлення спричинять несправність.
# pacman -Sc

Очистити весь кеш пакунків:

Warning: Це очищає весь кеш пакунків. Робити це вважається поганою практикою, бо не дає можливості відкотити щось прямо з теки кеша. Користувачі будуть змушені використовувати альтернативні джерела застарілих пакунків, такі як Arch Rollback Machine[broken link: invalid section](Машина Часу Arch'а).
# pacman -Scc
Tip: В якості альтернативи -Sc і -Scc перемикачам, розгляньте можливість використання paccache з pacman. Це забезпечує більший контроль над тим, які і скільки пакунків будуть видалені. Виконайте paccache -h для отримання інструкцій.

Часткова модернізація не підтримується

Arch Linux це ролінг-дистрибутив, і нова версія бібліотеки буде включена до репозиторія. Розробники та довірені користувачі будуть відновлювати всі пакунки в репозиторіях, які повинні бути перебудовані у відношенні бібліотек. Якщо у системі є локально встановлені пакунки (наприклад, AUR пакунки), користувачам потрібно буде відновити залежності використовуючи інформацію soname.

Це означає, що часткові оновлення не підтримуються. Не використовуйте pacman -Sy пакунок або еквівалентний pacman -Sy, а потім pacman -S пакунок. Завжди оновлюйтесь перед установкою пакунку - особливо, якщо pacman оновив репозиторії. Будьте дуже обережні при використанні IgnorePkg і IgnoreGroup з тієї ж причини.

Якщо частковий сценарій оновлення був створений, і бінарні файли розбиті, тому що не можуть знайти пов'язаних бібліотек, тоді вже не "виправити" проблему шляхом символічних посилань. Бібліотеки отримують soname помилки, коли вони не мають зворотньої сумісності. Просте pacman -Syu, щоб правильно синхронізувати дзеркала вирішить проблему, як-що pacman не зламаний.

Загальні вказівки

Warning: Будьте обережні при використанні перемикача --force, тому що це може викликати серйозні проблеми при неправильному використанні. Настійно рекомендується використовувати тільки тоді цей параметр, якщо новини Arch’а інструктують користувача зробити це.

Пошук і усунення несправностей

Оновлення пакунку XYZ зламало мою систему!

Arch Linux це ролінг-дистрибутив з найсвіжішим ПЗ. Пакунки оновлення доступні, як тільки вони вважаються досить стабільними для загального використання. Тим не менш, оновлення іноді вимагає втручання користувача: файли конфігурації може знадобитися оновити, додаткові залежності можуть змінитися, і т.і.

Найважливіша порада, пам'ятайте - не робіть "наосліп" оновлення системи. Завжди уважно читайте список пакунків для оновлення. Примічайте чи "критичні" пакунки будуть оновлені (linux, xorg-server, і так далі). Якщо так, то, гарною ідеєю буде перевірити наявність новин на https://www.archlinux.org/ і читання останніх повідомлень форуму, щоб побачити, чи відчувають люди проблеми в результаті оновлення.

Якщо пакунок оновлення, як очікується / відомо, викликає проблеми, пакувальник гарантує, що pacman виведе відповідне повідомлення, коли пакунок буде оновлюватися. Якщо виникли проблеми після оновлення, перевірте вихід pacman, дивись лог (/var/log/pacman.log).

Наразі, тільки після того, якщо немає ніякої інформації, доступної через pacman, не існує новин на https://www.archlinux.org/, і немає ніяких повідомлень на форумі відносно оновлення, можете розглянути питання про звернення за допомогою на форум, IRC, або відкотитися до працюючої версії.

Я знаю, оновлення пакунку ABC було реалізовано, але pacman каже, що моя система знаходиться в актуальному стані!

Дзеркала pacman не синхронізуються негайно. Може зайняти більше 24 годин, перш ніж оновлення буде доступно для Вас. Варіянти - бути терплячим або використовувати інше дзеркало. MirrorStatus може допомогти вам визначити останню інформацію по дзеркалу.

Я отримую помилку при оновленні: "файл існує у файловій системі"!

Додатково: Взято з https://bbs.archlinux.org/viewtopic.php?id=56373 y Misfit138.

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 виявив файли, що конфліктують, і по замовчанню, не буде переписувати файли для вас. Це конструктивна особливість, а не недолік.

Питання, як правило, має тривіальне рішення. Безпечний спосіб, щоб спочатку перевірити, якому пакунку належить файл (pacman -Qo /шлях/до/файлу). Якщо файл належить іншому пакунку, відправте рапорт про помилку. Якщо файл не належить іншому пакунку, перейменуйте файл, який 'існує у файловій системі' і віддайте команду на оновлення. Якщо все піде добре, файл може бути видалений.

Якщо ви встановили програму вручну, без використання pacman або його обгортки, ви повинні видалити цю програму і всі її файли і перевстановити правильно, використовуючи pacman.

Кожен встановлений пакунок надає /var/lib/pacman/local/$package-$version/files файл, що містить метадані про цей пакунок. Якщо цей файл буде пошкоджений - буде порожнім або відсутнім - це призводить до помилки "файл існує у файловій системі" при спробі оновити пакунок. Така помилка зазвичай стосується тільки одного пакунка і замість того, щоб вручну перейменовувати, а потім видаляти всі файли, які відносяться до відповідного пакунку, ви можете запустити pacman -S --force $пакунок, щоб змусити pacman перезаписати ці файли.

Ніколи не віддавайте командуpacman -Syu --force.

Я отримую повідомлення про помилку при установці пакунку: "not found in sync db"

По-перше, переконайтеся, що пакунок існує насправді (і стежте за помилками при наборі команди!). Якщо певний пакунок існує, список пакунків може бути неактуальним або ваші репозиторії можуть бути неправильно налаштовані. Спробуйте запустити pacman -Syyu для примусового поновлення всього переліку пакунків та їх модернізації.

Я отримую повідомлення про помилку при установці пакунку: "target not found"

По-перше, переконайтеся, що пакунок існує насправді (і стежте за помилками при наборі команди!). Якщо певний пакунок існує, список пакунків може бути неактуальним або ваші репозиторії можуть бути неправильно налаштовані. Спробуйте запустити pacman -Syyu для примусового поновлення всього переліку пакунків та їх модернізації. Також може бути, що репозиторій, що містить пакунок не включений у вашій системі, наприклад, пакунок може бути в репозиторії multilib, але multilib не дозволені у Вашому pacman.conf.

Pacman неодноразово оновлює той-самий пакунок!

Це пов'язано з дублюванням записів в /var/lib/pacman/local/, наприклад є два екземпляра linux. pacman-Qi видасть правильну версію, але pacman-Qu визнає її застарілою, отже, буде намагатися оновити.

Рішення: видалити неправильний запис з /var/lib/pacman/local/..

Note: У pacman версії 3.4 повинні відображатися повідомлення про помилку у випадку дублювання записів.
}}

Pacman падає під час оновлення!

У разі падіння pacman'а з помилкою "database write"("запис в базу даних") під час видалення, перевстановлення або оновлення пакунків:

  1. Завантажтеся з Arch live CD.
  2. Змонтуйте вашу кореневу файлову систему.
  3. Оновіть та модернізуйте бази даних за допомогою pacman -Syyu.
  4. Перевстановіть поламані пакунки pacman -r /шлях/до/кореневого_розділу -S пакунок.

Я встановив програмне забезпечення, використовуючи "make install"; ці файли не належать жодному пакунку!

При отриманні помилки про "файли, що конфліктують", зверніть увагу, що pacman буде перезаписувати вручну встановлене програмне забезпечення, якщо давати команду з опцією --force(pacman -S --force). Читайте Pacman tips#Identify files not owned by any package про скрипт, який шукає в файловій системі покинуті файли.

Warning: Будьте обережні при використанні --force. Тому що це може викликати серйозні проблеми при неправильному використанні.

Мені потрібен пакунок з конкретним файлом. Як я дізнаюся, якому пакунку належить цей файл?

Встановіть pkgfile, який використовує окрему базу даних з усіма файлами і пов'язаними з ними пакунками.

Pacman повністю зламаний! Як мені перевстановити його?

У разі, якщо pacman поламаний та не підлягає ремонту, вручну завантажте необхідні пакунки (openssl, libarchive, і pacman) та розпакуйте їх в корені. Бінарний pacman буде відновлений разом з його файлом конфігурації за замовчуванням. Після цього, перевстановіть ці пакунки з pacman для підтримки цілісності бази даних пакунків. Додаткову інформацію та приклад (застаріле) скрипту, який автоматизує цей процес можна знайти в цьому дописі на форумі.

Після оновлення моєї системи, я отримую помилку "unable to find root device"("не вдалося знайти корінь пристрою"), після перезавантаження моя система більше не зантажується.

Швидше за все, ваш initramfs зламався під час оновлення ядра (неналежне використання pacman з опцією --force може бути причиною). У вас є два варіанти:

1. СпробуйтеFallback (резервний) образ.

Tip: У випадку, якщо ви видалили цей запис з якихось причин, ви завжди можете натиснути клавішу Tab, якщо використовуєте Syslinux, або e у випадку використання GRUB, перейменувати його initramfs-linux-fallback.img та натиснути Enter або b (в залежності від вашого завантажувача) для завантаження з новими параметрами.
Після запуску системи, виконайте наступну команду (для перезбирання ядра linux) або з консолі або з терміналу, щоб відновити initramfs образ:
# mkinitcpio -p linux

2. Якщо це не працює, з дистрибутиву Arch 2012(або пізніше)року випуску (CD / DVD або USB флешки), виконайте:

Note: Якщо ви не маєте релізу 2012 р. в., або якщо у вас є якійсь інші "живий" дистрибутив, ви можете зайти під chroot за допомогою старого способу. Очевидно, що там буде більше мороки, ніж просто набравши скрипт arch-chroot.
# mount /dev/sdxY /mnt         #Монтуємо ваш кореневий розділ.
# mount /dev/sdxZ /mnt/boot    #У випадку, якщо ви використовуєте окремий /boot розділ.
# arch-chroot /mnt
# pacman -Syu mkinitcpio systemd linux
Перевстановлення ядра (пакунок linux) автоматично регенерує образ initramfs - mkinitcpio -p linux. Немає необхідності робити це окремо.
Після цього, рекомендується запустити exit, umount /mnt/{boot,} та reboot.
Note: Якщо Ви не можете увійти в arch-chroot або chroot середовище, але потрібно повторно встановити пакунки, ви можете використовувати команду pacman -r /mnt -Syu потрібні_пакунки в змонтованому у /mnt вашому кореневому розділі.

Підпис від "User <email@gmail.com>" не має довіри, інсталяція не вдалася

Слідуйте pacman-key#Resetting all the keys. Або ж ви можете спробувати вручну оновити archlinux-keyring першим пакунком, тобто pacman -S archlinux-keyring.

Я постійно отримую

Помилка: Ім'яПакунку: підпис "User <email@archlinux.org>" не є дійсним
Помилка: не вдалося завершити транзакцію (невірний або пошкоджений пакунок (PGP підпису))
Відбулися помилки, пакунки не були оновлені. 
Це відбувається, коли системний годинник неправильно встановлений. Читайте time та виконайте:
# hwclock -w
перш ніж намагатися встановити / оновити пакунок знову.

Я постійно отримую помилку "не вдалося завершити транзакцію (невірний або пошкоджений пакунок)"

Шукайте файли *.part (частково завантажені пакунки) в /var/cache/pacman/pkg і видаліть їх (часто викликано використанням користувацьких XferCommand у pacman.conf).

Я отримую помилку кожен раз, коли я використовую pacman: 'Попередження: поточний стандарт є недійсним; використовується за замовчанням "C" локаль'. Що мені робити?

У повідомленні про помилку говориться, що ваша мова не правильно налаштована. Докладніше Locale.

Як я можу отримати для Pacman параметри мого проксі-сервера?

Переконайтеся, що відповідні змінні середовища ($http_proxy, $ftp_proxy й т.і.) встановлені. Якщо ви використовуєте Pacman з sudo, вам потрібно налаштувати sudo для змінних середовищ Pacman[broken link: invalid section].

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

To reinstall all the native packages: pacman -S $(pacman -Qnq) (the -S option preserves the installation reason by default).
You will then need to reinstall all the foreign packages, which can be listed with pacman -Qmq.

Дивись також