Використання 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 Розпакувати вміст пакету
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/05/31 09:52
  • by vazaz