pacman (Українська)
Related articles
Pacman це менеджер пакунків, який є однією з основних характерних особливостей Arch Linux. Він поєднує в собі простий формат двійкових пакунків з простою у використанні Arch Build System(система збірки Арча, скорочено ABS). Мета розробників pacman - зробити його, як можна легшим у керуванні пакунками, чи є вони з офіційних репозиторіїв Arch або власні версії користувачів.
Pacman тримає систему в актуальному стані за допомогою синхронізації списків пакунків з головного сервера. Ця модель, сервер / клієнт, також дозволяє користувачам завантажувати / встановлювати пакунки з допомогою простої команди, повністю з усіма необхідними залежностями.
Pacman написана на мові програмування C і використовує .pkg.tar.xz
формат пакунків.
Contents
- 1 Конфігурація
- 2 Використання
-
3 Пошук і усунення несправностей
- 3.1 Оновлення пакунку XYZ зламало мою систему!
- 3.2 Я знаю, оновлення пакунку ABC було реалізовано, але pacman каже, що моя система знаходиться в актуальному стані!
- 3.3 Я отримую помилку при оновленні: "файл існує у файловій системі"!
- 3.4 Я отримую повідомлення про помилку при установці пакунку: "not found in sync db"
- 3.5 Я отримую повідомлення про помилку при установці пакунку: "target not found"
- 3.6 Pacman неодноразово оновлює той-самий пакунок!
- 3.7 Pacman падає під час оновлення!
- 3.8 Я встановив програмне забезпечення, використовуючи "make install"; ці файли не належать жодному пакунку!
- 3.9 Мені потрібен пакунок з конкретним файлом. Як я дізнаюся, якому пакунку належить цей файл?
- 3.10 Pacman повністю зламаний! Як мені перевстановити його?
- 3.11 Після оновлення моєї системи, я отримую помилку "unable to find root device"("не вдалося знайти корінь пристрою"), після перезавантаження моя система більше не зантажується.
- 3.12 Підпис від "User <email@gmail.com>" не має довіри, інсталяція не вдалася
- 3.13 Я постійно отримую
- 3.14 Я постійно отримую помилку "не вдалося завершити транзакцію (невірний або пошкоджений пакунок)"
- 3.15 Я отримую помилку кожен раз, коли я використовую pacman: 'Попередження: поточний стандарт є недійсним; використовується за замовчанням "C" локаль'. Що мені робити?
- 3.16 Як я можу отримати для Pacman параметри мого проксі-сервера?
- 3.17 How do I reinstall all packages, retaining information on whether something was explicitly installed or as a dependency?
- 4 Дивись також
Конфігурація
Налаштування 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
Безпека пакунків
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/ щоб побачити, в яких групах є пакунок.
Видалення пакунків
Щоб видалити один пакунок, залишивши всі його залежності встановленими:
# pacman -R ім'я_пакунку
Для видалення пакунка і його залежностей, які не вимагаються будь-яким іншим встановленим пакунком:
# pacman -Rs ім'я_пакунку
Для видалення пакунка, його залежностей і всі пакунки, які залежать від цільового пакунку:
# pacman -Rsc ім'я_пакунку
Для видалення пакунка, який потрібно іншому пакунку, не видаляючи залежний пакунок:
# pacman -Rdd ім'я_пакунку
Pacman зберігає файли конфігурації при видаленні деяких додатків з розширенням: .pacsave
. Для запобігання створення цих файлів резервних копій використовувати опцію -n
:
# pacman -Rn ім'я_пакунку
Оновлення пакунків
Pacman може оновити всі пакунки в системі за допомогою всього однієї команди. Це може зайняти деякий час в залежності від того, наскільки актуальна система. Ця команда може синхронізувати репозиторії баз даних та поновлення пакунків системи (без урахування 'локальних' пакунків, та не налаштованих репозиторіїв):
# pacman -Syu
Pacman це потужний інструмент для керування пакунками, але можливо існують ситуації в яких він не впорається. Читайте The Arch Way (Українська), якщо вас щось турбує. Користувачі повинні бути пильними і взяти на себе відповідальність за підтримання своєї власної системи. При виконанні оновлення системи, дуже важливо, щоб користувачі читали всю інформацію, яку видає pacman і мали здоровий глузд. Якщо користувач модифікував файл конфігурації пакунку, то при оновлені пакунка буде створений .pacnew
файл, щоб уникнути перезапису налаштувань, які задав користувач. Pacman буде пропонувати користувачу об'єднати їх. Ці файли вимагають ручного втручання з боку користувача, і це хороша практика, обов'язково треба впоратися з цим відразу після оновлення чи видалення.Читайте Pacnew and Pacsave files щоби дізнатися про це більше.
Перед оновленням бажано відвідати домашню сторінку 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
Встановити "віддалений" пакунок (не з репозиторіів зазначених в файлах конфігурації pacman):
# pacman -U http://www.example.com/repo/example.pkg.tar.xz
Очистити кеш пакунків, які в даний час не встановлені (/var/cache/pacman/pkg
):
# pacman -Sc
Очистити весь кеш пакунків:
# pacman -Scc
Часткова модернізація не підтримується
Arch Linux це ролінг-дистрибутив, і нова версія бібліотеки буде включена до репозиторія. Розробники та довірені користувачі будуть відновлювати всі пакунки в репозиторіях, які повинні бути перебудовані у відношенні бібліотек. Якщо у системі є локально встановлені пакунки (наприклад, AUR пакунки), користувачам потрібно буде відновити залежності використовуючи інформацію soname.
Це означає, що часткові оновлення не підтримуються. Не використовуйте pacman -Sy пакунок
або еквівалентний pacman -Sy
, а потім pacman -S пакунок
. Завжди оновлюйтесь перед установкою пакунку - особливо, якщо pacman оновив репозиторії. Будьте дуже обережні при використанні IgnorePkg
і IgnoreGroup
з тієї ж причини.
Якщо частковий сценарій оновлення був створений, і бінарні файли розбиті, тому що не можуть знайти пов'язаних бібліотек, тоді вже не "виправити" проблему шляхом символічних посилань. Бібліотеки отримують soname помилки, коли вони не мають зворотньої сумісності. Просте pacman -Syu
, щоб правильно синхронізувати дзеркала вирішить проблему, як-що pacman не зламаний.
Загальні вказівки
Пошук і усунення несправностей
Оновлення пакунку 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/..
}}Pacman падає під час оновлення!
У разі падіння pacman'а з помилкою "database write"("запис в базу даних") під час видалення, перевстановлення або оновлення пакунків:
- Завантажтеся з Arch live CD.
- Змонтуйте вашу кореневу файлову систему.
- Оновіть та модернізуйте бази даних за допомогою
pacman -Syyu
. - Перевстановіть поламані пакунки
pacman -r /шлях/до/кореневого_розділу -S пакунок
.
Я встановив програмне забезпечення, використовуючи "make install"; ці файли не належать жодному пакунку!
При отриманні помилки про "файли, що конфліктують", зверніть увагу, що pacman буде перезаписувати вручну встановлене програмне забезпечення, якщо давати команду з опцією --force
(pacman -S --force
). Читайте Pacman tips#Identify files not owned by any package про скрипт, який шукає в файловій системі покинуті файли.
Мені потрібен пакунок з конкретним файлом. Як я дізнаюся, якому пакунку належить цей файл?
Встановіть pkgfile, який використовує окрему базу даних з усіма файлами і пов'язаними з ними пакунками.
Pacman повністю зламаний! Як мені перевстановити його?
У разі, якщо pacman поламаний та не підлягає ремонту, вручну завантажте необхідні пакунки (openssl, libarchive, і pacman) та розпакуйте їх в корені. Бінарний pacman буде відновлений разом з його файлом конфігурації за замовчуванням. Після цього, перевстановіть ці пакунки з pacman для підтримки цілісності бази даних пакунків. Додаткову інформацію та приклад (застаріле) скрипту, який автоматизує цей процес можна знайти в цьому дописі на форумі.
Після оновлення моєї системи, я отримую помилку "unable to find root device"("не вдалося знайти корінь пристрою"), після перезавантаження моя система більше не зантажується.
Швидше за все, ваш initramfs зламався під час оновлення ядра (неналежне використання pacman з опцією --force
може бути причиною). У вас є два варіанти:
1. СпробуйтеFallback (резервний) образ.
- Після запуску системи, виконайте наступну команду (для перезбирання ядра linux) або з консолі або з терміналу, щоб відновити initramfs образ:
-
# mkinitcpio -p linux
2. Якщо це не працює, з дистрибутиву Arch 2012(або пізніше)року випуску (CD / DVD або USB флешки), виконайте:
-
# 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
.
Підпис від "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
.