Portable софт (перенос софта из одного дистрибутива в другой)

  • Софт, который не имеет зависимостей от сторонних библиотек или включает их в себя.
  • Соответственно запускается на любом линуксе

Зачем

  • В Вашем дистрибутиве нет нужного софта (не той версии, не с теми зависимостями или патчами)
  • Использование портированного софта в разных дистрибутивах. Как минимум - экономия места. Так сделаны основные браузеры

Статическая линковка библиотек

Некоторые программы можно компилить статически. Например.

Достоинства

  • Библиотеки не нужны

Недостатки

  • Так получится не с любой программой
  • Раздувание объема программы
  • Дубляж библиотек

Включение библиотек в альтернативный каталог программы

  • Складываем бинарный файл и библиотеки в, например, /opt и настраиваем связи
  • Если положить библиотеки в /lib - они могут заменить родные библиотеки системы и сломать систему
  • Включать абсолютно все зависимые библиотеки не надо. Только те, которых нет (других версий) у акцептора
  • Если каких-то библиотек не хватает -их можно взять в дистрибутиве-доноре (откуда брались бинарники)

http://portablelinuxapps.org/

Недостатки

  • Все в 1 файле , который не так просто собрать \ разобрать.
  • Монтируется iso - в итоге то же монтирование, только iso, а не squash… Сквош удобнее (сжат, можно наслаивать)

/etc/ld.so.conf.d

Достоитства

  • Можно переносить библиотеку с зависимыми библиотеками.

Недостатки

  • После изменения конфига надо делать sudo ldconfig

chroot2pfs

Собираем копию системы и запускаем в ней нужную программу с подключением к текущей сессии Xorg

chroot2pfs --nomod -X -c nspawn --mlist /pth/1.pfs,#2.pfs --command pcmanfm

LD_LIBRARY_PATH=

Запуск через wrapper : wrapper app

#!/bin/sh
LD_LIBRARY_PATH="/opt/$1/lib:/opt/$1/lib1" GSETTINGS_SCHEMA_DIR="/opt/$1/usr/share/glib-2.0/schemas/" exec "/opt/$1/bin/$1" "$@"
  • Если одна и та же либа есть и в /opt/$1/lib и в /opt/$1/lib1 - будет использована первая по списку (/opt/$1/lib)
  • Для автоматизации портирования в LF дистрибутивах есть mkport

Достоитства

  • ldconfig делать не надо.
  • Не действует для других программ

Недостатки

  • Для либ с модулями типа /usr/lib/alsa-lib придется перекомпилить их с новым путем /opt/$1/usr/lib/alsa-lib или воспользоваться утилитой, которая меняет пути внутри бинарников

Выводы

  1. К каждой программе нужен индивидуальный подход
  2. Наиболее прост и универсален LD_LIBRARY_PATH= Именно этот метод используется везде где возможно в PRA
  3. Подключаемые модули в дистрибутивах puppy(rus)(a), porteus, magos можно делать портируемыми (Что и сделано в большинстве модулей PRA)
  4. Не надо злоупотреблять. Всегда нужно стараться использовать родной репозиторий или компилить
  5. Оптимально портировать простые, популярные программы для использования в разных дистрибутивах

Обсуждение Автор: sfs

Печать/экспорт