подпакет rpm не создается

Я пытаюсь создать 2 об/мин пакета, хотя у второго меньше операций. Я создал этот файл спецификации:

%define name        @CPACK_PACKAGE_NAME@ 
%define version     @CPACK_PACKAGE_VERSION@
%define release     @CPACK_PACKAGE_RELEASE@
%define binarydir   @BINARY_DIR@ 
%define packagedir  @PACKAGE_DIR@ 


#component name - used for the rpm name
%{!?name:%{error:*** Name was not specified! ***}}

# passed as a parameter in the build - the release version 
# e.g OverhaulRelease.MajorRelease.MinorRelease
%{!?version:%{error:*** Version was not specified! ***}}

# passed as a parameter in the build - the 5 digit build number 
%{!?release:%{warn:*** Release was not specified, so Dev build ***} %define release 0}

## we need to redfine this here to avoid the pre-compilation of the python code
%define __os_install_post %{nil}

## disable RPM object stripping so the
## Qt GUI binaries don't get truncated
%define __strip /bin/true

# set up some commonly used variables
%define buildroot @CMAKE_BINARY_DIR@/_CPack_Packages/Linux/RPM/@CPACK_PACKAGE_FILE_NAME@
%define prefix %{name}
%define appdir /%{name}
%define _topdir @CMAKE_BINARY_DIR@/_CPack_Packages/Linux/RPM
%define _rpmdir @CMAKE_BINARY_DIR@/_CPack_Packages/Linux/RPM
%define _rpmfilename @[email protected]
%define _unpackaged_files_terminate_build 0 



## Intro ##

Name:           %{name}
Version:        %{version}
Release:        %{release}
Vendor:         %{company}
URL:            %{url}
Packager:       %{company} 
License:        %{copyright}

# Define the other packages that this rpm depends on here
Requires:       bash

Provides:       %{name}


Summary:        %{name} %{version}_%{release}
Group:          Applications/Communications
BuildRoot:      %{buildroot}

%package -n @CPACK_PACKAGE_NAME@_run

## Intro ##

#Name:           %{name}
Version:        %{version}
Release:        %{release}
Vendor:         %{company}
URL:            %{url}
Packager:       %{company} 
License:        %{copyright}

# Define the other packages that this rpm depends on here
Requires:       bash

Provides:       %{name}

Summary:        %{name} %{version}_%{release}
Group:          Applications/Communications
BuildRoot:      %{buildroot}
#Icon:


%define _rpmfilename @CPACK_PACKAGE_FILE_NAME@_run.rpm

%description -n @CPACK_PACKAGE_NAME@_run

#%prep
#%build

######## clean ########
#%clean

######## pre-install ########
# Define any pre-install steps here
%pre -n @CPACK_PACKAGE_NAME@_run

######## install ########
%install -n @CPACK_PACKAGE_NAME@_run

# Make the required install directories
# there are made in the buildroot in the local repo,
# but translated when the rpm is installed - removing the buildroot


mkdir -p %{buildroot}%{opt_root}
mkdir -p %{buildroot}%{etc_root}
mkdir -p %{buildroot}%{var_root}


# Copy the required installed files to the buildroot dir to collect the 
# files required for installation
# Also, create any required symbolic links here

######## post-install ########
%post -n @CPACK_PACKAGE_NAME@_run

# Set up the symbolic version directory links
# This should eventually be moved to an enable rpm,
# But for now keep it as a single rpm
/bin/ln -s  %{opt_root} %{opt_link}
/bin/ln -s  %{etc_root} %{etc_link}
/bin/ln -s  %{var_root} %{var_link}

# Do other post install commands here, like starting the required process/services etc


######## pre-uninstall ########
%preun -n @CPACK_PACKAGE_NAME@_run

######## post-uninstall ########
%postun -n @CPACK_PACKAGE_NAME@_run

## FILES ##

# Define user attributes and permissions for files
# List the atcual files and paths as they will look on the installed server
# i.e. without the buildroot prefic

%files -n @CPACK_PACKAGE_NAME@_run

%dir %{opt_root}
%dir %{etc_root}
%dir %{var_root}



%package -n @CPACK_PACKAGE_NAME@_ena


#Name:           %{name}_ena
Version:        %{version}
Release:        %{release}
Vendor:         %{company}
URL:            %{url}
Packager:       %{company} 
License:        %{copyright}

# Define the other packages that this rpm depends on here
Requires:       bash

Provides:       %{name}

Summary:        %{name} %{version}_%{release}
Group:          Applications/Communications
BuildRoot:      %{buildroot}
#Icon:


%define _rpmfilename @CPACK_PACKAGE_FILE_NAME@_ena.rpm
%define _unpackaged_files_terminate_build 0 


%description -n @CPACK_PACKAGE_NAME@_ena

#%prep
#%build

######## clean ########
#%clean

######## pre-install ########
# Define any pre-install steps here
%pre -n @CPACK_PACKAGE_NAME@_ena

######## install ########
%install -n @CPACK_PACKAGE_NAME@_ena

mkdir -p %{buildroot}%{var_root}/output
cp    --sparse=never %{binarydir}/stub1 %{buildroot}%{opt_root}/bin/stub1
cp    --sparse=never %{binarydir}/stub2 %{buildroot}%{opt_root}/bin/stub2

######## post-install ########
%post -n @CPACK_PACKAGE_NAME@_ena

# Set up the symbolic version directory links
# This should eventually be moved to an enable rpm,
# But for now keep it as a single rpm
/bin/ln -s  %{opt_root} %{opt_link}
/bin/ln -s  %{etc_root} %{etc_link}
/bin/ln -s  %{var_root} %{var_link}

# Do other post install commands here, like starting the required process/services etc


######## pre-uninstall ########
%preun -n @CPACK_PACKAGE_NAME@_ena

######## post-uninstall ########
%postun -n @CPACK_PACKAGE_NAME@_ena


%files -n @CPACK_PACKAGE_NAME@_ena

поэтому у меня здесь 2 вопроса: 1. здесь генерируются только 2 пакета - основной и второй, я ожидаю 3 основных и 2 подпакета 2. Во втором подпакете, если я укажу раздел% install, сборка rpm выдает ошибка во втором %install.

Извините за публикацию подробной спецификации здесь: но не могу получить точный ответ на мою проблему в нескольких словах :)

Где я ошибаюсь?


person novice    schedule 13.08.2014    source источник
comment
Я не думаю, что %build, %install и т. д. получают версии для каждого пакета. Я полагаю, что у вас есть только %package, %description и %files для каждого пакета. Также я не верю (если это не изменилось со времени версии, которую я использую), что %package/etc. принять -n аргументов.   -  person Etan Reisner    schedule 13.08.2014
comment
Оказывается %package/и т.д. может принять -n в качестве аргумента, поэтому я ошибся в этом бите. Но я по-прежнему считаю, что только эти несколько разделов дублируются для подпакетов, а не для основных.   -  person Etan Reisner    schedule 14.08.2014
comment
Спасибо за разъяснение, но если мне нужны определенные операции, которые должны быть частью установки подпакета, как я могу их добавить?   -  person novice    schedule 14.08.2014
comment
Конкретные операции во время сборки? Как что? отладочные сборки вместо выпускных? Я не верю, что вы можете это сделать (и этот конкретный пример - это то, для чего предназначены пакеты -debug с разделенными символами.   -  person Etan Reisner    schedule 14.08.2014
comment
операции я имел в виду mkdir/mv/cp и т. д..   -  person novice    schedule 20.08.2014
comment
операции я имел в виду mkdir/mv/cp и т. д. В любом случае, я нашел решение своей проблемы, я переключился на это без использования CPACK. Поэтому я сделал некоторые незначительные изменения, такие как определение моих собственных _topdir, _srcdir, _rpmdir и _blddir, buildroot. _rpmfilename не требуется в случае использования команды rpmbuild. Теперь я могу собрать пакет с помощью команды rpmbuild -bb ‹specfile›. Спасибо за вашу помощь.   -  person novice    schedule 20.08.2014


Ответы (1)


Создаются только два пакета, потому что у вас есть только две директивы %files. Для каждой отдельной директивы %files в вашем specfile создается один пакет. Думаю, Итан ответил на другие ваши вопросы в комментариях.

person jayhendren    schedule 27.08.2014