Общие вопросы > Полезные советы, инструкции

Создание портативных программ с помощью doker.

(1/1)

totiks2012:
# Создание портативных программ с помощью doker.

### 1. Установка

В первую очередь мы должны озаботится наличием достаточного места на hdd или ssd,  потому что doker контейнер , это по сути дистрибутив linux в контейнере , отвязаный от основной системы , в котором будем работать с  правами root .

Итак установка .

Перед установкой doker обновим список пакетов apt :


--- Код ---
sudo apt update
--- Конец кода ---

далее вводим команды:

--- Код ---
curl -fsSL https://get.docker.com -o get-docker.sh
--- Конец кода ---

после выполнения этой команды вводим в терминал:


--- Код ---
sudo sh 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:


--- Код ---
apt update
--- Конец кода ---


--- Код ---
apt install -y pluma
--- Конец кода ---

### 4. Добыча ресурсов программы (в нашем случае pluma)

Теперь мы должны отфильтровать все зависимости и компоненты относящиеся к pluma.

Для этого вводим в терминал контейнера последовательность команд:


--- Код ---
apt install rsync
--- Конец кода ---


--- Код ---
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, для этого в терминал основной системы вводим команду:


--- Код ---
sudo docker ps
--- Конец кода ---

под 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 контейнер будет удалён.

krasnyh:
Сделай небольшую выжимку. Тема может и интересная, но в таком виде малопривлекательная.

totiks2012:

--- Цитата: krasnyh от 07 Октябрь 2023, 15:49:35 ---Сделай небольшую выжимку. Тема может и интересная, но в таком виде малопривлекательная.
--- Конец цитаты ---
переделаю, благо есть md файл, я понимаю примерно что требуется ... но не сегодня, сегодня слегка уже не в форме... :)

krasnyh:
На всякий, я имел ввиду забабахать статью прямо в теме. Если ожидается ну очень много текста, то сделать выжимку, дайджест, анонс на много букв ...  :)

totiks2012:
Сделал, если что нужно поправить опять таки вечером.
upd:  тянет меня иногда на лирику, уж простите. Убрал лирику, и да так более лучше ибо все по делу.

Навигация

[0] Главная страница сообщений

Перейти к полной версии