Використання apk замість opkg

Ця шпаргалка допоможе вам безболісно перейти від старого менеджера пакетів opkg до нового apk.

НЕ ВИКОРИСТОВУЙТЕ apk upgrade для оновлення пакетів!

Це з великою ймовірністю призведе до «вбивства» пристрою. Деякі бібліотеки мають ABI-залежні назви, які ще не обробляються належним чином (наприклад, libubus, libustream тощо), що спричинить конфлікти при сліпому оновленні.

Безпечний спосіб оновлення всіх пакетів — використання одного з клієнтів ASU: LuCI Attended Sysupgrade, owut або Firmware Selector.

Як і в opkg, більшість команд apk підтримують шаблон назви пакету (позначено як [P]). Ці шаблони — це globs, наприклад, *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

Цікаві варіанти

Опція `--update-cache` дозволяє оновити кеш одночасно з установкою пакету:

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 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/...: network error
...snip...
OK: 2313 MiB in 569 packages

Щоб уникнути цього, використовуйте:

$ apk add --repositories-file /dev/null ./owut_2024.07.01~189b2721-r1.apk

Або назавжди вимкніть це, перейменувавши директорію:

mv /etc/apk/repositories.d /etc/apk/repositories.d-disabled

Нагадаємо: [P] — шаблон (glob).

apk opkg Опис
apk list opkg list Показати всі доступні пакети
apk list P opkg list P Показати пакети, що відповідають шаблону P
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 немає еквівалента Показати розширену інформацію про пакет
apk info --contents P opkg files P Показати, які файли містить пакет
apk info --who-owns <файл> opkg search <файл> Знайти, який пакет встановив вказаний файл
apk opkg Опис
apk extract --allow-untrusted P tar -xvf P Розпакувати вміст пакету
  • Last modified: 2025/05/31 09:52
  • by vazaz