Skip to content

Instantly share code, notes, and snippets.

Last active Aug 7, 2016
What would you like to do?
rpmbuild custom package example


create rpm hello using rpmbuild.

docker build -t fedora -f ./fedora.dockerfile .
ocker run -it fedora /bin/bash
bash-4.3# hellow
bash: hellow: command not found
bash-4.3# hello
hello, world!
bash-4.3# exit
FROM fedora:21
RUN yum update -y && \
yum install -y rpm-build tar gcc sudo
# create rpmbuilder
RUN useradd rpmbuilder
USER rpmbuilder
# create working dir
RUN mkdir -p /home/rpmbuilder/hello-1.0
RUN mkdir -p /home/rpmbuilder/rpmbuild/{SOURCES,SPECS}
RUN chown rpmbuilder:rpmbuilder /home/rpmbuilder/rpmbuild/{SOURCES,SPECS}
# add source file
ADD ./hello.c /home/rpmbuilder/hello-1.0/hello.c
ADD ./hello.spec /home/rpmbuilder/rpmbuild/SPECS/hello.spec
# compile
WORKDIR /home/rpmbuilder/hello-1.0
RUN gcc -o hello hello.c && rm -rf hello.c
# packaging
WORKDIR /home/rpmbuilder/
RUN tar czvf hello-1.0.tar.gz hello-1.0 && \
chmod 777 rpmbuild/SOURCES/ && \
cp hello-1.0.tar.gz rpmbuild/SOURCES
# rpm create
WORKDIR /home/rpmbuilder/rpmbuild
RUN rpmbuild -bb -v SPECS/hello.spec
# install hello
USER root
RUN rpm -ivh RPMS/noarch/hello-1.0-1.noarch.rpm
CMD ["bin", "bash"]
#include <stdio.h>
printf("hello, world!\n");
%define name hello
%define version 1.0
%define unmangled_version 1.0
%define release 1
%define _binaries_in_noarch_packages_terminate_build 0
%define _unpackaged_files_terminate_build 0
Summary: sample hello world program
Name: %{name}
Version: %{version}
Release: %{release}
License: GPL2
Source0: %{name}-%{unmangled_version}.tar.gz
Group: Applications/File
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Prefix: %{_prefix}
BuildArch: noarch
%define INSTALLDIR %{buildroot}/usr/local/bin
This is a sample program to learn how to make a rpm package.
%setup -q
rm -rf %{INSTALLDIR}
mkdir -p %{INSTALLDIR}
rm -rf %{buildroot}
%defattr(-, root, root)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment