Ловушки для капризных программ Крис Касперски Хакер, номер #089, стр. 089-106-6 [невесомые бинарики] По умолчанию большинство программ собирается с отладочной информацией, что существенно упрощает отладку, но вместе с тем увеличивает размер. Поскольку дебаггинг чужих программ не входит в наши планы, отладочную информацию лучше убрать. Это можно сделать либо на стадии конфигурации, например "./configure --disable-debug", либо "вырезать" ее из elf-файла "вживую", пропустив его через штатную утилиту strip. Но прежде чем это делать, запустим программу file и посмотрим, что собой представляет подопытная программа. Вот, например, Bochs: $ file bochs bochs: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.0, dynamically linked (uses shared libs), not stripped Ага, "not stripped". Вот почему bochs занимает целых 9 Мб! Берем в руки скальпель, и с помощью утилиты strip удаляем отладочную информацию из файла: $ strip bochs Файл сразу же худеет до 1 Мб, сокращая свой объем в девять раз, причем без какой бы то ни было потери функциональности! [инсталляция во сне и наяву] Откомпилированная программа, как правило, еще не готова к работе. Нам предстоит еще много дел: удалить промежуточные файлы, созданные в процессе компиляции (библиотеки, объектные файлы), настроить конфиги, рассортировать файлы данных по своим директориями, а при необходимости — изменить системные настройки. За это отвечает команда "make install", однако далеко не во всех программах она реализована. Взять, например, хотя бы тот же biew. С другой стороны, автоматическая инсталляция — это рулетка. Все мы знаем, во что способен превратить систему кривой setup.exe. Поэтому прежде чем набирать "make install", неплохо бы заглянуть в секцию "install:" нашего makefile и посмотреть, что она собирается делать. Вдруг нас это не устраивает? Можно попробовать дать команду "make uninstall", удаляющую программу из системы. Однако в подавляющем большинстве случаев она не реализована. Существует такая полезная шутка, как CheckInstall (checkinstall.izto.org). Это бесплатно распространяемая утилита, трассирующая "make install" на виртуальной машине и автоматически генерирующая полноценный "дистрибутив" любого типа: Slackware, RPM или Debian-совместимый пакет, устанавливаемый в систему соответствующим менеджером инсталляций, который всегда может сделать корректный uninstall, даже если он не был предусмотрен автором программы. Просто вместо "make install" мы должны написать "checkinstall" и немного подождать. Кстати говоря, большинство инсталляторов помещают программы в каталог /usr/local/bin, что не всем нравится. Правильные конфигураторы поддерживают ключ "--prefix", позволяющий устанавливать программы куда угодно, например "./configure --prefix=/opt", а неправильные заставляют нас это делать своими руками. [заключение] Вот, оказывается, какой нетривиальный процесс! Чудес не бывает! Тупая перекомпиляция только вредит и работает хуже готовой "официальной" сборки. Ручная компиляция — это дверь в мир практически неограниченных возможностей, однако попасть в него может только тот, кто не боится сложностей, готов совершать ошибки и умеет работать с документацией. |