Skip to content

Commit

Permalink
build: Add support for building RPMs for Fedora Linux
Browse files Browse the repository at this point in the history
Add RPM specfiles for building OVS for Fedora Linux. This
allows users of the upstream project the ability to
generate RPMs for their Open vSwitch needs.

Signed-off-by: Ralf Spenneberg <[email protected]>
[[email protected] made substantial changes including
 writing documentation]
Signed-off-by: Kyle Mestery <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
Ralf Spenneberg authored and blp committed Oct 10, 2012
1 parent 986390c commit d8fe0a6
Show file tree
Hide file tree
Showing 6 changed files with 340 additions and 1 deletion.
52 changes: 52 additions & 0 deletions INSTALL.Fedora
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
How to Install Open vSwitch on Fedora Linux
===========================================

This document describes how to build and install Open vSwitch on a Fedora
Linux host. If you want to install Open vSwitch on a generic Linux host,
see INSTALL.Linux instead.

We have tested these instructions with Fedora 16 and Fedora 17.

Building Open vSwitch for Fedora
--------------------------------

You may build from an Open vSwitch distribution tarball or from an
Open vSwitch Git tree.

Before you begin, note the RPM source directory on your version of
Fedora. On Fedora 15, it is $HOME/rpmbuild/SOURCES.

1. If you are building from an Open vSwitch Git tree, then you will
need to first create a distribution tarball by running "./boot.sh;
./configure; make dist" in the Git tree.

2. Copy the distribution tarball into the RPM source directory.

3. Unpack the distribution tarball into a temporary directory and "cd"
into the root of the distribution tarball.

4. To build Open vSwitch userspace, run:

rpmbuild -bb rhel/openvswitch-fedora.spec

This produces one RPM: "openvswitch".

5. On Fedora 15, to build the Open vSwitch kernel module, run:

rpmbuild -bb rhel/openvswitch-kmod-fedora.spec

You might have to specify a kernel version and/or variants, e.g.:

rpmbuild -bb \
-D "kversion 2.6.32-131.6.1.el6.x86_64" \
-D "kflavors default debug kdump" \
rhel/openvswitch-kmod-rhel6.spec

This produces an "kmod-openvswitch" RPM for each kernel variant,
in this example: "kmod-openvswitch", "kmod-openvswitch-debug", and
"kmod-openvswitch-kdump".

Reporting Bugs
--------------

Please report problems to [email protected].
2 changes: 2 additions & 0 deletions rhel/.gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
openvswitch-kmod-rhel5.spec
openvswitch-kmod-rhel6.spec
openvswitch-kmod-fedora.spec
openvswitch.spec
openvswitch-fedora.spec
13 changes: 12 additions & 1 deletion rhel/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,14 @@ EXTRA_DIST += \
rhel/openvswitch-kmod-rhel5.spec.in \
rhel/openvswitch-kmod-rhel6.spec \
rhel/openvswitch-kmod-rhel6.spec.in \
rhel/openvswitch-kmod-fedora.spec \
rhel/openvswitch-kmod-fedora.spec.in \
rhel/openvswitch.spec \
rhel/openvswitch.spec.in \
rhel/usr_share_openvswitch_scripts_sysconfig.template
rhel/openvswitch-fedora.spec \
rhel/openvswitch-fedora.spec.in \
rhel/usr_share_openvswitch_scripts_sysconfig.template \
rhel/usr_lib_systemd_system_openvswitch.service

update_rhel_spec = \
($(ro_shell) && sed -e 's,[@]VERSION[@],$(VERSION),g') \
Expand All @@ -32,5 +37,11 @@ $(srcdir)/rhel/openvswitch-kmod-rhel5.spec: rhel/openvswitch-kmod-rhel5.spec.in
$(srcdir)/rhel/openvswitch-kmod-rhel6.spec: rhel/openvswitch-kmod-rhel6.spec.in $(top_builddir)/config.status
$(update_rhel_spec)

$(srcdir)/rhel/openvswitch-kmod-fedora.spec: rhel/openvswitch-kmod-fedora.spec.in $(top_builddir)/config.status
$(update_rhel_spec)

$(srcdir)/rhel/openvswitch.spec: rhel/openvswitch.spec.in $(top_builddir)/config.status
$(update_rhel_spec)

$(srcdir)/rhel/openvswitch-fedora.spec: rhel/openvswitch-fedora.spec.in $(top_builddir)/config.status
$(update_rhel_spec)
197 changes: 197 additions & 0 deletions rhel/openvswitch-fedora.spec.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
# Spec file for Open vSwitch.

# Copyright (C) 2009, 2010 Nicira Networks, Inc.
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without warranty of any kind.

#%define kernel 2.6.40.4-5.fc15.x86_64

Name: openvswitch
Summary: Open vSwitch
Group: System Environment/Daemons
URL: http://www.openvswitch.org/
Version: @VERSION@

# The entire source code is ASL 2.0 except datapath/ which is GPLv2
License: ASL 2.0
Release: 1%{?dist}
Source: openvswitch-%{version}.tar.gz
#Source1: openvswitch-init
Buildroot: /tmp/openvswitch-fedora-rpm

Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units

%description
Open vSwitch provides standard network bridging functions augmented with
support for the OpenFlow protocol for remote per-flow control of
traffic.

%prep
%setup -q -n openvswitch-%{version}

%build
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --enable-ssl %{build_number}
make %{_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
install -d -m 755 $RPM_BUILD_ROOT/etc
install -d -m 755 $RPM_BUILD_ROOT/etc/openvswitch
install -p -D -m 0644 rhel/usr_lib_systemd_system_openvswitch.service \
$RPM_BUILD_ROOT%{_unitdir}/openvswitch.service
install -m 755 rhel/etc_init.d_openvswitch \
$RPM_BUILD_ROOT%{_datadir}/openvswitch/scripts/openvswitch.init
install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
install -d -m 755 $RPM_BUILD_ROOT/etc/logrotate.d
install -m 755 rhel/etc_logrotate.d_openvswitch \
$RPM_BUILD_ROOT/etc/logrotate.d/openvswitch
install -d -m 755 $RPM_BUILD_ROOT/etc/profile.d
install -m 644 vswitchd/vswitch.ovsschema \
$RPM_BUILD_ROOT/usr/share/openvswitch/vswitch.ovsschema
install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts
install -d -m 0755 $RPM_BUILD_ROOT/etc/sysconfig/network-scripts/
install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifdown-ovs \
$RPM_BUILD_ROOT/etc/sysconfig/network-scripts/ifdown-ovs
install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifup-ovs \
$RPM_BUILD_ROOT/etc/sysconfig/network-scripts/ifup-ovs
install -p -D -m 0644 rhel/usr_share_openvswitch_scripts_sysconfig.template \
$RPM_BUILD_ROOT/etc/sysconfig/openvswitch
install -d -m 755 $RPM_BUILD_ROOT/usr/share/openvswitch/scripts

install python/compat/uuid.py $RPM_BUILD_ROOT/usr/share/openvswitch/python
install python/compat/argparse.py $RPM_BUILD_ROOT/usr/share/openvswitch/python

install -d -m 755 $RPM_BUILD_ROOT/var/lib/openvswitch

%clean
rm -rf $RPM_BUILD_ROOT

%preun
# Package removal, not upgrade
systemctl stop openvswitch.service
systemctl disable openvswitch.service

%post
if test ! -e /etc/openvswitch/conf.db; then
install -d -m 755 -o root -g root /etc/openvswitch

# Create ovs-vswitchd config database
ovsdb-tool -vANY:console:emer create /etc/openvswitch/conf.db \
/usr/share/openvswitch/vswitch.ovsschema

# Create initial table in config database
ovsdb-tool -vANY:console:emer transact /etc/openvswitch/conf.db \
'[{"op": "insert", "table": "Open_vSwitch", "row": {}}]' \
> /dev/null
fi
# Initial installation
systemctl enable openvswitch.service
systemctl start openvswitch.service

%postun

%files
%defattr(-,root,root)
%config /etc/sysconfig/openvswitch
%config /etc/logrotate.d/openvswitch
%{_unitdir}/openvswitch.service
%{_datadir}/openvswitch/scripts/openvswitch.init
%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
%{_sysconfdir}/sysconfig/network-scripts/ifdown-ovs
/usr/share/openvswitch/bugtool-plugins/
/usr/share/openvswitch/python/ovs/__init__.py
/usr/share/openvswitch/python/ovs/daemon.py
/usr/share/openvswitch/python/ovs/db/__init__.py
/usr/share/openvswitch/python/ovs/db/data.py
/usr/share/openvswitch/python/ovs/db/error.py
/usr/share/openvswitch/python/ovs/db/idl.py
/usr/share/openvswitch/python/ovs/db/parser.py
/usr/share/openvswitch/python/ovs/db/schema.py
/usr/share/openvswitch/python/ovs/db/types.py
/usr/share/openvswitch/python/ovs/dirs.py
/usr/share/openvswitch/python/ovs/fatal_signal.py
/usr/share/openvswitch/python/ovs/json.py
/usr/share/openvswitch/python/ovs/jsonrpc.py
/usr/share/openvswitch/python/ovs/ovsuuid.py
/usr/share/openvswitch/python/ovs/poller.py
/usr/share/openvswitch/python/ovs/process.py
/usr/share/openvswitch/python/ovs/reconnect.py
/usr/share/openvswitch/python/ovs/socket_util.py
/usr/share/openvswitch/python/ovs/stream.py
/usr/share/openvswitch/python/ovs/timeval.py
/usr/share/openvswitch/python/ovs/util.py
/usr/share/openvswitch/python/ovs/version.py
/usr/share/openvswitch/python/ovs/unixctl/__init__.py
/usr/share/openvswitch/python/ovs/unixctl/client.py
/usr/share/openvswitch/python/ovs/unixctl/server.py
/usr/share/openvswitch/python/uuid.py
/usr/share/openvswitch/python/argparse.py
/usr/share/openvswitch/python/ovs/vlog.py
/usr/share/openvswitch/python/ovstest/__init__.py
/usr/share/openvswitch/python/ovstest/args.py
/usr/share/openvswitch/python/ovstest/rpcserver.py
/usr/share/openvswitch/python/ovstest/tcp.py
/usr/share/openvswitch/python/ovstest/udp.py
/usr/share/openvswitch/python/ovstest/util.py
/usr/share/openvswitch/python/ovstest/vswitch.py
/usr/share/openvswitch/python/ovstest/tests.py
/usr/share/openvswitch/scripts/ovs-bugtool-*
/usr/share/openvswitch/scripts/ovs-check-dead-ifs
/usr/share/openvswitch/scripts/ovs-lib
%config /usr/share/openvswitch/vswitch.ovsschema
/usr/sbin/ovs-brcompatd
/usr/sbin/ovs-bugtool
/usr/sbin/ovs-vswitchd
/usr/sbin/ovsdb-server
/usr/bin/ovs-appctl
/usr/bin/ovs-dpctl
/usr/bin/ovs-ofctl
/usr/bin/ovs-vsctl
/usr/bin/ovsdb-client
/usr/bin/ovsdb-tool
/usr/bin/ovs-controller
/usr/bin/ovs-pki
/usr/bin/ovs-test
/usr/bin/ovs-l3ping
%doc /usr/share/man/man8/ovs-controller.8.gz
%doc /usr/share/man/man8/ovs-pki.8.gz
%doc /usr/share/man/man1/ovsdb-client.1.gz
%doc /usr/share/man/man1/ovsdb-server.1.gz
%doc /usr/share/man/man1/ovsdb-tool.1.gz
%doc /usr/share/man/man5/ovs-vswitchd.conf.db.5.gz
%doc /usr/share/man/man8/ovs-appctl.8.gz
%doc /usr/share/man/man8/ovs-bugtool.8.gz
%doc /usr/share/man/man8/ovs-brcompatd.8.gz
%doc /usr/share/man/man8/ovs-dpctl.8.gz
%doc /usr/share/man/man8/ovs-ofctl.8.gz
%doc /usr/share/man/man8/ovs-parse-leaks.8.gz
%doc /usr/share/man/man8/ovs-vsctl.8.gz
%doc /usr/share/man/man8/ovs-vswitchd.8.gz
%doc /usr/share/man/man8/ovs-test.8.gz
%doc /usr/share/man/man8/ovs-l3ping.8.gz
/var/lib/openvswitch
/usr/share/openvswitch/scripts/ovs-ctl
%exclude /etc/openvswitch
%exclude /usr/bin/ovs-benchmark
%exclude /usr/bin/ovs-parse-leaks
%exclude /usr/bin/ovs-pcap
%exclude /usr/bin/ovs-tcpundump
%exclude /usr/bin/ovs-vlan-test
%exclude /usr/sbin/ovs-vlan-bug-workaround
%exclude /usr/share/man/man1/ovs-benchmark.1.gz
%exclude /usr/share/man/man1/ovs-pcap.1.gz
%exclude /usr/share/man/man1/ovs-tcpundump.1.gz
%exclude /usr/share/man/man8/ovs-ctl.8.gz
%exclude /usr/share/man/man8/ovs-vlan-bug-workaround.8.gz
%exclude /usr/share/man/man8/ovs-vlan-test.8.gz
%exclude /usr/share/openvswitch/scripts/ovs-save

%changelog
* Wed Jan 12 2011 Ralf Spenneberg <[email protected]>
- First build on F14
65 changes: 65 additions & 0 deletions rhel/openvswitch-kmod-fedora.spec.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Spec file for Open vSwitch.

# Copyright (C) 2009, 2010 Nicira Networks, Inc.
#
# Copying and distribution of this file, with or without modification,
# are permitted in any medium without royalty provided the copyright
# notice and this notice are preserved. This file is offered as-is,
# without warranty of any kind.

#%define kernel 3.1.5-1.fc16.x86_64
#define kernel %{kernel_source}
%{?kversion:%define kernel %kversion}

Name: openvswitch-kmod
Summary: Open vSwitch Kernel Modules
Group: System Environment/Daemons
URL: http://www.openvswitch.org/
Vendor: OpenSource Security Ralf Spenneberg <[email protected]>
Version: @VERSION@

# The entire source code is ASL 2.0 except datapath/ which is GPLv2
License: GPLv2
Release: 1%{?dist}
Source: openvswitch-%{version}.tar.gz
#Source1: openvswitch-init
Buildroot: /tmp/openvswitch-xen-rpm

%description
Open vSwitch provides standard network bridging functions augmented with
support for the OpenFlow protocol for remote per-flow control of
traffic. This package contains the kernel modules.

%prep
%setup -q -n openvswitch-%{version}

%build
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=%{_localstatedir} --with-linux=/lib/modules/%{kernel}/build --enable-ssl %{build_number}
make %{_smp_mflags} -C datapath/linux

%install
rm -rf $RPM_BUILD_ROOT
make -C datapath/linux modules_install

install -d -m 755 $RPM_BUILD_ROOT/lib/modules/%{kernel}/kernel/extra/openvswitch
find datapath/linux -name *.ko -exec install -m 755 \{\} $RPM_BUILD_ROOT/lib/modules/%{kernel}/kernel/extra/openvswitch \;

%clean
rm -rf $RPM_BUILD_ROOT

%preun

%post
# Ensure that modprobe will find our modules.
depmod %{kernel}

%files
%defattr(-,root,root)
/lib/modules/%{kernel}/kernel/extra/openvswitch/openvswitch.ko
/lib/modules/%{kernel}/kernel/extra/openvswitch/brcompat.ko

%changelog
* Wed Sep 21 2011 Kyle Mestery <[email protected]>
- Updated for F15
* Wed Jan 12 2011 Ralf Spenneberg <[email protected]>
- First build on F14
12 changes: 12 additions & 0 deletions rhel/usr_lib_systemd_system_openvswitch.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[Unit]
Description=Open vSwitch
After=syslog.target network.target

[Service]
Type=oneshot
ExecStart=/usr/share/openvswitch/scripts/openvswitch.init start
ExecStop=/usr/share/openvswitch/scripts/openvswitch.init stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

0 comments on commit d8fe0a6

Please sign in to comment.