Шпаргалка по переходу c opkg на apt

Это шпаргалка чтобы плавно перейти от предыдущего менеджера пакетов opkg к новому apk.

Как и в opkg большинство команд позволяет использовать необязательный шаблон по названию пакета (обозначен как [P] в командах ниже). Так же, как и в opkg, шаблоны являются файловыми масками, н.п. *dns* соответствует каждому пакету с dns где-то в его названии.

Команда Описание
apk -h Показать команды и краткие описания
apk subcmd -h Справка по подкоманде subcmd (в документации apk-tools называется “аплеты”, англ. “applets”)
apk update Принудительное обновление локальных индексов, так же как и в opkg
apk adbdump file Вывод содержимого файла APK v3, включая индексные файлы пакетов (обычно именуемые packages.adb) и файлы .apk пакета
apk opkg Описание
apk update opkg update Обновить удалённые источники (фиды) пакетов
apk add pkg opkg install pkg Установить пакет pkg
apk del pkg opkg remove pkg Удалить пакет pkg

Добавление во многом похоже в обоих менеджерах пакетов. Разница в том, что apk хочет чтобы все пакеты были подписаны, в то время opkg игнорирует это для локальных пакетов, поэтому если вы устанавливаете нестандартный (самодельный) пакет, то используйте опцию --allow-untrusted:

$ apk add ./owut_2024.07.01~189b2721-r1.apk
ERROR: ./owut_2024.07.01~189b2721-r1.apk: UNTRUSTED signature

$ apk add --allow-untrusted ./owut_2024.07.01~189b2721-r1.apk
OK: 2313 MiB in 569 packages

Интересные варианты

Опция apk --update-cache позволяет выполнить update одновременно с тем что вы делаете add, так что теперь вы можете заменить традиционную последовательность opkg команд в одну команду в apk.

opkg update && opkg install dnsmasq-full

становится

apk --update-cache add dnsmasq-full

Опция --simulate позволяет выполнить холостое выполнение команды перед тем как выполнить её окончательно.

$ apk del --simulate nmap
(1/1) Purging nmap (7.95-r1)
OK: 47 MiB in 288 packages

Обработка репозиториев по умолчанию

По умолчанию apk настроен на обновление репозиториев пакетов определенных в /etc/apk/repositories.d/ когда apk add выполняется в первый раз. Это может быть нежелательно в некоторых автономных (или изолированных) сценариях, где apk собирается сходить на удалённые репозитории пакетов для обновления базы данных локальных пакетов, прежде чем разрешить установку локального пакета.

$ apk add ./owut_2024.07.01~189b2721-r1.apk
fetch https://downloads.openwrt.org/snapshots/targets/x86/64/packages/packages.adb
Failed to send request: Operation not permitted
WARNING: updating and opening https://downloads.openwrt.org/snapshots/targets/x86/64/packages/packages.adb: network error (check Internet connection and firewall)
...snip...
OK: 2313 MiB in 569 packages

Если вы не хотите этого поведения по умолчанию, вы можете отключить его с помощью опции --repositories-file /dev/null

$ apk add --repositories-file /dev/null ./owut_2024.07.01~189b2721-r1.apk
...snip...
OK: 2313 MiB in 569 packages

Если вы хотите такого навсегда, просто удалите /etc/apk/repositories.d, например выполнив mv /etc/apk/repositories.d /etc/apk/repositories.d-disabled.

Здесь [P] это файловая маска.

apk opkg Описание
apk list opkg list Показать все что доступно
apk list P opkg list P Показать совпадения P, или если вы предпочитаете регулярные выражения то пропустите через grep
apk list --installed [P] opkg list-installed Показать все установленные или соответствующие P
apk list --upgradeable [P] opkg list-upgradable Показать обновляемые пакеты
apk list --providers [P] opkg -A whatprovides P Показать все пакеты предоставляющие P

Интересные варианты

  • apk list --installed --manifest - выводит простой список пар “название-пакета версия” который легко разобрать с помощью awk или sed
  • apk info - без каких либо параметров выводит список названий только установленных пакетов, так что никакого разбора не нужно
  • apk list --orphaned - показать любые осиротевшие зависимости, т.е., пакеты у которых нет верхнеуровневых пакетов которые зависят от них. Это может означать что они остались после ошибки при удалении другого пакета, то также может означать нужные пакеты у которых сломаны зависимости. Если вы хотите удалить осиротевший пакет, сначала точно убедитесь что он не нужен чтобы не сломать систему.

Сравнительные примеры списков пакетов

Показать всех кандидатов через opkg:

$ opkg -A whatprovides dnsmasq
What provides dnsmasq
    dnsmasq-dhcpv6
    dnsmasq
    dnsmasq-full

Показать всех кандидатов через apk:

$ apk list --providers dnsmasq
<dnsmasq> dnsmasq-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0)
<dnsmasq> dnsmasq-dhcpv6-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0)
<dnsmasq> dnsmasq-full-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0) [installed]

Показать установленный пакет который предоставляет dnsmasq через opkg:

$ opkg whatprovides dnsmasq
What provides dnsmasq
    dnsmasq-full

Показать установленный пакет который предоставляет dnsmasq через apk:

$ apk list --installed --providers dnsmasq
<dnsmasq> dnsmasq-full-2.90-r3 x86_64 {feeds/base/package/network/services/dnsmasq} (GPL-2.0) [installed]
apk opkg Описание
apk info нет эквивалента Показать названия только установленных пакетов
apk info P opkg info P Показать краткую информацию для P
apk info --all P нет эквивалента Показать полную информацию для P
apk info --contents P opkg files P Показать файлы предоставляемые пакетом
apk info --who-owns <file> opkg search <файл> Найти пакет который установил этот <файл>
apk opkg Описание
apk extract --allow-untrusted P tar -xvf P Извлечь содержимое этого пакета
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2025/02/03 22:06
  • by stokito