Вопрос об управлении пакетами в 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 / и создать ярлык на рабочем столе для его использования.