<HTML ><HEAD ><TITLE >Allways Provide RPM Packages of Your Softwares</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ "><LINK REL="HOME" TITLE="Designing Integrated High Quality Linux Applications" HREF="index.html"><LINK REL="PREVIOUS" TITLE="Provide Architecture for Extensions and Plugins" HREF="plugin.html"><LINK REL="NEXT" TITLE="Security: The Omnipresent Concept" HREF="security.html"></HEAD ><BODY CLASS="section" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Designing Integrated High Quality Linux Applications</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="plugin.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="security.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="section" ><H1 CLASS="section" ><A NAME="rpm">6. Allways Provide RPM Packages of Your Softwares</H1 ><P >This is extremely important for many reasons:</P ><P ></P ><OL TYPE="1" ><LI ><P >Ease-of-use. This is allways the primordial motivation.</P ></LI ><LI ><P >Automates some tasks that must be made before and after the installation of your Software. Again bringing ease-of-use.</P ></LI ><LI ><P >Intelligently manages configuration files, documentation etc, providing more control in an upgrade</P ></LI ><LI ><P >Manages interdependencies with other packages and versions, guaranteeing good functionality.</P ></LI ><LI ><P >Lets you distribute Software with your company's digital signature, and makes integrity checks (<SPAN CLASS="acronym" >MD5</SPAN >) in each file, guaranteeing precedence, and reporting unwanted file modification.</P ></LI ><LI ><P >Provides tools to let interact with your graphic installer.</P ></LI ></OL ><P >But a good package is not only put together your files in a RPM. <SPAN CLASS="acronym" >FHS</SPAN > must be followed, configuration and documentation files must be marked as is, and pre- and post-install scripts must be robust, to not let them damage the system (remember that installation processes is done by root).</P ><P >Know well RPM because it can bring much power and facilities to you and your user. There are a lot of documentation available about RPM on the Internet:</P ><P ></P ><UL COMPACT="COMPACT" ><LI ><P >The book <A HREF="http://www.redhat.com/docs/books/max-rpm/" TARGET="_top" >Maximum RPM</A >, also available <A HREF="http://www.rpm.org/max-rpm/" TARGET="_top" >on-line</A > and in printable <A HREF="http://www.rpm.org/local/maximum-rpm.ps.gz" TARGET="_top" >PostScript</A > format.</P ></LI ><LI ><P ><A HREF="http://www.rpm.org/RPM-HOWTO/" TARGET="_top" >RPM-HOWTO</A > which is smaller and more straight-forward.</P ></LI ><LI ><P ><A HREF="http://www.rpm.org/" TARGET="_top" >www.rpm.org</A ></P ></LI ></UL ><DIV CLASS="section" ><H2 CLASS="section" ><A NAME="module">6.1. Software Package Modularization</H2 ><P >You should give user the option to install only the part of your Software he wants. Imagine your Software has a client part and a server part, and both use files and libraries in common. You should break them in 3 RPMs. For instance, lets say the name of your product is <EM >MyDB</EM >, so you'll provide the packages:</P ><P ></P ><OL TYPE="1" ><LI ><P ><TT CLASS="filename" >MyDB-common-1.0-3.i386.rpm</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >MyDB-server-1.0-3.i386.rpm</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >MyDB-client-1.0-3.i386.rpm</TT ></P ></LI ></OL ><P >and last 2 packages depends on the first. If the user is installing a client profile, he will use:</P ><P ></P ><OL TYPE="1" ><LI ><P ><TT CLASS="filename" >MyDB-common-1.0-3.i386.rpm</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >MyDB-client-1.0-3.i386.rpm</TT ></P ></LI ></OL ><P >If he is installing a server profile:</P ><P ></P ><OL TYPE="1" ><LI ><P ><TT CLASS="filename" >MyDB-common-1.0-3.i386.rpm</TT ></P ></LI ><LI ><P ><TT CLASS="filename" >MyDB-server-1.0-3.i386.rpm</TT ></P ></LI ></OL ><P >This approach will help the user save disk space, and be aware of how your Software is organized.</P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="plugin.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="security.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Provide Architecture for Extensions and Plugins</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Security: The Omnipresent Concept</TD ></TR ></TABLE ></DIV ></BODY ></HTML >