diff --git a/.cockpit.metadata b/.cockpit.metadata
index 737e838..8a82ffa 100644
--- a/.cockpit.metadata
+++ b/.cockpit.metadata
@@ -1 +1 @@
-bb216f3c317c850a1abdb1141ff4fd73493f8caf SOURCES/cockpit-172.tar.xz
+70a78561a0c958723655b998ed85bff6be166cdb SOURCES/cockpit-176.tar.xz
diff --git a/.gitignore b/.gitignore
index a6213d5..60d5ad0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/cockpit-172.tar.xz
+SOURCES/cockpit-176.tar.xz
diff --git a/SPECS/cockpit.spec b/SPECS/cockpit.spec
index 3300c1a..e7c66d0 100644
--- a/SPECS/cockpit.spec
+++ b/SPECS/cockpit.spec
@@ -7,6 +7,10 @@
 # by tools/gen-spec-dependencies during "make dist", but keep a hardcoded fallback
 %define required_base 122
 
+%if 0%{?centos}
+%define rhel 0
+%endif
+
 # for testing this already gets set in fedora.install, as we want the target
 # VERSION_ID, not the mock chroot's one
 %if "%{!?os_version_id:1}"
@@ -23,12 +27,19 @@
 # build optional extensions like cockpit-docker
 %define build_optional 1
 
+# cockpit's firewall service definition moved to firewalld
+%if 0%{?fedora} >= 29 || 0%{?rhel} >= 8
+%define firewalld_service 0
+%else
+%define firewalld_service 1
+%endif
+
 %define __lib lib
 
 # on RHEL 7.x we build subscriptions; superseded later by
 # external subscription-manager-cockpit
 %if 0%{?rhel} >= 7 && 0%{?rhel} < 8
-%define build_subscriptions 0
+%define build_subscriptions 1
 %endif
 
 
@@ -43,13 +54,17 @@
 %global go_scl_prefix %{nil}
 %endif
 
+%if 0%{?rhel} >= 7 || 0%{?centos}
+%define vdo_on_demand 1
+%endif
+
 Name:           cockpit
 Summary:        A user interface for Linux servers
 
 License:        LGPLv2+
 URL:            https://cockpit-project.org/
 
-Version:        172
+Version:        176
 %if %{defined wip}
 Release:        1.%{wip}%{?dist}
 Source0:        cockpit-%{version}.tar.gz
@@ -58,6 +73,7 @@ Release:        2%{?dist}
 Source0:        https://github.com/cockpit-project/cockpit/releases/download/%{version}/cockpit-%{version}.tar.xz
 %endif
 
+BuildRequires: gcc
 BuildRequires: pkgconfig(gio-unix-2.0)
 BuildRequires: pkgconfig(json-glib-1.0)
 BuildRequires: pkgconfig(polkit-agent-1) >= 0.105
@@ -94,28 +110,27 @@ BuildRequires: xmlto
 # This is the "cockpit" metapackage. It should only
 # Require, Suggest or Recommend other cockpit-xxx subpackages
 
-Requires: cockpit-bridge = %{version}-%{release}
-Requires: cockpit-ws = %{version}-%{release}
-Requires: cockpit-system = %{version}-%{release}
+Requires: cockpit-bridge
+Requires: cockpit-ws
+Requires: cockpit-system
 
 # Optional components (for f24 we use soft deps)
 %if 0%{?fedora} >= 24 || 0%{?rhel} >= 8
 %if 0%{?rhel} == 0
-Recommends: cockpit-dashboard = %{version}-%{release}
+Recommends: cockpit-dashboard
+%ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
+Recommends: (cockpit-docker if /usr/bin/docker)
 %endif
-Recommends: (cockpit-networkmanager = %{version}-%{release} if NetworkManager)
-Recommends: (cockpit-storaged = %{version}-%{release} if udisks2)
-Recommends: (cockpit-packagekit = %{version}-%{release} if PackageKit)
+%endif
+Recommends: (cockpit-networkmanager if NetworkManager)
+Recommends: (cockpit-storaged if udisks2)
+Recommends: cockpit-packagekit
 %if 0%{?rhel} >= 8
 Recommends: subscription-manager-cockpit
 %endif
-%ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
-Recommends: (cockpit-docker = %{version}-%{release} if /usr/bin/docker)
-%endif
-Suggests: cockpit-pcp = %{version}-%{release}
-Suggests: cockpit-kubernetes = %{version}-%{release}
-Suggests: cockpit-selinux = %{version}-%{release}
-Suggests: cockpit-packagekit = %{version}-%{release}
+Suggests: cockpit-pcp
+Suggests: cockpit-kubernetes
+Suggests: cockpit-selinux
 %endif
 
 %prep
@@ -131,7 +146,7 @@ if [ -n "%{patches}" ]; then
     git config core.autocrlf false && git config core.safecrlf false && git config gc.auto 0
     git add -f . && git commit -a -q -m "Base" && git tag -a initial --message="initial"
     git am --whitespace=nowarn %{patches}
-    touch -r $(git diff --name-only initial..HEAD) .git
+    touch -r $(git diff --name-only initial..HEAD) .git Makefile.in
     rm -rf .git
 fi
 
@@ -141,9 +156,12 @@ exec 2>&1
     --disable-silent-rules \
     --with-cockpit-user=cockpit-ws \
     --with-selinux-config-type=etc_t \
-    %{?rhel:--without-storaged-iscsi-sessions} \
+%if 0%{?rhel} >= 7 && 0%{?rhel} < 8
+    --without-storaged-iscsi-sessions \
+%endif
     --with-appstream-data-packages='[ "appstream-data" ]' \
-    --with-nfs-client-package='"nfs-utils"'
+    --with-nfs-client-package='"nfs-utils"' \
+    %{?vdo_on_demand:--with-vdo-package='"vdo"'}
 make -j4 %{?extra_flags} all
 
 %check
@@ -156,6 +174,9 @@ make install-tests DESTDIR=%{buildroot}
 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%{?firewalld_service} == 0
+rm -f %{buildroot}/%{_prefix}/%{__lib}/firewalld/services/cockpit.xml
+%endif
 install -p -m 644 AUTHORS COPYING README.md %{buildroot}%{_docdir}/cockpit/
 
 # On RHEL we don't yet show options for changing language
@@ -221,9 +242,6 @@ find %{buildroot}%{_datadir}/cockpit/storaged -type f >> storaged.list
 echo '%dir %{_datadir}/cockpit/networkmanager' > networkmanager.list
 find %{buildroot}%{_datadir}/cockpit/networkmanager -type f >> networkmanager.list
 
-echo '%dir %{_datadir}/cockpit/ostree' > ostree.list
-find %{buildroot}%{_datadir}/cockpit/ostree -type f >> ostree.list
-
 echo '%dir %{_datadir}/cockpit/packagekit' >> packagekit.list
 find %{buildroot}%{_datadir}/cockpit/packagekit -type f >> packagekit.list
 
@@ -234,16 +252,25 @@ echo '%dir %{_datadir}/cockpit/ovirt' > ovirt.list
 find %{buildroot}%{_datadir}/cockpit/ovirt -type f >> ovirt.list
 
 # on CentOS systems we don't have the required setroubleshoot-server packages
+%if 0%{?centos}
+rm -rf %{buildroot}%{_datadir}/cockpit/selinux
+%else
 echo '%dir %{_datadir}/cockpit/selinux' > selinux.list
 find %{buildroot}%{_datadir}/cockpit/selinux -type f >> selinux.list
+%endif
 
 %ifarch x86_64 %{arm} aarch64 ppc64le i686 s390x
+%if 0%{?fedora} || 0%{?rhel} < 8
 echo '%dir %{_datadir}/cockpit/docker' > docker.list
 find %{buildroot}%{_datadir}/cockpit/docker -type f >> docker.list
 %else
 rm -rf %{buildroot}/%{_datadir}/cockpit/docker
 touch docker.list
 %endif
+%else
+rm -rf %{buildroot}/%{_datadir}/cockpit/docker
+touch docker.list
+%endif
 
 %ifarch aarch64 x86_64 ppc64le s390x
 %if %{defined wip}
@@ -281,7 +308,7 @@ rm -f %{buildroot}%{_libexecdir}/cockpit-ssh
 
 # when not building optional packages, remove their files
 %if 0%{?build_optional} == 0
-for pkg in apps dashboard docker kubernetes machines ostree ovirt packagekit pcp playground storaged; do
+for pkg in apps dashboard docker kubernetes machines ovirt packagekit pcp playground storaged; do
     rm -rf %{buildroot}/%{_datadir}/cockpit/$pkg
 done
 # files from -tests
@@ -310,8 +337,13 @@ rm -rf %{buildroot}/usr/src/debug
 # On RHEL kdump, networkmanager, selinux, and sosreport are part of the system package
 %if 0%{?rhel}
 cat kdump.list sosreport.list networkmanager.list selinux.list >> system.list
-rm -f %{buildroot}/usr/share/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
-rm -f %{buildroot}/usr/share/pixmaps/cockpit-sosreport.png
+rm -f %{buildroot}%{_datadir}/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
+rm -f %{buildroot}%{_datadir}/metainfo/org.cockpit-project.cockpit-kdump.metainfo.xml
+rm -f %{buildroot}%{_datadir}/pixmaps/cockpit-sosreport.png
+%endif
+
+%if 0%{?rhel}%{?centos}
+rm -f %{buildroot}%{_datadir}/metainfo/org.cockpit-project.cockpit-selinux.metainfo.xml
 %endif
 
 %if 0%{?build_basic}
@@ -387,8 +419,6 @@ embed or extend Cockpit.
 %exclude %{_docdir}/cockpit/COPYING
 %exclude %{_docdir}/cockpit/README.md
 %{_docdir}/cockpit
-/usr/share/cockpit/ovirt/*
-/usr/share/cockpit/apps/*
 
 %package system
 Summary: Cockpit admin interface package for configuring and troubleshooting a system
@@ -436,6 +466,11 @@ Summary: Cockpit Web Service
 Requires: glib-networking
 Requires: openssl
 Requires: glib2 >= 2.37.4
+%if 0%{?firewalld_service}
+Conflicts: firewalld >= 0.6.0-1
+%else
+Conflicts: firewalld < 0.6.0-1
+%endif
 %if 0%{?fedora} >= 24 || 0%{?rhel} >= 8
 Recommends: sscg >= 2.3
 %endif
@@ -453,14 +488,16 @@ The Cockpit Web Service listens on the network, and authenticates users.
 %doc %{_mandir}/man8/pam_ssh_add.8.gz
 %config(noreplace) %{_sysconfdir}/cockpit/ws-certs.d
 %config(noreplace) %{_sysconfdir}/pam.d/cockpit
-%config %{_sysconfdir}/issue.d/cockpit
+%config %{_sysconfdir}/issue.d/cockpit.issue
 %config %{_sysconfdir}/motd.d/cockpit
 %{_datadir}/cockpit/motd/update-motd
 %{_datadir}/cockpit/motd/inactive.motd
 %{_unitdir}/cockpit.service
 %{_unitdir}/cockpit-motd.service
 %{_unitdir}/cockpit.socket
+%if 0%{?firewalld_service}
 %{_prefix}/%{__lib}/firewalld/services/cockpit.xml
+%endif
 %{_prefix}/%{__lib}/tmpfiles.d/cockpit-tempfiles.conf
 %{_sbindir}/remotectl
 %{_libdir}/security/pam_ssh_add.so
@@ -502,6 +539,7 @@ BuildArch: noarch
 The Cockpit component for configuring kernel crash dumping.
 
 %files kdump -f kdump.list
+%{_datadir}/metainfo/org.cockpit-project.cockpit-kdump.metainfo.xml
 
 %package sosreport
 Summary: Cockpit user interface for diagnostic reports
@@ -515,8 +553,8 @@ The Cockpit component for creating diagnostic reports with the
 sosreport tool.
 
 %files sosreport -f sosreport.list
-/usr/share/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
-/usr/share/pixmaps/cockpit-sosreport.png
+%{_datadir}/metainfo/org.cockpit-project.cockpit-sosreport.metainfo.xml
+%{_datadir}/pixmaps/cockpit-sosreport.png
 
 %package networkmanager
 Summary: Cockpit user interface for networking, using NetworkManager
@@ -536,12 +574,14 @@ The Cockpit component for managing networking.  This package uses NetworkManager
 
 %endif
 
+%if 0%{?rhel}%{?centos} == 0
+
 %package selinux
 Summary: Cockpit SELinux package
 Requires: cockpit-bridge >= %{required_base}
 Requires: cockpit-shell >= %{required_base}
 %if 0%{?fedora} >= 24 || 0%{?rhel} >= 8
-Recommends: setroubleshoot-server >= 3.3.3
+Requires: setroubleshoot-server >= 3.3.3
 %endif
 BuildArch: noarch
 
@@ -550,6 +590,9 @@ This package contains the Cockpit user interface integration with the
 utility setroubleshoot to diagnose and resolve SELinux issues.
 
 %files selinux -f selinux.list
+%{_datadir}/metainfo/org.cockpit-project.cockpit-selinux.metainfo.xml
+
+%endif
 
 %else # build basic packages
 
@@ -566,7 +609,7 @@ Dummy package from building optional packages only; never install or publish me.
 
 # storaged on Fedora < 27, udisks on newer ones
 # Recommends: not supported in RHEL <= 7
-%package storaged
+%package -n cockpit-storaged
 Summary: Cockpit user interface for storage, using udisks
 Requires: cockpit-shell >= %{required_base}
 Requires: udisks2 >= 2.6
@@ -582,10 +625,10 @@ Requires: python-dbus
 %endif
 BuildArch: noarch
 
-%description storaged
+%description -n cockpit-storaged
 The Cockpit component for managing storage.  This package uses udisks.
 
-%files storaged -f storaged.list
+%files -n cockpit-storaged -f storaged.list
 
 
 %package -n cockpit-tests
@@ -640,22 +683,6 @@ The Cockpit components for managing oVirt virtual machines.
 
 %files -n cockpit-machines-ovirt -f ovirt.list
 
-%package -n cockpit-ostree
-Summary: Cockpit user interface for rpm-ostree
-# Requires: Uses new translations functionality
-Requires: cockpit-bridge >= %{required_base}
-Requires: cockpit-system >= %{required_base}
-%if 0%{?fedora} > 0 && 0%{?fedora} < 24
-Requires: rpm-ostree >= 2015.10-1
-%else
-Requires: /usr/libexec/rpm-ostreed
-%endif
-
-%description -n cockpit-ostree
-The Cockpit components for managing software updates for ostree based systems.
-
-%files -n cockpit-ostree -f ostree.list
-
 %package -n cockpit-pcp
 Summary: Cockpit PCP integration
 Requires: cockpit-bridge >= %{required_base}
@@ -696,15 +723,16 @@ bastion hosts, and a basic dashboard.
 
 %endif
 
-%ifarch x86_64 %{arm} aarch64 ppc64le s390 %{ix86}
+%ifarch x86_64 %{arm} aarch64 ppc64le s390x
 
+%if 0%{?fedora} || 0%{?rhel} < 8
 %package -n cockpit-docker
 Summary: Cockpit user interface for Docker containers
 Requires: cockpit-bridge >= %{required_base}
 Requires: cockpit-shell >= %{required_base}
 Requires: /usr/bin/docker
 Requires: /usr/lib/systemd/system/docker.service
-%if 0%{?fedora} || 0%{?rhel} >= 8
+%if 0%{?fedora}
 Requires: python3
 %else
 Requires: python2
@@ -717,8 +745,9 @@ This package is not yet complete.
 %files -n cockpit-docker -f docker.list
 
 %endif
+%endif
 
-%ifarch aarch64 x86_64 ppc64le 390x
+%ifarch aarch64 x86_64 ppc64le i686 s390x
 
 %package -n cockpit-kubernetes
 Summary: Cockpit user interface for Kubernetes cluster
@@ -757,8 +786,10 @@ The Cockpit component for installing package updates, via PackageKit.
 %endif # build optional extension packages
 
 %changelog
-* Thu Aug 23 2018 Johnny Hughes <johnny@centos.org> 172-2
-- Manual CentOS Debranding
+* Thu Aug 30 2018 Martin Pitt <mpitt@redhat.com> 176-2
+- Update to 176 release
+- Storage: Offer installation of VDO on demand
+- Machines: Add disks to a virtual machine
 
 * Mon Jul 16 2018 Martin Pitt <mpitt@redhat.com> 172-2
 - Update to 172 release