Упаковка программ с помощью rpm, часть 3: разрешение зависимостей между пакетами

Дополнительный инструментарий для разработки RPM

Если для создания пакетов вы часто пользуетесь технологией RPM, то
вы привыкли работать с файлами спецификаций. Тем не менее, есть очень много инструментальных средств, которые помогают создавать файлы спецификаций. Вот несколько примеров:

Пакет осуществляет проверку файлов
RPM. Этот инструмент позволяет отловить большое
количество ошибок. Установка бинарных файлов
в директорий /etc и конфигурационных файлов в
директорий /usr являются типичными
ошибками, обнаруживаемые , но вы можете
расширить его возможности с помощью настраиваемых
модулей. Пакет написан на языке Python
и для того, чтобы он выполнял свои функции, требуется
некоторые библиотеки.
Easy RPM Builder — это инструментальное средство,
базирующееся на K Desktop Environment (KDE) и
предназначенное для сборки пакетов. В нем есть
несколько шаблонов, которые помогут начать вам
разработку ваших пакетов RPM, и есть графический
интерфейс, помогающий работе с файлами спецификаций.
В этом инструментальном средстве есть несколько
шаблонов, которые помогут вам правильно начать
разработку RPM; а для части файла спецификаций
предоставлен графический интерфейс. Easy RPM Builder не
заменит — требуется некоторое знание
RPM для того, чтобы эффективно использовать
этот инструмент.
Если вы не используете KDE или предпочитаете
работать с файлами спецификаций напрямую, вы можете
расширить редакторы Vim и Emacs, добавив в них
специальные модули, которые будут подсвечивать
синтаксис файла спецификаций и помогут при его создании и модификации.
Хотя это и не является инструментом как таковым, в
руководстве по RPM в проекте Fedora перечислены
лучшие примеры практического использования RPM

Если вы
собираетесь распространять программное обеспечение на
Fedora, то обязательно обратите особое внимание на
требования, касающиеся новых пакетов. Кроме того, в
руководстве описывается как создавать пакеты приложений
с использованием таких популярных платформ, как
Eclipse, Perl и Ruby

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

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

Разница между Linux I386, I486, I586, I686 и AMD_64, X86, X86_64 суффикс

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»clear:both;»>

В системной среде Linux некоторые суффиксы часто встречаются, не знают, что конкретное значение представителей — это некоторые из собранных объяснений для этих суффиксов:

1. i386

I386 подходит для Intel и AMD всех 32-разрядных процессоров. И через используются 32 процессора архитектуры X86.

Платформа Intel включает в себя 8086, 80286, 80386, 80486, серию Pentium (1.2.3.4), серии Celeron, серия Pentium D. и Centrino P-M, Core Duo и т. Д.

2. i586

Компьютер 586 класса, в том числе Pentum первого поколения MMX CPU, AMD K5, System C6 CPU (PIN-код Socket7) и т. Д. Процессорные процессоры.

3. i686

I686-Pentum 2 После системного процессора Intel CPU и K7, ЦП, процессор, уровень процессора относятся к этому уровню 686.

4. amd64

5. x86

32-битный процессор Intel в общем смысле;

6. x86_64

64 процессор Intel в общем смысле

Интеллектуальная рекомендация

«OK, you are not too bad, em… But you can never pass the next test.» feng5166 says.  «I will tell you an odd number N, and then N integers. There will be a special integer among …

Статьи Справочник Инструмент GNU Некоторые связанные ресурсы GCC введение Версия компилятора GCC Основной компонент компилятора Основное использование и варианты GCC Тип ошибки GCC и контрмеры Gcc исп…

Акция поддерживает программное обеспечение версии CC и выше, нам нужно сначала загрузить его из сообщества Moyu.Создание динамического персонажа в формате GIF с чернилами и жидкостью Действие PS»…

Результаты:…

1. Сборщик мусора отвечает за Allocating memory Ensuring that any referenced objects remain in memory, and Recovering memory used by objects that are no longer reachable from references in executing c…

Вам также может понравиться

Необходимые инструменты idea highchart.js Нажмите, чтобы загрузить JS Эффект изображения Порекомендуйте сайт статистического графика здесь https://www.highcharts.com.cn/demo/highcharts/column-rotated-…

8 шагов, чтобы получить виртуальную машину, IP-конфигурация Win10, VMware Workstation Pro Окружающая среда, настройка виртуальных машин XP Конфигурация сети Отредактируйте виртуальную сеть 2. Измените…

Столкнуться с ошибкой Проблема, которая возникает, когда вызывается функция: Я напечатал, это следующий тип: Исправленная программа выглядит следующим образом: Добавить импорт Купни  …

  Этот метод быстрый: 13 мс. Оригинал:https://www.coder4.com/archives/3844    …

Установка, обновление и удаление пакетов RPM

Обычно, чтобы установить новый пакет на основе дистрибутивов Red Hat, вы будете использовать либо команды yum или dnf, которые могут решить и установить все зависимости пакетов.

Вы всегда должны предпочитать использовать yum или dnf больше rpm при установке, обновлении и удалении пакетов.

Перед установкой пакета RPM вы должны сначала загрузить пакет в своей системе, используя браузер или инструменты командной строки, такие как curl или wget.

При установке RPM-пакетов убедитесь, что они созданы для вашей системной архитектуры и вашей версии CentOS. Будьте особенно осторожны при замене или обновлении важных системных пакетов, таких как glibc, systemd или других служб и библиотек, которые необходимы для правильного функционирования вашей системы.

Только root или пользователи с привилегиями sudo могут устанавливать или удалять RPM-пакеты.

Чтобы установить RPM-пакет с помощью rpm, используйте параметр -i, а затем имя пакета:

sudo rpm -ivh package.rpm

Опция -v указывает rpm показать подробный вывод и -h показать индикатор выполнения.

Вы можете пропустить часть загрузки и указать команду для пакета RPM в команде rpm:

sudo rpm -ivh https://example.com/package.rpm

Чтобы обновить пакет RPM, используйте опцию -U. Если пакет не установлен, он будет установлен:

sudo rpm -Uvh package.rpm

Если пакет, который вы устанавливаете или обновляете, зависит от других пакетов, которые в данный момент не установлены, rpm отобразит список всех отсутствующих зависимостей. Вам нужно будет загрузить и установить все зависимости вручную.

Чтобы установить пакет RPM без установки всех необходимых зависимостей в системе, используйте параметр —nodeps:

sudo rpm -Uvh --nodeps package.rpm

Чтобы удалить (стереть) пакет RPM, используйте параметр -e:

sudo rpm -e package.rpm

Опция —nodeps также полезна, когда вы хотите удалить пакет, не удаляя его зависимости:

sudo rpm -evh --nodeps package.rpm

Опция —test указывает rpm запустить установку или удаление команды фактически не делая ничего. Это только показывает, будет ли команда работать или нет:

sudo rpm -Uvh --test package.rpm

Макроопределения

Теперь пора познакомиться поближе с макросами и переменными. Допустим, мы собираем пакет из SVN, в данном случае в релиз обычно включается дата ревизии. В самом начале spec-файла нужно определить переменную date:

%define date 20070612

Как мы видим, за определение переменных отвечает макроопределение %define. Теперь в любом месте spec-файла мы можем использовать нашу переменную в виде %{date} (скобки не обязательны, но в РОСЕ принято брать в скобки переменные, и не брать — макроопределения; так их проще различать). Например, определение основных параметров будет выглядеть примерно так:

Version: 0.5
Release: 0.svn%{date}.3

Обратите внимание, что перед датой стоит , а после даты — число, которое и увеличивается при необходимости поднять релиз. Зачем так сделано? Когда наконец выйдет окончательная версия (в нашем случае — 0.5), ревизию можно будет убрать, а в релиз прописать просто 1

При этом литерально 1 больше, чем любая строка, начинающаяся на , и пакет будет считаться более новым, чем предварительные пакеты, собиравшиеся на основе ревизий SVN.

Крайне популярным макроопределением является конструкция

%if условие
  действие1
%else
  действие2
%endif

или просто %if без %else. Суть проста, если условие стоящее при %if истина, то выполняется действие1, в противном случае выполняется действие2.

Допустим, мы опять же собираем что-нибудь из SVN. Обычно внутри архива, если он из SVN, вместо каталога %{name}-%{version} указывают просто %{name} (архив sim-0.9.5.tar.bz2 внутри имеет каталог sim, так как финального релиза sim 0.9.5 не существует. Конечный же релиз будет иметь первым каталогом sim-0.9.5). Чтобы всякий раз не переписывать spec-файл, можно сделать следующие макроопределения:

%define svn 1
...
%prep
%if %{svn}
%setup -q -n %{name}
%else
%setup -q
%endif

Если переменная svn не определена, то будет выполняться часть сценария после %else. Можно также использовать более строгое условие (не забудьте про кавычки):

%define svn 1
...
%prep
%if "%{svn}" == "1"
%setup -q -n %{name}
%else
%setup -q
%endif

Внутри всех секций spec-файла мы можем использовать любые команды Linux, без каких либо «наворотов», а вот в шапке файла не всё так просто. Например, нам нужно определить версию firefox для пакета (допустим epiphany) и прописать ее в секцию Requires:. Выглядеть это будет следующим образом:

Requires:       firefox = %(rpm -q firefox --qf "%%{version}")

Обратите внимание на то, что внешняя команда выполняется в %() (почти, как в bash — $()) и в spec-файле необходимо ставить два знака % в параметрах. Таким образом можно вызывать любые команды Linux, например, для определения версии ядра.. Ещё одним популярным макроопределение является конструкция %ifarch .

%endif. Если архитектура соответствует указанной после %ifarch, то выполняется какое либо действие. Архитектуры бывают i386, i486, i586, i686, i?86, x86_64, и понятное дело некоторые другие, с которыми вы наверно не столкнётесь.

Ещё одним популярным макроопределение является конструкция %ifarch .. %endif. Если архитектура соответствует указанной после %ifarch, то выполняется какое либо действие. Архитектуры бывают i386, i486, i586, i686, i?86, x86_64, и понятное дело некоторые другие, с которыми вы наверно не столкнётесь.

Как уже отмечалось выше во всех секциях spec-файла вы можете использовать любые команды Shell, включая for, while, if и др.

Установка RPM пакетов в Linux

Давайте сначала рассмотрим синтаксис самой утилиты rpm:

$ rpm -режимопции пакет

Утилита может работать в одном из режимов:

  • -q, —query — запрос, получение информации;
  • -i, —install — установка;
  • -V, —verify — проверка пакетов;
  • -U, —upgrade — обновление;
  • -e, —erase — удаление.

Рассмотрим только самые интересные опции программы, которые понадобятся нам в этой статье:

  • -v — показать подробную информацию;
  • —vv — выводить отладочную информацию;
  • —quiet — выводить как можно меньше информации;
  • -h — выводить статус-бар;
  • —percent — выводить информацию в процентах о процессе распаковки;
  • —force — выполнять действие принудительно;
  • —nodeps — не проверять зависимости;
  • —replacefiles — заменять все старые файлы на новые без предупреждений;
  • -i — получить информацию о пакете;
  • -l — список файлов пакета;
  • -R — вывести пакеты, от которых зависит этот пакет;

Теперь, когда вы уже имеете представление как работать с этой утилитой, может быть рассмотрена установка rpm пакета в Linux. Самая простая команда установки будет выглядеть вот так:

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

Для того чтобы посмотреть более подробную информацию в процессе установки используйте опцию -v:

Также вы можете включить отображение статус бара в процессе установки:

Чтобы проверить установлен ли пакет, нам уже нужно использовать режим запроса:

Также сразу можно удалить пакет, если он не нужен:

Но у rpm так же как и у dpkg, есть один существенный недостаток. Программа не может разрешать зависимости. В случае отсутствия нужного пакета в системе, вы просто получите сообщение об ошибке и пакет не установится.

Для автоматической загрузки зависимостей во время выполнения установки rpm linux нужно использовать пакетный менеджер дистрибутива. Рассмотрим несколько команд для самых популярных RPM дистрибутивов. В RedHat и других дистрибутивах, использующих Yum используйте такую команду:

Первая опция отключает проверку GPG ключа, а вторая говорит, что мы будем выполнять установку локального пакета. В Fedora, с помощью dnf все делается еще проще:

Пакетный менеджер Zypper и OpenSUSE справляются не хуже:

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

Сколько осталось места на диске

Программа rpm позволяет определить, сколько места потребуется для
установки пакета: для этого надо дать запрос вида rpm -qpi имя_пакета
и в строке Size будет выдано, сколько байт займет пакет. Осталось
узнать, есть ли столько свободного места на диске.

Для определения обьема свободного пространства на диске Вы можете
воспользоваться командой df. Если дать эту команду без аргументов, то
она сообщит каков объем дискового пространства во всех смонтированных
файловых системах, сколько используется и сколько еще свободно.
Единицей измерения при этом служит 1 килобайтный блок. Если Вы хотите
получить сведения об объеме свободного пространства в более привычных
мегабайтах, дайте команду с параметром -h:


           df -h
           df -h /dev/hda2

Если место еще есть, то можно перейти к установке пакета. Хуже
владельцам компьютеров с дисками маленького объема: тут каждый раз
надо думать, как бы освободить место для новой программы, другими
словами, что уже можно с диска удалить. Удалять можно отдельные файлы,
но, конечно, с точки зрения освобождения пространства, эффективнее
удалять целыми каталогами или пакетами.

Файлы (каталоги) удаляются в том случае, если они (размещенные в них
файлы) Вам более не нужны. Естественно, что для удаления выбираются
каталоги (или файлы) самого большого обьема и тут оказывается полезной
команда du (disc usage).

Команда du позволяет узнать, сколько места занимает конкретный файл
или подкаталог. Для этого надо дать команду следующего формата (в
примере мы узнаем объем каталога /usr/lib )

           du -ks /usr/lib
           91418 /usr/lib

Если маленькую s заменить на большую S, то выводиться будет только
информация об объеме подкаталогов (но не файлов), что иногда тоже
полезно. О других опциях указанных команд Вы можете узнать на
соответствующих man-страницах или по команде info.

Теперь Вы знаете, как определить сколько места займет на диске
устанавливаемый пакет и каков объем свободного пространства на диске.
Рассмотрим, что можно сделать, если свободного места не достаточно.
Надо заметить, что при стандартной инсталляции ОС Linux на диске
образуется большое количество файлов, которые Вам вообще никогда не
понадобятся. В то же время довольно трудно в огромной массе файлов
найти те, которые Вам не нужны (тем более, что они спрятаны глубоко в
дебрях структуры каталогов). Поэтому я расскажу вкратце о своем опыте
поиска ненужных файлов, надеясь, что этот опыт окажется полезен
читателю.

RPM

Стандартный способ упаковки программ с помощью RPM &mdash создать SPEC-файл с метаинформацией о пакете, такой как название, версия, выпуск (часто сокращается как N-V-R &mdash name, version, release), зависимости для запуска и сборки, различные установочные сценарии (скриптлеты) или триггеры (сценарии, запускаемые особыми действиями других пакетов: установкой, обновлением, удалением) и т. д.

Затем из SPEC-файла и файлов с исходным кодом создается пакет SRPM (source RPM), с помощью которого можно легко собрать установочный пакет или распространять исходники. Из SRPM создается один или несколько финальных RPM-пакетов для установки. Для автоматизированной проверки формата SPEC-файлов и пакетов SRPM есть полезная программа .

Сборка с использованием инструментов работы с git репозиториями

Git репозиторий, это удобное место для хранения исходного кода пакетов.
Для работы с ними и для сборки из них rpm существует пакет gear.

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

$ mkdir My_Repo (необязательно)
$ cd My_Repo  
$ git clone  https://git.altlinux.org/gears/h/hello.git

Заходим в каталог hello и изучаем его.

$ cd hello

$ ls -al
 
итого 24
drwxr-xr-x  5 writer writer 4096 мая 15 19:58 .
drwxr-xr-x 32 writer writer 4096 мая 15 19:58 ..
drwxr-xr-x  2 writer writer 4096 мая 15 19:58 .gear
drwxr-xr-x  8 writer writer 4096 мая 15 19:58 .git
drwxr-xr-x 11 writer writer 4096 мая 15 19:58 hello
-rw-r--r--  1 writer writer 1680 мая 15 19:58 hello.spec
 
$ cd .gear
$ cat rules 
tar.gz: hello

Правило tar.gz: hello, указывает, что каталог hello упаковывается в hello.tar.gz.

Установим пакет gear:

# apt-get install gear

И дадим команду из каталога hello:

$ gear-hsh

И у нас в хэшере собирается пакет (для 64 битной архитектуры) hello-2.10-alt1.1.x86_64.rpm.

Собираем пакет RPM

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

$ rpmbuild -v -bb --clean SPECS/wget.spec

В указанной выше команде используется файл спецификаций для того, чтобы собрать бинарный пакет ( — «build binary», т. е. собрать бинарный) с подробной выдачей диагностических сообщений (). Утилита сборки удалит дерево сборки после того, как пакеты будут собраны (). Если вы хотите также собрать пакет RPM с исходными кодами, то укажите («build all» — собрать все) вместо -bb. Полный список параметров смотрите на страницах man утилиты .

Утилита выполняет следующие операции:

  • Читает и анализирует файл спецификаций wget.spec.
  • Выполняет операции раздела — распаковывает исходный код во временный директорий. В нашем случае временный директорий — BUILD.
  • Выполняет операции раздела — компилирует исходный код.
  • Выполняет операции раздела — устанавливает код в директории на машине, где собирается пакет.
  • Читает список файлов из раздела , находит их и создает бинарный пакет RPM (и пакет RPM с исходными кодами, если это выбрано).

Если вы проверите ваш директорий $HOME/mywget, вы должны найти в нем новый директорий с именем wget-1.12-root.Этот директорий выполняет роль прокси для целевого директория. Вы также должны обнаружить новый директорий с именем RPMS/i386, в котором должен находиться ваш пакет RPM, имеющий имя wget-1.12-1.i386.rpm. В имени отражается, что это версия 1.12 утилиты , предназначенной для работы на процессоре i386

Для того, чтобы проверить, что в пакете RPM имеются все нужные файлы, вы можете использовать команду так, как это показано в листинге 4.

Листиег 4: Проверяем содержимое пакета RPM

$ rpm -Vp RPMS/i386/wget-1.12-1.i386.rpm
missing     /usr/local/bin/wget
.M....G.    /usr/local/etc
missing   c /usr/local/etc/wgetrc
.M....G.    /usr/local/share
missing     /usr/local/share/info
missing   d /usr/local/share/info/wget.info
missing     /usr/local/share/locale
missing     /usr/local/share/locale/be
missing     /usr/local/share/locale/be/LC_MESSAGES
missing   d /usr/local/share/locale/be/LC_MESSAGES/wget.mo
.
.
.

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

После того, как вы проверили содержимое пакета RPM, вы можете отправить его своим коллегам. Как только коллеги получат файл, они могут запустить следующую команду для того, чтобы установить утилиту в своих системах:

$ sudo rpm -i wget-1.12-1.i386.rpm

Сборка RPM пакета из уже установленного в системе

Иногда случается ситуация, что какой-то пакет уже установлен в системе (может быть в очень старой системе) и очень хочется получить rpm’ку с ним, а она как раз и не сохранилась. Также может захотеться собрать по быстрому пакет с изменёнными под ваши нужды конфигурационными файлами.

Для решения этой проблемы следует воспользоваться утилитой rpmrebuild. Эта написанная на bash утилита доступна в contrib-репозитории РОСЫ.

Работать с ней крайне просто. Нужно отдать всего лишь команду:

rpmrebuild название_установленного_пакета

Если какой-либо файл был изменён, то вам об этом сообщат, но процесс сборки не прервётся.

Rpmrebuild обладает огромным количеством параметров, например, вы можете изменять release пакета, changelog, скрипты, секции Requires, описания пакета и многое другое. Можете даже просто напросто изменить spec-файл, который скрипт сгенерирует сам. Он правда будет немного страшный, но это все же лучше, чем ничего.

Все параметры можно посмотреть при помощи

rpmrebuild --help

и

rpmrebuild --help-plugins

хДПВОЩЕ ДПРПМОЕОЙС Л RPM

еУФШ ОЕУЛПМШЛП РТПЗТБНН, ЛПФПТЩЕ РПЪЧПМСАФ БЧФПНБФЙЮЕУЛЙ ТБЪТЕЫЙФШ ЪБЧЙУЙНПУФЙ РТЙ ХУФБОПЧЛЕ РБЛЕФПЧ. чПФ ОЕЛПФПТЩЕ ОБЙВПМЕЕ ЙЪЧЕУФОЩЕ:

  • apt-rpm, РПТФ APT, ЙЪОБЮБМШОП ЧЩРПМОЕООЩК Conectiva, ЪБФЕН УХЭЕУФЧЕООП ДПТБВПФБООЩК ALT Linux Й РТПДПМЦБАЭЙК ТБЪЧЙЧБФШУС
  • apt4rpm, РПТФ APT Debian. тЕЛПНЕОДХЕФУС ДМС ЙУРПМШЪПЧБОЙЙ У ОЕЛПФПТЩНЙ ТЕРПЪЙФПТЙСНЙ Fedora Core. рПЮФЙ ОЕ ТБЪТБВБФЩЧБЕФУС, ОП ТБУИПДХЕФ НЕОШЫЕ ТЕУХТУПЧ РТПГЕУУПТБ, ЮЕН ФЕ УТЕДУФЧБ, ЛПФПТЩЕ РЕТЕЮЙУМЕОЩ ЧЩЫЕ. вПМЕЕ РПЪДОЙК РТПЕЛФ, ОЕЦЕМЙ apt-rpm.
  • smart, ДПУФХРЕО ДМС НОПЗЙИ ДЙУФТЙВХФЙЧПЧ
  • urpmi, ЙУРПМШЪХЕФУС Ч Mandriva Linux?
  • YaST, ЙУРПМШЪХЕФУС Ч SuSE?
  • yum, ТБЪТБВПФБО Ч Yellow Dog Linux, ФБЛЦЕ ЙУРПМШЪХЕФУС Ч Fedora Core Й ASP Linux

нБФЕТЙБМ ЙЪ чЙЛЙРЕДЙЙ — УЧПВПДОПК ЬОГЙЛМПРЕДЙЙ

Ссылки

Полезные ссылки:

  • Сборка_пакета_с_нуля
  • О_стратегии_сборки_RPM_пакетов
  • Руководство по написанию спек файла для rpm
  • Краткая инструкция по сборке пакетов с помощью etersoft-build-utils
  • Краткое_руководство_по_сборке_с_gear
  • Макросы RPM
  • git
  • gear
  • hasher

devel

ACL • ALT Packaging HOWTO • Alt-tasks • Altdocs • Alterator/module/first • API or ABI changing • Apt-repo • Azure • Biarch • Buildreq-src • Cert-sh-functions • Changes/archive/devel • Contrib • ControlErrors • Croncopy • Cronport • Cuneiform-Qt • Devel newbies • E2k список задач портирования ПО • EC2 • Electron • Etersoft-build-utils • Etersoft-build-utils howto • Etersoft-build-utils/extra sources • FLTK • FreeOfficeInstaller • Girar/task-rerunner & recycler • How-to compile games on e2k • HowMuchIsSisyphusUnstable • Incoming • Incoming/details • Incoming/справочник • Join • Join/Environment • LaWars • Libtool/versioning • LLVM • Local incoming • Logoved-report • Lsb • Monit • MozillaBuild • MySQL 5.1 Roadmap • Orphaned • OtherDistros • Package Splitting • Packageinstall • PatchHowto • PerlManPages • Pockets • Problems • ProblemWithVerifyELFAndRPATH • PrometheusRuby • Puppet/packaging • Puppet/Запуск puppetry (пример с libvirt) • Python3 • Python3/autoreqs from upstream reqs • Python3/separation of build build-doc check • Python3/UNMETS • QmakeCFLAGS • Qml • QtGtk • Rc.local • Repocop • Repocop/RepairMiniHOWTO • RPM/debuginfo • RPM/Rust • RPMFilesReqList • RPMFileTrigger • Rpminstall • SecureTmp • Security • Shared Libs Policy and updates • Situation • Soname • SpecTips/doc • SpecTips/kdebuild • SpecTips/MenuHowto • SpecTips/relative • Srpm • Status • Svn • TestAdvice • TeXLivePackaging • TextRel • TextRel/libtool • Tmpfs • Transition to disttag • TypicalPackagingErrors • TypicalPackagingErrors/BrokenSymlinks • TypicalPackagingErrors/BundledLibs • TypicalPackagingErrors/FHS • TypicalPackagingErrors/LinkingError • TypicalPackagingErrors/PatchesVsFiles • TypicalPackagingErrors/SharedDirs • TypicalPackagingErrors/SonameUpdate • TypicalPackagingErrors/StrikeOutMacro • TypicalPackagingErrors/TrailingSlash • TypicalPackagingErrors/versions • Uclibc/gensandbox • UEFI • Unmets • Upstream • Usability • Visual Studio Code • X • Воспроизводимая сборка • Выкладывание пакетов • Добавление патчей в ядро • Краткое руководство по сборке пакета • Логовед • Новая надежда • ОсобенностиСборкиПакетов • ОтладкаИПрофайлинг • План ALT Linux на первое полугодие 2010 • Работа с ключами разработчика • Разработка модулей control(8) • Редактирование changelog в Vim • Руководство по написанию changelog • Сборка пакетов • Сборка пакетов (etersoft-build-utils) • Технология сборки пакетов RPM • Чистка кода C/C++ • Эльбрус/lcc • Эльбрус/портирование • Категория:Branches • Категория:BugTracking • Категория:Gear • Категория:Git • Категория:Hasher • Категория:Kernel • Категория:Localization • Категория:Monitoring • Категория:Packaging Automation • Категория:PHP • Категория:Progress • Категория:Regular • Категория:Repocop • Категория:Repositories • Категория:RPM • Категория:Ruby • Категория:SampleSpecs • Категория:Sisyphus • Категория:TLS • Категория:Upgrade • Категория:Upstream • Категория:Utils • Категория:Виртуализация • Категория:Документирование • Категория:Нормативные документы • Категория:Программисту • Категория:Разработка нужных программ • Категория:Сборка пакетов • Категория:Тестирование

Сборка пакетов

Сборка пакетов • Реагирует ли сборочница на переименование пакетов • Сборка пакета с git submodule • ProblemWithVerifyELFAndRPATH • Краткое руководство по сборке пакета • ALT Packaging HOWTO • Etersoft-build-utils howto • QtDesktop • Сборка пакета с нуля • Сборка проприетарного пакета с нуля • О стратегии сборки RPM пакетов • Инструкция по сборке пакетов с помощью rpm • Особенности написания спек файлов в ALT Linux • Общие правила написания спек файлов в ALT Linux • Обсуждение участника:Nir • 3rd party build • SampleSpecs • Технология сборки пакетов RPM • Join

Сборка утилиты wget вручную

Утилиту , подобно многим другим приложениям с исходным кодом, можно собрать вручную. Понимаете этого процесса является отправной точкой для сборки утилиты wget в пакетном режиме. С общей точки зрения сборка утилиты состоит из следующих четырех шагов:

  1. Загрузка и распаковка исходного кода.
  2. Конфигурирование средств сборки.
  3. Сборка кода.
  4. Установка программного обеспечения.

Вы можете загрузить последнюю версию исходного кода утилиты с сайта ftp.gnu.org (на момент написания статьи текущей версией была версия 1.12). Остальные шаги выполняются в командной строке так, как это показано в листинге 1.

Листинг 1: Установка утилиты wget

$ tar xzf wget-latest.tar.gz
$ cd wget-1.12
$ ./configure
configure: configuring for GNU Wget 1.12
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... build-aux/install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
...
$ make
$ sudo make install

Команда опрашивает систему и устанавливает настройки компиляции в соответствие с обнаруженым аппаратным и программным обеспечением. Команда make компилирует код, а команда устанавливает код в системные директории. По умолчанию используются директории, находящиеся в корне /usr/local, хотя вы можете изменить коневой директории с помощью параметра , используемого в команде .

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

Основные отличия от процессора 486

  • Суперскалярная архитектура. Благодаря использованию суперскалярной архитектуры процессор может выполнять 2 команды за 1 такт. Такая возможность существует благодаря наличию двух конвейеров — U и V. U-конвейер — основной, выполняет все операции над целыми и вещественными числами; V-конвейер — вспомогательный, выполняет только простые операции над целыми и частично над вещественными. Чтобы старые программы (для 486) в полной мере использовали возможности такой архитектуры, необходимо было их перекомпилировать. Pentium — первый CISC-процессор, использующий многоконвейерную архитектуру.
  • 64-битная шина данных позволяет процессору Pentium за один шинный цикл обмениваться вдвое большим объёмом данных с оперативной памятью, чем 486 (при одинаковой тактовой частоте).
  • Механизм предсказания адресов ветвления. Применяется для сокращения времени простоя конвейеров, вызванного задержками выборки команд при изменении счетчика адреса во время выполнения команд ветвления. Для этого в процессоре используется буфер адреса ветвления BTB (Branch Target Buffer), использующий алгоритмы предсказания адресов ветвления.
  • Раздельное кэширование программного кода и данных, сократившее число промахов кэша при выборке инструкций и операндов по сравнению с 80486. В процессорах Pentium используется кэш-память первого уровня (кэш L1) объёмом 16 Кб, разделённая на 2 сегмента: 8 Кб для данных и 8 Кб для инструкций. Для сокращения времени доступа и снижения стоимости реализации оба сегмента являются 2-канальными множественно-ассоциативными, в отличие от 4-канального кэша 80486.
  • Улучшенный блок вычислений с плавающей точкой (FPU). Некоторые инструкции ускорились на порядок, например FMUL, скорость выполнения которой увеличилась в 15 раз. Процессор также может выполнять инструкцию FXCH ST(x) параллельно с обычными инструкциями (арифметическими или загрузки/выгрузки регистров).
  • Четырёхвходовые адресные сумматоры. Позволяют уменьшить латентность вычисления адреса по сравнению с 80486. В процессоре Pentium можно за один такт вычислить эффективный адрес при использовании базово-индексной адресации с масштабированием и смещением. 80486 имеет трёхвходовый адресный сумматор, поэтому в нём вычисление такого адреса занимает два такта.
  • Микрокод может использовать оба конвейера, в результате чего инструкции с префиксом повторения, такие как REP MOVSW, выполняют одну итерацию за такт, в то время как 80486 требуется три такта на итерацию.
  • Более быстрый полностью аппаратный умножитель в несколько раз сокращает (и делает более предсказуемым) время выполнения инструкций MUL и IMUL по сравнению с 80486. Время выполнения уменьшается с 13—42 тактов до 10—11 для 32-битных операндов.
  • Виртуализация прерываний, позволяющая ускорить режим виртуального 8086.

Технические характеристики различных ядер

P5 P54C P54CS P55C
Дата анонса первой модели 23 марта 1993 7 марта 1994 27 марта 1995 8 января 1997
Тактовые частоты, МГц 60, 66 75, 90, 100 120, 133, 150, 166, 200 166, 200, 233
Частота системной шины (FSB), МГц 60, 66 50, 60, 66 60, 66 66
Кэш L1, Кбайт 8 (для данных)+8 (для инструкций) 16+16
Кэш L2, Кбайт внешний до 2 Мбайт
Напряжение питания, В 5 3,3 2,8/3,3
Количество транзисторов, млн 3,1 3,2 3,3 4,5
Площадь кристалла, мм² 294 148 90 141
Максимальное тепловыделение, Вт 16 10,1 15,5 16
Техпроцесс, нм 800 600 350 280
Разъём Socket 4 Socket 5, Socket 7 Socket 5, Socket 7 (150—200 — только Socket 7) Socket 7
Корпус 273-контактный PGA 296-контактный CPGA 296-контактный CPGA/PPGA
Адресуемая память 4 Гбайт
Разрядность регистров 32
Разрядность внешней шины 64
Разрядность шины адреса 32

Что из себя представляет RPM?

Ранее этот акроним расшифровывался как Red Hat Packet Manager. Из названия становится ясно, что это пакетный менеджер, разработанный компанией Red Hat. Только остается непонятным, что такое пакетный менеджер и что за компания такая Red Hat.

Пакетный менеджер — утилита, которая помогает распаковать в систему любое приложение и скачать все необходимые для его работы компоненты. Проще говоря — загрузчик и установщик программ в Linux.

Red Hat — ветераны в области создания операционных систем на базе Unix и Linux. На основе их Red Hat Linux были построены такие популярные дистрибутивы как Fedora, OpenSUSE и CentOS. Все они унаследовали RPM.

Также RPM — это формат файлов, который пакетный менеджер Red Hat может обрабатывать. Он довольно распространен и часто встречается на официальных сайтах популярных программ (типа Google Chrome или VS Code). Файлы в этом формате нужно скачивать, если вы используете дистрибутив на базе Red Hat Linux. Самые популярные из них: Fedora, OpenSUSE и CentOS.

Файлы RPM похожи на файлы DEB, которые используются в дистрибутивах на основе Debian (Ubuntu, Mint, Elementary OS) и в самом Debian.

Заключение

Технология RPM активно поддерживается. Вы можете отслеживать
текущее состояние проекта RPM на его новой домашней странице. Средства
работы с RPM существуют в большинстве дистрибутивов Linux, в том числе
и в Debian. Последней версией RPM является 5.2.0, которая была выпущена
в июле 2009 года. Цели проекта RPM остаются прежними: «Упрощаем
добавление пакетов в систему и удаление их из системы, упрощаем
проверку правильности установки пакетов в системе, упрощаем сборку
пакетов, упрощаем сборку пакетов из исходного кода и запускаем пакеты на компьютерах с различной архитектурой».

Разработка пакета RPM может быть сложной, поскольку столь же сложна
установка программ. В этой серии статей затронуты лишь некоторые темы.
В интернете можно найти много информации об RPM. Есть учебники, форумы
и даже IRC канал посвященные этой теме (посетите # rpm.org на
Freenode). Кроме того, в сети можно найти сотни, если не тысяч других
примеров RPM. Если вы встретитесь с особенно запутанной проблемой,
поищите еще один пакет RPM и, проанализировав его файл спецификаций,
попытайтесь по аналогии найти решение.

Если вы разработчик программного обеспечения или системный администратор, то вам будет легче распространять свои приложения в виде пакета, осуществляющего инсталляцию, обновление и обслуживание. Опять же, если вы собираете пакеты и это пакеты RPM, то все у вас будет в порядке.

Другие статьи об управлении программным обеспечением в Linux в нашей Библиотеке.

Понравилась статья? Поделиться с друзьями:
Tehnik Shop
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: