Не удалось получить файл pacman
Система управления пакетами в Arch и Manjaro
Система управления пакетами — управляет процессом установки, удаления, настройки зависимостей и обновления различных компонентов ПО. (q) ru.wikipedia. Список команд для Manjaro (pacman), и Ubuntu ( dpkg)
- -S – установка программ в archlinux;
- -Sw — скачать пакет но не устанавливать;
- -U — установить локальный пакет;
- -s – поиск пакета;
- -i – информация;
- -u – обновить пакеты;
- -y – обновить списки пакетов из репозиториев;
- -dd – игнорирование зависимостей;
- -g – запрос информации о группе;
- -l – вывод пакетов в виде списка;
- -o – вывод в файл;
- -Q – запрос к базе данных установленных пакетов;
- -F – поиск по файлам;
- -D – задание и изменение цели установки уже имеющегося пакета;
- -R — удалить пакет;
- -Rn — удалять резервные копии конфигурационных файлов;
- -Rs — удалять зависимости пакета;
Работа с пакетами
Установка:
Удаление (sn - удалить пакет со всеми настройками):
Удалить все неиспользуемые пакеты, найденные командой в скобках $()
Удаление пакета со всеми зависимостями, не используемыми другими установленными пакетами:Удаления пакета, который требуется другому пакету, без удаления зависимого пакета:
Удаление пакета, его зависимостей и всех пакетов, зависящих от целевого пакета:
Удалить все пакеты, отсеянные в скобках (link):
Искать пакеты в базе данных как по названиям, так и по описаниям:
Установка пакета без ввода подтверждения:
Вывод списка файлов пакета:
Подробная информация о пакете из репозитория, например sddm:
Поиск пакета в репозитории (без установки):
Обновление системы и установка списка пакетов (за одну операцию):
Обновление системы (--noconfirm без подтверждения):
Просмотр списка всех установленных пакетов: Очистка кэша: Подробная информация по уже установленным пакетам:
Вывести принадлежащие пакету файлы и пути
Наоборот, узнать, какому пакету принадлежит файл sddm:
Установить пакет из локального файла, а не из репозитория:
Разрешение проблем
Посмотреть лог обновлений пакмана с выборкой по "upgraded":
Просмотреть папку с кэшем обновлений:
Если pacman (yaourt) выдаёт оишбку: "Pacman используется в данный момент пожалуйста подождите", не будучи при этом где-либо запущен, то лечится это убиванием флага блокировки базы данных пакмана:
Чтобы игнорировать при обновлении какие-либо пакеты, следует перечислить их в пункте "IgnorePkg =" в конфиге пакмана:
Эта статья посвящена ошибкам, которые возникают из-за проблем со списком зеркал.
Ошибка pacman «The requested URL returned error: 404»
Для работы менеджера пакетов имеется кэш - в этом кэше собрана информация о существующих пакетах для установки, их версиях и ссылки на скачивание. Чтобы обновить (или скачать впервые) этот кэш, нужно выполнить команду:
После этого можно выполнять обновление системы или обновление пакета.
Если кэш устарел и вы пытаетесь установить пакет, версия которого обновилась и для которого в вашем локальном кэше старая ссылка, вы можете получить примерно следующую ошибку:
Для её исправления нужно выполнить приведённую выше команду, а затем повторить установку.
Но аналогичная проблема может возникнуть при запуске обновления системы - это странно, поскольку следующая команда начинает с обновления кэша, следовательно, кэш самый новый и ошибка «файл не найден» не должна возникать:
Эта команда привела к ошибке:
Многократное повторение команды ничего не меняет.
Причина в следующем: pacman скачивает кэш с некачественного зеркала, в котором содержится неверная информация. Для исправления, нужно выбрать другое зеркало, или переместить другое зеркало вверх списка, если вы используете несколько зеркал.
Начнём с того, что переключимся на новый список зеркал. Дело в том, что при установке пакета pacman-mirrorlist (в этом пакете содержится список зеркал), новый файл /etc/pacman.d/mirrorlist не заменяет существующий, а сохраняется с именем /etc/pacman.d/mirrorlist.pacnew. То есть даже если у вас последняя версия пакета pacman-mirrorlist, это не означает, что у вас актуальная версия файла /etc/pacman.d/mirrorlist. Проверте, существует ли файл /etc/pacman.d/mirrorlist.pacnew:
Если файл существует, то выполните следующие две команды (в противном случае пропустите их):
В моём случае проблемным зеркалом, вызвавшим описанную выше ошибку, стало следующее (не используйте его):
Arch Linux перестал обновляться
Если вы запускаете команду «sudo pacman -Syu» каждый день, то вы могли заметить, то в редкий день не бывает обновлений. Если вдруг для вашей системы на протяжении нескольких дней перестали приходить обновления, это может означать, что кэш пакетов скачивается с некачественного зеркала.
Для исправления - выполните точно такие же действия, как описаны для предыдущей ошибки. То есть нужно переключиться на другое зеркало.
ошибка: не удалось обновить core (не настроены сервера для репозитория)
Ещё одна возможная ошибка после того, как вы выполнили какие-либо работы со списком зеркал установочных пакетов:
Её причина в том, что в файле /etc/pacman.d/mirrorlist закомментированы все строки. Откройте этот файл:
В arch'е я немногим менее месяца, и впервые столкнулся с такой ситуацией.
Пробую установить пакет vuze и не выходит.
]$ sudo pacman -Sy vuze
:: Синхронизируются базы данных пакетов.
core не устарел
extra не устарел
community не устарел
archlinuxfr не устарел
разрешение зависимостей.
предупреждение: выбран пакет openjdk6, предоставляющий java-runtime
проверка на взаимную несовместимость.
Цели (3): ca-certificates-java-20090629-2 openjdk6-1.6.2-1 vuze-4.3.1.2-1
Размер загружаемых файлов: 57,96 МБ
Размер устанавливаемых файлов: 140,41 МБ
Пробовал в /etc/pacman.d/mirrorlist подключать другие серверы (и путем раскомментирования строк в mirrorlist'e, и путем добавления отсюда) -- результат тот же.
Буду признателен за любую подсказку.
UPD. Вроде бы проблема установки vuze решена.
Я это сделал так:
[alejandro@arch
]$ sudo pacman -Sy vuze
:: Синхронизируются базы данных пакетов.
core не устарел
extra не устарел
community не устарел
archlinuxfr не устарел
разрешение зависимостей.
проверка на взаимную несовместимость.
Цели (1): vuze-4.3.1.2-1
Размер загружаемых файлов: 13,80 МБ
Размер устанавливаемых файлов: 15,47 МБ
А дальше совсем мне не нравится:
]$ sudo pacman -Syu
:: Синхронизируются базы данных пакетов.
core не устарел
extra не устарел
community не устарел
archlinuxfr не устарел
:: Запускается полное обновление системы.
разрешение зависимостей.
проверка на взаимную несовместимость.
Цели (1): openjdk6-1.6.2-1
Размер загружаемых файлов: 44,16 МБ
Размер устанавливаемых файлов: 124,73 МБ
Т.е. "а воз и ныне там".
Мне это сильно не нравится! Что придумать?
UPD 2. Вопрос, в принципе, решается подбором "правильных" (вовремя обновляемых) зеркал в /etc/pacman.d/mirrorlist.
Далее
$ sudo pacman -Syy
$ sudo pacman -Syu
Сейчас обновляюсь.
Очень надеюсь, что ничего не посыпется, ибо обновлений качать под 500М!
И, хотя, вопрос имеет непосредственное отношение к torrent-клиенту, но всё же хочется понять, что не так в системе, и что это за штука такая? У Яндекса зеркало протухло. Та БД, которая "не устарела", у вас, должно быть, оттуда. Попробуйте его отключить.
Пробовал раньше.
Опять сейчас отключил.
Оставил только это:
]$ sudo pacman -Sy vuze
:: Синхронизируются базы данных пакетов.
core не устарел
extra не устарел
community не устарел
archlinuxfr не устарел
разрешение зависимостей.
предупреждение: выбран пакет openjdk6, предоставляющий java-runtime
проверка на взаимную несовместимость.
Цели (3): ca-certificates-java-20090629-2 openjdk6-1.6.2-1 vuze-4.3.1.2-1
Размер загружаемых файлов: 57,96 МБ
Размер устанавливаемых файлов: 140,41 МБ
Простите за много букв, но. что посоветуете?
]$ sudo pacman -Syu
:: Синхронизируются базы данных пакетов.
core не устарел
extra не устарел
community не устарел
archlinuxfr не устарел
:: Запускается полное обновление системы.
разрешение зависимостей.
проверка на взаимную несовместимость.
Размер загружаемых файлов: 454,22 МБ
Размер устанавливаемых файлов: 1310,17 МБ
Для определения подлинности пакетов pacman использует ключи GnuPG и сеть доверия. Действующие мастер-ключи Arch Linux можно найти здесь. Ключи разработчиков и доверенных пользователей, которыми они подписывают свои пакеты, должны быть подписаны минимум тремя мастер-ключами. У каждого пользователя также есть свой уникальный PGP-ключ, сгенерированный при настройке утилиты pacman-key. Сеть доверия связывает ключи пользователей и мастер-ключи.
Примеры сетей доверия:
- Пользовательские пакеты: обычный пользователь создаёт пакет и подписывает его своим локальным ключом.
- Неофициальные пакеты: разработчик создаёт пакет и подписывает его ключом разработчика; обычный пользователь подписывает ключ разработчика локальным ключом.
- Официальные пакеты: разработчик создаёт пакет и подписывает его ключом разработчика, подписанным мастер-ключами Arch Linux; обычный пользователь подписывает локальным ключом мастер-ключ и доверяет последнему поручиться за разработчика.
Contents
Настройка
Настройка pacman
Примечание: В настоящее время все официальные пакеты подписаны, но подписывание баз данных на ноябрь 2018 не завершено. Если в параметре SigLevel задано значение Required , необходимо также указать и DatabaseOptional .Настройка по умолчанию позволяет устанавливать только те пакеты, которые подписаны доверенными ключами:
Параметр TrustedOnly используется в pacman по умолчанию, то есть настройка ниже аналогична предыдущей:
То же самое можно задать и для отдельного репозитория далее в файле конфигурации:
Здесь явно задаётся проверка подписи для пакетов из этого репозитория, но подпись базы данных не проверяется. Если задать здесь значение Optional , то для этого репозитория глобальное значение Required станет недействительно.
Важно: SigLevel TrustAll даёт системе указание считать все ключи доверенными. Эта значение используется только для целей отладки. Для официальных репозиториев необходимо использовать значение TrustedOnly .Инициализация связки ключей
Для инициализации связки ключей pacman выполните:
Для инициализации необходима энтропия. Чтобы сгенерировать больше энтропии, активно двигайте мышью, нажимайте случайные клавиши или выполняейте действия, связанные с диском (например, запустите в другой консоли ls -R / , find / -name foo или dd if=/dev/sda8 of=/dev/tty7 ). Если энтропия системы недостаточна, этот этап может занять часы; активная генерация энтропии ускорит процесс.
Генерируемая последовательность случайных чисел используется для создания связки ключей ( /etc/pacman.d/gnupg ) и GPG-ключа вашей системы.
Примечание: Если вы запускаете pacman-key --init на компьютере, который не генерирует много энтропии (например, на удалённом сервере), создание ключа может занять очень много времени. Для выработки псевдоэнтропии установите утилиты haveged или rng-tools и запустите соответствующую службу перед командой pacman-key --init .Управление связкой ключей
Проверка мастер-ключей
Первоначальная настройка ключей выполняется командой:
При появлении запроса необходимо проверить подлинность мастер-ключей, поскольку они используются для подписи всех пакетов совместно с ключами разработчиков.
PGP-ключи довольно велики (2048 бит или больше), что делает их неудобными для восприятия людьми. Поэтому на основе ключа вычисляется 40-разрядная шестнадцатеричная хэш-сумма, по которой можно проверить его подлинность. Также нужно помнить, что последние восемь цифр хэш-суммы часто используют как имя или (короткий) ID ключа, а последние шестнадцать — как длинный ID ключа.
Добавление ключей разработчика
Ключи официальных разработчиков и доверенных пользователей подписываются мастер-ключами, так что вам не нужно использовать pacman-key, чтобы подписывать их самостоятельно. Когда pacman встречает в подписи пакета ключ, который не удаётся распознать, то предлагает скачать его с сервера ключей, указанного в параметре keyserver в файле /etc/pacman.d/gnupg/gpg.conf или в опции --keyserver командной строки. Перечень серверов ключей можно найти в Википедии.
Ключ разработчика нужно скачать всего единожды, после этого он будет использоваться для проверки любого пакета от этого разработчика.
Добавление неофициальных ключей
Этим способом можно добавить в связку ключей pacman свой ключ или включить подписанный неофициальный репозиторий.
В первую очередь получите у владельца ключа его ID ( keyid ). Добавьте полученный ключ в связку:
- Если ключ находится на сервере ключей, импортируйте его командой:
- Если у вас есть ссылка на файл ключа, скачайте его и выполните:
Всегда старайтесь проверять отпечаток — как мастер-ключей, так любых других ключей, которые вы собираетесь подписать:
Наконец, подпишите импортированный ключ локально:
Теперь этот ключ будет считаться доверенным.
Отладка при помощи gpg
При отладке доступ к связке ключей pacman можно получить напрямую с помощью gpg, например:
Решение проблем
error: signature from xxx is invalid
Важно: Работа pacman-key зависит от настроек системного времени. Если системные часы неверны, при обновлении вы получите следующую ошибку:Ниже приведены три возможных решения. Если вы не уверены, что выбрать, попросите о помощи на форуме.
Удаление старых версий пакетов
Если постоянно возникает проблема с одним и тем же пакетом и вы уверены, что дело не в pacman-key, попробуйте удалить плохой пакет из кэша командой rm /var/cache/pacman/pkg/плохой_пакет* и скачайте его заново.
Сброс ключей
Для сброса всех установленных в системе ключей необходимо удалить каталог /etc/pacman.d/gnupg . После этого выполните команды pacman-key --init и pacman-key --populate archlinux , чтобы добавить базовый набор ключей заново.
Отключение проверки подписи
Важно: Используйте с осторожностью. Отключение проверки подписи приведёт к тому, что pacman будет без возражений устанавливать любые пакеты, в том числе и недоверенные.Если подписи пакетов вас не интересуют, можно полностью отключить их проверку. Отредактируйте файл /etc/pacman.conf , раскомментировав следующую строку в разделе [options] :
Также необходимо закомментировать все параметры SigLevel в настройках репозиториев, потому что они имеют приоритет над глобальными настройками. В результате подпись пакетов проверяться не будет, как это было в pacman до четвертой версии. В этом случае устанавливать связку ключей при помощи pacman-key не нужно. Позже при необходимости можно будет включить проверку подписи пакетов обратно.
Не удаётся импортировать ключи
- Устаревший пакет archlinux-keyring ;
- Неправильные настройки даты и времени;
- Интернет-провайдер блокирует порт, используемый для импорта PGP-ключей;
- Кэш pacman содержит неподписанные пакеты, оставшиеся с предыдущих попыток;
- Демон dirmngr не был правильно настроен;
- Вы давно не обновлялись и gpg/pacman не справились с обновлением.
Давно не обновлявшийся пакет archlinux-keyring может привести к проблемам при синхронизации обновлений.
Ниже приведено несколько возможных решений.
Обновление системы
Прежде всего попробуйте обновить систему.
Смена сервера ключей
Если вы предполагаете, что проблема связана с сервером ключей, то можно попробовать переключиться на сервер ключей Ubuntu. Отредактируйте файл /etc/pacman.d/gnupg/gpg.conf , изменив значение keyserver :
Удаление кэшированных пакетов
Возможно, кэш pacman в каталоге /var/cache/pacman/pkg/ содержит неподписанные пакеты. Очистите кеш вручную:
что удалит все пакеты в кэше, которые не были установлены.
Не удаётся опознать подпись пакета
Иногда при выполнении pacman -Syu вы можете столкнуться со следующей ошибкой:
Такое происходит, когда ключ создателя пакета отсутствует в локальной базе данных pacman-key или не является доверенным. Pacman не всегда имеет возможность проверить, был ли ключ скачан и является ли он доверенным, перед тем как продолжить обновление. Также возможно, что срок действия ключа истёк.
Я побежал, sudo pacman -Syu и я получил некоторые интересные ошибки чтения:
ошибка: не удалось зафиксировать транзакцию (конфликтующие файлы)
Что мне делать? Должен ли я проверить все файлы и удалить те, у которых нет связанного пакета? Должен ли я принудительно обновить (с sudo pacman -S --force <package-name> ?)
Обновить
Я попытался бежать sudo pacman -S --force <package-name> и получил это:
Похоже pacman -S --force <package , не перезаписать каталоги, которые содержат файлы. От мужчины:
Использование --force не позволит перезаписать каталог с файлом или установить пакеты с конфликтующими файлами и каталогами.
Должен ли я просто удалить конфликтующие каталоги? (у них нет связанных пакетов)
почему у вас конфликтующие файлы в первую очередь? при использовании менеджера пакетов старайтесь не касаться его пальцами ног (например, устанавливая программное обеспечение в местах, где менеджер пакетов по праву считает, что они принадлежат; если вам нужно установить вещи вручную, установите /usr/local/ вместо /usr/ ) @ umläute Я не совсем уверен, откуда пришли конфликтующие файлы, но я подозреваю, что они связаны с моей установкой docker-compose, которую я установил с помощью sudo pip install -U docker-compose==1.5.0rc3 этой страницы . Возможно sudo pip install конфликтует с pacman? @ umläute Получение неправильных -S обновлений (частичная установка и т. д.) позволит вам этот сценарий. Дело у меня --force сработало все время.Хорошо, похоже, что работает sudo pacman -S --force <package-name> работает, но он не разрешает конфликтующие каталоги. В таких случаях бегут sudo rm -rf по конфликтующим каталогам, затем следуют sudo pacman -S --force <package-name> работы.
Теперь мой pacman -Syu разрешается хорошо.
- сила не рекомендуется; используйте вместо этого --overwrite. sudo pacman -Syu --force работал для меня, но перезапись не была распознана.tl; dr: удалите конфликтующее приложение перед запуском pacman .
pacman (и другие менеджеры пакетов) хранят индекс пакетов и файлов, которыми они управляют ( pacman --query --list ). Некоторые файлы, такие как конфигурация, будут помечены как изменяемые и не будут перезаписаны во время обновления (за исключением особых случаев, когда менеджер пакетов обычно удаляет старый файл перед созданием нового). Другие файлы будут помечены как неизменяемые. Если другое приложение каким-либо образом изменяет эти файлы без соответствующего обновления индекса, у менеджера пакетов нет возможности узнать, что делать с этими файлами во время обновления.
Многие приложения, установленные с использованием стандартного ./configure && make && sudo make install шаблона, могут быть удалены с помощью sudo make uninstall . Если вы установили приложение другим способом, вам может понадобиться что-то еще, чтобы удалить его. В целом, может быть хорошей идеей хранить где-нибудь копию установочных файлов (например
/install ), чтобы иметь возможность надежно удалить их в таких случаях. Простое удаление конфликтующих файлов, вероятно, приведет к тому, что другие файлы будут лежать без дела, что может вызвать другие проблемы.
При установке программного обеспечения с другими менеджерами пакетов есть способы изолировать их от системных файлов. Это установившаяся лучшая практика, например, при разработке программного обеспечения, когда вы действительно хотите поддерживать согласованность версий и избегать конфликтов с другим программным обеспечением. Примеры включают в себя:
Смотрите мой комментарий к @umlaute выше. Я думаю, что конфликт был из sudo pip install команды. Возможно, мне следует избегать использования pip с sudo?Из-за этого я устанавливал пакеты, которые я обычно устанавливаю с помощью pip через pacman. Но некоторые пакеты не найдены в репозиториях pacman. Я думаю, что мы должны избегать установки pip с привилегиями sudo и istead:
TLDR;
- Получить список поврежденных файлов (скопировать и вставить вывод pacman в файл).
- Используйте awk, чтобы удалить все, кроме путей к файлам, в новый список.
- Используйте while, чтобы удалить оскорбительные файлы, основываясь на списке.
- Беги sudo pacman -Syu снова.
Хотя я почти уверен, что не делал ничего глупого, у меня была эта проблема, может быть, каждый раз, когда я пытался обновить, так как я использовал Manjaro; три или четыре раза в течение двух месяцев. Суть в том, что это исправляет.
Получить список ваших файлов.
Когда в окне терминала происходит сбой обновления, вы получаете следующее:
. и многое другое.
Скопируйте вывод из терминала и поместите его в файл. Я использовал nano и назвал мои «файлы», как в
Лишить постороннюю информацию:
Это берет второе слово из каждой строки и печатает его в files2.
Разобраться с файлами
Вы можете удалить их, переместить или переименовать.
/work/oldfiles while read -r file; do sudo mv -- "$file"
/work/oldfiles/$file; done < files2
Если вы действительно хотите удалить их, что не нужно делать ( ОПАСНО ОПАСНО ): при чтении файла -r; do sudo rm - "$ file"; сделано <files2
обновление
Чтобы заставить работать --overwrite, что нам нужно, чтобы pacman понял, что пакет не сломан, вам нужен следующий синтаксис:
sudo pacman -S package_name --overwrite /location/of/thing
- В моем случае: sudo pacman -S libidn2 --overwrite /usr/lib/libidn2.so.0
- Следуя примеру: sudo pacman -S libx000 --overwrite /usr/lib/libx000.so.f.u.loser
У меня была милая проблема, когда я удалял символическую ссылку libidn2.so.0, ничего не работало, и когда я возвращал ее обратно, я получал ошибку «существует в файловой системе». Выше, с --overwrite, это все, что работало для меня.
Читайте также: