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