Підказки і настанови

Робота з Toolbx

Визначення того, чи перебуваєте ви у контейнері Toolbx

Якщо ви часто користуєтеся Toolbx для виконання різноманітних завдань і використовуєте декілька контейнерів Toolbx, стає важко стежити за тим, виконуєте ви команди в основній системі чи у контейнері Toolbx. Крім того, у поточній версії немає команди, яка б повідомила вам, у якому з контейнерів Toolbx ви працюєте.

Для полегшення виконання цього завдання ви можете додати таку альтернативу командної оболонки наприкінці вашого файла ~/.bashrc:

alias istoolbx='[ -f "/run/.toolboxenv" ] && grep -oP "(?<=name=\")[^\";]+" /run/.containerenv'

Коли ви відкриєте нову командну оболонку, у вас буде доступ до нової команди — istoolbx. Ця команда поводитиметься так:

  • Якщо команду виконано з основної системи, вона поверне код виходу 1

  • Якщо команду запущено з контейнера Toolbx, буде повернуто код виходу 0 і виведено до консолі назву поточного контейнера Toolbx

Якщо вам подобається більш автоматизоване рішення, варто додати до вашого ~/.bashrc вказаний вище фрагмент, який змінить ваш запит bash на такий, що міститиме рядок «[toolbox <назва>]»:

function is_toolbox() {
    if [ -f "/run/.toolboxenv" ]
    then
        TOOLBOX_NAME=$(cat /run/.containerenv | grep -oP "(?<=name=\")[^\";]+")
        echo "[${HOSTNAME} ${TOOLBOX_NAME}]"
    fi
}

Потім ви можете включити is_toolbox до вашої змінної PS1, і вам вже не потрібно буде виконувати жодних додаткових команд для того, щоб дізнатися, перебуваєте ви у toolbox чи у командній оболонці основної системи.

Приклад: ` export PS1="\[\e[31m\]`is_toolbox\`\]\e[m\]\[\e[32m\]\\$ \[\e[m\]\[\e[37m\]❱\[\e[m\] " `

Результатом буде запит, який виглядатиме так, якщо ви не у toolbox: $ ❱

А у toolbox із назвою «default» ось так: [toolbox default]$ ❱

Запуск програм з Toolbx в основній системі

Потреба у запуску може виникнути, якщо ви хочете взаємодіяти із програмними інструментами основної системи, наприклад podman, nmcli або rpm-ostree, не полишаючи контейнера Toolbx. Ви можете скористатися для виконання цього завдання програмою flatpak-spawn, яку включено до базового пакунка:

$ flatpak-spawn --host podman --help

Якщо програмі, яку ви хочете викликати, потрібен доступ sudo, слід додати параметр -S до команди sudo, ось так:

$ flatpak-spawn --host sudo -S rpm-ostree status

Якщо ви використовуєте команди, подібні до наведеної вище, часто для доступу, наприклад, до команди flatpak з контейнера Toolbx, ви можете створити самі короткий нетиповий скрипт-обгортку (у контейнері Toolbx). Для цього виконайте такі кроки:

  1. Визначте альтернативу istoolbx (для зручності) за допомогою згаданої вище команди у вашому терміналі

  2. Переконайтеся, що ви перебуваєте у контейнері Toolbx. Якщо наступна команда нічого не виводить, ймовірно, ви усе ще перебуваєте в основній системі!

    [toolbx]$ istoolbx
    <Тут буде назва контейнера Toolbx>
  3. Щойно ви опинитеся у контейнері Toolbx, віддайте таку команду:

    [toolbx]$ echo -e '#!/bin/sh\nexec /usr/bin/flatpak-spawn --host flatpak "$@"' | sudo tee /usr/local/bin/flatpak 1>/dev/null && sudo chmod +x /usr/local/bin/flatpak

Тепер вам доступна команда flatpak, за допомогою якої ви можете взаємодіяти з flatpak так, наче ви віддаєте команду в основній системі.

Робота з ostree/rpm-ostree

Стеження за змінами у базовій операційній системі

Деякі з каталогів операційних систем на основі ostree придатні до запису для звичайного користувача, зокрема /etc. Ви можете переглянути список файлів, які було змінено у /etc, за допомогою такої команди:

$ sudo ostree admin config-diff

Щоб отримати докладніший опис відмінностей, ви можете віддати таку команду:

$ sudo diff -yrW200 --suppress-common-lines --color=always /usr/etc /etc 2>/dev/null
Це працює, оскільки ostree зберігає незмінену копії каталогу /etc у /usr/etc. Усі внесені вами зміни записуються до /etc безпосередньо.

Робота з програмами Flatpak

Безпосередній доступ до програм Flatpak з інтерфейсу командного рядка

Найпомітнішою відмінністю користування програмами Flatpak від користування звичайними програмами є те, що такі програми не можна безпосередньо викликати з інтерфейсу командного рядка, ось так:

$ evince
bash: команду не знайдено: evince

Замість цього, виклик можна здійснити так:

$ flatpak run org.gnome.Evince

Крім того, більшість програм Flatpak експортують власні двійкові внутрішні файли каталозі, який залежить від каталогу встановлення:

  • Для програм Flatpak, які встановлено з віддалених сховищ system, ці каталоги можна знайти у /var/lib/flatpak/exports/bin/

  • Для програм Flatpak, які встановлено з віддалених сховищ user, ці каталоги можна знайти у $HOME/.local/share/flatpak/exports/bin/

Якщо ви не певні, до якого встановлення належить програма Flatpak, ви можете скористатися такою командою для виведення потрібних даних:

$ flatpak list --app --columns=name,installation

Ви можете або додати ці каталоги до змінної $PATH:

$ org.gnome.Evince

або налаштувати alias командної оболонки так, щоб вони стали доступними інтерфейсу командного рядка, ось так:

$ alias evince="flatpak run org.gnome.Evince"
  # або alias evince="org.gnome.Evince"
$ evince