Установка программ из исходников и менеджеры пакетов
Казалось бы что в этом нового? ./configure make make install и всего делов то.
Это все хорошо, пока хорошо компилится. А если нет ? Об этом я и расскажу:
Есть несколько видлв ошибок :
1) Ошибки в исходниках (программисты тоже люди и им свойственно ошибаться). Данный вид ошибок иногда очень трудно
устранить. А если вы не знаете языка програмирования, на котором была написана программа, то это для вас полный крах.
Но если вы программист, то мой вам совет если не уверены не лезьте,а если уверены проверьте еще раз и не забываете
делать резервные копии модифицированных файлов.
2) Неудовлетворенные зависимости. Здесь все очень просто - программист написал программу с использованием библиотеки,
которой у вас нет. Все что нужно сделать - достать и поставить эту библиотеку. За время всех своих компиляций я выявил
два типа таких зависимостей: явные и неявные. Явный - когда configure скрипт завершается с ошибкой и говорит какой
библиотеки вам не хватает. (Под термином библиотека я имею ввиду пакет, т.к иногда требуются готовые программы) Неявные
почти никто не считает зависимостями и ругают разработчиков, это когда вы видите множество undefined reference или у вас
нет определенных заголовочных файлов или библиотек.
3) Различиях в путях поиска, например у программиста links находится в /usr/bin а у пользователя в /usr/local/bin . Но
с бинарниками это не так важно, как с библиотеками и заголовочными файлами. Если хототе в этом сами убедиться - соберите
evolution - там почти в каждом Makefile мне приходилось дописывать переменную CFLAGS (опции компилятора). Чаще всего
нужно указать нестандартные пути например -I/usr/local/gnome/include -L/usr/local/gnome/lib или добавить библиотеку
(-lpam например).
А теперь о немного о том как можно хитрить:
В моей системе установлен rpm для извлечения файлов из rpm пакетов. Иногда программа из rpm пакета не хочет собираться -
можно просто собрать пакет, не устанавливая его средствами rpm (rpm --rebuild). Потом извлечь файлы и поместить их куда
надо.
Еще прикол : вам требуется заголовачный файл, неизвестно какого пакета. Если есть другая система (например на которой
собирался lfs), то можно chroot`нуться в нее и проверить какому пакету принадлежит этот файл (rpm -q -f /usr/include/file.h)
Ну вот все нажные программы установлены, все отлично, но вы чувствуете что вы что-то не сделали - вы не сделали
свои пакеты. Есть такая замечательная программа install-log, которая создает файл со списком всех установленных файлов
после сборки очередной программы. После этого этот файлик можно скормить архиватору и получить пакет, вот как я делаю
после установки
install-log new-program
rar a /packages/new-program `cat /var/install-logs/new-program` /var/install-logs/new-program
Я добавляю файл со списком файлов к архиву, чтобы потом знать какие файлы у меня установлены. Вот такой у меня скромный
менеджер пакетов, кстати в rpm все зависимости шенерируются программой ldd, т.е. это очень просто.
Мне осталось только в очередной раз пожелать вам удачных компиляций!
|