procps/procps.spec

432 lines
12 KiB
RPMSpec

#
# spec file for package procps
#
# Copyright (c) 2023 SUSE LLC
#
# 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/
#
%define somajor 8
%define libname libprocps%{somajor}
%if 0%{?suse_version} < 1550
%bcond_with bin2usr
%else
%bcond_without bin2usr
%endif
%bcond_without pidof
%bcond_without nls
Name: procps
Version: 3.3.17
Release: 0
Summary: The ps utilities for /proc
License: GPL-2.0-or-later AND LGPL-2.1-or-later
Group: System/Monitoring
URL: https://sf.net/projects/procps-ng/
Source: https://downloads.sourceforge.net/project/procps-ng/Production/procps-ng-%{version}.tar.xz
#Alternate: https://gitlab.com/procps-ng/procps/-/archive/v%{version}/procps-v%{version}.tar.gz
Source1: procps-rpmlintrc
Patch0: procps-ng-3.3.9-watch.patch
Patch1: procps-v3.3.3-ia64.diff
Patch3: procps-ng-3.3.9-w-notruncate.diff
Patch7: procps-ng-3.3.8-readeof.patch
Patch8: procps-ng-3.3.10-slab.patch
Patch10: procps-ng-3.3.8-accuracy.dif
Patch11: procps-ng-3.3.10-xen.dif
Patch12: procps-ng-3.3.10-fdleak.dif
Patch13: procps-v3.3.3-columns.dif
Patch14: procps-ng-3.3.10-integer-overflow.patch
Patch15: procps-ng-3.3.10-bnc634071_procstat2.diff
Patch16: procps-ng-3.3.8-bnc634840.patch
Patch17: procps-v3.3.3-read-sysctls-also-from-boot-sysctl.conf-kernelversion.diff
Patch18: procps-ng-3.3.8-petabytes.patch
Patch19: procps-ng-3.3.10-large_pcpu.patch
Patch20: procps-ng-3.3.8-tinfo.dif
Patch21: procps-v3.3.3-pwdx.patch
# PATCH-FIX-OPENSUSE -- trifle rest of the old terabyte patch
Patch28: procps-ng-3.3.8-vmstat-terabyte.dif
# PATCH-FIX-SUSE -- Ignore scan_unevictable_pages in sysctl
Patch31: procps-ng-3.3.8-ignore-scan_unevictable_pages.patch
# PATCH-FIX-SUSE -- Avoid errno set by setlocale()
Patch32: procps-ng-3.3.10-errno.patch
# PATCH-FEATURE-SUSE -- Let upstream pmap behave similar to old suse pmap
Patch33: procps-ng-3.3.11-pmap4suse.patch
# PATCH-FIX-UPSTREAM -- bsc#1181976
Patch34: procps-3.3.17-bsc1181976.patch
# PATCH-FIX-UPSTREAM -- bsc#1195468
Patch35: bsc1195468-23da4f40.patch
# PATCH-FIX-UPSTREAM -- bsc#1214290
Patch36: CVE-2023-4016.patch
# PATCH-BACKPORT-FROM-UPSTREAM -- bsc#1181475: 'free' command reports misleading "used" value
Patch42: procps-3.3.17-library-bsc1181475.patch
Patch43: procps-3.3.17-top-bsc1181475.patch
Patch44: procps-ng-3.3.17-logind.patch
Patch45: procps-3.3.17-ignore-sysctl_conf.patch
BuildRequires: automake
BuildRequires: dejagnu
BuildRequires: diffutils
BuildRequires: libselinux-devel
BuildRequires: libtool
BuildRequires: ncurses-devel
BuildRequires: pkgconfig
BuildRequires: screen
BuildRequires: xz
BuildRequires: pkgconfig(libsystemd)
Provides: ps = %{version}-%{release}
Obsoletes: ps < %{version}-%{release}
Requires: %{libname} = %{version}-%{release}
%ifarch ia64 x86_64 ppc64 ppc %{sparc}
BuildRequires: libnuma-devel
%endif
%lang_package
%description
The procps package contains a set of system utilities that provide
system information. Procps includes ps, free, skill, snice, tload, top,
uptime, vmstat, w, and watch. The ps command displays a snapshot of
running processes. The top command provides a repetitive update of the
statuses of running processes. The free command displays the amounts of
free and used memory on your system. The skill command sends a
terminate command (or another specified signal) to a specified set of
processes. The snice command is used to change the scheduling priority
of specified processes. The tload command prints a graph of the current
system load average to a specified tty. The uptime command displays the
current time, how long the system has been running, how many users are
logged on, and system load averages for the past one, five, and fifteen
minutes. The w command displays a list of the users who are currently
logged on and what they are running. The watch program watches a
running program. The vmstat command displays virtual memory statistics
about processes, memory, paging, block I/O, traps, and CPU activity.
%package devel
Summary: Development files for procps
License: GPL-2.0-or-later AND LGPL-2.1-or-later
Group: Development/Libraries/C and C++
Requires: %{libname} = %{version}
%description devel
The procps library can be used to read informations out from /proc
the process information pseudo-file system.
This subpackage contains the header files for libprocps.
%package -n %{libname}
Summary: The procps library
License: LGPL-2.1-or-later
Group: System/Libraries
%description -n %{libname}
The procps library can be used to read informations out from /proc
the process information pseudo-file system.
%prep
%setup -q
%patch -P 0
%patch -P 1
%patch -P 3 -b .trcate
%patch -P 7 -b .rof
%patch -P 8 -b .cache
%patch -P 10 -b .acc
%patch -P 11
%patch -P 12
%patch -P 13 -b .column
%patch -P 14 -b .ovrflw
%patch -P 15
%patch -P 16
%patch -P 17 -b .sysctl
%patch -P 18
%patch -P 19
%patch -P 20
%patch -P 21
%patch -P 28
%patch -P 31 -p1
%patch -P 32
%patch -P 33 -b .pmap4us
%patch -P 34
%patch -P 35 -p1
%patch -P 36 -p0
%patch -P 42
%patch -P 43
%patch -P 44 -p1
%patch -P 45 -p1
%build
test -s .tarball-version || echo %{version} > .tarball-version
#./autogen.sh
autoreconf -fiv
major=$(sed -rn 's/^#define\s+NCURSES_VERSION_MAJOR\s+([0-9]+)/\1/p' %{_includedir}/ncurses.h)
export NCURSESW_CFLAGS="$(ncursesw${major}-config --cflags)"
export NCURSESW_LIBS="$(ncursesw${major}-config --libs)"
export LFS_CFLAGS="$(getconf LFS_CFLAGS)"
%global optflags %{optflags} -D_GNU_SOURCE $LFS_CFLAGS -DCPU_ZEROTICS -DUSE_X_COLHDR -pipe
%configure \
--disable-static \
%if !%{with nls}
--disable-nls \
%endif
--disable-rpath \
--disable-kill \
%if !%{with pidof}
--disable-pidof \
%endif
--enable-watch8bit \
--enable-shared \
--enable-skill \
--enable-w-from \
--enable-sigwinch \
--enable-wide-percent \
--enable-wide-memory \
--enable-w-from \
--enable-libselinux \
--with-pic=yes \
--with-systemd \
--with-gnu-ld \
--disable-modern-top
%make_build
LD_LIBRARY_PATH=$PWD/proc/.libs \
./pmap $$ || {
uname -a
echo /proc/$$/maps
cat /proc/$$/maps
echo /proc/$$/smaps
cat /proc/$$/smaps
exit 1
}
%install
%make_install
install -d %{buildroot}/bin
install -d %{buildroot}/sbin
# clean unwanted files (e.g. coreutils)
rm -f %{buildroot}%{_bindir}/kill
rm -f %{buildroot}%{_bindir}/uptime
rm -f %{buildroot}%{_mandir}/man1/kill.1
rm -f %{buildroot}%{_mandir}/*/man1/kill.1
rm -f %{buildroot}%{_mandir}/man1/uptime.1
rm -f %{buildroot}%{_mandir}/*/man1/uptime.1
find %{buildroot} -type f -name "*.la" -delete -print
rm -rf %{buildroot}%{_datadir}/doc/procps-ng
if cmp -s %{buildroot}%{_mandir}/man1/procps.1 %{buildroot}%{_mandir}/man1/ps.1
then
rm -vf %{buildroot}%{_mandir}/man1/procps.1
(cat > %{buildroot}%{_mandir}/man1/procps.1)<<-'EOF'
.so man1/ps.1
EOF
fi
%if %{with bin2usr}
#
# Identical binaries
#
if cmp -s %{buildroot}/%{_bindir}/pgrep %{buildroot}/%{_bindir}/pkill
then
rm -vf %{buildroot}/%{_bindir}/pkill
pushd %{buildroot}/%{_bindir}
ln pgrep pkill
popd
fi
if cmp -s %{buildroot}/%{_bindir}/snice %{buildroot}/%{_bindir}/skill
then
rm -vf %{buildroot}/%{_bindir}/skill
pushd %{buildroot}/%{_bindir}
ln snice skill
popd
fi
%if 0%{?suse_version} < 1550
ln -s %{_bindir}/ps %{buildroot}/bin/
ln -s %{_bindir}/pgrep %{buildroot}/bin/
ln -s %{_bindir}/pkill %{buildroot}/bin/
ln -s %{_sbindir}/sysctl %{buildroot}/sbin/
%endif
%else
mv %{buildroot}%{_bindir}/ps %{buildroot}/bin/
mv %{buildroot}%{_bindir}/pgrep %{buildroot}/bin/
mv %{buildroot}%{_bindir}/pkill %{buildroot}/bin/
mv %{buildroot}%{_sbindir}/sysctl %{buildroot}/sbin/
#
# Identical binaries
#
if cmp -s %{buildroot}/bin/pgrep %{buildroot}/bin/pkill
then
rm -vf %{buildroot}/bin/pkill
pushd %{buildroot}/bin
ln pgrep pkill
popd
fi
if cmp -s %{buildroot}/%{_bindir}/snice %{buildroot}/%{_bindir}/skill
then
rm -vf %{buildroot}/%{_bindir}/skill
pushd %{buildroot}/%{_bindir}
ln snice skill
popd
fi
ln -s /bin/ps %{buildroot}%{_bindir}/ps
ln -s /bin/pgrep %{buildroot}%{_bindir}/pgrep
ln -s /bin/pkill %{buildroot}%{_bindir}/pkill
ln -s /sbin/sysctl %{buildroot}%{_sbindir}/sysctl
%endif
%find_lang procps-ng --with-man --all-name
%post -n %{libname} -p /sbin/ldconfig
%postun -n %{libname} -p /sbin/ldconfig
%check
#
# Skip w test as there is no valid utmp
#
rm -rvf testsuite/w.test
#
# Provide a tty for testing
#
LANG=POSIX
LC_ALL=$LANG
unset LC_CTYPE
SCREENDIR=$(mktemp -d ${PWD}/screen.XXXXXX) || exit 1
SCREENRC=${SCREENDIR}/bash
export SCREENRC SCREENDIR
exec 0< /dev/null
SCREENLOG=${SCREENDIR}/log
cat > $SCREENRC<<-EOF
deflogin off
deflog on
logfile $SCREENLOG
logfile flush 1
logtstamp off
log on
setsid on
scrollback 0
silence on
utf8 on
EOF
TMPDIR=$(mktemp -d /tmp/bash.XXXXXXXXXX) || exit 1
> $SCREENLOG
tail -q -s 0.5 -f $SCREENLOG & pid=$!
env HOME=$PWD TERM=$TERM TMPDIR=$TMPDIR SCREENRC=$SCREENRC SCREENDIR=$SCREENDIR \
screen -D -m make check
kill -TERM $pid
error=no
for log in test-suite.log testsuite/*.log
do
if grep -E '^(XFAIL|FAIL|ERROR):' $log
then
cat $log
error=yes
fi
done
%if 0%{?qemu_user_space_build}
if test -x /usr/bin/qemu-%_build_arch
then
echo Do not fail as pgrep as well as ps will find unexpected qemu-%_build_arch on command lines
exit 0
fi
%endif
test $error = no || exit 1
%files
%defattr (-,root,root,755)
%license COPYING COPYING.LIB
%doc NEWS Documentation/bugs.md Documentation/FAQ
%if %{with bin2usr}
%if 0%{?suse_version} < 1550
%verify(link) /bin/ps
%verify(link) /bin/pgrep
%verify(link) /bin/pkill
%verify(link) /sbin/sysctl
%endif
%{_bindir}/ps
%{_bindir}/pgrep
%{_bindir}/pkill
%{_sbindir}/sysctl
%else
/bin/ps
/bin/pgrep
/bin/pkill
/sbin/sysctl
%verify(link) %{_bindir}/ps
%verify(link) %{_bindir}/pgrep
%verify(link) %{_bindir}/pkill
%verify(link) %{_sbindir}/sysctl
%endif
%{_bindir}/free
%if %{with pidof}
%{_bindir}/pidof
%endif
%{_bindir}/pmap
%{_bindir}/pwait
%{_bindir}/pwdx
%{_bindir}/skill
%{_bindir}/slabtop
%{_bindir}/snice
%{_bindir}/tload
%{_bindir}/top
%{_bindir}/vmstat
%{_bindir}/w
%{_bindir}/watch
%{_mandir}/man1/free.1%{?ext_man}
%{_mandir}/man1/pgrep.1%{?ext_man}
%if %{with pidof}
%{_mandir}/man1/pidof.1%{?ext_man}
%endif
%{_mandir}/man1/pkill.1%{?ext_man}
%{_mandir}/man1/pmap.1%{?ext_man}
%{_mandir}/man1/procps.1%{?ext_man}
%{_mandir}/man1/ps.1%{?ext_man}
%{_mandir}/man1/pwait.1%{?ext_man}
%{_mandir}/man1/pwdx.1%{?ext_man}
%{_mandir}/man1/skill.1%{?ext_man}
%{_mandir}/man1/slabtop.1%{?ext_man}
%{_mandir}/man1/snice.1%{?ext_man}
%{_mandir}/man1/tload.1%{?ext_man}
%{_mandir}/man1/top.1%{?ext_man}
%{_mandir}/man1/w.1%{?ext_man}
%{_mandir}/man1/watch.1%{?ext_man}
%{_mandir}/man5/sysctl.conf.5%{?ext_man}
%{_mandir}/man8/vmstat.8%{?ext_man}
%{_mandir}/man8/sysctl.8%{?ext_man}
%files devel
%defattr (-,root,root,755)
%dir %{_includedir}/proc
%{_includedir}/proc/alloc.h
%{_includedir}/proc/devname.h
%{_includedir}/proc/escape.h
%{_includedir}/proc/numa.h
%{_includedir}/proc/procps.h
%{_includedir}/proc/pwcache.h
%{_includedir}/proc/readproc.h
%{_includedir}/proc/sig.h
%{_includedir}/proc/slab.h
%{_includedir}/proc/sysinfo.h
%{_includedir}/proc/version.h
%{_includedir}/proc/wchan.h
%{_includedir}/proc/whattime.h
%{_libdir}/libprocps.so
%{_libdir}/pkgconfig/libprocps.pc
%{_mandir}/man3/openproc.3%{?ext_man}
%{_mandir}/man3/readproc.3%{?ext_man}
%{_mandir}/man3/readproctab.3%{?ext_man}
%files -n %{libname}
%defattr (-,root,root,755)
%{_libdir}/libprocps.so.%{somajor}*
%files lang -f procps-ng.lang
%if 0%{?suse_version} < 1550
%dir %{_mandir}/uk/
%endif
%changelog