Home how-to

 

To generate an rpm for the eos,is required fundamental changes in directory structure. The parameters for changing the structure can be obtained through the configure file, contained in the source of most packages.

Example: Creating RPM for Mysql

1. Download the source from the site.

Download the package, unzip it and execute it. /configure –help

Something similar to the example below:

Fine tuning of the installation directories:
–bindir=DIR           user executables [EPREFIX/bin]
–sbindir=DIR          system admin executables [EPREFIX/sbin]
–libexecdir=DIR       program executables [EPREFIX/libexec]
–datadir=DIR          read-only architecture-independent data [PREFIX/share]
–sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
–localstatedir=DIR    modifiable single-machine data [PREFIX/var]
–libdir=DIR           object code libraries [EPREFIX/lib]
–includedir=DIR       C header files [PREFIX/include]
–infodir=DIR          info documentation [PREFIX/info]
–mandir=DIR           man documentation [PREFIX/man]

These options will be used to change the installing directories to EOS standard:

–prefix=/opt/addons/mysql

–bindir=/opt/addons/bin/
–sbindir=/opt/addons/sbin
–libexecdir=/opt/addons/mysql/libexec/
–datadir=/opt/addons/mysql/share
–sysconfdir=/opt/addons/mysql/etc
–localstatedir=/opt/addons/mysql/var
–libdir=/opt/addons/lib
–includedir=/opt/addons/include
–infodir=/opt/addons/info
–mandir=/opt/addons/man

2 – Inside your RPM structure you will place the zipped package inside directory SOURCE/

3- Create file .spec

Example of SPEC file of mysql:

Name: mysql
Summary: The MySQL Server
Version: 5.0.67
Release: 1
Source0: %{name}-%{version}.tar.gz
Group: Addons
URL: http://www.mysql.com
BuildRoot: %{_tmppath}/%{name}-buildroot
Packager: Felipe Santos < This e-mail address is being protected from spambots. You need JavaScript enabled to view it >
License: GPL

%package client
Summary: MySQL client
Group: Addons

%package docs
Requires: %{name} = %{version}-%{release}
Summary:Documentation of MySQL
Group: Addons/Docs

%package devel
Requires: %{name} = %{version}-%{release}
Summary: Headers of MySQL
Group: Addons/Devel

%description
The MySQL server

%description client
The MySQL Client

%description docs
Documentation of the MySQL Server

%description devel
The MySQL headers and build for development including original config files

%prep
%setup -q
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d/
mkdir -p $RPM_BUILD_ROOT/etc/{logrotate.d,sysconfig}

%build

./configure \
–prefix=/opt/addons/mysql \
–localstatedir=/opt/addons/mysql/var/  \
–bindir=/opt/addons/bin \
–sbindir=/opt/addons/sbin \
–libdir=/opt/addons/lib \
–mandir=/opt/addons/man \
–infodir=/opt/addons/info \
–includedir=/opt/addons/include \
–libexecdir=/opt/addons/sbin \

make

%install

make DESTDIR=$RPM_BUILD_ROOT install
mkdir -p $RPM_BUILD_ROOT%{_mysqldir}/etc/
mkdir -p $RPM_BUILD_ROOT%{_mysqldir}/var/logs/

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root,-)
%exclude /opt/addons/include
%exclude /opt/addons/man
%exclude /opt/addons/info
%exclude /opt/addons/mysql
%exclude /opt/addons/bin/msql2mysql
%exclude /opt/addons/bin/mysql
%exclude /opt/addons/bin/mysql_find_rows
%exclude /opt/addons/bin/mysql_tableinfo
%exclude /opt/addons/bin/mysql_waitpid
%exclude /opt/addons/bin/mysqlaccess
%exclude /opt/addons/bin/mysqladmin
%exclude /opt/addons/bin/mysqlbinlog
%exclude /opt/addons/bin/mysqlcheck
%exclude /opt/addons/bin/mysqldump
%exclude /opt/addons/bin/mysqlimport
%exclude /opt/addons/bin/mysqlshow
%exclude /opt/addons/lib/mysql
%config(noreplace,missingok) /opt/addons/mysql/etc/my.cnf
%config(noreplace,missingok) /etc/sysconfig/mysql
%config(noreplace,missingok) /etc/logrotate.d/mysql
/*

%files client
%defattr(755,root,root,-)
/opt/addons/bin/msql2mysql
/opt/addons/bin/mysql
/opt/addons/bin/mysql_find_rows
/opt/addons/bin/mysql_tableinfo
/opt/addons/bin/mysql_waitpid
/opt/addons/bin/mysqlaccess
/opt/addons/bin/mysqladmin
/opt/addons/bin/mysqlbinlog
/opt/addons/bin/mysqlcheck
/opt/addons/binmysqldump
/opt/addons/bin/mysqlimport
/opt/addons/bin/mysqlshow
/opt/addons/lib/mysql

%files docs
%defattr(-,root,root,-)
/opt/addons/man
/opt/addons/info

%files devel
%defattr(-,root,root,-)
/opt/addons/include
/opt/addons/mysql

%post

groupadd mysql -g 47 2> /dev/null
useradd -c "MySQL Server" -u 47 -s /sbin/nologin -g mysql -d /opt/addons/var/mysql mysql 2> /dev/null
chown mysql:mysql /opt/addons/mysql/var
if [ ! -d /var/log/mysql ];then
mkdir /var/log/mysql
fi
if [ -d /opt/addons/var/logs ];then
rm -rf /opt/addons/var/logs
fi
chown mysql:mysql /var/log/mysql
if [ ! -d /opt/addons/var ];then
mkdir /opt/addons/var
chown mysql:mysql /opt/addons/var
fi

%postun
userdel mysql 2> /dev/null

%changelog
* Mon Aug 18 2008 Felipe Santos < This e-mail address is being protected from spambots. You need JavaScript enabled to view it >

- Spec created

This is only an example to show how to change the directory structure inside an SPEC, in this case of mysql. Other options can be set on ./configure to add or remove resources in mysql.

4 – After creating Spec and downloading source, execute the command:

#rpmbuild -ba SPECS/mysql.spec