diff --git a/.boom-boot.metadata b/.boom-boot.metadata
new file mode 100644
index 0000000..aa7a36e
--- /dev/null
+++ b/.boom-boot.metadata
@@ -0,0 +1 @@
+dd96613e238f342641b5be8977ee8598662e8ab9 SOURCES/boom-0.9.tar.gz
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..972a8fd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/boom-0.9.tar.gz
diff --git a/SOURCES/Disable-GRUB2-plugin-on-RHEL-8.patch b/SOURCES/Disable-GRUB2-plugin-on-RHEL-8.patch
new file mode 100644
index 0000000..f755ea6
--- /dev/null
+++ b/SOURCES/Disable-GRUB2-plugin-on-RHEL-8.patch
@@ -0,0 +1,13 @@
+ etc/default/boom | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/etc/default/boom b/etc/default/boom
+index cd5f772..451cb37 100755
+--- a/etc/default/boom
++++ b/etc/default/boom
+@@ -1,3 +1,3 @@
+-BOOM_USE_SUBMENU="yes"
++BOOM_USE_SUBMENU="no"
+ BOOM_SUBMENU_NAME="Snapshots"
+-BOOM_ENABLE_GRUB="yes"
++BOOM_ENABLE_GRUB="no"
diff --git a/SOURCES/Reduce-log-level-of-Could-not-load-BootEntry.patch b/SOURCES/Reduce-log-level-of-Could-not-load-BootEntry.patch
new file mode 100644
index 0000000..8d5d33d
--- /dev/null
+++ b/SOURCES/Reduce-log-level-of-Could-not-load-BootEntry.patch
@@ -0,0 +1,33 @@
+From 13ed30d16790d0ee205c8acc5bead3133845a9ac Mon Sep 17 00:00:00 2001
+From: "Bryn M. Reeves" <bmr@redhat.com>
+Date: Tue, 8 Jan 2019 16:48:19 +0000
+Subject: [PATCH] boom: reduce log level of "Could not load BootEntry" messages
+
+On systems where other BLS implementations are in use, and where
+those entries use non-standard BLS keys, boom will emit a warning
+message for each foreign entry found. This is noisy and of little
+use to end users: reduce the log message to "info" level, making
+these errors silent without increased verbosity.
+
+Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
+(cherry picked from commit 40ddddf5c1fa14cd7d39731fd545fe02aab328d0)
+---
+ boom/bootloader.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/boom/bootloader.py b/boom/bootloader.py
+index cf50b4e..bc86cb8 100644
+--- a/boom/bootloader.py
++++ b/boom/bootloader.py
+@@ -504,7 +504,7 @@ def load_entries(machine_id=None):
+         try:
+             _add_entry(BootEntry(entry_file=entry_path))
+         except Exception as e:
+-            _log_warn("Could not load BootEntry '%s': %s" %
++            _log_info("Could not load BootEntry '%s': %s" %
+                       (entry_path, e))
+ 
+     _log_info("Loaded %d entries" % len(_entries))
+-- 
+1.8.3.1
+
diff --git a/SOURCES/bootloader-raise-LookupError-on-unknown-BLS-keys.patch b/SOURCES/bootloader-raise-LookupError-on-unknown-BLS-keys.patch
new file mode 100644
index 0000000..b832cca
--- /dev/null
+++ b/SOURCES/bootloader-raise-LookupError-on-unknown-BLS-keys.patch
@@ -0,0 +1,70 @@
+From eda695b6cda61a5f1901479b6a0b22d8ba1ed96b Mon Sep 17 00:00:00 2001
+From: "Bryn M. Reeves" <bmr@redhat.com>
+Date: Wed, 9 Jan 2019 15:20:27 +0000
+Subject: [PATCH] bootloader: raise LookupError on unknown BLS keys
+
+When loading a BootEntry from file, if an unknown BLS key is read
+a generic KeyError is raised when attempting to access a key in
+the MAP_KEY (bls-to-boom key name map) dictionary. This leads to
+a fairly cryptic error message:
+
+ # boom list -V --debug all
+ INFO - Could not load BootEntry '/boot/loader/entries/611f38fd887d41dea7eb3403b2730a76-4.15.17-200.fc26.x86_64.conf': 'id'
+
+With --debug=all the cause is a little more obvious:
+
+ # boom list --debug all
+ Traceback (most recent call last):
+   File "bin/boom", line 7, in <module>
+     main(sys.argv)
+   File "/home/breeves/src/git/boom/boom/command.py", line 1951, in main
+     status = command[1](cmd_args, select, opts, identifier)
+   File "/home/breeves/src/git/boom/boom/command.py", line 1287, in _list_cmd
+     opts=opts, sort_keys=cmd_args.sort)
+   File "/home/breeves/src/git/boom/boom/command.py", line 631, in print_entries
+     bes = find_entries(selection=selection)
+   File "/home/breeves/src/git/boom/boom/bootloader.py", line 769, in find_entries
+     load_entries()
+   File "/home/breeves/src/git/boom/boom/bootloader.py", line 659, in load_entries
+     _add_entry(BootEntry(entry_file=entry_path))
+   File "/home/breeves/src/git/boom/boom/bootloader.py", line 1310, in __init__
+     return self.__from_file(entry_file, boot_params)
+   File "/home/breeves/src/git/boom/boom/bootloader.py", line 1229, in __from_file
+     key = MAP_KEY[_transform_key(bls_key)]
+ KeyError: 'id'
+
+Instead, raise the exception explicitly if the key is not present,
+and set the exception string to a meaningful error:
+
+ INFO - Could not load BootEntry '/boot/loader/entries/611f38fd887d41dea7eb3403b2730a76-4.15.17-200.fc26.x86_64.conf': Unknown BLS key 'id'
+
+The more specific KeyError is not used here since it is specific
+to dictionary lookup failures.
+
+Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
+(cherry picked from commit 72a67d8beba4c4f36d1c0682a6628b2a823041a4)
+
+Conflicts:
+	boom/bootloader.py
+---
+ boom/bootloader.py | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/boom/bootloader.py b/boom/bootloader.py
+index bc86cb8..dd2a53a 100644
+--- a/boom/bootloader.py
++++ b/boom/bootloader.py
+@@ -1067,6 +1067,10 @@ class BootEntry(object):
+                     comment += line if line else ""
+                 else:
+                     bls_key, value = _parse_name_value(line, separator=None)
++                    # Convert BLS key name to Boom notation
++                    key = _transform_key(bls_key)
++                    if key not in MAP_KEY:
++                        raise LookupError("Unknown BLS key '%s'" % bls_key)
+                     key = MAP_KEY[_transform_key(bls_key)]
+                     entry_data[key] = value
+                     if comment:
+-- 
+1.8.3.1
+
diff --git a/SPECS/boom-boot.spec b/SPECS/boom-boot.spec
new file mode 100644
index 0000000..ad3bb06
--- /dev/null
+++ b/SPECS/boom-boot.spec
@@ -0,0 +1,190 @@
+%global summary A set of libraries and tools for managing boot loader entries
+%global sphinx_docs 1
+
+Name:		boom-boot
+Version:	0.9
+Release:	7%{?dist}
+Summary:	%{summary}
+
+License:	GPLv2
+URL:		https://github.com/bmr-cymru/boom
+Source0:	https://github.com/bmr-cymru/boom/archive/%{version}/boom-%{version}.tar.gz
+Patch0:         Disable-GRUB2-plugin-on-RHEL-8.patch
+Patch1:		Reduce-log-level-of-Could-not-load-BootEntry.patch
+Patch2:		bootloader-raise-LookupError-on-unknown-BLS-keys.patch
+
+BuildArch:	noarch
+
+BuildRequires:	python3-setuptools
+BuildRequires:	python3-devel
+%if 0%{?sphinx_docs}
+BuildRequires:	python3-sphinx
+%endif
+
+Requires: python3-boom
+Requires: %{name}-conf
+
+%package -n python3-boom
+Summary: %{summary}
+%{?python_provide:%python_provide python3-boom}
+Requires: %{__python3}
+Recommends: (lvm2 or brtfs-progs)
+Recommends: %{name}-conf
+
+# There used to be a boom package in fedora, and there is boom packaged in
+# copr. How to tell which one is installed? We need python3-boom and no boom
+# only.
+Conflicts: boom
+
+%package conf
+Summary: %{summary}
+
+%package grub2
+Summary: %{summary}
+Supplements: (grub2 and boom-boot)
+
+%description
+Boom is a boot manager for Linux systems using boot loaders that support
+the BootLoader Specification for boot entry configuration.
+
+Boom requires a BLS compatible boot loader to function: either the
+systemd-boot project, or Grub2 with the BLS patch (Red Hat Grub2 builds
+include this support in both Red Hat Enterprise Linux 7 and Fedora).
+
+%description -n python3-boom
+Boom is a boot manager for Linux systems using boot loaders that support
+the BootLoader Specification for boot entry configuration.
+
+Boom requires a BLS compatible boot loader to function: either the
+systemd-boot project, or Grub2 with the BLS patch (Red Hat Grub2 builds
+include this support in both Red Hat Enterprise Linux 7 and Fedora).
+
+This package provides python3 boom module.
+
+%description conf
+Boom is a boot manager for Linux systems using boot loaders that support
+the BootLoader Specification for boot entry configuration.
+
+Boom requires a BLS compatible boot loader to function: either the
+systemd-boot project, or Grub2 with the BLS patch (Red Hat Grub2 builds
+include this support in both Red Hat Enterprise Linux 7 and Fedora).
+
+This package provides configuration files for boom.
+
+%description grub2
+Boom is a boot manager for Linux systems using boot loaders that support
+the BootLoader Specification for boot entry configuration.
+
+Boom requires a BLS compatible boot loader to function: either the
+systemd-boot project, or Grub2 with the BLS patch (Red Hat Grub2 builds
+include this support in both Red Hat Enterprise Linux 7 and Fedora).
+
+This package provides integration scripts for grub2 bootloader.
+
+%prep
+%setup -q -n boom-%{version}
+# NOTE: Do not use backup extension - MANIFEST.in is picking them
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+
+%build
+%if 0%{?sphinx_docs}
+make -C doc html
+rm doc/_build/html/.buildinfo
+mv doc/_build/html doc/html
+rm -r doc/_build
+%endif
+
+%py3_build
+
+%install
+%py3_install
+
+# Install Grub2 integration scripts
+mkdir -p ${RPM_BUILD_ROOT}/etc/grub.d
+mkdir -p ${RPM_BUILD_ROOT}/etc/default
+install -m 755 etc/grub.d/42_boom ${RPM_BUILD_ROOT}/etc/grub.d
+install -m 644 etc/default/boom ${RPM_BUILD_ROOT}/etc/default
+
+# Make configuration directories
+# mode 0700 - in line with /boot/grub2 directory:
+install -d -m 700 ${RPM_BUILD_ROOT}/boot/boom/profiles
+install -d -m 700 ${RPM_BUILD_ROOT}/boot/loader/entries
+install -m 644 examples/boom.conf ${RPM_BUILD_ROOT}/boot/boom
+
+mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man8
+mkdir -p ${RPM_BUILD_ROOT}/%{_mandir}/man5
+install -m 644 man/man8/boom.8 ${RPM_BUILD_ROOT}/%{_mandir}/man8
+install -m 644 man/man5/boom.5 ${RPM_BUILD_ROOT}/%{_mandir}/man5
+
+rm doc/Makefile
+rm doc/conf.py
+
+# Test suite currently does not operate in rpmbuild environment
+#%%check
+#%%{__python3} setup.py test
+
+%files
+%license COPYING
+%doc README.md
+%{_bindir}/boom
+%doc %{_mandir}/man*/boom.*
+
+%files -n python3-boom
+%license COPYING
+%doc README.md
+%{python3_sitelib}/*
+%doc doc
+%doc examples
+%doc tests
+
+%files conf
+%license COPYING
+%doc README.md
+%dir /boot/boom
+%config(noreplace) /boot/boom/boom.conf
+%dir /boot/boom/profiles
+%dir /boot/loader/entries
+
+%files grub2
+%license COPYING
+%doc README.md
+%{_sysconfdir}/grub.d/42_boom
+%config(noreplace) %{_sysconfdir}/default/boom
+
+
+%changelog
+* Mon Jan 14 2019 Marian Csontos <mcsontos@redhat.com> 0.9-7
+- Reduce log level of "Could not load BootEntry" messages.
+- Raise more appropriate LookupError on unknown BLS keys.
+
+* Tue Dec 18 2018 Marian Csontos <mcsontos@redhat.com> 0.9-6
+- Disable GRUB2 plugin on RHEL-8.
+
+* Mon Sep 17 2018 Tomas Orsava <torsava@redhat.com> - 0.9-5
+- Require the Python interpreter directly instead of using the package name
+- Related: rhbz#1619153
+
+* Tue Jul 17 2018 Marian Csontos <mcsontos@redhat.com> 0.9-4
+- Change dependencies.
+
+* Mon Jul 16 2018 Marian Csontos <mcsontos@redhat.com> 0.9-3
+- Split executable, python module and configuration.
+
+* Wed Jun 27 2018 Marian Csontos <mcsontos@redhat.com> 0.9-2
+- Spin off grub2 into subpackage
+
+* Wed Jun 27 2018 Marian Csontos <mcsontos@redhat.com> 0.9-1
+- Update to new upstream 0.9.
+- Fix boot_id caching.
+
+* Fri Jun 08 2018 Marian Csontos <mcsontos@redhat.com> 0.8.5-6.2
+- Remove example files from /boot/boom/profiles.
+
+* Fri May 11 2018 Marian Csontos <mcsontos@redhat.com> 0.8.5-6.1
+- Files in /boot are treated as configuration files.
+
+* Thu Apr 26 2018 Marian Csontos <mcsontos@redhat.com> 0.8.5-6
+- Package upstream version 0.8-5.6
+