# Создание портативных программ с помощью doker.
### 1. Установка
В первую очередь мы должны озаботится наличием достаточного места на hdd или ssd, потому что doker контейнер , это по сути дистрибутив linux в контейнере , отвязаный от основной системы , в котором будем работать с правами root .
Итак установка .
Перед установкой doker обновим список пакетов apt :
далее вводим команды:
curl -fsSL https://get.docker.com -o get-docker.sh
после выполнения этой команды вводим в терминал:
после этого у нас в системе установлен doker.
Теперь мы должны запустить службу doker.
### 2. Запуск doker
sudo systemctl start docker
Теперь у нас всё готово чтоб запустить контейнер:
sudo docker run -it --rm debian:bullseye-slim /bin/bash
обратите внимание контейнер запущен с опцией ` --rm`
то есть после закрытия терминала и перезагрузки системы контейнер будет удален , если вам нужен контейнер и после перезагрузки, опцию `--rm` убираем.
Дожидаемся пока создастся образ контейнера (скачает нужные пакеты для файловой системы), и в контейнере откроется командная строка от root пользователя.
### 3. Устанавливаем программу в doker.
В контейнере, который запущен, устанавливаем например пакет pluma:
### 4. Добыча ресурсов программы (в нашем случае pluma)
Теперь мы должны отфильтровать все зависимости и компоненты относящиеся к pluma.
Для этого вводим в терминал контейнера последовательность команд:
mkdir -p ~/pluma # Создаем каталог ~/pluma (если его нет)
dpkg-query -L pluma > pluma_files.txt # Получаем список файлов пакета pluma и сохраняем в файл
apt-cache depends pluma | grep " Depends: " | sed 's/ Depends: //' | xargs dpkg-query -L >> pluma_files.txt # Добавляем зависимости в список файлов
rsync -av --files-from=pluma_files.txt / ~/pluma/ # Копируем файлы в ~/pluma/
Теперь открываем терминал основной системы, и узнаем CONTAINER ID нашего контейнера doker, для этого в терминал основной системы вводим команду:
под CONTAINER ID мы увидим набор цифр это код нашего CONTAINER ID, копируем его.
и в терминале основной системы вводим команды:
mkdir /home/live/dok_cont
и в команде
sudo docker cp CONTAINER_ID:/root/pluma /home/live/dok_cont
подменяем CONTAINER_ID на наш код, у меня получилось так :
sudo docker cp 064bc6d978f9:/root/pluma /home/live/dok_cont
Теперь если мы зайдем в домашний каталог /home/live/dok_cont то увидим каталог pluma c ресурсами для портативной программы.
Но так как копировали от имени root то владельцем каталога естественно является root, и мы должны его вернуть во владения пользователя
для этого в терминале основной системы вводим команду
sudo chown -R live:live /home/live/dok_cont/pluma/
где live это имя пользователя ну а /home/live/dok_cont/pluma/ это каталог который нужно было вернуть во владение пользователя.
Всё ресурсы добыты, и всё готово чтоб использовать pluma как портативную программу.
Для этого напомню в каталоге pluma, с ресурсами достаточно,
поместить LAUNCER скрипт следующего содержания.
#!/bin/sh
HERE="$(dirname "$(readlink -f "$0")")"
last_dir=$(basename "$HERE")
#usr="$HERE"
#sudo mkdir -p /usr/share/
#sudo mount --bind $HERE/usr/share/$last_dir/ /usr/share/$last_dir/
GSETTINGS_SCHEMA_DIR=$HERE/usr/share/glib-2.0/schemas/ LD_LIBRARY_PATH=$HERE/usr/lib/x86_64-linux-gnu $HERE/usr/bin/$last_dir
и после как сделаем его исполняемым запустим и увидим что терминал выдаст ошибку
pluma:16049): GLib-GIO-ERROR **: 12:13:05.836: Settings schema 'org.mate.pluma' is not installed
Trace/breakpoint trap
для того чтоб это поведение вылечить, необходимо вначале установить в основную систему на всякий случай libglib2.0-bin
sudo apt install libglib2.0-bin
далее вводим команду
glib-compile-schemas /home/live/dok_cont/pluma/usr/share/glib-2.0/schemas/
после этого запускаем снова LAUNC файл из каталога pluma, и текстовой редактор запустится.
Все терминалы после окончания работ, нужно закрыть, и после перезагрузки doker контейнер будет удалён.