forked from cockpit/cockpit
56fdb6ade8
OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:cockpit/cockpit?expand=0&rev=22
579 lines
16 KiB
RPMSpec
579 lines
16 KiB
RPMSpec
#
|
|
# This file is maintained at the following location:
|
|
# https://github.com/cockpit-project/cockpit/blob/master/tools/cockpit.spec
|
|
#
|
|
# If you are editing this file in another location, changes will likely
|
|
# be clobbered the next time an automated release is done.
|
|
#
|
|
# Check first cockpit-devel@lists.fedorahosted.org
|
|
#
|
|
%if 0%{?suse_version}
|
|
%global tag 0.79
|
|
%else
|
|
# Globals that may be defined elsewhere
|
|
# * gitcommit xxxx
|
|
# * selinux 1
|
|
# * tag 0.71
|
|
#
|
|
%endif
|
|
|
|
%define branding auto
|
|
%define rev 1
|
|
|
|
%if %{defined gitcommit}
|
|
%define extra_flags CFLAGS='-O2 -Wall -Werror -fPIC -g -DWITH_DEBUG'
|
|
%define branding default
|
|
%endif
|
|
|
|
#Defaults for our SELinux policy toggle
|
|
%if %{undefined selinux}
|
|
%if %{defined gitcommit}
|
|
%define selinux 1
|
|
%endif
|
|
%if 0%{?fedora} > 0 && 0%{?fedora} <= 21
|
|
%define selinux 1
|
|
%endif
|
|
%if 0%{?rhel}
|
|
%define selinux 1
|
|
%endif
|
|
%if 0%{?centos}
|
|
%define rhel 0
|
|
%endif
|
|
%endif
|
|
|
|
%define _hardened_build 1
|
|
|
|
%define libssh_version 0.7.1
|
|
%if 0%{?fedora} > 0 && 0%{?fedora} < 22
|
|
%define libssh_version 0.6.0
|
|
%endif
|
|
|
|
Name: cockpit
|
|
%if %{defined gitcommit}
|
|
Version: %{gitcommit}
|
|
%else
|
|
Version: %{tag}
|
|
%endif
|
|
Release: %{rev}%{?dist}
|
|
Summary: A user interface for Linux servers
|
|
|
|
%if 0%{?suse_version}
|
|
License: LGPL-2.1+
|
|
%else
|
|
License: LGPLv2+
|
|
%endif
|
|
URL: http://cockpit-project.org/
|
|
|
|
%if %{defined gitcommit}
|
|
Source0: cockpit-%{version}.tar.gz
|
|
%else
|
|
Source0: https://github.com/cockpit-project/cockpit/releases/download/%{version}/cockpit-%{version}.tar.bz2
|
|
%endif
|
|
%if 0%{?suse_version}
|
|
Source1: cockpit-suse.pam
|
|
%else
|
|
Source1: cockpit-fedora.pam
|
|
%endif
|
|
# openSUSE doesn't carry Fedora branding pixmaps
|
|
Patch1: branding-symlinks.patch
|
|
|
|
BuildRequires: pkgconfig(gio-unix-2.0)
|
|
BuildRequires: pkgconfig(json-glib-1.0)
|
|
BuildRequires: pkgconfig(polkit-agent-1) >= 0.105
|
|
BuildRequires: pam-devel
|
|
|
|
BuildRequires: autoconf automake
|
|
BuildRequires: intltool
|
|
BuildRequires: libssh-devel >= %{libssh_version}
|
|
BuildRequires: openssl-devel
|
|
BuildRequires: zlib-devel
|
|
BuildRequires: krb5-devel
|
|
BuildRequires: libxslt-devel
|
|
%if 0%{?suse_version}
|
|
BuildRequires: -post-build-checks
|
|
BuildRequires: -rpmlint-mini
|
|
BuildRequires: -rpmlint-Factory
|
|
%define extra_flags CFLAGS='$(RPM_OPT_FLAGS)'
|
|
BuildRequires: update-desktop-files
|
|
BuildRequires: docbook-xsl-stylesheets
|
|
BuildRequires: keyutils-devel
|
|
BuildRequires: dbus-1-devel
|
|
BuildRequires: libpcp-devel
|
|
%else
|
|
BuildRequires: docbook-style-xsl
|
|
BuildRequires: keyutils-libs-devel
|
|
BuildRequires: pcp-libs-devel
|
|
%endif
|
|
BuildRequires: glib-networking
|
|
BuildRequires: sed
|
|
|
|
BuildRequires: glib2-devel >= 2.37.4
|
|
BuildRequires: systemd-devel
|
|
BuildRequires: gdb
|
|
BuildRequires: glib-networking
|
|
BuildRequires: systemd
|
|
BuildRequires: polkit
|
|
|
|
|
|
%if %{defined gitcommit}
|
|
BuildRequires: npm
|
|
BuildRequires: nodejs
|
|
# For kerberos tests
|
|
BuildRequires: krb5-server
|
|
%endif
|
|
|
|
# For selinux
|
|
%if 0%{?selinux}
|
|
BuildRequires: selinux-policy-devel
|
|
BuildRequires: checkpolicy
|
|
BuildRequires: selinux-policy-doc
|
|
BuildRequires: sed
|
|
%endif
|
|
|
|
# For documentation
|
|
BuildRequires: xmlto
|
|
|
|
Requires: %{name}-bridge = %{version}-%{release}
|
|
Requires: %{name}-networkmanager = %{version}-%{release}
|
|
Requires: %{name}-ws = %{version}-%{release}
|
|
Requires: %{name}-shell = %{version}-%{release}
|
|
Requires: %{name}-storaged = %{version}-%{release}
|
|
%ifarch x86_64 armv7hl
|
|
Requires: %{name}-docker = %{version}-%{release}
|
|
%endif
|
|
%if 0%{?rhel}
|
|
Requires: %{name}-subscriptions = %{version}-%{release}
|
|
%endif
|
|
|
|
%description
|
|
Cockpit runs in a browser and can manage your network of GNU/Linux
|
|
machines.
|
|
|
|
%package bridge
|
|
Summary: Cockpit bridge server-side component
|
|
Provides: %{name}-daemon
|
|
Obsoletes: %{name}-daemon < 0.48-2
|
|
Requires: polkit
|
|
|
|
%description bridge
|
|
The Cockpit bridge component installed server side and runs commands on the
|
|
system on behalf of the web based user interface.
|
|
|
|
%package doc
|
|
Summary: Cockpit deployment and developer guide
|
|
|
|
%description doc
|
|
The Cockpit Deployment and Developer Guide shows sysadmins how to
|
|
deploy Cockpit on their machines as well as helps developers who want to
|
|
embed or extend Cockpit.
|
|
|
|
%package pcp
|
|
Summary: Cockpit PCP integration
|
|
Requires: %{name}-bridge = %{version}-%{release}
|
|
Requires: pcp
|
|
|
|
%description pcp
|
|
Cockpit support for reading PCP metrics and loading PCP archives.
|
|
|
|
%package ws
|
|
Summary: Cockpit Web Service
|
|
Requires: glib-networking
|
|
Requires: openssl
|
|
Requires: glib2 >= 2.37.4
|
|
Requires: libssh >= %{libssh_version}
|
|
Requires(post): systemd
|
|
Requires(preun): systemd
|
|
Requires(postun): systemd
|
|
|
|
%description ws
|
|
The Cockpit Web Service listens on the network, and authenticates users.
|
|
|
|
%prep
|
|
%setup -q
|
|
%if 0%{?fedora} == 20
|
|
sed -i s/unconfined_service_t/unconfined_t/g src/ws/test-server.service.in
|
|
%endif
|
|
%if 0%{?suse_version}
|
|
%patch1 -p1
|
|
%endif
|
|
|
|
%build
|
|
%if %{defined gitcommit}
|
|
env NOCONFIGURE=1 ./autogen.sh
|
|
%endif
|
|
%configure --disable-static --disable-silent-rules --with-cockpit-user=cockpit-ws --with-branding=%{branding}
|
|
make -j %{?extra_flags} all
|
|
%if 0%{?selinux}
|
|
make selinux
|
|
%endif
|
|
|
|
%check
|
|
# needs full network access, doesn't work in build service
|
|
%if 0%{?suse_version} == 0
|
|
make -j check
|
|
%end
|
|
|
|
%install
|
|
make install DESTDIR=%{buildroot}
|
|
%if %{defined gitcommit}
|
|
make install-test-assets DESTDIR=%{buildroot}
|
|
mkdir -p %{buildroot}/%{_datadir}/polkit-1/rules.d
|
|
cp src/bridge/polkit-workarounds.rules %{buildroot}/%{_datadir}/polkit-1/rules.d
|
|
%else
|
|
rm -rf %{buildroot}/%{_datadir}/%{name}/playground
|
|
%endif
|
|
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pam.d
|
|
install -p -m 644 tools/cockpit.pam $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/cockpit
|
|
rm -f %{buildroot}/%{_libdir}/cockpit/*.so
|
|
%if 0%{?suse_version}
|
|
install -d %{buildroot}%{_docdir}/%{name}
|
|
%endif
|
|
install -p -m 644 AUTHORS COPYING README.md %{buildroot}%{_docdir}/%{name}/
|
|
%if 0%{?selinux}
|
|
install -d %{buildroot}%{_datadir}/selinux/targeted
|
|
install -p -m 644 cockpit.pp %{buildroot}%{_datadir}/selinux/targeted/
|
|
%endif
|
|
|
|
# Build the package lists for resource packages
|
|
echo '%dir %{_datadir}/%{name}/base1' > shell.list
|
|
find %{buildroot}%{_datadir}/%{name}/base1 -type f >> shell.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/dashboard' >> shell.list
|
|
find %{buildroot}%{_datadir}/%{name}/dashboard -type f >> shell.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/domain' >> shell.list
|
|
find %{buildroot}%{_datadir}/%{name}/domain -type f >> shell.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/shell' >> shell.list
|
|
find %{buildroot}%{_datadir}/%{name}/shell -type f >> shell.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/system' >> shell.list
|
|
find %{buildroot}%{_datadir}/%{name}/system -type f >> shell.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/users' >> shell.list
|
|
find %{buildroot}%{_datadir}/%{name}/users -type f >> shell.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/subscriptions' > subscriptions.list
|
|
find %{buildroot}%{_datadir}/%{name}/subscriptions -type f >> subscriptions.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/storage' > storaged.list
|
|
find %{buildroot}%{_datadir}/%{name}/storage -type f >> storaged.list
|
|
|
|
echo '%dir %{_datadir}/%{name}/network' > networkmanager.list
|
|
find %{buildroot}%{_datadir}/%{name}/network -type f >> networkmanager.list
|
|
|
|
%ifarch x86_64 armv7hl
|
|
echo '%dir %{_datadir}/%{name}/docker' > docker.list
|
|
find %{buildroot}%{_datadir}/%{name}/docker -type f >> docker.list
|
|
%else
|
|
rm -rf %{buildroot}/%{_datadir}/%{name}/docker
|
|
touch docker.list
|
|
%endif
|
|
%if 0%{?suse_version}
|
|
%suse_update_desktop_file -u -r -G 'Cockpit Server Manager' %{name} System Utility
|
|
mv %{buildroot}%{_datadir}/doc/%{name} %{buildroot}%{_docdir}/%{name}/html
|
|
ln -sf /sbin/service $RPM_BUILD_ROOT/usr/sbin/rc%{name}
|
|
# no firewalld on SUSE
|
|
rm -rf %{buildroot}%{_prefix}/lib/firewalld
|
|
# PAM security
|
|
install -d %{buildroot}/%{_lib}/security
|
|
mv %{buildroot}%{_libdir}/security/pam_reauthorize.so %{buildroot}/%{_lib}/security
|
|
rm -rf %{_libdir}/security
|
|
%endif
|
|
|
|
%ifarch x86_64
|
|
echo '%dir %{_datadir}/%{name}/kubernetes' > kubernetes.list
|
|
find %{buildroot}%{_datadir}/%{name}/kubernetes -type f >> kubernetes.list
|
|
%else
|
|
rm -rf %{buildroot}/%{_datadir}/%{name}/kubernetes
|
|
touch kubernetes.list
|
|
%endif
|
|
|
|
sed -i "s|%{buildroot}||" *.list
|
|
|
|
# Build the package lists for debug package, and move debug files to installed locations
|
|
find %{buildroot}/usr/src/debug%{_datadir}/%{name} -type f -o -type l > debug.list
|
|
sed -i "s|%{buildroot}/usr/src/debug||" debug.list
|
|
tar -C %{buildroot}/usr/src/debug -cf - . | tar -C %{buildroot} -xf -
|
|
rm -rf %{buildroot}/usr/src/debug
|
|
|
|
# On RHEL subscriptions, networkmanager, and docker are part of the shell package
|
|
%if 0%{?rhel}
|
|
cat subscriptions.list docker.list networkmanager.list >> shell.list
|
|
%endif
|
|
|
|
# Only strip out debug info in non wip builds
|
|
%if %{defined gitcommit}
|
|
%define find_debug_info %{nil}
|
|
%else
|
|
%define find_debug_info %{_rpmconfigdir}/find-debuginfo.sh %{?_missing_build_ids_terminate_build:--strict-build-id} %{?_include_minidebuginfo:-m} %{?_find_debuginfo_dwz_opts} %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"
|
|
%endif
|
|
|
|
# Redefine how debug info is built to slip in our extra debug files
|
|
%define __debug_install_post \
|
|
%{find_debug_info} \
|
|
cat debug.list >> %{_builddir}/%{?buildsubdir}/debugfiles.list \
|
|
%{nil}
|
|
|
|
%files
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
%{_docdir}/%{name}/AUTHORS
|
|
%{_docdir}/%{name}/COPYING
|
|
%{_docdir}/%{name}/README.md
|
|
%dir %{_datadir}/%{name}
|
|
%{_datadir}/appdata
|
|
%{_datadir}/applications
|
|
%{_datadir}/pixmaps
|
|
|
|
%files bridge
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
%doc %{_mandir}/man1/cockpit-bridge.1.gz
|
|
%{_bindir}/cockpit-bridge
|
|
%attr(4755, -, -) %{_libexecdir}/cockpit-polkit
|
|
%if 0%{?suse_version}
|
|
/%{_lib}/security/pam_reauthorize.so
|
|
%else
|
|
%{_libdir}/security/pam_reauthorize.so
|
|
%endif
|
|
|
|
%files doc
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
%exclude %{_docdir}/%{name}/AUTHORS
|
|
%exclude %{_docdir}/%{name}/COPYING
|
|
%exclude %{_docdir}/%{name}/README.md
|
|
%{_docdir}/%{name}
|
|
|
|
%files pcp
|
|
%{_libexecdir}/cockpit-pcp
|
|
%{_localstatedir}/lib/pcp/config/pmlogconf/tools/cockpit
|
|
|
|
%post pcp
|
|
# HACK - https://bugzilla.redhat.com/show_bug.cgi?id=1185749
|
|
( cd %{_localstatedir}/lib/pcp/pmns && ./Rebuild -du )
|
|
# HACK - https://bugzilla.redhat.com/show_bug.cgi?id=1185764
|
|
# We can't use "systemctl reload-or-try-restart" since systemctl might
|
|
# be out of sync with reality.
|
|
/usr/share/pcp/lib/pmlogger reload
|
|
|
|
%files ws
|
|
%{_sbindir}/rccockpit
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
%doc %{_mandir}/man5/cockpit.conf.5.gz
|
|
%doc %{_mandir}/man8/cockpit-ws.8.gz
|
|
%doc %{_mandir}/man8/remotectl.8.gz
|
|
%doc %{_mandir}/man8/pam_ssh_add.8.gz
|
|
%config(noreplace) %{_sysconfdir}/%{name}
|
|
%config(noreplace) %{_sysconfdir}/pam.d/cockpit
|
|
%{_unitdir}/cockpit.service
|
|
%{_unitdir}/cockpit.socket
|
|
%if !0%{?suse_version}
|
|
%{_prefix}/lib/firewalld/services/cockpit.xml
|
|
%endif
|
|
%{_sbindir}/remotectl
|
|
%{_libdir}/security/pam_ssh_add.so
|
|
%{_libexecdir}/cockpit-ws
|
|
%attr(4750, root, cockpit-ws) %{_libexecdir}/cockpit-session
|
|
%if !0%{?suse_version}
|
|
%attr(775, -, wheel) %{_localstatedir}/lib/%{name}
|
|
%endif
|
|
%{_datadir}/%{name}/static
|
|
%{_datadir}/%{name}/branding
|
|
|
|
%pre ws
|
|
%if 0%{?suse_version}
|
|
%service_add_pre %{name}.service %{name}.socket
|
|
%endif
|
|
getent group cockpit-ws >/dev/null || groupadd -r cockpit-ws
|
|
getent passwd cockpit-ws >/dev/null || useradd -r -g cockpit-ws -d / -s /sbin/nologin -c "User for cockpit-ws" cockpit-ws
|
|
|
|
%post ws
|
|
%if 0%{?suse_version}
|
|
%service_add_post %{name}.service %{name}.socket
|
|
%else
|
|
%systemd_post cockpit.socket
|
|
%endif
|
|
# firewalld only partially picks up changes to its services files without this
|
|
test -f %{_bindir}/firewall-cmd && firewall-cmd --reload --quiet || true
|
|
|
|
%preun ws
|
|
%if 0%{?suse_version}
|
|
%service_del_preun %{name}.service %{name}.socket
|
|
%else
|
|
%systemd_preun cockpit.socket
|
|
%endif
|
|
|
|
%postun ws
|
|
%if 0%{?suse_version}
|
|
%service_del_postun %{name}.service %{name}.socket
|
|
%else
|
|
%systemd_postun_with_restart cockpit.socket
|
|
%endif
|
|
|
|
%package shell
|
|
Summary: Cockpit Shell user interface package
|
|
Requires: %{name}-bridge = %{version}-%{release}
|
|
Requires: shadow-utils
|
|
Requires: grep
|
|
Requires: libpwquality
|
|
Requires: /usr/bin/date
|
|
%if 0%{?rhel}
|
|
Provides: %{name}-subscriptions = %{version}-%{release}
|
|
Requires: subscription-manager >= 1.13
|
|
Provides: %{name}-networkmanager = %{version}-%{release}
|
|
Requires: NetworkManager
|
|
%ifarch x86_64 armv7hl
|
|
Provides: %{name}-docker = %{version}-%{release}
|
|
Requires: docker >= 1.3.0
|
|
%endif
|
|
%endif
|
|
Provides: %{name}-assets
|
|
Obsoletes: %{name}-assets < 0.32
|
|
BuildArch: noarch
|
|
|
|
%description shell
|
|
This package contains the Cockpit shell UI assets.
|
|
|
|
%files shell -f shell.list
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
|
|
%package storaged
|
|
Summary: Cockpit user interface for storage, using Storaged
|
|
Requires: storaged >= 2.1.1
|
|
Requires: storaged-lvm2 >= 2.1.1
|
|
Requires: device-mapper-multipath
|
|
BuildArch: noarch
|
|
|
|
%description storaged
|
|
The Cockpit component for managing storage. This package uses Storaged.
|
|
|
|
%files storaged -f storaged.list
|
|
|
|
# Conditionally built packages below
|
|
|
|
%if 0%{?rhel} == 0
|
|
|
|
%package subscriptions
|
|
Summary: Cockpit subscription user interface package
|
|
Requires: subscription-manager >= 1.13
|
|
BuildArch: noarch
|
|
|
|
%description subscriptions
|
|
This package contains the Cockpit user interface integration with local
|
|
subscription management.
|
|
|
|
%files subscriptions -f subscriptions.list
|
|
|
|
%package networkmanager
|
|
Summary: Cockpit user interface for networking, using NetworkManager
|
|
Requires: NetworkManager
|
|
BuildArch: noarch
|
|
|
|
%description networkmanager
|
|
The Cockpit component for managing networking. This package uses NetworkManager.
|
|
|
|
%files networkmanager -f networkmanager.list
|
|
|
|
%ifarch x86_64 armv7hl
|
|
|
|
%package docker
|
|
Summary: Cockpit user interface for Docker containers
|
|
Requires: docker >= 1.3.0
|
|
|
|
%description docker
|
|
The Cockpit components for interacting with Docker and user interface.
|
|
This package is not yet complete.
|
|
|
|
%files docker -f docker.list
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
|
|
%endif
|
|
|
|
%endif
|
|
|
|
%ifarch x86_64
|
|
|
|
%package kubernetes
|
|
Summary: Cockpit user interface for Kubernetes cluster
|
|
Requires: /usr/bin/kubectl
|
|
|
|
%description kubernetes
|
|
The Cockpit components for visualizing and configuring a Kubernetes
|
|
cluster. Installed on the Kubernetes master. This package is not yet complete.
|
|
|
|
%files kubernetes -f kubernetes.list
|
|
|
|
%endif
|
|
|
|
%if %{defined gitcommit}
|
|
|
|
%package test-assets
|
|
Summary: Additional stuff for testing Cockpit
|
|
Requires: openssh-clients
|
|
|
|
%description test-assets
|
|
This package contains programs and other files for testing Cockpit, and
|
|
pulls in some necessary packages via dependencies.
|
|
|
|
%files test-assets
|
|
%if 0%{?suse_version}
|
|
%defattr(-,root,root)
|
|
%endif
|
|
%{_datadir}/%{name}/playground
|
|
%{_datadir}/cockpit-test-assets
|
|
%{_datadir}/polkit-1/rules.d
|
|
%{_unitdir}/cockpit-testing.service
|
|
%{_unitdir}/cockpit-testing.socket
|
|
%{_unitdir}/test-server.service
|
|
%{_unitdir}/test-server.socket
|
|
|
|
%endif
|
|
|
|
%if 0%{?selinux}
|
|
|
|
%package selinux-policy
|
|
Summary: SELinux policy for Cockpit testing
|
|
Requires: %{name} = %{version}-%{release}
|
|
Requires: selinux-policy
|
|
Requires: selinux-policy-targeted
|
|
Requires(post): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles
|
|
Requires(postun): /usr/sbin/semodule, /sbin/restorecon, /sbin/fixfiles
|
|
BuildArch: noarch
|
|
|
|
%description selinux-policy
|
|
SELinux policy for Cockpit testing.
|
|
|
|
%files selinux-policy
|
|
%defattr(-,root,root,0755)
|
|
%{_datadir}/selinux/targeted/cockpit.pp
|
|
|
|
%post selinux-policy
|
|
/usr/sbin/semodule -s targeted -i %{_datadir}/selinux/targeted/cockpit.pp
|
|
/sbin/fixfiles -R cockpit restore || :
|
|
/sbin/fixfiles -R cockpit-test-assets restore || :
|
|
/sbin/restorecon -R %{_localstatedir}/lib/%{name}
|
|
|
|
%postun selinux-policy
|
|
if [ $1 -eq 0 ] ; then
|
|
/usr/sbin/semodule -s targeted -r cockpit &> /dev/null || :
|
|
/sbin/fixfiles -R cockpit-selinux-policy restore || :
|
|
[ -d %{_localstatedir}/lib/%{name} ] && \
|
|
/sbin/restorecon -R %{_localstatedir}/lib/%{name} &> /dev/null || :
|
|
fi
|
|
|
|
%endif
|
|
|
|
%changelog
|
|
# Upstream changelog is empty
|