1

Я установил GStreamer с помощью менеджера пакетов synaptic, но я хотел бы перейти на более новую версию. Я не очень знаком с управлением пакетами, поэтому вот несколько моих вопросов:

  • Могу ли я попросить apt-get найти для меня более новую версию? Или мне нужно загрузить самую новую версию и собрать ее из исходного кода?
  • Если я сделаю сборку из исходного кода, после чего произойдет «make install», будут ли в моей системе две разные версии?
  • Если да, то как система решает, какую версию использовать?
  • Могу ли я сказать системе использовать старый GStreamer для всего, но использовать новые библиотеки GStreamer для связи с моим кодом? Если да, то как?

Я использую GStreamer только в качестве примера, мне интересно, как эти проблемы решаются в целом.

2 ответа2

2

У вас, конечно, есть несколько вариантов.

Более новая версия через Apt?

Основные репозитории Ubuntu не предоставляют серьезных обновлений для официальных пакетов. Они предоставляют исправления и обновления безопасности; более новые основные версии обычно предоставляются в следующем основном выпуске Ubuntu (Ubuntu 10.04, он же Lucid, в настоящее время в альфа-версии).

  • Вы можете искать в официальных репозиториях интересующий вас пакет, чтобы увидеть, что доступно и в каком выпуске. В настоящее время кажется, что Karmic использует Gstreamer 0.10.25 , и Lucid в настоящее время содержит незначительное обновление той же версии. Основные обновления могут быть доступны в репозиториях Ubuntu backports ; это более новые пакеты из более поздних выпусков, которые были созданы для работы в более старых выпусках Ubuntu. У вас могут быть проблемы с зависимостью с этими пакетами, поэтому действуйте осторожно.

  • Вы можете найти стороннее хранилище, которое предоставляет более свежую версию Gstreamer, но они официально не поддерживаются. Хорошие места, чтобы посмотреть, может быть система PPA Launchpad, которые похожи на личные репозитории. Добавьте PPA в свой список репозиториев APT с помощью sudo add-apt-repository ppa:<ppa-name> .

Backport это сам?

Это также называется « сборка собственного локального пакета ». Если более новая версия пакета, которая вас интересует, доступна в каком-либо репозитории или PPA, но не была собрана с учетом вашей версии Ubuntu, вам лучше взять исходники и скомпилировать их самостоятельно.

Недостатком здесь является то, что, если пакет не предназначен для непосредственной установки с более ранней версией библиотеки, он, вероятно, заменит ваш оригинальный системный пакет. Преимущество заключается в том, что менеджер пакетов знает обо всем, поэтому вы можете использовать менеджер пакетов, чтобы удалить пакет или обновить его по мере необходимости, вместо того, чтобы устанавливать его там, где вы чувствуете необходимость.

Основные шаги:

  • установить инструменты сборки;
  • установить зависимости, необходимые для компиляции пакета;
  • получить исходные коды пакета (оригинальный архив с исходными кодами, патч для Ubuntu / Debian и файл .dsc );
  • скомпилировать и упаковать.

Автоматизированный способ (apt-get source packagename , apt-get build-dep packagename и т.д., См. Здесь для получения дополнительной информации) требует, чтобы ваш APT был настроен для доступа к исходным репозиториям, которые имеют правильную версию пакета. Поскольку мы бэкпортируем более новую версию, я предпочитаю ручной маршрут (подробно описано по той же ссылке): найдите исходные коды пакетов (в репозиториях Lucid , в PPA-файлах Launchpad и т.д.), Загрузите их с помощью wget или Firefox или чего-либо еще, затем запустите их в ~/debian-build:

  • Это распаковывает источники и применяет патч. ( Сначала переместите файлы tarball, patch и .dsc в каталог.)

    dpkg-source -x foo_version-revision.dsc
    
  • Постройте пакет (ы). (Обратитесь к документации по компиляции, чтобы убедиться, что у вас установлены необходимые зависимости сборки. apt-get build-dep <packagename> , вероятно, добьется цели, но могут быть некоторые различия. В основном, apt-get build-dep dep устанавливает -dev версии пакетов системных библиотек, которые содержат файлы заголовков и тому подобное.)

    dpkg-buildpackage -rfakeroot -b
    
  • Установите новый локальный пакет.

    dpkg -i ../foo_version-revision_arch.deb
    

Забыли пакет?

Соберите библиотеку / программу самостоятельно из исходного кода, без помощи менеджера пакетов. Никаких деинсталляций, никаких автоматических обновлений, просто " ./configure ; make ; sudo make install ".

Это действительно сводится к двум вариантам:

  • Установите в папку по умолчанию (например, /usr). Удалите старую версию из менеджера пакетов с помощью apt-get remove <packagename> или apt-get purge <packagename> или просто позвольте make install перезаписать версию пакета.

    Но ... удаление системного пакета без его замены вызывает проблемы с зависимостями. Не очень приятно осознавать, что APT удалил ваш менеджер рабочего стола, потому что вы очистили одну библиотеку.

  • Установите в /usr/local , /opt/<package>-<version> или в другое место, которое не является стандартным для вашего системного программного обеспечения. Это означает, что нужно указать скрипту configure, где его установить.

    ./configure --prefix=/usr/local
    

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

Обработка параллельных установок?

Это полностью зависит от того, что вы пытаетесь сделать. Предположим, вы сохранили системный пакет и установили новую версию в /usr/local . Новые библиотеки находятся в /usr/local/lib , заголовки в /usr/local/include , двоичные файлы в /usr/local/bin и т.д.

Обычно вы получаете доступ к новой версии одним из трех способов:

  1. указывать в командной строке по одному (используя псевдонимы оболочки или вручную);
  2. измените вашу оболочку так, чтобы к новой версии обращались по умолчанию (например, используйте псевдоним оболочки для экспорта измененных переменных среды, чтобы все команды в этой оболочке были настроены для получения новой версии первыми); или же
  3. Настройте системные переменные среды так, чтобы новая версия была системной по умолчанию (используйте одну из двух других опций, чтобы использовать старую версию).

И это зависит от того, к чему вы обращаетесь: исполняемый файл, библиотека и т.д.

  • Запуск программы, которую вы установили в /usr /local /bin? Измените PATH вашей среды, чтобы /usr /local /bin появился раньше, чем /usr /bin, или просто укажите полный путь к двоичному файлу в командной строке.

  • Запуск программы из системы с вашей новой версией библиотеки? Переменная среды LD_LIBRARY_PATH - это PATH для динамических библиотек. Вы можете установить системные значения по умолчанию в /etc/ld.so.conf (запустите ldconfig после внесения изменений).

  • Для компиляции другого пакета вы обычно передаете определенные параметры в gcc (или make или ./configure), чтобы указать расположение файлов заголовков ("include") и библиотек, например, так (я думаю ...):

    ./configure --with-gstreamer=/usr/local
    
0

Если apt-get не может найти более новую версию, она может не существовать или вам может понадобиться добавить репозиторий.

Если вы собираете из исходного кода и делаете "make install", у вас будет а.) Две версии или б) сочетание версий. Установка в /usr /local / помогает застраховать вас.). Лучшей идеей будет удаление версии Apt.

Параметр оболочки PATH вашей системы Gnome (или KDE) используется для определения того, какое приложение выбирается первым.

Самый простой способ использовать оба - установить новый в /usr /local / и создать ярлык на рабочем столе для его использования.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .