#
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# RPM spec file for Traffic Ops (tm).
#

%define TRAFFIC_OPS_USER trafops
%define TRAFFIC_OPS_GROUP trafops
%define TRAFFIC_OPS_LOG_DIR /var/log/traffic_ops
%define debug_package %{nil}

Summary:          Traffic Ops UI
Name:             traffic_ops
Version:          %{traffic_control_version}
Release:          %{build_number}
License:          Apache License, Version 2.0
Group:            Base System/System Tools
Prefix:           /opt/traffic_ops
Source:           %{_sourcedir}/traffic_ops-%{version}.tgz
URL:              https://github.com/apache/trafficcontrol/
Vendor:           Apache Software Foundation
Packager:         daniel_kirkwood at Cable dot Comcast dot com
AutoReqProv:      no
Requires:         cpanminus, expat-devel, libcurl, libpcap-devel, mkisofs, tar
Requires:         openssl-devel, perl, perl-core, perl-DBD-Pg, perl-DBI, perl-Digest-SHA1
Requires:         libidn-devel, libcurl-devel, libcap
Requires:         postgresql13 >= 13.2
Requires:         perl-JSON, perl-libwww-perl, perl-Test-CPAN-Meta, perl-WWW-Curl, perl-TermReadKey, perl-Crypt-ScryptKDF
Requires:         python(abi)
Requires(pre):    /usr/sbin/useradd, /usr/bin/getent
Requires(postun): /usr/sbin/userdel

%define PACKAGEDIR %{prefix}

%description
Traffic Ops is the tool for administration (configuration and monitoring) of all components in a Traffic Control CDN.

This package provides Traffic Ops with the following plugins:
%{getenv:PLUGINS}

Built: %(date) by %{getenv: USER}

%prep

%setup

%build

set -o nounset
# copy LICENSE
cp "${TC_DIR}/LICENSE" %{_builddir}
# avoid detecting LICENSE as an unpackaged RPM file
rm LICENSE

# update the go version referenced in install_go.sh
sed -i.bak 's/__GO_VERSION__/%{go_version}/g' install/bin/install_go.sh

# copy traffic_ops_golang binary
godir=src/github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang
( mkdir -p "$godir" && \
	cd "$godir" && \
	cp "$TC_DIR"/traffic_ops/traffic_ops_golang/traffic_ops_golang .
) || { echo "Could not copy go program at $(pwd): $!"; exit 1; }

# copy TO DB admin
db_admin_dir=src/github.com/apache/trafficcontrol/traffic_ops/app/db
( mkdir -p "$db_admin_dir" && \
	cd "$db_admin_dir" && \
	cp "$TC_DIR"/traffic_ops/app/db/admin .
) || { echo "Could not copy go db admin at $(pwd): $!"; exit 1; };

# copy ToDnssecRefresh
to_dnssec_refresh_dir=src/github.com/apache/trafficcontrol/traffic_ops/app/bin/checks/DnssecRefresh
( mkdir -p "$to_dnssec_refresh_dir" && \
	cd "$to_dnssec_refresh_dir" && \
	cp "$TC_DIR"/traffic_ops/app/bin/checks/DnssecRefresh/ToDnssecRefresh .
) || { echo "Could not copy ToDnssecRefresh at $(pwd): $!"; exit 1; };

# copy TV DB reencrypt
reencrypt_dir=src/github.com/apache/trafficcontrol/traffic_ops/app/db/reencrypt
( mkdir -p "$reencrypt_dir" && \
	cd "$reencrypt_dir" && \
	cp "$TC_DIR"/traffic_ops/app/db/reencrypt/reencrypt .
) || { echo "Could not copy go db reencrypt at $(pwd): $!"; exit 1; };

# copy TV migrate
tvm_dir=src/github.com/apache/trafficcontrol/traffic_ops/app/db/traffic_vault_migrate
( mkdir -p "$tvm_dir" && \
	cd "$tvm_dir" && \
	cp "$TC_DIR"/traffic_ops/app/db/traffic_vault_migrate/traffic_vault_migrate .
) || { echo "Could not copy go db traffic_vault_migrate at $(pwd): $!"; exit 1; };

# copy TO profile converter
convert_dir=src/github.com/apache/trafficcontrol/traffic_ops/install/bin/convert_profile
( mkdir -p "$convert_dir" && \
	cd "$convert_dir" && \
	cp "$TC_DIR"/traffic_ops/install/bin/convert_profile/convert_profile .
) || { echo "Could not copy go profile converter at $(pwd): $!"; exit 1; };


%install

if [ -d $RPM_BUILD_ROOT ]; then
	%__rm -rf $RPM_BUILD_ROOT
fi

if [ ! -d $RPM_BUILD_ROOT/%{PACKAGEDIR} ]; then
	%__mkdir -p $RPM_BUILD_ROOT/%{PACKAGEDIR}
fi

%__cp -R $RPM_BUILD_DIR/traffic_ops-%{version}/* $RPM_BUILD_ROOT/%{PACKAGEDIR}
echo "go rming $RPM_BUILD_ROOT/%{PACKAGEDIR}/{pkg,src,bin}"
%__rm -rf $RPM_BUILD_ROOT/%{PACKAGEDIR}/{pkg,src,bin}

%__mkdir -p $RPM_BUILD_ROOT/var/www/files
%__cp install/data/json/osversions.json $RPM_BUILD_ROOT/var/www/files/.

# install traffic_ops_golang binary
if [ ! -d $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/bin ]; then
	%__mkdir -p $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/bin
fi

src=src/github.com/apache/trafficcontrol/traffic_ops/traffic_ops_golang
%__cp -p  "$src"/traffic_ops_golang        "${RPM_BUILD_ROOT}"/opt/traffic_ops/app/bin/traffic_ops_golang

db_admin_src=src/github.com/apache/trafficcontrol/traffic_ops/app/db
%__cp -p  "$db_admin_src"/admin           "${RPM_BUILD_ROOT}"/opt/traffic_ops/app/db/admin
%__rm $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/db/*.go
%__rm -r $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/db/trafficvault/test

to_dnssec_refresh_src=src/github.com/apache/trafficcontrol/traffic_ops/app/bin/checks/DnssecRefresh
%__cp -p  "$to_dnssec_refresh_src"/ToDnssecRefresh           "${RPM_BUILD_ROOT}"/opt/traffic_ops/app/bin/checks/DnssecRefresh/ToDnssecRefresh
%__rm $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/bin/checks/DnssecRefresh/*.go
%__rm -r $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/bin/checks/DnssecRefresh/config

reencrypt_src=src/github.com/apache/trafficcontrol/traffic_ops/app/db/reencrypt
%__cp -p  "$reencrypt_src"/reencrypt           "${RPM_BUILD_ROOT}"/opt/traffic_ops/app/db/reencrypt/reencrypt
%__rm $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/db/reencrypt/*.go

tv_migrate_src=src/github.com/apache/trafficcontrol/traffic_ops/app/db/traffic_vault_migrate
%__cp -p  "$tv_migrate_src"/traffic_vault_migrate           "${RPM_BUILD_ROOT}"/opt/traffic_ops/app/db/traffic_vault_migrate/traffic_vault_migrate
%__rm $RPM_BUILD_ROOT/%{PACKAGEDIR}/app/db/traffic_vault_migrate/*.go

convert_profile_src=src/github.com/apache/trafficcontrol/traffic_ops/install/bin/convert_profile
%__cp -p  "$convert_profile_src"/convert_profile           "${RPM_BUILD_ROOT}"/opt/traffic_ops/install/bin/convert_profile
%__rm $RPM_BUILD_ROOT/%{PACKAGEDIR}/install/bin/convert_profile/*.go

%pre
/usr/bin/getent group %{TRAFFIC_OPS_GROUP} || /usr/sbin/groupadd -r %{TRAFFIC_OPS_GROUP}
/usr/bin/getent passwd %{TRAFFIC_OPS_USER} || /usr/sbin/useradd -r -d %{PACKAGEDIR} -s /sbin/nologin %{TRAFFIC_OPS_USER} -g %{TRAFFIC_OPS_GROUP}
if [ -d %{PACKAGEDIR}/app/conf ]; then
echo -e "\nBacking up config files.\n"
if [ -f /var/tmp/traffic_ops-backup.tar ]; then
	%__rm /var/tmp/traffic_ops-backup.tar
fi
cd %{PACKAGEDIR} && tar cf /var/tmp/traffic_ops-backup.tar app/conf app/db/dbconf.yml app/local app/cpanfile.snapshot
fi

# upgrade
if [ "$1" == "2" ]; then
	systemctl stop traffic_ops
fi

%post
%__cp %{PACKAGEDIR}/etc/init.d/traffic_ops /etc/init.d/traffic_ops
%__mkdir -p /var/www/files
%__mkdir -p /etc/cron.d/
%__cp %{PACKAGEDIR}/etc/cron.d/trafops_dnssec_refresh /etc/cron.d/trafops_dnssec_refresh
%__cp %{PACKAGEDIR}/etc/cron.d/trafops_clean_isos /etc/cron.d/trafops_clean_isos
%__cp %{PACKAGEDIR}/etc/cron.d/autorenew_certs /etc/cron.d/autorenew_certs
%__cp %{PACKAGEDIR}/etc/logrotate.d/traffic_ops /etc/logrotate.d/traffic_ops
%__cp %{PACKAGEDIR}/etc/logrotate.d/traffic_ops_golang /etc/logrotate.d/traffic_ops_golang
%__cp %{PACKAGEDIR}/etc/logrotate.d/traffic_ops_access /etc/logrotate.d/traffic_ops_access
%__cp %{PACKAGEDIR}/etc/profile.d/traffic_ops.sh /etc/profile.d/traffic_ops.sh
%__chown root:root /etc/init.d/traffic_ops
%__chown root:root /etc/cron.d/trafops_dnssec_refresh
%__chown root:root /etc/cron.d/autorenew_certs
%__chown root:root /etc/cron.d/trafops_clean_isos
%__chown root:root /etc/logrotate.d/traffic_ops
%__chown root:root /etc/logrotate.d/traffic_ops_golang
%__chown root:root /etc/logrotate.d/traffic_ops_access
%__chmod +x /etc/init.d/traffic_ops
%__chmod +x %{PACKAGEDIR}/install/bin/*
/sbin/chkconfig --add traffic_ops

%__mkdir -p %{TRAFFIC_OPS_LOG_DIR}

if [ -f /var/tmp/traffic_ops-backup.tar ]; then
	echo -e "\nRestoring config files.\n"
	cd %{PACKAGEDIR} && tar xf /var/tmp/traffic_ops-backup.tar
fi

# install
if [ "$1" = "1" ]; then
	# see postinstall, the .reconfigure file triggers init().
	echo -e "\nRun /opt/traffic_ops/install/bin/postinstall from the root home directory to complete the install.\n"
fi

# upgrade
if [ "$1" == "2" ]; then
	echo -e "\n\nTo complete the update, perform the following steps:\n"
	echo -e "1. If any *.rpmnew files are in /opt/traffic_ops/...,  reconcile with any local changes\n"
	echo -e "2. Run './db/admin --env production upgrade'\n"
	echo -e "   from the /opt/traffic_ops/app directory.\n"
	echo -e "To start Traffic Ops:  systemctl start traffic_ops\n";
	echo -e "To stop Traffic Ops:   systemctl stop traffic_ops\n\n";
fi
/bin/chown -R %{TRAFFIC_OPS_USER}:%{TRAFFIC_OPS_GROUP} %{PACKAGEDIR}
/bin/chown -R %{TRAFFIC_OPS_USER}:%{TRAFFIC_OPS_GROUP} %{TRAFFIC_OPS_LOG_DIR}
setcap cap_net_bind_service=+ep %{PACKAGEDIR}/app/bin/traffic_ops_golang

%preun

if [ "$1" = "0" ]; then
	# stop service before starting the uninstall
	systemctl stop traffic_ops
fi

%postun

if [ "$1" = "0" ]; then
	# this is an uninstall
	%__rm -rf %{PACKAGEDIR}
	%__rm /etc/init.d/traffic_ops
	/usr/bin/getent passwd %{TRAFFIC_OPS_USER} || /usr/sbin/userdel %{TRAFFIC_OPS_USER}
	/usr/bin/getent group %{TRAFFIC_OPS_GROUP} || /usr/sbin/groupdel %{TRAFFIC_OPS_GROUP}
fi

%files
%license ../LICENSE
%defattr(644,root,root,755)
%attr(755,%{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/bin/traffic_ops_golang
%attr(755,%{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/script/detect10ginterfaces.pl
%attr(755,%{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/script/generate_raid0_files.pl
%config(noreplace) %attr(750,%{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) /opt/traffic_ops/app/conf
%config(noreplace) %attr(750,%{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) /opt/traffic_ops/app/db/dbconf.yml
%config(noreplace)/var/www/files/osversions.json
%attr(755, %{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/db/admin
%exclude %{PACKAGEDIR}/app/db/SQUASH.md
%exclude %{PACKAGEDIR}/app/db/squash_migrations.sh
%attr(755, %{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/install/bin/convert_profile/convert_profile
%attr(755, %{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/bin/checks/DnssecRefresh/ToDnssecRefresh
%attr(755, %{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/db/reencrypt/reencrypt
%attr(755, %{TRAFFIC_OPS_USER},%{TRAFFIC_OPS_GROUP}) %{PACKAGEDIR}/app/db/traffic_vault_migrate/traffic_vault_migrate
%{PACKAGEDIR}/etc
%{PACKAGEDIR}/app/bin/checks
%{PACKAGEDIR}/app/bin/tests
%{PACKAGEDIR}/app/db
%{PACKAGEDIR}/app/templates
%{PACKAGEDIR}/install
