I’ve spent some time on the spec file and have a updated version.

Not sure how to provide it best to list as it depends on the pimd.init file commit (in proposed tree) and has heavy modification from Paul’s version. Don’t want to just replace it (and steal the credits from Paul).

I’ve also added some basic doc on how to build RPMs to avoid repeated questions on the list.

Happy to resend it as patches against some specific commit if someone prefers this.
(Just let me know against which commit.)

Attached are the updated quagga.spec.in and a README.rpm_build.md doc

A few comments:
1) The RPM build requires the pimd.init patch (currently not in master, in the proposed/4 branch) 2) I had to configure “—disable-werror” as (at the current time) there are still warnings on CentOS/Fedora
and the build would otherwise fail.
3) The whole spec is built to detect systemd/init.d and configure/install it the right way.

And don’t expect it to be perfect, but at least I can build it on CentOS 6, CentOS 7 and Fedora 22, install it
and it seems to run, which is a big step forward from the current code.

Regards,
   Martin Winter
   [email protected]


On 20 Oct 2015, at 3:02, Paul Jakma wrote:

On Tue, 20 Oct 2015, Martin Winter wrote:

error: line 94: Illegal char '-' in: Version:   0.99.25-dev
(and aborts here…)

That's a change in configure.ac adding text to the version number - which it seems some distro packaging tools don't like.

1) The macro for default_dist seems to be focused on fedora - running this on CentOS/Redhat causes an empty response

I'll have a look at that.

2) The configure script (currently) causes the version to be based on Git label - but “-“ isn’t allowed in the version.

3) The script uses the init.d scripts - which won’t work anymore on CentOS 7 / Redhat 7 and I believe on newer Fedora (Not sure on Fedora - haven’t used it for some time)

I think init scripts are still supported by systemd?

Can not supporting a newer system be reason to reject fixes that affect the older, 'supported' ones? (though, the packaging stuff is mostly to aid testing of git - no more).

regards,
--
Paul Jakma      [email protected]  @pjakma Key ID: 64A2FF6A
Fortune:
Never ask two questions in a business letter.  The reply will discuss
the one you are least interested, and say nothing about the other.
# configure options
#
# Some can be overriden on rpmbuild commandline with:
# rpmbuild --define 'variable value'
#   (use any value, ie 1 for flag "with_XXXX" definitions)
#

####################### Quagga configure options #########################
# with-feature options
%{!?with_snmp:                  %global with_snmp               1 }
%{!?with_vtysh:                 %global with_vtysh              1 }
%{!?with_ospf_te:               %global with_ospf_te    1 }
%{!?with_opaque_lsa:    %global with_opaque_lsa 1 }
%{!?with_tcp_zebra:             %global with_tcp_zebra  0 }
%{!?with_vtysh:                 %global with_vtysh              1 }
%{!?with_pam:                   %global with_pam                1 }
%{!?with_ospfclient:    %global with_ospfclient 1 }
%{!?with_ospfapi:               %global with_ospfapi    1 }
%{!?with_irdp:                  %global with_irdp               1 }
%{!?with_rtadv:                 %global with_rtadv              1 }
%{!?with_isisd:                 %global with_isisd              1 }
%{!?with_pimd:                  %global with_pimd               1 }
%{!?with_shared:                %global with_shared             1 }
%{!?with_multipath:             %global with_multipath  64 }
%{!?quagga_user:                %global quagga_user             quagga }
%{!?vty_group:                  %global vty_group               quaggavt }
%{!?with_fpm:                   %global with_fpm                0 }
%{!?with_watchquagga:   %global with_watchquagga 1 }

# path defines
%define         _sysconfdir     /etc/quagga
%define         zeb_src         %{_builddir}/%{name}-%{quaggaversion}
%define         zeb_rh_src      %{zeb_src}/redhat
%define         zeb_docs        %{zeb_src}/doc

# defines for configure
%define         _localstatedir  /var/run/quagga
############################################################################

#### Version String tweak
# Remove invalid characters form version string and replace with _
%{expand: %%define rpmversion %(echo '@VERSION@' | tr [:blank:]- _ )}
%define         quaggaversion   @VERSION@

#### Check version of texi2html 
# Old versions don't support "--number-footnotes" option.
%{expand: %%global texi2htmlversion %(rpm -q --qf '%%{VERSION}' texi2html | cut 
-d. -f1 )}

#### Check for systemd or init.d (upstart)
# Check for init.d (upstart) as used in CentOS 6 or systemd (ie CentOS 7)
%{expand: %%global initsystem %(if [[ `/sbin/init --version 2> /dev/null` =~ 
upstart ]]; then echo upstart; elif [[ `systemctl` =~ -\.mount ]]; then echo 
systemd; fi)}
#
# If init system is systemd, then always disable watchquagga
#
%if "%{initsystem}" == "systemd"
        # Note: For systems with systemd, watchquagga will NOT be built. Systemd
        # takes over the role of restarting crashed processes. Value will
        # be overwritten with 0 below for systemd independent on the setting 
here
        %global with_watchquagga 0
%endif

# if FPM is enabled, then enable tcp_zebra as well
#
%if %{with_fpm}
        %global with_tcp_zebra  1
%endif

# misc internal defines
%{!?quagga_uid:         %define         quagga_uid      92 }
%{!?quagga_gid:         %define         quagga_gid      92 }
%{!?vty_gid:            %define                 vty_gid                 85 }

%define         daemon_list     zebra ripd ospfd bgpd

%define         daemonv6_list   ripngd ospf6d

%if %{with_isisd}
%define         daemon_isisd    isisd
%else
%define         daemon_other    ""
%endif

%if %{with_pimd}
%define         daemon_pimd     pimd
%else
%define         daemon_pimd     ""
%endif

%if %{with_watchquagga}
%define         daemon_watchquagga      watchquagga
%else
%define         daemon_watchquagga      ""
%endif

%define         all_daemons     %{daemon_list} %{daemonv6_list} %{daemon_isisd} 
%{daemon_pimd} %{daemon_watchquagga}

# allow build dir to be kept
%{!?keep_build:         %global         keep_build      0 }

#release sub-revision (the two digits after the CONFDATE)
%{!?release_rev:        %define         release_rev     01 }

Summary: Routing daemon
Name:                   quagga
Version:                %{rpmversion}
Release:                @CONFDATE@%{release_rev}%{?dist}
License:                GPLv2+
Group:                  System Environment/Daemons
Source0:                
http://download.savannah.gnu.org/releases/quagga/%{name}-%{quaggaversion}.tar.gz
URL:                    http://www.quagga.net
Requires:               ncurses
Requires(pre):  /sbin/install-info
Requires(preun): /sbin/install-info
Requires(post): /sbin/install-info
BuildRequires:  texi2html texinfo autoconf patch libcap-devel groff
%if %{with_snmp}
BuildRequires:  net-snmp-devel
Requires:               net-snmp
%endif
%if %{with_vtysh}
BuildRequires:  readline readline-devel ncurses ncurses-devel
Requires:               ncurses
%endif
%if %{with_pam}
BuildRequires:  pam-devel
Requires:               pam
%endif
%if "%{initsystem}" == "systemd"
BuildRequires:          systemd
Requires(post):         systemd
Requires(preun):        systemd
Requires(postun):       systemd
%else
# Initscripts > 5.60 is required for IPv6 support
Requires(pre):          initscripts >= 5.60
%endif
Provides:                       routingdaemon = %{version}-%{release}
BuildRoot:                      %{_tmppath}/%{name}-%{version}-root
Obsoletes:                      bird gated mrt zebra quagga-sysvinit

%description
Quagga is a free software that manages TCP/IP based routing
protocol. It takes multi-server and multi-thread approach to resolve
the current complexity of the Internet.

Quagga supports BGP4, OSPFv2, OSPFv3, ISIS, RIP, RIPng and PIM.

Quagga is intended to be used as a Route Server and a Route Reflector. It is
not a toolkit, it provides full routing power under a new architecture.
Quagga by design has a process for each protocol.

Quagga is a fork of GNU Zebra.

%package contrib
Summary: contrib tools for quagga
Group: System Environment/Daemons

%description contrib
Contributed/3rd party tools which may be of use with quagga.

%package devel
Summary: Header and object files for quagga development
Group: System Environment/Daemons
Requires: %{name} = %{version}-%{release}

%description devel
The quagga-devel package contains the header and object files neccessary for
developing OSPF-API and quagga applications.

%prep
%setup  -q -n quagga-%{quaggaversion}

%build

# For standard gcc verbosity, uncomment these lines:
#CFLAGS="%{optflags} -Wall -Wsign-compare -Wpointer-arith"
#CFLAGS="${CFLAGS} -Wbad-function-cast -Wwrite-strings"

# For ultra gcc verbosity, uncomment these lines also:
#CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes"
#CFLAGS="${CFLAGS} -Wmissing-declarations -Wmissing-noreturn"
#CFLAGS="${CFLAGS} -Wmissing-format-attribute -Wunreachable-code"
#CFLAGS="${CFLAGS} -Wpacked -Wpadded"

%configure \
    --sysconfdir=%{_sysconfdir} \
    --libdir=%{_libdir} \
    --libexecdir=%{_libexecdir} \
    --localstatedir=%{_localstatedir} \
        --disable-werror \
%if !%{with_shared}
        --disable-shared \
%endif
%if %{with_snmp}
        --enable-snmp \
%endif
%if %{with_multipath}
        --enable-multipath=%{with_multipath} \
%endif
%if %{with_tcp_zebra}
        --enable-tcp-zebra \
%endif
%if %{with_opaque_lsa}
        --enable-opaque-lsa \
%endif
%if %{with_ospf_te}
        --enable-ospf-te \
%endif
%if %{with_vtysh}
        --enable-vtysh \
%endif
%if %{with_ospfclient}
        --enable-ospfclient=yes \
%else
        --enable-ospfclient=no\
%endif
%if %{with_ospfapi}
        --enable-ospfapi=yes \
%else
        --enable-ospfapi=no \
%endif
%if %{with_irdp}
        --enable-irdp=yes \
%else
        --enable-irdp=no \
%endif
%if %{with_rtadv}
        --enable-rtadv=yes \
%else
        --enable-rtadv=no \
%endif
%if %{with_isisd}
        --enable-isisd \
%else
        --disable-isisd \
%endif
%if %{with_pam}
        --with-libpam \
%endif
%if 0%{?quagga_user:1}
        --enable-user=%quagga_user \
        --enable-group=%quagga_user \
%endif
%if 0%{?vty_group:1}
        --enable-vty-group=%vty_group \
%endif
%if %{with_fpm}
        --enable-fpm \
%else
        --disable-fpm \
%endif
%if %{with_watchquagga}
        --enable-watchquagga \
%else
        --disable-watchquagga \
%endif
        --enable-gcc-rdynamic

make %{?_smp_mflags} MAKEINFO="makeinfo --no-split"

pushd doc
%if %{texi2htmlversion} < 5
texi2html --number-sections quagga.texi
%else
texi2html --number-footnotes  --number-sections quagga.texi
%endif
popd

%install
mkdir -p %{buildroot}/etc/{quagga,sysconfig,logrotate.d,pam.d} \
         %{buildroot}/var/log/quagga %{buildroot}%{_infodir}
make DESTDIR=%{buildroot} INSTALL="install -p" CP="cp -p" install

# Remove this file, as it is uninstalled and causes errors when building on RH9
rm -rf %{buildroot}/usr/share/info/dir

# install /etc sources
%if "%{initsystem}" == "systemd"
mkdir -p %{buildroot}%{_unitdir}
for daemon in %{all_daemons} ; do
        if [ x"${daemon}" != x"" ] ; then
                install %{zeb_rh_src}/${daemon}.service \
                        %{buildroot}%{_unitdir}/${daemon}.service
        fi
done
%else
mkdir -p %{buildroot}/etc/rc.d/init.d
for daemon in %{all_daemons} ; do
        if [ x"${daemon}" != x"" ] ; then
                install %{zeb_rh_src}/${daemon}.init \
                        %{buildroot}/etc/rc.d/init.d/${daemon}
        fi
done
%endif

install -m644 %{zeb_rh_src}/quagga.pam \
        %{buildroot}/etc/pam.d/quagga
install -m644 %{zeb_rh_src}/quagga.logrotate \
        %{buildroot}/etc/logrotate.d/quagga
install -m644 %{zeb_rh_src}/quagga.sysconfig \
        %{buildroot}/etc/sysconfig/quagga
install -d -m750  %{buildroot}/var/run/quagga

%pre
# add vty_group
%if 0%{?vty_group:1}
if getent group %vty_group > /dev/null ; then : ; else \
 /usr/sbin/groupadd -r -g %vty_gid %vty_group > /dev/null || : ; fi
%endif

# add quagga user and group
%if 0%{?quagga_user:1}
# Ensure that quagga_gid gets correctly allocated
if getent group %quagga_user >/dev/null; then : ; else \
 /usr/sbin/groupadd -g %quagga_gid %quagga_user > /dev/null || : ; \
fi
if getent passwd %quagga_user >/dev/null ; then : ; else \
 /usr/sbin/useradd  -u %quagga_uid -g %quagga_gid \
  -M -r -s /sbin/nologin -c "Quagga routing suite" \
  -d %_localstatedir %quagga_user 2> /dev/null || : ; \
fi
%endif

%post
# zebra_spec_add_service <service name> <port/proto> <comment>
# e.g. zebra_spec_add_service zebrasrv 2600/tcp "zebra service"

zebra_spec_add_service ()
{
  # Add port /etc/services entry if it isn't already there 
  if [ -f /etc/services ] && \
      ! %__sed -e 's/#.*$//' /etc/services | %__grep -wq $1 ; then
    echo "$1            $2                      # $3"  >> /etc/services
  fi
}

zebra_spec_add_service zebrasrv 2600/tcp "zebra service"
zebra_spec_add_service zebra    2601/tcp "zebra vty"
zebra_spec_add_service ripd     2602/tcp "RIPd vty"
zebra_spec_add_service ripngd   2603/tcp "RIPngd vty"
zebra_spec_add_service ospfd    2604/tcp "OSPFd vty"
zebra_spec_add_service bgpd     2605/tcp "BGPd vty"
zebra_spec_add_service ospf6d   2606/tcp "OSPF6d vty"
%if %{with_ospfapi}
zebra_spec_add_service ospfapi  2607/tcp "OSPF-API"
%endif
%if %{with_isisd}
zebra_spec_add_service isisd    2608/tcp "ISISd vty"
%endif
%if %{with_pimd}
zebra_spec_add_service pimd     2611/tcp "PIMd vty"
%endif

%if "%{initsystem}" == "systemd"
for daemon in %all_daemons ; do
        %systemd_post ${daemon}.service
done
%else
for daemon in %all_daemons ; do
        /sbin/chkconfig --add ${daemon}
done
%endif

/sbin/install-info %{_infodir}/quagga.info.gz %{_infodir}/dir

# Create dummy files if they don't exist so basic functions can be used.
if [ ! -e %{_sysconfdir}/zebra.conf ]; then
        echo "hostname `hostname`" > %{_sysconfdir}/zebra.conf
%if 0%{?quagga_user:1}
        chown %quagga_user:%quagga_user %{_sysconfdir}/zebra.conf*
%endif
        chmod 640 %{_sysconfdir}/zebra.conf
fi
for daemon in %{all_daemons} ; do
        if [ ! -e %{_sysconfdir}/${daemon}.conf ]; then
                touch %{_sysconfdir}/${daemon}.conf
                %if 0%{?quagga_user:1}
                        chown %quagga_user:%quagga_user 
%{_sysconfdir}/${daemon}.conf*
                %endif
        fi
done
%if %{with_watchquagga}
        # No config for watchquagga - this is part of /etc/sysconfig/quagga
        rm -f %{_sysconfdir}/watchquagga.*
%endif

if [ ! -e %{_sysconfdir}/vtysh.conf ]; then
        touch %{_sysconfdir}/vtysh.conf
        chmod 640 %{_sysconfdir}/vtysh.conf
%if 0%{?vty_group:1}
    chown quagga:%{vty_group} %{_sysconfdir}/vtysh.conf*
%endif
fi

%postun
if [ "$1" -ge 1 ]; then
        # Find out which daemons need to be restarted.
        for daemon in %all_daemons ; do
                if [ -f /var/lock/subsys/${daemon} ]; then
                        eval restart_${daemon}=yes
                else
                        eval restart_${daemon}=no
                fi
        done
        # Rename restart flags for daemons handled specially.
        running_zebra="$restart_zebra"
        restart_zebra=no
        %if %{with_watchquagga}
                running_watchquagga="$restart_watchquagga"
                restart_watchquagga=no
        %endif
        
        %if "%{initsystem}" == "systemd"
                ##
                ## Systemd Version
                ##
                # No watchquagga for systemd version
                #
                # Stop all daemons other than zebra.
                for daemon in %all_daemons ; do
                        eval restart=\$restart_${daemon}
                        [ "$restart" = yes ] && \
                                %systemd_postun ${daemon}.service
                done
                # Restart zebra.
                [ "$running_zebra" = yes ] && \
                        %systemd_postun_with_restart $daemon.service
                # Start all daemons other than zebra.
                for daemon in %all_daemons ; do
                        eval restart=\$restart_${daemon}
                        [ "$restart" = yes ] && \
                                %systemd_post ${daemon}.service
                done
        %else
                ##
                ## init.d Version
                ##
                %if %{with_watchquagga}
                        # Stop watchquagga first.
                        [ "$running_watchquagga" = yes ] && \
                                /etc/rc.d/init.d/watchquagga stop >/dev/null 
2>&1
                %endif
                # Stop all daemons other than zebra and watchquagga.
                for daemon in %all_daemons ; do
                        eval restart=\$restart_${daemon}
                        [ "$restart" = yes ] && \
                                /etc/rc.d/init.d/${daemon} stop >/dev/null 2>&1
                done
                # Restart zebra.
                [ "$running_zebra" = yes ] && \
                        /etc/rc.d/init.d/zebra restart >/dev/null 2>&1
                # Start all daemons other than zebra and watchquagga.
                for daemon in %all_daemons ; do
                        eval restart=\$restart_${daemon}
                        [ "$restart" = yes ] && \
                                /etc/rc.d/init.d/${daemon} start >/dev/null 2>&1
                done
                %if %{with_watchquagga}
                        # Start watchquagga last.
                        # Avoid postun scriptlet error if watchquagga is not 
running. 
                        [ "$running_watchquagga" = yes ] && \
                                /etc/rc.d/init.d/watchquagga start >/dev/null 
2>&1 || :
                %endif  
        %endif
fi

%preun
%if "%{initsystem}" == "systemd"
        ##
        ## Systemd Version
        ##
        if [ "$1" = "0" ]; then
                for daemon in %all_daemons ; do
                        %systemd_preun ${daemon}.service
                done
        fi
%else
        ##
        ## init.d Version
        ##
        if [ "$1" = "0" ]; then
                for daemon in %all_daemons ; do
                        /etc/rc.d/init.d/${daemon} stop  >/dev/null 2>&1
                        /sbin/chkconfig --del ${daemon}
                done
        fi
%endif
/sbin/install-info --delete %{_infodir}/quagga.info.gz %{_infodir}/dir

%clean
%if !0%{?keep_build:1}
rm -rf %{buildroot}
%endif

%files
%defattr(-,root,root)
%doc */*.sample* AUTHORS COPYING
%doc doc/quagga.html
%doc doc/mpls
%doc ChangeLog INSTALL NEWS README REPORTING-BUGS SERVICES TODO
%if 0%{?quagga_user:1}
%dir %attr(751,%quagga_user,%quagga_user) %{_sysconfdir}
%dir %attr(750,%quagga_user,%quagga_user) /var/log/quagga 
%dir %attr(751,%quagga_user,%quagga_user) /var/run/quagga
%else
%dir %attr(750,root,root) %{_sysconfdir}
%dir %attr(750,root,root) /var/log/quagga
%dir %attr(750,root,root) /var/run/quagga
%endif
%if 0%{?vty_group:1}
%attr(750,%quagga_user,%vty_group) %{_sysconfdir}/vtysh.conf.sample
%endif
%{_infodir}/quagga.info.gz
%{_mandir}/man*/*
%{_sbindir}/zebra
%{_sbindir}/ospfd
%{_sbindir}/ripd
%{_sbindir}/bgpd
%if %{with_watchquagga}
        %{_sbindir}/watchquagga
%endif
%{_sbindir}/ripngd
%{_sbindir}/ospf6d
%if %{with_pimd}
%{_sbindir}/pimd
%endif
%if %{with_isisd}
%{_sbindir}/isisd
%endif
%if %{with_shared}
%attr(755,root,root) %{_libdir}/lib*.so
%attr(755,root,root) %{_libdir}/lib*.so.*
%endif
%if %{with_vtysh}
%{_bindir}/*
%endif
%config /etc/quagga/[!v]*
%if "%{initsystem}" == "systemd"
        %config %{_unitdir}/*.service
%else
        %config /etc/rc.d/init.d/zebra
        %if %{with_watchquagga}
                %config /etc/rc.d/init.d/watchquagga
        %endif
        %config /etc/rc.d/init.d/ripd
        %config /etc/rc.d/init.d/ospfd
        %config /etc/rc.d/init.d/bgpd
        %config /etc/rc.d/init.d/ripngd
        %config /etc/rc.d/init.d/ospf6d
        %if %{with_isisd}
                %config /etc/rc.d/init.d/isisd
        %endif
        %if %{with_pimd}
                %config /etc/rc.d/init.d/pimd
        %endif
%endif
%config(noreplace) /etc/sysconfig/quagga
%config(noreplace) /etc/pam.d/quagga
%config(noreplace) %attr(640,root,root) /etc/logrotate.d/*

%files contrib
%defattr(-,root,root)
%doc tools

%files devel
%defattr(-,root,root)
%if %{with_ospfclient}
%{_sbindir}/ospfclient
%endif
%{_libdir}/*.a
%{_libdir}/*.la
%dir %attr(755,root,root) %{_includedir}/%{name}
%{_includedir}/%name/*.h
%dir %attr(755,root,root) %{_includedir}/%{name}/ospfd
%{_includedir}/%name/ospfd/*.h
%if %{with_ospfapi}
%dir %attr(755,root,root) %{_includedir}/%{name}/ospfapi
%{_includedir}/%name/ospfapi/*.h
%endif

%changelog
* Thu Oct 22 2015 Martin Winter <[email protected]>
- Cleanup configure: remove --enable-ipv6 (default now), --enable-nssa,
    --enable-netlink
- Remove support for old fedora 4/5
- Fix for package nameing
- Fix Weekdays of previous changelogs (bogus dates)
- Add conditional logic to only build tex footnotes with supported texi2html 
- Added pimd to files section and fix double listing of /var/lib*/quagga
- Numerous fixes to unify upstart/systemd startup into same spec file
- Only allow use of watchquagga for non-systemd systems. no need with systemd

* Fri Sep  4 2015 Paul Jakma <[email protected]>
- buildreq updates
- add a default define for with_pimd

* Mon Sep 12 2005 Paul Jakma <[email protected]>
- Steal some changes from Fedora spec file:
- Add with_rtadv variable
- Test for groups/users with getent before group/user adding
- Readline need not be an explicit prerequisite
- install-info delete should be postun, not preun

* Wed Jan 12 2005 Andrew J. Schorr <[email protected]>
- on package upgrade, implement careful, phased restart logic
- use gcc -rdynamic flag when linking for better backtraces

* Wed Dec 22 2004 Andrew J. Schorr <[email protected]>
- daemonv6_list should contain only IPv6 daemons

* Wed Dec 22 2004 Andrew J. Schorr <[email protected]>
- watchquagga added
- on upgrade, all daemons should be condrestart'ed
- on removal, all daemons should be stopped

* Mon Nov 08 2004 Paul Jakma <[email protected]>
- Use makeinfo --html to generate quagga.html

* Sun Nov 07 2004 Paul Jakma <[email protected]>
- Fix with_ipv6 set to 0 build

* Sat Oct 23 2004 Paul Jakma <[email protected]>
- Update to 0.97.2

* Sat Oct 23 2004 Andrew J. Schorr <[email protected]>
- Make directories be owned by the packages concerned
- Update logrotate scripts to use correct path to killall and use pid files

* Fri Oct 08 2004 Paul Jakma <[email protected]>
- Update to 0.97.0

* Wed Sep 15 2004 Paul Jakma <[email protected]>
- build snmp support by default
- build irdp support
- build with shared libs
- devel subpackage for archives and headers

* Thu Jan 08 2004 Paul Jakma <[email protected]>
- updated sysconfig files to specify local dir
- added ospf_dump.c crash quick fix patch
- added ospfd persistent interface configuration patch

* Tue Dec 30 2003 Paul Jakma <[email protected]>
- sync to CVS
- integrate RH sysconfig patch to specify daemon options (RH)
- default to have vty listen only to 127.1 (RH)
- add user with fixed UID/GID (RH)
- create user with shell /sbin/nologin rather than /bin/false (RH)
- stop daemons on uninstall (RH)
- delete info file on preun, not postun to avoid deletion on upgrade. (RH)
- isisd added
- cleanup tasks carried out for every daemon

* Sun Nov 2 2003 Paul Jakma <[email protected]>
- Fix -devel package to include all files
- Sync to 0.96.4

* Tue Aug 12 2003 Paul Jakma <[email protected]>
- Renamed to Quagga
- Sync to Quagga release 0.96

* Thu Mar 20 2003 Paul Jakma <[email protected]>
- zebra privileges support

* Tue Mar 18 2003 Paul Jakma <[email protected]>
- Fix mem leak in 'show thread cpu'
- Ralph Keller's OSPF-API
- Amir: Fix configure.ac for net-snmp

* Sat Mar 1 2003 Paul Jakma <[email protected]>
- ospfd IOS prefix to interface matching for 'network' statement
- temporary fix for PtP and IPv6
- sync to zebra.org CVS

* Mon Jan 20 2003 Paul Jakma <[email protected]>
- update to latest cvs
- Yon's "show thread cpu" patch - 17217
- walk up tree - 17218
- ospfd NSSA fixes - 16681
- ospfd nsm fixes - 16824
- ospfd OLSA fixes and new feature - 16823 
- KAME and ifindex fixes - 16525
- spec file changes to allow redhat files to be in tree

* Sat Dec 28 2002 Alexander Hoogerhuis <[email protected]>
- Added conditionals for building with(out) IPv6, vtysh, RIP, BGP
- Fixed up some build requirements (patch)
- Added conditional build requirements for vtysh / snmp
- Added conditional to files for _bindir depending on vtysh

* Mon Nov 11 2002 Paul Jakma <[email protected]>
- update to latest CVS
- add Greg Troxel's md5 buffer copy/dup fix
- add RIPv1 fix
- add Frank's multicast flag fix

* Wed Oct 09 2002 Paul Jakma <[email protected]>
- update to latest CVS
- timestamped crypt_seqnum patch
- oi->on_write_q fix

* Mon Sep 30 2002 Paul Jakma <[email protected]>
- update to latest CVS
- add vtysh 'write-config (integrated|daemon)' patch
- always 'make rebuild' in vtysh/ to catch new commands

* Fri Sep 13 2002 Paul Jakma <[email protected]>
- update to 0.93b

* Wed Sep 11 2002 Paul Jakma <[email protected]>
- update to latest CVS
- add "/sbin/ip route flush proto zebra" to zebra RH init on startup

* Sat Aug 24 2002 Paul Jakma <[email protected]>
- update to current CVS
- add OSPF point to multipoint patch
- add OSPF bugfixes
- add BGP hash optimisation patch

* Fri Jun 14 2002 Paul Jakma <[email protected]>
- update to 0.93-pre1 / CVS
- add link state detection support
- add generic PtP and RFC3021 support
- various bug fixes

* Thu Aug 09 2001 Elliot Lee <[email protected]> 0.91a-6
- Fix bug #51336

* Wed Aug  1 2001 Trond Eivind Glomsr¯d <[email protected]> 0.91a-5
- Use generic initscript strings instead of initscript specific
  ( "Starting foo: " -> "Starting $prog:" )

* Fri Jul 27 2001 Elliot Lee <[email protected]> 0.91a-4
- Bump the release when rebuilding into the dist.

* Tue Feb  6 2001 Tim Powers <[email protected]>
- built for Powertools

* Sun Feb  4 2001 Pekka Savola <[email protected]> 
- Hacked up from PLD Linux 0.90-1, Mandrake 0.90-1mdk and one from zebra.org.
- Update to 0.91a
- Very heavy modifications to init.d/*, .spec, pam, i18n, logrotate, etc.
- Should be quite Red Hat'isque now.
Building your own Quagga RPM
============================
(Tested on CentOS 6, CentOS 7 and Fedora 22.)

1. Install the following packages to build the RPMs:

		yum install git autoconf automake libtool make gawk readline-devel \
		texinfo dejagnu net-snmp-devel groff rpm-build net-snmp-devel \
		libcap-devel texi2html

	(use `dnf install` on new Fedora instead of `yum install	`)
	
2. Checkout Quagga under a **unpriviledged** user account

		git clone git://git.savannah.nongnu.org/quagga.git quagga

3. Run Bootstrap and make distribution tar.gz

		cd quagga
		./bootstrap.sh
		./configure --with-pkg-extra-version=-MyRPMVersion
		make dist
			
	Note: configure parameters are not important for the RPM building - except the
	`with-pkg-extra-version` if you want to give the RPM a specific name to
	mark your own unoffical build

4. Create RPM directory structure and populate with sources

		mkdir rpmbuild
		mkdir rpmbuild/SOURCES
		mkdir rpmbuild/SPECS
		cp redhat/*.spec rpmbuild/SPECS/
		cp quagga*.tar.gz rpmbuild/SOURCES/

5. Edit rpm/SPECS/quagga.spec with configuration as needed
	Look at the beginning of the file and adjust the following parameters to enable
	or disable features as required:
	
		################# Quagga configure options ####################
		# with-feature options
        %{!?with_snmp:         %global  with_snmp       1 }
        %{!?with_vtysh:        %global  with_vtysh      1 }
        %{!?with_ospf_te:      %global  with_ospf_te    1 }
		%{!?with_opaque_lsa:   %global  with_opaque_lsa 1 }
		%{!?with_tcp_zebra:	   %global  with_tcp_zebra  0 }
		%{!?with_vtysh:        %global  with_vtysh      1 }
		%{!?with_pam:          %global  with_pam        1 }
        %{!?with_ospfclient:   %global  with_ospfclient 1 }
		%{!?with_ospfapi:      %global  with_ospfapi    1 }
		%{!?with_irdp:         %global  with_irdp       1 }
		%{!?with_rtadv:        %global  with_rtadv      1 }
		%{!?with_isisd:        %global  with_isisd      1 }
		%{!?with_pimd:         %global  with_pimd       1 }
		%{!?with_shared:       %global  with_shared     1 }
		%{!?with_multipath:    %global  with_multipath  64 }
		%{!?quagga_user:       %global  quagga_user     quagga }
		%{!?vty_group:         %global  vty_group       quaggavt }
		%{!?with_fpm:          %global  with_fpm        0 }
		%{!?with_watchquagga:  %global  with_watchquagga 1 }

6. Build the RPM

		rpmbuild --define "_topdir `pwd`/rpmbuild" -ba rpmbuild/SPECS/quagga.spec

DONE.

If all works correctly, then you should end up with the RPMs under `rpmbuild/RPMS`
and the Source RPM under `rpmbuild/SRPMS`


Enabling daemons after installation of the package:
---------------------------------------------------

### init.d based systems (ie CentOS 6):

1. Enable the daemons as needed to run after boot (Zebra is mandatory)
	
		chkconfig zebra on
		chkconfig ospfd on
		chkconfig ospf6d on
		chkconfig bgpd on
		... etc

2. If you want to run `watchquagga`, then configure `/etc/sysconfig/quagga` 
   and uncomment the line with the daemons for `watchquagga` to monitor,
   then enable watchquagga

		chkconfig watchquagga on

3. Check your firewall / IPtables to make sure the routing protocols are
allowed.
		
4. Start the daemons (or reboot)

		service zebra start
		service bgpd start
		service ospfd start
		... etc
			
Configuration is stored in `/etc/quagga/*.conf` files.


### systemd based systems (ie CentOS 7, Fedora 22)

1. Enable the daemons as needed to run after boot (Zebra is mandatory)
	
		systemctl enable zebra
		systemctl enable ospfd
		systemctl enable ospf6d
		systemctl enable bgpd
		... etc

	Note: There is no watchquagga on systemd based systems. Systemd contains
	the functionality of monitoring and restarting daemons.

2. Check your firewall / IPtables to make sure the routing protocols are
allowed.
		
3. Start the daemons (or reboot)

		systemctl start zebra
		systemctl start bgpd
		systemctl start ospfd
		... etc
			
Configuration is stored in `/etc/quagga/*.conf` files.

_______________________________________________
Quagga-dev mailing list
[email protected]
https://lists.quagga.net/mailman/listinfo/quagga-dev

Reply via email to