Вопрос об управлении пакетами в Ubuntu
Я установил GStreamer с помощью менеджера пакетов synaptic, но я бы хотел перейти на более новую версию. Я не очень хорошо знаком с управлением пакетами, поэтому вот несколько моих вопросов:
- Могу ли я попросить apt-get найти для меня более новую версию? Или мне нужно загрузить самую новую версию и собрать ее из исходного кода?
- Если я сделаю сборку из исходного кода, после чего произойдет "make install", будут ли в моей системе две разные версии?
- Если да, то как система решает, какую версию использовать?
- Могу ли я сказать системе использовать старый GStreamer для всего, но использовать новые библиотеки GStreamer для связи с моим кодом? Если да, то как?
Я использую GStreamer только в качестве примера, мне интересно, как эти проблемы решаются в целом.
2 ответа
У вас, конечно, есть несколько вариантов.
Более новая версия через Apt?
Основные репозитории Ubuntu не предоставляют серьезных обновлений для официальных пакетов. Они предоставляют исправления и обновления безопасности; более новые основные версии обычно предоставляются в следующем основном выпуске Ubuntu (Ubuntu 10.04, он же Lucid, в настоящее время в альфа-версии).
Вы можете искать в официальных репозиториях интересующий вас пакет , чтобы увидеть, что доступно и в каком выпуске. В настоящее время кажется, что Кармик использует
Gstreamer 0.10.25
и Lucid в настоящее время содержит незначительное обновление той же версии. Основные обновления могут быть доступны в Ubuntubackports
хранилища; это более новые пакеты из более поздних выпусков, которые были созданы для работы в более старых выпусках 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
:
Это распаковывает источники и применяет патч. (Переместить тарбол, патч и
.dsc
сначала файлы в каталог.)dpkg-source -x foo_version-revision.dsc
Постройте пакет (ы). (Проверьте документацию компиляции, чтобы убедиться, что у вас установлены необходимые зависимости сборки.
apt-get build-dep <packagename>
вероятно, добьется цели, но могут быть некоторые различия. В основном,apt-get build-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
, так далее.
Обычно вы получаете доступ к новой версии одним из трех способов:
- указывать в командной строке по одному (используя псевдонимы оболочки или вручную);
- измените вашу оболочку, чтобы по умолчанию доступ к новой версии осуществлялся (например, используйте псевдоним оболочки для экспорта измененных переменных среды, чтобы все команды в этой оболочке были настроены для получения новой версии в первую очередь); или же
- Настройте системные переменные среды так, чтобы новая версия была системной по умолчанию (используйте одну из двух других опций, чтобы использовать старую версию).
И это зависит от того, к чему вы обращаетесь: исполняемый файл, библиотека и т. Д.
Запуск программы, которую вы установили в / 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
Если apt-get не может найти более новую версию, она может не существовать или вам может понадобиться добавить репозиторий.
Если вы собираете из исходного кода и делаете "make install", у вас будет а) две версии или б) сочетание версий. Установка в / usr / local / помогает застраховать вас.). Лучшей идеей будет удаление версии Apt.
Параметр оболочки PATH вашей системы Gnome (или KDE) используется для определения того, какое приложение выбирается первым.
Самый простой способ использовать оба - установить новый в / usr / local / и создать ярлык на рабочем столе для его использования.