#
# pmd spec file
#

%define _mech_file /etc/gss/mech
%define _mech_id 1.3.6.1.4.1.6876.11711.2.1.2
%define _python3_sitearch %(python3 -c "from distutils.sysconfig import get_python_lib; import sys; sys.stdout.write(get_python_lib(1))")

Summary:        Photon Management Daemon
Name:           pmd
Version:        0.0.5
Release:        6%{?dist}
Vendor:         VMware, Inc.
Distribution:   Photon
License:        Apache 2.0
URL:            https://www.github.com/vmware/pmd
Group:          Applications/System
Requires:       copenapi
Requires:       c-rest-engine >= 1.1
Requires:       jansson
Requires:       likewise-open >= 6.2.9
Requires:       netmgmt
Requires:       systemd
Requires:       tdnf >= 2.2.0
Requires:       lightwave-client-libs
Requires:       %{name}-libs = %{version}-%{release}
Requires:       shadow
BuildRequires:  copenapi-devel
BuildRequires:  c-rest-engine-devel >= 1.1
BuildRequires:  curl-devel
BuildRequires:  libsolv-devel
BuildRequires:  jansson-devel
BuildRequires:  krb5-devel
BuildRequires:  likewise-open-devel >= 6.2.9
BuildRequires:  netmgmt-cli-devel
BuildRequires:  netmgmt-devel
BuildRequires:  tdnf-devel >= 1.2.0
BuildRequires:  lightwave-devel
Source0:        %{name}-%{version}-3.tar.gz
%define sha1    pmd=fe9b4b81410497d209fc4b6efb9574a049557b25
Patch0:         pmd-update-to-c-rest-engine-1.1.patch

%description
Photon Management Daemon

%package libs
Summary: photon management daemon libs
Requires: likewise-open >= 6.2.0

%description libs
photon management daemon libs used by server and clients

%package cli
Summary: photon management daemon cmd line cli
Requires: %{name}-libs = %{version}-%{release}
Requires: likewise-open >= 6.2.0
Requires: lightwave-client-libs

%description cli
photon management daemon cmd line cli

%package devel
Summary: photon management daemon client devel
Group: Development/Libraries

%description devel
photon management daemon client devel

%package python2
Summary: Python2 bindings for photon management daemon
Group: Development/Libraries
Requires: python2 >= 2.7
Requires: %{name}-cli = %{version}-%{release}
BuildRequires: python2-devel >= 2.7

%description python2
Python2 bindings for photon management daemon

%package python3
Summary: Python3 bindings for photon management daemon
Group: Development/Libraries
Requires: python3 >= 3.5
Requires: %{name}-cli = %{version}-%{release}
BuildRequires: python3-devel >= 3.5

%description python3
Python3 bindings for photon management daemon

%prep
%setup -q
%patch0 -p1

%build
sed -i 's/pmd, 0.0.1/pmd, 0.0.5/' configure.ac
sed -i 's,-lcrypto,-lcrypto -lgssapi_krb5 @top_builddir@/client/libpmdclient.la,' server/Makefile.am
autoreconf -mif
./configure \
    --prefix=%{_prefix} \
    --bindir=%{_bindir} \
    --libdir=%{_libdir} \
    --sysconfdir=/etc \
    --with-likewise=/opt/likewise \
    --enable-python=no \
    --disable-static
make

pushd python
python2 setup.py build
python3 setup.py build
popd

%install
cd $RPM_BUILD_DIR/%{name}-%{version}
make DESTDIR=%{buildroot} install
rm -f %{buildroot}%{_libdir}/*.la

pushd python
python2 setup.py install --skip-build --root %{buildroot}
rm -f %{buildroot}%{python_sitearch}/pmd.so
python3 setup.py install --skip-build --root %{buildroot}
popd

install -d $RPM_BUILD_ROOT/var/log
install -d $RPM_BUILD_ROOT/var/opt/pmd/log
ln -sfv /var/opt/pmd/log $RPM_BUILD_ROOT/var/log/pmd
install -vdm755 %{buildroot}%{_unitdir}
install -D -m 444 pmd.service %{buildroot}%{_unitdir}
install -D -m 444 pmdprivsepd.service %{buildroot}%{_unitdir}
install -D -m 444 conf/restapispec.json %{buildroot}/etc/pmd/restapispec.json
install -D -m 444 conf/api_sddl.conf %{buildroot}/etc/pmd/api_sddl.conf
install -D -m 444 conf/restconfig.txt %{buildroot}/etc/pmd/restconfig.txt
install -d -m 0755 %{buildroot}/usr/lib/tmpfiles.d/
install -m 0644 conf/pmd-tmpfiles.conf %{buildroot}/usr/lib/tmpfiles.d/%{name}.conf

# Pre-install
%pre
if ! getent group %{name} >/dev/null; then
    /sbin/groupadd -r %{name}
fi
if ! getent passwd %{name} >/dev/null; then
    /sbin/useradd -g %{name} %{name} -s /sbin/nologin
fi

# Post-install
%post

    # First argument is 1 => New Installation
    # First argument is 2 => Upgrade
    sed -i "s/IPADDRESS_MARKER/`ifconfig eth0 | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'`/g" /etc/pmd/restapispec.json
    /sbin/ldconfig
    %systemd_post pmd.service
    %systemd_post pmdprivsepd.service

    if [ ! -d "%{_libdir}/gss" ] ; then
        mkdir %{_libdir}/gss
    fi

    # Add libgssapi_unix.so to GSSAPI plugin directory
    if [ ! -h %{_libdir}/gss/libgssapi_unix.so ]; then
        /bin/ln -sf %{_libdir}/libgssapi_unix.so %{_libdir}/gss/libgssapi_unix.so
    fi
    # Add gssapi_unix plugin configuration to GSS mech file
    if [ -f "%{_mech_file}" ]; then
        if [ `grep -c "%{_mech_id}" "%{_mech_file}"` -lt 1 ]; then
            echo "unix %{_mech_id} libgssapi_unix.so" >> "%{_mech_file}"
        fi
    fi

    if [ "$1" = 1 ]; then
      openssl req \
          -new \
          -newkey rsa:2048 \
          -days 365 \
          -nodes \
          -x509 \
          -subj "/C=US/ST=WA/L=Bellevue/O=vmware/CN=photon-pmd-default" \
          -keyout /etc/pmd/server.key \
          -out /etc/pmd/server.crt
      chmod 0400 /etc/pmd/server.key
      chown %{name} /etc/pmd/server.key
      openssl genrsa -out /etc/pmd/privsep_priv.key 2048
      openssl rsa -in /etc/pmd/privsep_priv.key -pubout > /etc/pmd/privsep_pub.key
      chmod 0400 /etc/pmd/privsep*.key
      chown %{name} /etc/pmd/privsep_pub.key
    fi
    %tmpfiles_create %_tmpfilesdir/%{name}.conf

# Pre-uninstall
%preun

    # First argument is 0 => Uninstall
    # First argument is 1 => Upgrade
    %systemd_preun pmd.service
    %systemd_preun pmdprivsepd.service
if [ "$1" = 0 ]; then
    if [ ! -e %{_bindir}/pmd-cli ]; then
        # Cleanup GSSAPI UNIX symlink
        if [ -h %{_libdir}/gss/libgssapi_unix.so ]; then
            rm -f %{_libdir}/gss/libgssapi_unix.so
        fi
        # Remove GSSAPI SRP plugin configuration from GSS mech file
        if [ -f "%{_mech_file}" ]; then
            if [ `grep -c  "%{_mech_id}" "%{_mech_file}"` -gt 0 ]; then
                cat "%{_mech_file}" | sed '/%{_mech_id}/d' > "/tmp/mech-$$"
                if [ -s /tmp/mech-$$ ]; then
                    mv "/tmp/mech-$$" "%{_mech_file}"
                fi
            fi
        fi
    fi
fi


# Post-uninstall
%postun

    /sbin/ldconfig

    %systemd_postun_with_restart pmd.service
    %systemd_postun_with_restart pmdprivsepd.service

    # First argument is 0 => Uninstall
    # First argument is 1 => Upgrade
if [ $1 -eq 0 ] ; then
    if getent passwd %{name} >/dev/null; then
        /sbin/userdel %{name}
    fi
    if getent group %{name} >/dev/null; then
        /sbin/groupdel %{name}
    fi
fi

# Post pmd-cli
%post cli
    if [ ! -d "%{_libdir}/gss" ] ; then
        mkdir %{_libdir}/gss
    fi

    # Add libgssapi_unix.so to GSSAPI plugin directory
    if [ ! -h %{_libdir}/gss/libgssapi_unix.so ]; then
        /bin/ln -sf %{_libdir}/libgssapi_unix.so %{_libdir}/gss/libgssapi_unix.so
    fi
    # Add gssapi_unix plugin configuration to GSS mech file
    if [ -f "%{_mech_file}" ]; then
        if [ `grep -c "%{_mech_id}" "%{_mech_file}"` -lt 1 ]; then
            echo "unix %{_mech_id} libgssapi_unix.so" >> "%{_mech_file}"
        fi
    fi

# Pre-uninstall cli
%preun cli

    # First argument is 0 => Uninstall
    # First argument is 1 => Upgrade

if [ "$1" = 0 ]; then
    if [ ! -e %{_bindir}/pmd ]; then
        # Cleanup GSSAPI UNIX symlink
        if [ -h %{_libdir}/gss/libgssapi_unix.so ]; then
            rm -f %{_libdir}/gss/libgssapi_unix.so
        fi
        # Remove GSSAPI SRP plugin configuration from GSS mech file
        if [ -f "%{_mech_file}" ]; then
            if [ `grep -c  "%{_mech_id}" "%{_mech_file}"` -gt 0 ]; then
                cat "%{_mech_file}" | sed '/%{_mech_id}/d' > "/tmp/mech-$$"
                if [ -s /tmp/mech-$$ ]; then
                    mv "/tmp/mech-$$" "%{_mech_file}"
                fi
            fi
        fi
    fi
fi
# Post-uninstall
%postun cli
    /sbin/ldconfig

%clean
rm -rf %{buildroot}/*

%files
    %defattr(-,root,root,0755)
    %{_bindir}/pmd
    %{_bindir}/pmdprivsepd
    /lib/systemd/system/pmd.service
    /lib/systemd/system/pmdprivsepd.service
    /etc/pmd/pmd.conf
    /etc/pmd/api_sddl.conf
    /etc/pmd/restapispec.json
    /etc/pmd/restconfig.txt
    %attr(0766, %{name}, %{name}) %dir /var/opt/%{name}/log
    %attr(0766, %{name}, %{name}) /var/log/%{name}
    %_tmpfilesdir/%{name}.conf

%files libs
    %{_libdir}/libpmdclient.so*

%files cli
    %{_bindir}/pmd-cli

%files devel
    %{_includedir}/pmd/*.h
    %{_libdir}/pkgconfig/pmdclient.pc

%files python2
    %{python_sitearch}/%{name}/
    %{python_sitearch}/%{name}_python-*.egg-info

%files python3
    %{_python3_sitearch}/%{name}/
    %{_python3_sitearch}/%{name}_python-*.egg-info

%changelog
*   Thu Mar 01 2018 Xiaolin Li <xiaolinl@vmware.com> 0.0.5-6
-   Build with tdnf 2.0.0.
*   Thu Dec 28 2017 Divya Thaluru <dthaluru@vmware.com>  0.0.5-5
-   Fixed the log file directory structure
*   Thu Nov 30 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.5-4
-   update to use c-rest-engine-1.11
*   Tue Oct 24 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.5-3
-   Bug fixes and net commands fixes
*   Sat Sep 30 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.5-2
-   Apply patch for local rpc connection separation
-   patch for couple of minor coverity scan fixes.
*   Thu Sep 28 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.5-1
-   Update to version 0.0.5
*   Sat Sep 23 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.4-1
-   Add privilege separation
*   Tue Aug 01 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.3-1
-   Fix REST param handling, CLI locale.
*   Thu Jun 01 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.2-1
-   Fix python3 string issues.
*   Tue May 23 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.1-2
-   Changes for lightwave dependencies
*   Thu May 04 2017 Priyesh Padmavilasom <ppadmavilasom@vmware.com> 0.0.1-1
-   Initial build.  First version