Изучаем Linux, 302 (смешанные среды): Конфигурирование и компиляция Samba из исходного кода

Собираем Samba с чистого листа

Как и большинство других программ для Linux, Samba является Open Source-проектом, поэтому можно бесплатно загрузить файлы с исходным кодом и скомпилировать из них двоичный пакет для своей системы. В результате всегда можно получить более новые версии программного обеспечения, чем те, которые включены в дистрибутив, настраивать различные опции компиляции, настраивать компилятор на оптимальную производительность и даже изменять исходный код. О том, как это сделать, вы узнаете из этой статьи.

Родерик Смит (Roderick Smith), автор и консультант, IBM

Род Смит (Rod Smith) - фотографияРод Смит (Rod Smith) долгое время работает техническим консультантом и является автором более десятка книг о Linux, UNIX и сетях.



05.04.2012

Об этой серии

Эта серия статьей поможет вам освоить задачи администрирования операционной системы Linux. Вы можете использовать материалы этих статей для подготовки к экзаменам программы LPIC третьего уровня (LPIC-3).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-3. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит текущие (по состоянию на ноябрь 2010 года) цели экзаменов сертификации LPIC-3.

В этой статье рассматриваются следующие темы:

  • Идентификация важных пакетов Samba и их содержимого.
  • Поиск и установка приложений, от которых зависит Samba.
  • Описание структуры программного обеспечения Samba.
  • Определение важных параметров компиляции Samba.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 302 (специализация "Смешанные среды") и содержит материалы цели 311.1 темы 311. Цель имеет вес 1.

Предварительные требования

Чтобы извлечь наибольшую пользу из наших статей, необходимо обладать продвинутыми знаниями о Linux и иметь работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. В частности, предполагается, что читатель умеет работать с командной строкой Linux и в общих чертах понимает структуру программного обеспечения (исходный и двоичный код) и процедуры компиляции. Для выполнения примеров этой статьи ваш компьютер должен быть подключен к Интернету и на нем должен быть проинсталлирован компилятор C (например, GNU Compiler Collection [GCC]).


Получение исходного кода Samba

О факультативном экзамене LPI-302

Как и многие другие программы, программа сертификации Linux Professional Institute (LPIC) предусматривает различные уровни сертификации, где для получения каждого последующего уровня необходимо обладать более глубокими знаниями и практическим опытом. Экзамен LPI-302 – это факультативный экзамен третьего уровня программы LPIC, требующий продвинутых знаний в области системного администрирования Linux.

Для получения сертификата LPIC третьего уровня (LPIC-3) необходимо успешно сдать два экзамена первого уровня (101 и 102), два экзамена второго уровня (201 и 202), а также базовый экзамен 301 третьего уровня (LPIC-3). Если вы получили сертификат третьего уровня, вы можете сдавать факультативные экзамены по определенным специализациям, например, экзамен LPI-302.

Исходный код Samba можно бесплатно загрузить с Web-сайта Samba (раздел Ресурсы). Если вы уже знаете, как скомпилировать и проинсталлировать программное обеспечение из исходного кода, то у вас не должно возникнуть проблем с Samba. Тем не менее, поскольку во многих случаях Samba очень важна для работы в сетевых сервисов, то необходимо убедиться в том, что вы загрузили именно то программное обеспечение, которое вам требуется. С этой целью разработчики Samba предоставляют ключи аутентификации, которые можно использовать для проверки загруженного дистрибутива.

Загрузка исходного tarball-файла

Исходный код Samba можно бесплатно загрузить с Web-сайта Samba. Ссылка на последнюю стабильную версию (на момент написания статьи это версия 3.5.6) расположена на его главной странице. Щелкните по ссылке, чтобы получить эту версию дистрибутива Samba; tarball-файл будет помещен в директорию загрузок вашего браузера. Ссылка на загрузку Samba следующей, четвертой версии, также расположена на главной странице Web-сайта, однако учтите, что эта версия находится в стадии альфа-тестирования уже много лет, поэтому используйте ее, только если вам необходимы ее возможности или если вы хотите участвовать в разработке Samba.

Создайте ваш собственный канал

Вы можете создать ваш собственный RSS, Atom или HTML канал обновлений и получать уведомления о новых или обновленных статьях нашего сайта. Для этого перейдите на страницу developerWorks RSS feeds, выберите зону Linux, установите флажок Статьи и введите в качестве ключевой фразы Linux Professional Institute, после чего выберите требуемый тип канала.

Рядом со ссылкой на загрузку вы найдете ссылку на примечания к релизу для текущей версии, а также ссылку на электронную подпись, которую можно использовать для проверки целостности дистрибутива Samba. Если вы хотите проверить целостность загруженного дистрибутива Samba, то загрузите файл электронной подписи по этой ссылке (возможно, для этого придется щелкнуть по ссылке правой кнопкой мыши). Этот файл называется samba-version.tar.asc, где version – номер версии Samba.

На странице загрузки Samba также имеются ссылки на архивы старых версий Samba, ссылки на инструкции по загрузке ПО с помощью Git, Control Version System и других инструментов, ссылки на различные вспомогательные утилиты, например, менеджеры GUI, пакеты SMB/CIFS для других платформ и т. д. В частности, там есть одна особенно важная ссылка на ключ GnuPG (GPG) для пакета Samba. Если вы хотите проверить подлинность пакета Samba, как это будет описано в следующем разделе, необходимо скачать этот файл (samba-pubkey.asc).

Проверка подлинности пакета Samba

Можно распаковать, скомпилировать, проинсталлировать и использовать Samba, не проверяя подлинность исходного пакета. Однако в силу критической важности сервера Samba, выполняющего множество различных команд, лучше проверять его целостность. Для этого выполните следующие действия:

  1. Убедитесь в том, что файлы samba-version.tar.asc и samba-pubkey.asc загружены.
  2. Выполните команду gunzip samba-version.tar.gz чтобы разархивировать полученный файл (но не извлечь содержимое).
  3. Выполните команду gpg --import samba-pubkey.asc, чтобы импортировать публичный ключ Samba в кольцо для ключей GPG, если вы еще не сделали этого.
  4. Выполните команду gpg --verify samba-version.tar.asc для проверки ключа. Вы должны получить примерно следующее сообщение:

    gpg: Signature made Thu 07 Oct 2010 02:23:24 PM EDT using DSA key ID 6568B7EA
    gpg: Good signature from "Samba Distribution Verification Key 
    <samba-bugs@samba.org\>"

Скорее всего, сообщение также будет содержать информацию о том, что ключ не подписан доверенной подписью. Это говорит о следующем ограничении процедуры проверки: если предположить, что главный Web-сайт Samba был скомпрометирован и злоумышленник подменил установочный пакет Samba и оба ключа поддельными версиями, то вы будете доверять обоим этим ключам, думая, что они подлинные. Для дополнительной защиты на шаге 4 можно запустить программу gpg с опцией --keyserver wwwkeys.pgp.net. Эта опция говорит программе gpg о том, что в процессе проверки подлинности необходимо получить ключ с Web-ресурса wwwkeys.gpg.net. Тогда, если кто-то захочет изменить и распространять поддельный дистрибутив Samba, то ему придется скомпрометировать не только Web-сервер Samba, но и Web-сервер ключей.

Распаковка tarball-файла

После того, как подлинность загруженного пакета успешно установлена (или если вы просто пропустили этот шаг), можно распаковать tarball-файл с исходным кодом. Это можно сделать, находясь в домашней директории или, например, в директории /usr/src/, предназначенной для хранения исходно кода локальных приложений. Если вы распаковываете исходный код в директорию /usr/src/, вам могут потребоваться привилегии пользователя root. Также они могут потребоваться для предоставления прав на запись в эту директорию обычным пользователям.

Какой бы вариант вы не выбрали, перейдите в корень директории, в которую вы будете распаковывать файл с исходным кодом, и выполните следующую команду:

$ tar xvf ~/samba-version.tar

В этой команде предполагается, что вы уже разархивировали tarball с помощью gunzip и поместили его в корень вашей домашней директории. Если же вы еще не сделали этого, то можно либо предварительно разархивировать его, либо добавить команду z в список команд tar и указать дополнительное расширение в имени, как показано ниже:

$ tar xvzf ~/samba-version.tar.gz

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

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


Компиляция Samba

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

Установка требуемого программного обеспечения

Для компиляции Samba должны быть установлены несколько других пакетов, самый важный из которых – это GCC. GCC – это набор компиляторов для языка C, на котором написана большая часть Samba. В большинстве дистрибутивов Linux GCC можно установить из соответствующего пакета с именем gcc. Другим критически важным инструментом является утилита make, которая обращается к gcc и другим инструментам разработки в соответствии с правилами, определенными разработчиками Samba.

Samba использует несколько библиотек – программных пакетов, обеспечивающих поддержку вспомогательных функций для других программ. Вполне возможно, что эти библиотеки уже установлены на вашем компьютере, но для компиляции программы требуются файлы заголовков библиотек, которые зачастую устанавливаются в виде отдельных пакетов с именами, заканчивающимися на -dev или -devel. Как минимум, используйте инструменты вашего дистрибутива для работы с пакетами, чтобы убедиться в том, что на компьютере установлены библиотеки разработчика libc или libc6. В зависимости от настроек конфигурации некоторые библиотеки могут потребоваться, а некоторые нет. В случае отсутствия нужной библиотеки сценарий configure (а, возможно, сама процедура компиляции) выдаст сообщение об ошибке, позволяющее выяснить, какая библиотека необходима.

Многие дистрибутивы упрощают установку основных инструментов и библиотек разработчиков, позволяя выполнить ее за один шаг. В Ubuntu, например, для этого нужно просто установить пакет build-essential. Такие дистрибутивы, как, например, Fedora, позволяют выбирать пакеты для установки во время установки операционной системы, поэтому, если вы собираетесь использовать компьютер для разработки программного обеспечения, вы можете заранее установить сразу все нужные пакеты. Если вы не можете найти такие опции в вашей операционной системе, вам придется устанавливать пакеты постепенно по мере необходимости.

Настройка конфигурации Samba

Для настройки конфигурации Samba необходимо перейти в поддиректорию source3 основной директории, содержащей исходный код Samba. Эта поддиректория содержит исходный код основного пакета Samba.

Примечание. Остальные поддиректории дерева содержат исходный код дополнительных и вспомогательных программ, документации и т. д. Например, поддиректория client содержит файлы, обеспечивающие возможность монтирования операционной системой Linux общих ресурсов SMB/CIFS на клиентах, а поддиректория swat – исходный код Samba Web Administration Tool (SWAT). Какие-то из этих программ компилируются в процессе компиляции основного пакета Samba, а какие-то вам придется скомпилировать самостоятельно. Результатом компиляции основного пакета Samba в поддиректории source3 являются главные программы сервера – демоны smbd и nmbd, а также вспомогательные библиотеки и многочисленные вспомогательные инструменты.

Процессом конфигурации управляет сценарий configure. В простейшем случае можно запустить команду ./configure, которая настроит Samba с параметрами по умолчанию, однако для настройки Samba на этапе компиляции существует довольно много опций. Их полный список можно увидеть, выполнив команду ./configure --help (если вы работаете с консолью, которая не пролистывается, можно перенаправить вывод в файл и затем просматривать его в текстовом редакторе или с помощью команды less).

Также вы можете использовать различные переменные окружения, список которых также выводится по команде ./configure --help. В большинстве случаев значения по умолчанию обеспечивают хорошую работу, тем не менее, если вы хорошо знаете о важных параметрах системы, вы можете настроить эти переменные в соответствии с вашими задачами. Например, вы можете задать значение переменной окружения CFLAGS, чтобы установить флаги компилятора C. Если вы не знаете, для чего нужна та или иная переменная окружения, то лучше оставьте все как есть.

После того как вы внимательно изучили все опции и переменные окружения, можно приступать к конфигурированию Samba:

$ CFLAGS="-O3" ./configure --without-ldap

В этом примере мы используем флаг компилятора GCC -O3 и компилируем Samba без поддержки протокола LDAP (Lightweight Directory Access Protocol). Разумеется, в вашем случае вы можете изменить или вообще не использовать эти опции.

Компиляция Samba

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

$ make

В результате вы увидите на экране строки с информацией о действиях, выполняемых утилитой make. Эти строки имеют следующий вид:

Compiling lib/netapi/joindomain.c
Compiling lib/netapi/serverinfo.c
Compiling lib/netapi/getdc.c

Будем надеяться, что процесс компиляции завершится без ошибок. Обычно он продолжается несколько минут в зависимости от мощности компьютера. Если у вас компьютер с многоядерным процессором, можно использовать команду make с опцией -j, которая будет выполнять компиляцию в несколько потоков, ускоряя процесс. Например, команда make -j 4 будет одновременно компилировать до четырех файлов с исходным кодом. После того, как компиляция Samba будет завершена, выполните следующую команду для ее инсталляции:

# make install

Хотя все предыдущие действия может выполнить обычный пользователь (если, конечно, у него есть доступ на запись в корневую директорию, содержащую исходный код), для выполнения команды make install необходимо обладать привилегиями пользователя root, поскольку эта она копирует двоичные файлы и документацию Samba в системные директории (обычно это директория /usr/local/, если вы не изменили ее с помощью сценария configure).

Устранение ошибок

К сожалению, иногда процессы конфигурации или компиляции завершаются с ошибкой. Наиболее распространенная причина заключается в отсутствии необходимой библиотеки. Если ошибка возникает на этапе конфигурирования, то, вероятно, в конце вывода должно содержаться сообщение об ошибке, указывающее на отсутствующий компонент; например, в сообщении может говориться о том, что не были найдены библиотеки PAM (Pluggable Authentication Module – подключаемый модуль аутентификации). Для поиска и инсталляции необходимого программного обеспечения следует использовать инструменты для работы с пакетами, например, Synaptic или Yumex. Помните о том, что библиотеки разработчика могут устанавливаться отдельно от основного пакета с библиотеками.

Точно так же можно устранять ошибки на этапе работы команды make; однако при возникновении ошибок на этапе компиляции часто выводится большое число сообщений. Если вы столкнулись с такой проблемой, то не обращайте внимания на последние сообщения, а сразу пролистайте вывод назад к первому сообщению об ошибке. Зачастую одна ошибка приводит к другой, и так далее по цепочке. Исправление первой ошибки может устранить всю последующую цепочку, в результате чего процесс компиляции успешно завершится.

Устранение ошибок команды make может потребовать больше усилий, чем устранение ошибок на этапе конфигурирования, поскольку ошибки компиляции, скорее всего, связаны с отсутствующими файлами или даже неверным синтаксисом в определенном файле. Если проблема заключается в отсутствующем файле, то его имя может послужить подсказкой – попробуйте поискать пакет с таким именем (без расширения) среди пакетов вашего дистрибутива и, возможно, вы определите недостающую библиотеку разработчика, которую забыл отметить сценарий configure. Если это не помогло, попробуйте поискать имя файла в Интернете – возможно, это поможет определить имя библиотеки, которая должна быть проинсталлирована. Если проблема связана с неправильным синтаксисом, то это уже более серьезное дело. Вы должны суметь отключить проблемную функцию с помощью соответствующей опции сценария configure; возможно, вам потребуется обновить версию компилятора C (или наоборот, откатиться на более старую) или версию Samba, которую вы пытаетесь компилировать. Если вы работаете с предварительным релизом (prerelease) программного обеспечения, то вы можете столкнуться с программной ошибкой, которая потребует от вас самостоятельного внесения исправлений. Эти действия выходят за рамки нашей статьи, поэтому в таких случаях вы можете обратиться за помощью к разработчикам Samba или к опытным программистам.


Что дальше

Следующая статья этой серии содержит материалы цели 311.2 темы 311. В ней рассматривается процесс установки Samba из исходного кода и двоичных пакетов. В задачи этой цели входит запуск серверных программ Samba – демонов smbd и nmbd (остальные компоненты Samba выполняют вспомогательные задачи, например, компонент SWAT предназначен для настройки Samba с помощью Web-интерфейса).

Ресурсы

Научиться

Получить продукты и технологии

  • Вы можете загрузить систему Samba и получить информацию о ней на Web-сайте Samba (EN).
  • Дополнительные опции загрузки доступны на странице загрузки (EN) Web-сайта Samba.
  • На Web-сайте GCC (EN) вы найдете информацию и ссылки на загрузку GNU Compiler Collection и связанных инструментов и библиотек.
  • На Web-странице GNU make (EN) вы найдете информацию и ссылки на загрузку утилиты GNU make.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=808572
ArticleTitle=Изучаем Linux, 302 (смешанные среды): Конфигурирование и компиляция Samba из исходного кода
publish-date=04052012