Table of Contents

Використання 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

Корисні варіанти:

Порівняння прикладів виводу списків пакетів

Показати всі варіанти через 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 Розпакувати вміст пакету