Next Previous Contents

19. Сборка программ

19.1 Как собрать программу из исходников? Как установить программу из tar.gz/tar.bz2?

Скорее всего в tar.gz/tar.bz2 лежит не программа, а ее исходники (иногда исходники с собранной программой).

Прежде чем ее ставить, нам необходимо ее собрать. Для этого нужно выполнить (не бросайтесь сразу это делать):

root@linux# ./configure root@linux# make root@linux# make install

Если после любого из пунктов возникли сообщения об ошибках, значит не все вышло так, как хотелось. Можно попробовать `./configure --help` для вывода опций настройки и попробовать использовать некоторые из них.

Поскольку при таком способе установки информация о том, что ставилось и куда, остается только в памяти админа (которая частенько еще какая временная :), лучше для контроля этого процесса использовать checkinstall - http://checkinstall.izto.org, или похожие программы (почему выше и мы говорили не выполнять команды сразу).

После того, как вы ее установите (прочитав документацию) и настроите ее конфиг, на этапе установки программного обеспечения вместо sudo make install будете писать sudo checkinstall. Checkinstall соберет "настоящий" пакет для указанной (tgz, rpm и deb в зависимости от настроек), установит его в систему и поместит в указанный в конфигурационном файле каталог (удобно для централизованного обновления нескольких машин). Удаление установленных таким образом программ осуществляется стандартными средствами дистрибутива, например, removepkg для Slackware.

Также будет полезным прочитать о том, как уменьшить размер бинарных файлов.

Если вы пренебрегли нашим советом и собрали и поставили программу не используя специальных утилит (или своего менеджера пакетов), тогда нужно заново распаковать исходники (ведь вы после сборки наверняка удалили папку, в которой собирали программу), сконфигурировать ее с теми же параметрами (напрягайте память), но вместо make install сделать make uninstall. Если повезет, то все удалится.

19.2 Как удалить программу, собранную из исходников?

A: Это неоднозначный вопрос. Дело в том, что если вы просто собрали программу с помощью

root@linux# ./configure root@linux# make root@linux# make install

то все зависит лишь от того, позаботился ли автор об удалении.

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

Если каталог не сохранился, распакуйте исходники, сделайте ./configure с теми же параметрами, с которыми собирали программу, и выполните make uninstall.

А чтобы не полагаться на приличия автора, рекомендуется посмотреть предыдущий вопрос,

Внимание: в rpm-based дистрибутивах собирайте программы из srpm или с использованием spec-файлов (для создания rpm). Не превращайте свою систему в помойку из программ.

19.3 Почему после сборки через `./configure; make; make install` у программ получается большой размер?

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

Можно собрать программу без отладочной информации, указав

./configure --disable-debug

Удалить секции с отладочной информацией из уже собранной программы можно командой

user@linux# strip progfile

Посмотреть, что вышло можно командой

user@linux# file progfile

она напишет - stripped или not stripped.

Можно сделать более правильно: find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded

19.4 Что прописать в настройках rpm, чтобы для всех собираемых программ выполнялся strip?

Чтобы не делать изменения в рабочих макросах, создается файл /etc/rpm/macros, лучше в него все прописать: %debug_package %{nil} %_missing_doc_files_terminate_build 0 %_unpackaged_files_terminate_build 0 %__os_install_post \ /usr/lib/rpm/redhat/brp-compress \ /usr/lib/rpm/redhat/brp-strip %{__strip} \ /usr/lib/rpm/redhat/brp-strip-shared %{__strip} \ /usr/lib/rpm/redhat/brp-strip-static-archive %{__strip} \ /usr/lib/rpm/redhat/brp-strip-comment-note %{__strip} %{__objdump} \ %{nil} В будущем при смене версии rpm, не придется ничего править в самих макросах из rpm.

19.5 Что делать если configure говорит, что xxx не установлен, а на самом деле он установлен?

Для сборки нужны заголовочные файлы(headers). Во многих дистрибутивах библиотеки(программы) поделены на два пакета - xxx и xxx-devel(rh-based) и xxx-dev(debian).

Соответственно нужно поставить xxx-devel (xxx-dev).

Примечание - в пакетах Slackware всё вместе (ну, кроме xfree86-devel).

19.6 Какой командой собираются rpm из src.rpm (srpm)?

Для redhat < 8.0, ASP Linux < 9 и Mandrake -

root@linux# rpm --rebuild название_пакета.src.rpm

Для redhat > 8.0, Fedora Core и ASP Linux = 9 -

root@linux# rpmbuild --rebuild название_пакета.src.rpm

Для Alt Linux: root@linux# rpm-build -- rebuild название_пакета.src.rpm

Если вместо ожидаемого результата, на экран выводится список параметров командной строки, нужно установить rpm-devel. Ну а если все получилось, то пакеты будут лежать в /usr/src/название_дистрибутива/BUILD/название_архитектуры_процессора, например

/usr/src/redhat/BUILD/i386.

19.7 Как включить магические клавиши (magic keys)? (sysrq)

Читайте статью - фактически это пошаговое руководство.

http://gazette.lrn.ru/lg81/vikas.html

19.8 Помогите собрать ядро

Помогаем:

Хорошая, свежая документация

Русское пошаговое описание для новичков

Если у вас rpm-based дистрибутив, тогда прочитайте сначала этот вопрос.

19.9 Как собрать ядро из src.rpm? Как собрать собственное ядро из src.rpm? (На примере ядра Fedora Core)

Поскольку у меня (jackill) Fedora Core, то рассматривать мы будем именно ядра Fedora Core. Для других дистрибутивов чуть-чуть будут отличаться пути в /usr/src и, возможно, названия spec-файлов.

Самый простой случай

Мы скачали пакет вида kernel-2.x.x-1.xxx.src.rpm. Нас устраивает конфигурация по умолчанию, но не устраивает сборка под i386. Поэтому пишем:

root@localhost# rpmbuild --rebuild --target=i686

и забираем из /usr/src/redhat/RPMS/i686 наши ядра (обычное и smp).

Собираем собственное ядро

Распакуем srpm:

root@localhost# rpm -i kernel-2.x.x-1.xxx.src.rpm

Далее перейдем в каталог /usr/src/redhat/SPECS и распакуем сами исходники, наложив при этом все патчи:

root@localhost# rpmbuild -bp --target=i686 kernel-2.x.spec

Теперь переходим в папку /usr/src/redhat/BUILD/kernel-2.x/linux-2.6/

Это исходники ядра с соответствующим конфигом. Здесь выполним две команды:

root@localhost# make oldconfig root@localhost# make menuconfig

Теперь мы можем выставить желаемые параметры. В качестве помощи можете воспользоваться этим разделом. Я обычно включаю поддержку NTFS, выбираю свой тип процессора, убираю поддержку 4ГБ памяти, ставлю соответствующие параметры для samba, а если машина в домене MS Windows 2003, то добавляю поддержку CIFS, а лишнее убиваю.

После того, как вы закончили выставлять параметры, мы переименовываем наш файл конфигурации .config, например в kernel-2.6.8-i686.config и переписываем в папку /usr/src/redhat/SOURCES.

Далее в kernel-2.x.spec выставляем какое нам нужно собрать ядро (обычное или smp), нужно ли собирать пакет с исходниками и пакет с документацией:

Summary: The Linux kernel (the core of the Linux operating system) # What parts do we want to build? We must build at least one kernel. # These are the kernels that are built IF the architecture allows it. %define buildup 1 %define buildsmp 0 %define buildsource 1 %define builddoc 0

После строим как обычно.

Если нужно добавить патч

Алгоритм простой:

Накладываем этот патч на распакованные исходники, конфигурируем ядро, переписываем так же получившийся конфиг, затем прописываем патч в kernel.spec (в двух местах: в одном сам патч, например Patch10002: vesafb-tng-0.9-rc4-r3-2.6.9-rc3.patch, во втором способ его наложения, например, Patch10002 -p1 - все увидите и сделаете по аналогии).

Если после этого на сборке ядро вылетает, придется сделать make oldconfig для всех файлов конфигурации (повод научиться писать скрипты ;), или убить все конфиги, кроме нужного вам, после чего повторить сборку.

Правда все просто?

19.10 Как накладывать патчи? Как накладывать патчи на ядро? (patch, diff)? Как убирать патчи?

Вообще было бы неплохо просто сделать man patch и все стало бы ясно (кстати, сделайте). А как накладывать патчи на ядро написано в самом README к ядру. Тем не менее.

Несжатый патч

patch -p1 < my_patch.patch

p1 - уровень. Т.е. я захожу в каталог, где непосредственно находятся нужные мне файлы, копирую туда патч и оттуда запускаю эту команду.

p0 - нулевой уровень вложенности

Сжатый патч

Это патчи вида mypatch.gz и mypatch.bz2, соответственно: bzip2 -dc mypatch.bz2 | patch -p0 gzip -cd mypatch.gz | patch -p0

Чтобы убрать патч, нужно добавить в команду patch ключик -R

19.11 Нужно ли накладывать промежуточные патчи на ядро?

Пример. Есть ядро версии 2.6.6. Надо получить ядро 2.6.9. Нужно ли накладывать ли patch-2.6.7 и patch-2.6.8? Нужно.

19.12 Где взять патч на SUPERMOUNT?

Это ссылка на домашнюю страницу проекта, однако она какая-то мертвая.

Зато очень живая страница товарища Con Kolivas. В своих патчсетах он использует supermount. И все, что он использует, можно по отдельности забрать отсюда.

19.13 При сборке ядра `make menuconfig` ругается, что ncurses не установлен.

Установите ncurses-devel (ncurses-dev) или как он там называется в вашем дистрибутиве.

19.14 Зачем собирать модули? Почему бы не сделать монолит?

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

У модулей, однако, есть преимущество. Модулю можно передать параметры. Яркий пример - модуль bttv. Модули можно выгружать.

19.15 После перекомпиляции ядра mplayer стал вылетать с segmentation fault. Куда копать?

Можно попробовать включить в ядре параметр CONFIG_BSD_PROCESS_ACCT пересобрать его.

19.16 Как правильно собрать Gnome из исходников?

Можно использовать garnome.

19.17 Как собрать KDE из исходников?

Есть два варианта. Можно собрать KDE, используя утилиту konstruct.

Можно собрать из исходников. Порядок описан здесь.

Вкратце:

  1. Проверяете требования к собираемой вами версии на www.kde.org
  2. Собираете в такой последовательности:
  3. Далее можно собирать как угодно (если обратного не требует пакет)

19.18 Как собрать socks-cap с помощью gcc-3.3.x и выше?

Придется наложить патч: --- socks5/lib/confutil.c.orig 2004-11-05 20:05:57.582886240 +0300 +++ socks5/lib/confutil.c 2004-11-05 20:00:07.250144912 +0300 @@ -1156,7 +1156,7 @@ *cnt = j; *intfc = pintfc; - free(ibuf); + if(ibuf) free(ibuf); //check McMCC #else strcpy(pintfc[j].name, ibuf[i].ifr_name); pintfc[j].up = lsLookupIntfc(s, NET_STAT, &ibuf[i]);

Спасибо McMCC

19.19 Как собрать Open Office 2 из исходников?

Вот инструкция по сборке:

http://tools.openoffice.org/dev_docs/build_linux.html

19.20 Как принудительно указать для сетевой карты скорость?

Довольно полная таблица по параметрам карточек, которые можно прописать в /etc/modules.conf (для 2.4.х) или в /etc/modprobe.conf (для 2.6.х).

http://www.startcom.org/docs/en/Reference Guide StartCom Enterprise Linux 3.0.x/s1-modules-ethernet.html

Для карт realtek 8139 можно указать параметр media=0x0030

К тому же есть инструменты ethertools и mii.


Next Previous Contents