File hpn-ssh.spec of Package hpn-ssh

#
# spec file for package hpn-ssh
#
# Copyright (c) 2024, 2025 Boian Berberov
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#

%if 0%{?rhel_version} < 800 || 0%{?centos_version} < 800
%bcond_with     libfido2_cond
%else
%bcond_without  libfido2_cond
%endif

%if 0%{?rhel_version} < 700 || 0%{?centos_version} < 700
%bcond_with     krb5_cond
%bcond_with     libsystemd_cond
%else
%bcond_without  krb5_cond
%bcond_without  libsystemd_cond
%endif



Name:           hpn-ssh
Version:        18.7.1
Release:        0%{?dist}
Group:          Productivity/Networking/SSH
Summary:        OpenSSH modified for Long Fat Networks
License:        BSD-2-Clause AND MIT
URL:            https://www.psc.edu/hpn-ssh-home/

Source0:        https://github.com/rapier1/%{name}/archive/refs/tags/hpn-%{version}.tar.gz

BuildRequires:  automake

# BEGIN multibuild BuildRequires: GCC all
%if 0%{?is_opensuse}
	%if 0%{?sle_version} <= 150600
		%if 0%{?sle_version} == 150600
BuildRequires:  gcc13
BuildRequires:  gcc13-c++
%global         multi_gcc  gcc-13
%global         multi_gpp  gcc-13 -E
%global         multi_gxx  g++-13
		%else
			%if 0%{?sle_version} == 150500
BuildRequires:  gcc12
BuildRequires:  gcc12-c++
%global         multi_gcc  gcc-12
%global         multi_gpp  gcc-12 -E
%global         multi_gxx  g++-12
			%else
BuildRequires:  gcc     >= 10
BuildRequires:  gcc-c++ >= 10
%global         multi_gcc  gcc
%global         multi_gpp  gcc -E
%global         multi_gxx  g++
			%endif
		%endif
	%else
BuildRequires:  gcc
BuildRequires:  gcc-c++
%global         multi_gcc  gcc
%global         multi_gpp  gcc -E
%global         multi_gxx  g++
	%endif
%else
BuildRequires:  gcc
BuildRequires:  gcc-c++
%global         multi_gcc  gcc
%global         multi_gpp  gcc -E
%global         multi_gxx  g++
%endif
# END   multibuild BuildRequires: GCC all

BuildRequires:  pkgconfig

%if 0%{with krb5_cond}
BuildRequires:  pkgconfig(krb5)
%endif

%if 0%{with libfido2_cond}
BuildRequires:  pkgconfig(libfido2) >= 1.2.0
%endif

%if 0%{with libsystemd_cond}
BuildRequires:  pkgconfig(libsystemd)
%endif

BuildRequires:  pkgconfig(openssl) >= 1.1.1
BuildRequires:  pkgconfig(zlib)
BuildRequires:  libedit-devel
BuildRequires:  pam-devel

Requires:       %{name}-clients = %{version}-%{release}
Requires:       %{name}-server  = %{version}-%{release}

%description
HPN-SSH is a series of modifications to OpenSSH, the predominant implementation of the ssh protocol. It was originally
developed to address performance issues when using ssh on high speed long distance networks (also known as Long Fat
Networks: LFNs). By taking advantage of automatically optimized receive buffers HPN-SSH could improve performance
dramatically on these paths. Later advances include; disabling encryption after authentication to transport
non-sensitive bulk data, modifying the AES-CTR cipher to use multiple CPU cores, more detailed connection logging, and
peak throughput values in the scp progress bar.

This is a dummy package that pulls in both the client and server components.



%package common
Summary:        HPN-SSH common files
Group:          Productivity/Networking/SSH

%description common
HPN-SSH is a series of modifications to OpenSSH, the predominant implementation of the ssh protocol. It was originally
developed to address performance issues when using ssh on high speed long distance networks (also known as Long Fat
Networks: LFNs). By taking advantage of automatically optimized receive buffers HPN-SSH could improve performance
dramatically on these paths. Later advances include; disabling encryption after authentication to transport
non-sensitive bulk data, modifying the AES-CTR cipher to use multiple CPU cores, more detailed connection logging, and
peak throughput values in the scp progress bar.

This package contains common files for both client and server components.



%package clients
Summary:        HPN-SSH client applications
Group:          Productivity/Networking/SSH

Requires:       %{name}-common = %{version}-%{release}

%description clients
HPN-SSH is a series of modifications to OpenSSH, the predominant implementation of the ssh protocol. It was originally
developed to address performance issues when using ssh on high speed long distance networks (also known as Long Fat
Networks: LFNs). By taking advantage of automatically optimized receive buffers HPN-SSH could improve performance
dramatically on these paths. Later advances include; disabling encryption after authentication to transport
non-sensitive bulk data, modifying the AES-CTR cipher to use multiple CPU cores, more detailed connection logging, and
peak throughput values in the scp progress bar.

This package contains the clients applications.



%package server
Summary:        HPN-SSH server
Group:          Productivity/Networking/SSH

Requires:       %{name}-common = %{version}-%{release}

%description server
HPN-SSH is a series of modifications to OpenSSH, the predominant implementation of the ssh protocol. It was originally
developed to address performance issues when using ssh on high speed long distance networks (also known as Long Fat
Networks: LFNs). By taking advantage of automatically optimized receive buffers HPN-SSH could improve performance
dramatically on these paths. Later advances include; disabling encryption after authentication to transport
non-sensitive bulk data, modifying the AES-CTR cipher to use multiple CPU cores, more detailed connection logging, and
peak throughput values in the scp progress bar.

This package contains the server.



%prep
%setup -q -n %{name}-hpn-%{version}

# Check rundir and empty
ls -ld %{_rundir}
%if 0%{?is_opensuse} || 0%{?sle_version}
ls -ld %{_localstatedir}/lib/empty
%else
ls -ld %{_localstatedir}/empty
%endif



%build
# Set proper GCC
export CC=%{multi_gcc}
export CXX=%{multi_gxx}

autoreconf -fiv

%configure \
	--disable-strip \
	\
	--libexecdir=%{_libexecdir}/%{name} \
	--with-pid-dir=%{_rundir} \
%if 0%{?is_opensuse} || 0%{?sle_version}
	--with-privsep-path=%{_localstatedir}/lib/empty \
%endif
	\
%if 0%{with krb5_cond}
	--with-kerberos5 \
%else
	--without-kerberos5 \
%endif
	\
	--with-libedit \
	--with-mantype=doc \
	--with-pam \
	\
%if 0%{with libfido2_cond}
	--with-security-key-builtin \
%else
	--without-security-key-builtin \
%endif
	\
%if 0%{with libsystemd_cond}
	--with-systemd
%else
	--without-systemd
%endif

%make_build



%install
%make_install



%files
# hpn-ssh is split into -client and -server



%files common
# %%license add-license-file-here
# %%doc add-docs-here
%dir            %{_sysconfdir}/hpnssh
%attr(0600,root,root)   %config(noreplace)      %{_sysconfdir}/hpnssh/moduli
%attr(0755,root,root)   %{_bindir}/hpnssh-keygen
%dir            %{_libexecdir}/%{name}
%attr(0444,root,root)   %{_mandir}/man1/hpnssh-keygen.1*
%attr(0444,root,root)   %{_mandir}/man5/hpnmoduli.5*



%files clients
%attr(0644,root,root)   %config(noreplace)      %{_sysconfdir}/hpnssh/ssh_config
%attr(0755,root,root)   %{_bindir}/hpnscp
%attr(0755,root,root)   %{_bindir}/hpnsftp
%attr(0755,root,root)   %{_bindir}/hpnssh
%attr(0755,root,root)   %{_bindir}/hpnssh-add
%attr(0755,root,root)   %{_bindir}/hpnssh-agent
%attr(0755,root,root)   %{_bindir}/hpnssh-keyscan
%attr(0755,root,root)   %{_libexecdir}/%{name}/hpnssh-keysign
%attr(0755,root,root)   %{_libexecdir}/%{name}/hpnssh-pkcs11-helper
%attr(0755,root,root)   %{_libexecdir}/%{name}/hpnssh-sk-helper
%attr(0755,root,root)   %{_libexecdir}/%{name}/hpnsshd-session
%attr(0444,root,root)   %{_mandir}/man1/hpnscp.1*
%attr(0444,root,root)   %{_mandir}/man1/hpnsftp.1*
%attr(0444,root,root)   %{_mandir}/man1/hpnssh-add.1*
%attr(0444,root,root)   %{_mandir}/man1/hpnssh-agent.1*
%attr(0444,root,root)   %{_mandir}/man1/hpnssh-keyscan.1*
%attr(0444,root,root)   %{_mandir}/man1/hpnssh.1*
%attr(0444,root,root)   %{_mandir}/man5/hpnssh_config.5*
%attr(0444,root,root)   %{_mandir}/man8/hpnssh-keysign.8*
%attr(0444,root,root)   %{_mandir}/man8/hpnssh-pkcs11-helper.8*
%attr(0444,root,root)   %{_mandir}/man8/hpnssh-sk-helper.8*



%files server
%attr(0640,root,root)   %config(noreplace)      %{_sysconfdir}/hpnssh/sshd_config
%attr(0755,root,root)   %{_sbindir}/hpnsshd
%attr(0755,root,root)   %{_libexecdir}/%{name}/hpnsftp-server
%attr(0755,root,root)   %{_libexecdir}/%{name}/hpnsshd-auth
%attr(0444,root,root)   %{_mandir}/man5/hpnsshd_config.5*
%attr(0444,root,root)   %{_mandir}/man8/hpnsftp-server.8*
%attr(0444,root,root)   %{_mandir}/man8/hpnsshd.8*



%changelog

* Tue Jul 15 2025 Boian Berberov
- Added changelog for openSUSE Leap 16
openSUSE Build Service is sponsored by