IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  Linux  >

Учебник для экзамена LPI 201: Поддержка системы

Администрирование, средний уровень (LPIC-2) тема 211

developerWorks
На предыдущую страницуСтраница 3 из 7 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


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

В начале был tarball

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

Инструмент Linux tar (для "ленточных архивов", даже если не нужно, и обычно не нужно, использует формат ленты) прекрасно подходит для создания архивов файлов с указанными местоположениями в файловой системе. Для дистрибутива вы можете сжать архив tar при помощи gzip (или bzip2). См. заключительную главу этого руководства о резервном копировании для получения дополнительной информации об этих утилитах. Сжатый tar архив обычно обозначают расширениями .tar.gz или .tgz (или .tar.bz2).

Ранние дистрибутивы Linux (и некоторые современные, такие как Slackware) используют простой tar архив как механизм развертывания дистрибутива. Для специализированных дистрибутивов собственного программного обеспечения систем Linux, поддерживаемых централизованно, такой способ остается самым доступным.



В начало


Специальные форматы архивов

Различные языки программирования и другие инструменты, появляющиеся вместе со специальными дистрибутивами, обычно не имеют предпочтений между дистрибутивами Linux и даже другими операционными системами. Python имеет свой собственный формат архива и инструменты distutils; Perl использует архивы CPAN; Java использует .jar файлы; Ruby использует .gem. Большинство неязыковых приложений имеют стандартную систему для установки плагинов или других инструментов для расширения базовых возможностей приложений.

Например, чтобы установить пакет Python вы можете использовать такой формат пакета как DEB или RPM, но часто разумнее следовать тому стандарту, для которого пакет создан. Конечно, для системных утилит и приложений и для большинства пользовательских приложений, тот стандарт, который используется, и есть стандарт дистрибутива Linux. Но для некоторых инструментов, написанных на специальных языках программирования, проще использовать какой-то ваш специальный инструмент вместо предложенного дистрибутивом или платформой (или внутреннее, или внешнее использование является конечной целью).



В начало


"Большая двойка" форматов пакетов

Есть два главных формата пакетов, используемые дистрибутивами Linux: Redhat Package Manager (RPM) и Debian (DEB). Оба они подобны в своих целях, но различны в деталях. Это форматы для "расширенного" архива файлов. Продвинутость, обеспеченная этими форматами пакетов, включает аннотации для номера версии, зависимости одного приложения от других приложений или библиотек, удобочитаемые описания инструментов пакета и общий механизм для управления установкой, обновлением или удалением инструментов пакета.

В формате DEB, вложенный конфигурационный файл control содержит большинство метаданных пакета. Для файлов RPM, эту роль играет файл spec. Более полные детали правильного создания пакетов в любом формате находятся вне этого учебного пособия, а здесь мы выделим только основы.



В начало


Что находится в .deb файле?

Пакет DEB создан при помощи инструмента архивирования, родственника tar -- ar (или другим более высокоуровневым инструментом, который использует ar). Поэтому мы можем использовать только ar, чтобы увидеть, что находится в .deb файле. Обычно используют высокоуровневые инструменты, такие как dpkg, dpkg-deb или apt-get, чтобы фактически работать с пакетом DEB. Например:

      % ar tv unzip_5.51-2ubuntu1.1_i386.deb
      rw-r--r-- 0/0      4 Aug  1 07:23 2005 debian-binary
      rw-r--r-- 0/0   1007 Aug  1 07:23 2005 control.tar.gz
      rw-r--r-- 0/0 133475 Aug  1 07:23 2005 data.tar.gz

Debian-бинарный файл просто содержит версию DEB (в настоящее время 2.0). Архив data.tar.gz содержит собственно файлы приложений - исполняемые, документацию, страницы помощи, файлы конфигурации и так далее.

Архив control.tar.gz представляется самым интересным. Давайте посмотрим на пакет DEB, который мы выбрали:

      % tar tvfz control.tar.gz
      drwxr-xr-x root/root         0 2005-08-01 07:23:43 ./
      -rw-r--r-- root/root       970 2005-08-01 07:23:43 ./md5sums
      -rw-r--r-- root/root       593 2005-08-01 07:23:43 ./control

Как мы могли бы ожидать, md5sums содержит смесь шифров всех файлов дистрибутива в целях проверки. Файл control сообщает, где находятся метаданные. В некоторых случаях вы могли бы также захотеть включить в control.tar.gz скрипты postinst и prerm, чтобы принять специальные меры после установки или, соответственно, перед удалением.



В начало


Создание control-файла DEB

Инсталляционные скрипты могут делать то, что мог бы делать скрипт shell. (Посмотрите на некоторые примеры в существующих пакетах, чтобы понять, что имеется в виду.) Но такие скрипты являются дополнительными, и часто в них нет необходимости. Для .deb пакета необходим его control-файл. Формат этого файла содержит различные поля метаданных, и лучше всего это можно проиллюстрировать на примере:

      % cat control
      Package: unzip
      Version: 5.51-2ubuntu1.1
      Section: utils
      Priority: optional
      Architecture: i386

      Depends: libc6 (>= 2.3.2.ds1-4)
      Suggests: zip
      Conflicts: unzip-crypt (<< 5.41)
      Replaces: unzip-crypt (<< 5.41)
      Installed-Size: 308
      Maintainer: Santiago Vila <sanvila@debian.org>
      Description: De-archiver for .zip files
       InfoZIP's unzip program. With the exception of multi-volume archives
       (ie, .ZIP files that are split across several disks using PKZIP's /& option),
       this can handle any file produced either by PKZIP, or the corresponding
       InfoZIP zip program.
       .
       This version supports encryption.

В основном, кроме специальных случаев, ваш control-файл должен выглядеть точно также, как и этот. Для неконкретизированных типов процессоров – либо скрипты, либо пакеты документации, либо исходный код - используют Architecture: all.



В начало


Создание DEB пакета

Создание пакета DEB происходит при помощи dpkg-deb. Мы не можем здесь раскрыть все секреты изготовления хороших пакетов, но основная идея в том, что необходимо создать рабочий каталог ./debian/, и поместить в него необходимое содержание перед запуском dpkg-deb. Вы можете пожелать установить соответствующие права на ваши файлы после установки. Например:

      % mkdir -p ./debian/usr/bin/
      % cp foo-util ./debian/usr/bin                # copy executable/script
      % mkdir -p ./debian/usr/share/man/man1
      % cp foo-util.1 ./debian/usr/share/man/man1   # copy the manpage
      % gzip --best ./debian/usr/share/man/man1/foo-util.1
      % find ./debian -type d | xarg chmod 755      # set dir permissions
      % mkdir -p ./debian/DEBIAN
      % cp control ./debian/DEBIAN   # first create a matching 'control'
      % dpkg-deb --build debian      # create the archive
      % mv debian.deb foo-util_1.3-1all.deb  # rename to final package name



В начало


Еще о создании DEB пакета

В предыдущем примере можно увидеть, что локальная структура каталогов внутри ./debian/ организовывается так, чтобы соответствовать намеченной инсталляционной структуре. Для создания хорошего пакета необходимо еще несколько пунктов.

  • Вообще, вы должны создать файл, названный с частью названия вашего дистрибутива ./debian/usr/share/doc/foo-util/copyright (добавьте к названию пакета).
  • Хорошее дело - создавать файлы ./debian/usr/share/doc/foo-util/changelog.gz и ./debian/usr/share/doc/foo-utils/changelog.Debian.gz.
  • Инструмент lintian позволяет убедиться, что при создании пакета не было допущено ни одной из стандартных ошибок, он проверит пакет DEB на предмет сомнительных свойств. Не все, на что lintian жалуется, необходимо обязательно исправить; но если вы собираетесь расширять дистрибутив, будет неплохо, если вы уберете все проблемы, которые возникли.
  • Инструмент fakeroot позволит вам создавать пакеты не как пользователь root и полезен для того, чтобы собирать пакеты с правильным владельцем. Обычно нужны инструменты, установленные как root, а не как индивидуальный пользователь, который, может быть, собирал пакет (lintian предупредит об этом). Вы можете достигнуть этого с:

    % fakeroot dpkg-deb --build debian



В начало


Что находится в .rpm файле?

RPM придерживается немного другой стратегии при создании пакетов, чем DEB. Его файл конфигурации называют spec, а не control, но файл spec делает больше, чем файл control. Все детали шагов, необходимых для предустановки, постустановки, предудаления и непосредственно установки, содержатся, как вложенные скрипты, в конфигурации spec. Фактически, формат spec даже содержит макросы для общих действий.

Пакеты RPM создают при помощи утилиты rpm -b. Например:

      % rpm -ba foo-util-1.3.spec  # perform all build steps

Этот процесс сборки пакетов базируется не на специфически названных каталогах, как в случае с DEB, а скорее на каталогах, прописанных в более сложном файле spec.



В начало


Создание метаданных RPM

Основные метаданные в RPM очень похожи на аналогичные в DEB. Например, foo-util-1.3.spec мог бы содержать что-то похожее на следующее:

      # spec file for foo-util 1.3
      Summary: A utility that fully foos
      Name: foo-util
      Version: 1.3
      Release: 1
      Copyright: GPL
      Group: Application/Misc
      Source: ftp://example.com/foo-util.tgz
      URL: http://example.com/about-foo.html
      Distribution: MyLinux
      Vendor: Acme Systems
      Packager: John Doe <jdoe@acme.example.com>

      %description
      The foo-util program is an advanced fooer that combines the
      capabilities of OneTwo's foo-tool and those in the GPL bar-util.



В начало


Скрипты в RPM

Несколько разделов в RPM spec-файле могут содержать небольшие скрипты shell. Они включают:

  • %prep: Шаги, которые нужно предпринять, чтобы получить готовую сборку, например, удалить более ранние сборки. Часто следующий макрос полезен и достаточен:
          %prep
          %setup
    

  • %build: Шаги, чтобы фактически собрать пакет. Если вы используете средство make, то можно написать:
          %build
          make
    

  • %install: Шаги, чтобы установить пакет. И опять, если вы используете make, это могло бы означать:
          %install
          make install
    

  • %files: Вы должны включать список файлов, которые являются частью пакета. Даже если бы ваш Makefile использовал эти файлы, то менеджер пакетов (rpm) не будет знать о них, если вы не включите их сюда:
          %files
          %doc README
          /usr/bin/foo-util
          /usr/share/man/man1/foo-util.1
    



В начало



На предыдущую страницуСтраница 3 из 7 На предыдущую страницу
    IBM в России Конфиденциальность Контакты