Linux, перекомпиляция из исходного кода

607
anomareh

Я относительно новичок в Linux, но я возился с виртуальной машиной Ubuntu, чтобы привыкнуть к ней. Я настроил SSH, Apache, PHP, MySQL, Ruby, Rails, Passenger и Git, чтобы возиться с моими проектами веб-разработки. Некоторые из тех, что я собрал из исходного кода, PHP и Git, были у меня в голове.

Мне было интересно, какова общая лучшая практика для перекомпиляции / переустановки чего-либо из исходного кода? Например, если я хочу обновить Git до более новой версии или включить расширение для PHP. Можно ли перекомпилировать его, а затем установить поверх текущей установки? Или это нет-нет, и я должен удалить перед переустановкой?

Если последнее, как именно вы собираетесь удалить что-то, что было установлено из источника?

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

Спасибо за любую помощь.

РЕДАКТИРОВАТЬ: Спасибо за все вклад до сих пор. Вы все, казалось, ответили на мой вопрос об удалении, но основной вопрос, на который я искал ответ, был:

Должен ли я удалить что-то, что я построил из исходного кода, прежде чем перекомпилировать и установить это снова. Или это нормально для установки поверх текущих установок всякий раз, когда мне нужно изменить флаг конфигурации или обновить до более новой версии?

3

3 ответа на вопрос

3
Matt

Это может быть не тот искатель, который вы ищете, но лучшая практика на Ubuntu - не устанавливать вещи из исходного кода. Я бы сказал, что вы хотите посмотреть на apt или его производные (aptitude et al ). Git, например, живет в пакете под названием git-core.

Если вы в конечном итоге устанавливаете вещи из исходного кода, вы можете быть вполне уверены, что они окажутся в конечном итоге /usr/local, что позволит вам вручную удалять старые биты и кусочки, если / когда вы решите обновить.

Некоторые файлы Makefile также имеют цели удаления / удаления, но я не уверен, для какой пропорции это верно.

Спасибо, я был бы рад остаться с менеджерами пакетов, но большую часть времени у них, кажется, нет версий, которые я ищу. Если я вспоминаю, когда я все настраивал, то доступная версия Git отставала от нескольких основных версий, и я не мог найти php 5.3 только 5.2.x. Если я собираю что-то из исходного кода, он помещает файлы в `/ usr / local`? anomareh 14 лет назад 0
/ usr / local - это соглашение. Установка из исходного кода будет использовать только / usr / local *, кроме случаев, когда это не так *. Makefiles - единственный авторитетный источник. Richard Hoskins 14 лет назад 1
2
Richard Hoskins

Компиляция вашего программного обеспечения в виртуальной машине - отличный способ «привыкнуть» к операционной системе. Вне всякого сомнения, все ужасные предупреждения о том, что вы сами катитесь, действительны для рабочей машины, но в конечном итоге вам будет лучше, если вы сделаете свои ошибки сейчас.

Если есть какая-либо причина для удаления предыдущей версии, это следует указать в файле README или INSTALL. Если нет, то можно просто запустить 'make install', которая перезапишет старую версию. Сделайте снимок вашей виртуальной машины прямо перед «make install». Когда что-то сломается, не пытайтесь это исправить. Если вы не можете это исправить, вернитесь к снимку и попробуйте снова.

Если позже вы захотите полностью отменить то, что сделали, Makefile содержит всю информацию, которую нужно удалить. Вы можете написать свою собственную цель «удаления» или сделать это вручную, просто используя «rm». Имейте в виду, что в то же время другие вещи могут зависеть от программного обеспечения, поэтому стратегию моментальных снимков также имеет смысл удалить.

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

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

Да, именно это я и сделал. Каждый раз, когда я устанавливал и работал, я просто делал новый снимок. Мне потребовалось несколько дней, чтобы все играло хорошо, но это было не так уж плохо. Моя самая большая проблема с менеджерами пакетов - проблемы с версиями. anomareh 14 лет назад 1
@anomareh: я настоятельно рекомендую научиться создавать свои собственные пакеты - вы можете использовать встроенные возможности деинсталляции диспетчера пакетов и получить нужные версии, а если есть ненужная зависимость, вы можете удалить ее в своем локальном пакете. я не устанавливал в / usr / local годами - я либо скомпилировал локальный пакет, либо установил в свой каталог $ HOME. quack quixote 14 лет назад 0
@ ~ шарлатан Спасибо за совет, я посмотрю на это. Если у вас есть ссылки для начинающих на эту тему, это было бы здорово. anomareh 14 лет назад 0
В Ubuntu вы можете установить checkinstall, а затем вместо ввода sudo make install вы можете запустить sudo checkinstall -D Это установит вашу программу из исходного кода, но также даст apt-get возможность удалить ее как обычную программу и создать .deb файл. Justin S 14 лет назад 1
1
whitequark

Не существует универсального способа удаления скомпилированных исходных кодов; это одна из многих причин не устанавливать ничего из исходного кода . make uninstallбудет работать иногда, через.

Вы можете внести некоторые изменения в пакет, не устанавливая «сырые» источники: посмотрите на эту и эту статьи Debian-Administration.org .

Похожие вопросы