Программисты создают проект программы (например с помощью Kdevelop), в котором есть все makefile и файлы конфигурации (configure), а потом упаковывают их в тарболы. В случае доработки пакета создаются Patch-и к исходным текстам, которые заменяют одни строки текста программ на другие. Тарболы и прикладываемые к ним patch-и упаковываются в пакеты-сорцы (.SRC.RPM)(бывают и другие системы пакетов – но я говорю о дистрибутивах на основе RPM – Red Hat, Mandrake, SuSe). RPM-пакет – это особо организованный архив, в который помимо данных (тарбола и патчей – для сырца, необходимых программ – для бинарного RPM) упакованы скрипты установки и обновления. C помощью сорца можно создать бинарный RPM – т.е. такой RPM, в котором упакованы исполняемые пакеты. Причем, если RPM создан на текущей машине, он теоретически будет наилучшим образом подходить к текущей конфигурации пакетов (именно поэтому многие администраторы наиболее важные пакеты собирают из сырцов заново на своей машине). В результате установки сорца- в директорию /usr/src/RPM/source помещаются все необходимые тарболы (обычно один) и патчи (может быть много, а может быть и не одного – все зависит от разработчика и составителя конкретного RPM). – В директорию /usr/src/RPM/spec помещается установочный скрипт (файл с расширением spec) в котором разработчик RPM помещает все действия по установке пакета – разархивирование тарбола, накладывания патчей, транслирование и т.д. Разработано уже много макросов для spec-файлов. С наиболее старыми из них и общей теорией их построения а также опциями команды rpm можно познакомится в RPM-HOWTO . При построении пакета все операции с исходным текстом программ обычно (но не всегда) помещаются в /usr/src/RPM/builder, а новые полученные пакеты (новый сырец и новый бинарник) помещаются соответственно в /usr/src/RPM/RPMS и /usr/src/RPM/SRPMS. Получить из установленного сорца соответствующий пакет можно с помощью команды
rpm -ba packet.....spec