ghostJago
ghostJago

Reputation: 3434

rpmbuild spec file %install section error

I have a spec file which is similar to:

BuildRoot: /tmp/build_%{name}-%{version}-%{release}

%prep
...
...

%install
# Directories
install -m 755 -d %{buildroot}/usr/app/mypackage/config
install -m 755 -d %{buildroot}/usr/app/mypackage/src
....

# Bash script
install -m 755 script/script1.sh %{buildroot}/usr/app/mypackage/config/script1.sh
install -m 755 script/script2.sh %{buildroot}/usr/app/mypackage/config/script2.sh
install -m 755 script/myapp-log %{buildroot}/etc/logrotate.d/myapp-log

When I run the rpmbuild I get the error:

install: cannot create regular file `/tmp/build_my_app-1.0-2/etc/logrotate.d/myapp-log'

I can get around this by manually creating the /etc/ and then /etc/logrotate.d directories in the /tmp/build_my_app-1.0-2/ directory.

When I re-reun the rpmbuild it will work.

I guess this is because I am not creating this directory in my install section but as its not directly related to my application I don't want to put that in.

My guess is that there is some clever tag I can use to fix this so that the build will work without any manual intervention.

My Question: Could someone please suggest a way for me to achieve this (assuming its possible) or whether I need to write a script around the rpmbuild to set this up first.

Upvotes: 0

Views: 6838

Answers (1)

Edwin Buck
Edwin Buck

Reputation: 70909

You are missing the step to create the installation directories in your %install section. Remember that since you can build in "different" roots, you cannot expect certain directories (like ${buildroot}/etc) to be present.

Try adding

 mkdir -p ${buildroot}/etc/logrotate.d

just before the install command that copies the file into ${buildroot}/etc/logrotate.d.

Upvotes: 3

Related Questions