diff --git a/.cockpit.metadata b/.cockpit.metadata
index c26a83e..f72a870 100644
--- a/.cockpit.metadata
+++ b/.cockpit.metadata
@@ -1 +1 @@
-080f30aef1edfcca7449bf79381b3e43d01967f6 SOURCES/cockpit-251.2.tar.xz
+91f1f6be0b02466a8e784667e6f161e5e130844d SOURCES/cockpit-258.tar.xz
diff --git a/.gitignore b/.gitignore
index 39cfbee..bf9f959 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/cockpit-251.2.tar.xz
+SOURCES/cockpit-258.tar.xz
diff --git a/SPECS/cockpit.spec b/SPECS/cockpit.spec
index 94c8759..f8a87c5 100644
--- a/SPECS/cockpit.spec
+++ b/SPECS/cockpit.spec
@@ -1,5 +1,5 @@
 # This spec file has been automatically updated
-Version:        251.2
+Version:        258
 Release: 1%{?dist}
 #
 # Copyright (C) 2014-2020 Red Hat, Inc.
@@ -81,8 +81,8 @@ Source0:        https://github.com/cockpit-project/cockpit/releases/download/%{v
 %define build_optional 1
 %endif
 
-# Ship custom SELinux policy only in Fedora and RHEL-9 onward
-%if 0%{?rhel} >= 9 || 0%{?fedora}
+# Ship custom SELinux policy (but not for cockpit-appstream)
+%if "%{name}" == "cockpit"
 %define selinuxtype targeted
 %define with_selinux 1
 %define selinux_policy_version %(rpm --quiet -q selinux-policy && rpm -q --queryformat "%{V}-%{R}" selinux-policy || echo 1)
@@ -146,7 +146,7 @@ Requires: cockpit-system
 
 # Optional components
 Recommends: (cockpit-storaged if udisks2)
-Recommends: cockpit-packagekit
+Recommends: (cockpit-packagekit if dnf)
 Suggests: cockpit-pcp
 
 %if 0%{?rhel} == 0
@@ -215,12 +215,14 @@ install -D -p -m 644 AUTHORS COPYING README.md %{buildroot}%{_docdir}/cockpit/
 %endif
 
 # only ship deprecated PatternFly API for stable releases
-%if 0%{?fedora} <= 33 || 0%{?rhel} <= 8
+%if 0%{?rhel} <= 8
     ln -s cockpit.css.gz %{buildroot}/%{_datadir}/cockpit/base1/patternfly.css.gz
 %endif
 
 # Build the package lists for resource packages
-echo '%dir %{_datadir}/cockpit/base1' > base.list
+# cockpit-bridge is the basic dependency for all cockpit-* packages, so centrally own the page directory
+echo '%dir %{_datadir}/cockpit' > base.list
+echo '%dir %{_datadir}/cockpit/base1' >> base.list
 echo '%dir %{_datadir}/cockpit/base1/fonts' >> base.list
 find %{buildroot}%{_datadir}/cockpit/base1 -type f -o -type l >> base.list
 echo '%{_sysconfdir}/cockpit/machines.d' >> base.list
@@ -287,11 +289,11 @@ done
 for lib in systemd tmpfiles.d; do
     rm -r %{buildroot}/%{_prefix}/%{__lib}/$lib
 done
-for libexec in cockpit-askpass cockpit-session cockpit-ws cockpit-tls cockpit-wsinstance-factory cockpit-desktop cockpit-certificate-helper cockpit-certificate-ensure; do
+for libexec in cockpit-askpass cockpit-session cockpit-ws cockpit-tls cockpit-wsinstance-factory cockpit-client cockpit-client.ui cockpit-desktop cockpit-certificate-helper cockpit-certificate-ensure; do
     rm %{buildroot}/%{_libexecdir}/$libexec
 done
 rm -r %{buildroot}/%{_libdir}/security %{buildroot}/%{_sysconfdir}/pam.d %{buildroot}/%{_sysconfdir}/motd.d %{buildroot}/%{_sysconfdir}/issue.d
-rm %{buildroot}/usr/bin/cockpit-bridge %{buildroot}/usr/sbin/remotectl
+rm %{buildroot}/usr/bin/cockpit-bridge
 rm -f %{buildroot}%{_libexecdir}/cockpit-ssh
 rm -f %{buildroot}%{_datadir}/metainfo/cockpit.appdata.xml
 %endif
@@ -356,7 +358,6 @@ troubleshooting, interactive command-line sessions, and more.
 %{_docdir}/cockpit/AUTHORS
 %{_docdir}/cockpit/COPYING
 %{_docdir}/cockpit/README.md
-%dir %{_datadir}/cockpit
 %{_datadir}/metainfo/cockpit.appdata.xml
 %{_datadir}/pixmaps/cockpit.png
 %doc %{_mandir}/man1/cockpit.1.gz
@@ -428,14 +429,10 @@ Provides: cockpit-selinux = %{version}-%{release}
 Provides: cockpit-sosreport = %{version}-%{release}
 Requires: sos
 %endif
-%if 0%{?fedora} >= 29
-# 0.7.0 (actually) supports task cancellation.
-# 0.7.1 fixes tasks never announcing completion.
-Recommends: (reportd >= 0.7.1 if abrt)
+%if 0%{?fedora}
+Recommends: (reportd if abrt)
 %endif
 # NPM modules which are also available as packages
-Provides: bundled(js-jquery) = 3.5.1
-Provides: bundled(xstatic-bootstrap-datepicker-common) = 1.9.0
 Provides: bundled(xstatic-patternfly-common) = 3.59.5
 
 %description system
@@ -457,6 +454,11 @@ Conflicts: firewalld < 0.6.0-1
 Recommends: sscg >= 2.3
 Recommends: system-logos
 Suggests: sssd-dbus
+# for cockpit-desktop
+Suggests: python3
+
+# prevent hard python3 dependency for cockpit-desktop, it falls back to other browsers
+%global __requires_exclude_from ^%{_libexecdir}/cockpit-client$
 
 %description ws
 The Cockpit Web Service listens on the network, and authenticates users.
@@ -469,7 +471,6 @@ authentication via sssd/FreeIPA.
 %doc %{_mandir}/man5/cockpit.conf.5.gz
 %doc %{_mandir}/man8/cockpit-ws.8.gz
 %doc %{_mandir}/man8/cockpit-tls.8.gz
-%doc %{_mandir}/man8/remotectl.8.gz
 %doc %{_mandir}/man8/pam_ssh_add.8.gz
 %dir %{_sysconfdir}/cockpit
 %config(noreplace) %{_sysconfdir}/cockpit/ws-certs.d
@@ -493,12 +494,13 @@ authentication via sssd/FreeIPA.
 %{_unitdir}/cockpit-wsinstance-https@.service
 %{_unitdir}/system-cockpithttps.slice
 %{_prefix}/%{__lib}/tmpfiles.d/cockpit-tempfiles.conf
-%{_sbindir}/remotectl
 %{pamdir}/pam_ssh_add.so
 %{pamdir}/pam_cockpit_cert.so
 %{_libexecdir}/cockpit-ws
 %{_libexecdir}/cockpit-wsinstance-factory
 %{_libexecdir}/cockpit-tls
+%{_libexecdir}/cockpit-client
+%{_libexecdir}/cockpit-client.ui
 %{_libexecdir}/cockpit-desktop
 %{_libexecdir}/cockpit-certificate-ensure
 %{_libexecdir}/cockpit-certificate-helper
@@ -526,7 +528,7 @@ fi
 
 %post ws
 %if 0%{?with_selinux}
-if %{_sbindir}/selinuxenabled 2>/dev/null; then
+if [ -x %{_sbindir}/selinuxenabled ]; then
     %selinux_modules_install -s %{selinuxtype} %{_datadir}/selinux/packages/%{selinuxtype}/%{name}.pp.bz2
     %selinux_relabel_post -s %{selinuxtype}
 fi
@@ -557,7 +559,7 @@ fi
 
 %postun ws
 %if 0%{?with_selinux}
-if %{_sbindir}/selinuxenabled 2>/dev/null; then
+if [ -x %{_sbindir}/selinuxenabled ]; then
     %selinux_modules_uninstall -s %{selinuxtype} %{name}
     %selinux_relabel_post -s %{selinuxtype}
 fi
@@ -718,15 +720,42 @@ via PackageKit.
 
 # The changelog is automatically generated and merged
 %changelog
-* Thu Sep 09 2021 Martin Pitt <mpitt@redhat.com> - 251.2-1
-- Translation updates (rhbz#1962078)
-
-* Mon Aug 23 2021 Matej Marusak <mmarusak@redhat.com> - 251-1
-- Logs: Fix layout in Asian languages (rhbz#1989888)
-
-* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 250-2
-- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
-  Related: rhbz#1991688
+* Wed Nov 24 2021 Allison Karlitskaya <allison.karlitskaya@redhat.com> - 258-1
+- Tweak login screen UI
+- Use official VDO LVM API
+- Add cockpit-client, to be bundled as a flatpak
+
+* Wed Nov 10 2021 Katerina Koukiou <kkoukiou@redhat.com> - 257-1
+- Support for reading TLS certificates with any permissions
+- cockpit-ws no longer supports merged certificates
+- Services: Show user-owned systemd units
+
+* Wed Oct 27 2021 Jelle van der Waa <jvanderwaa@redhat.com> - 256-1
+- Clean up old self-signed certificates
+- Storage: Add support for Stratis
+
+* Fri Oct 15 2021 Martin Pitt <mpitt@redhat.com> - 255.1-1
+- Fix realmd join dialog crash if given address is not the domain name
+
+* Wed Oct 13 2021 Martin Pitt <mpitt@redhat.com> - 255-1
+- FreeIPA-issued webserver certificates get auto-renewed
+
+* Wed Sep 29 2021 Matej Marusak <mmarusak@redhat.com> - 254-1
+- Overview: Move last login to Health Card
+- Webserver: Restrict frame embedding to same origin
+- Login: Add Arch Linux branding
+- Users: Add login history
+
+* Wed Sep 15 2021 Katerina Koukiou <kkoukiou@redhat.com> - 253-1
+- SELinux: Dismiss multiple alerts
+
+* Wed Sep 01 2021 Simon Kobyda <skobyda@redhat.com> - 252-1
+- Webserver: Drop remotectl utility
+- Shell: Show package version in ‘About web console’ modal
+- Storage: Encryption is presented as a property of a Filesystem
+
+* Wed Aug 18 2021 Marius Vollmer <mvollmer@redhat.com> - 251-1
+- Update to upstream 251 release
 
 * Wed Aug 04 2021 Martin Pitt <mpitt@redhat.com> - 250-1
 - Shell: Improve admin switcher and session menu