Общие вопросы > Полезные советы, инструкции
Создание портативных программ с помощью 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: тянет меня иногда на лирику, уж простите. Убрал лирику, и да так более лучше ибо все по делу.
Навигация
Перейти к полной версии