diff --git a/Cabal-syntax/Cabal-syntax.cabal b/Cabal-syntax/Cabal-syntax.cabal
index ab9170e18111feb203b57dc44f785b1fb0a570c5..a915c48db94105d4e782db84e9bbec57ac0b60a8 100644
--- a/Cabal-syntax/Cabal-syntax.cabal
+++ b/Cabal-syntax/Cabal-syntax.cabal
@@ -58,6 +58,8 @@ library
   if impl(ghc >= 8.0) && impl(ghc < 8.8)
     ghc-options: -Wnoncanonical-monadfail-instances
 
+  build-tool-depends: alex:alex
+
   exposed-modules:
     Distribution.Backpack
     Distribution.CabalSpecVersion
diff --git a/templates/Lexer.x b/Cabal-syntax/src/Distribution/Fields/Lexer.x
similarity index 95%
rename from templates/Lexer.x
rename to Cabal-syntax/src/Distribution/Fields/Lexer.x
index da6a029f97ef09d648b57ff4ad5eac1a74f40cd5..4fc501d51863387efe3f3af3f7b4f3fd610e1e3c 100644
--- a/templates/Lexer.x
+++ b/Cabal-syntax/src/Distribution/Fields/Lexer.x
@@ -19,18 +19,6 @@ module Distribution.Fields.Lexer
   ,bol_section, in_section, in_field_layout, in_field_braces
   ,mkLexState) where
 
--- [Note: bootstrapping parsec parser]
---
--- We manually produce the `Lexer.hs` file from `boot/Lexer.x` (make lexer)
--- because bootstrapping cabal-install would be otherwise tricky.
--- Alex is (atm) tricky package to build, cabal-install has some magic
--- to move bundled generated files in place, so rather we don't depend
--- on it before we can build it ourselves.
--- Therefore there is one thing less to worry in bootstrap.sh, which is a win.
---
--- See also https://github.com/haskell/cabal/issues/4633
---
-
 import Prelude ()
 import qualified Prelude as Prelude
 import Distribution.Compat.Prelude
@@ -53,6 +41,8 @@ import qualified Data.Text.Encoding.Error as T
 }
 -- Various character classes
 
+%encoding "latin1"
+
 $space           = \          -- single space char
 $ctlchar         = [\x0-\x1f \x7f]
 $printable       = \x0-\xff # $ctlchar   -- so no \n \r
diff --git a/Makefile b/Makefile
index 8f35c847af67ce3577840cab12cab70fde47810e..3ca0bf58fb466296d2caa91bd1b7d9ea9e5fabfd 100644
--- a/Makefile
+++ b/Makefile
@@ -25,19 +25,6 @@ style-modified: ## Run the code styler on modified files
 	@git ls-files --modified Cabal Cabal-syntax cabal-install \
 		| grep '.hs$$' | xargs -P $(PROCS) -I {} fourmolu -q -i {}
 
-# source generation: Lexer
-
-LEXER_HS:=Cabal-syntax/src/Distribution/Fields/Lexer.hs
-
-lexer : $(LEXER_HS)
-
-$(LEXER_HS) : templates/Lexer.x
-	alex --latin1 --ghc -o $@ $^
-	@rm -f Lexer.tmp
-	echo '{- FOURMOLU_DISABLE -}' >> Lexer.tmp
-	cat -s $@ >> Lexer.tmp
-	mv Lexer.tmp $@
-
 # source generation: SPDX
 
 SPDX_LICENSE_HS:=Cabal-syntax/src/Distribution/SPDX/LicenseId.hs
diff --git a/bootstrap/bootstrap.py b/bootstrap/bootstrap.py
index 10d8dfe5717689c74bc0b2cb33e79174c742c2be..cf2ee03b44283c64cabef262c93e8515087683e8 100755
--- a/bootstrap/bootstrap.py
+++ b/bootstrap/bootstrap.py
@@ -64,6 +64,7 @@ BootstrapDep = NamedTuple('BootstrapDep', [
     ('revision', Optional[int]),
     ('cabal_sha256', Optional[SHA256Hash]),
     ('flags', List[str]),
+    ('component', Optional[str])
 ])
 
 BootstrapInfo = NamedTuple('BootstrapInfo', [
@@ -189,9 +190,9 @@ def install_dep(dep: BootstrapDep, ghc: Compiler) -> None:
 
     sdist_dir = resolve_dep(dep)
 
-    install_sdist(dist_dir, sdist_dir, ghc, dep.flags)
+    install_sdist(dist_dir, sdist_dir, ghc, dep.flags, dep.component)
 
-def install_sdist(dist_dir: Path, sdist_dir: Path, ghc: Compiler, flags: List[str]):
+def install_sdist(dist_dir: Path, sdist_dir: Path, ghc: Compiler, flags: List[str], component):
     prefix = PSEUDOSTORE.resolve()
     flags_option = ' '.join(flags)
     setup_dist_dir = dist_dir / 'setup'
@@ -205,10 +206,12 @@ def install_sdist(dist_dir: Path, sdist_dir: Path, ghc: Compiler, flags: List[st
         f'--package-db={PKG_DB.resolve()}',
         f'--prefix={prefix}',
         f'--bindir={BINDIR.resolve()}',
+        f'--extra-prog-path={BINDIR.resolve()}',
         f'--with-compiler={ghc.ghc_path}',
         f'--with-hc-pkg={ghc.ghc_pkg_path}',
         f'--with-hsc2hs={ghc.hsc2hs_path}',
         f'--flags={flags_option}',
+        f'{component or ""}'
     ]
 
     def check_call(args: List[str]) -> None:
diff --git a/bootstrap/cabal.project b/bootstrap/cabal.project
index 8d1ac11b28e9a470af300c203abb96a20c30f278..d1eb5750c9d627ca3580c609256d2bcf30c94bf0 100644
--- a/bootstrap/cabal.project
+++ b/bootstrap/cabal.project
@@ -3,6 +3,3 @@
 
 packages: .
 optimization: False
-
-allow-newer:
-  cabal-install-parsers:Cabal-syntax
diff --git a/bootstrap/linux-8.10.7.json b/bootstrap/linux-8.10.7.json
index 24dc7fcf5e6d37bb246469274fcef1786653082d..4ef250fd0c26fb5c1eb92fc7de648ddaf5939a77 100644
--- a/bootstrap/linux-8.10.7.json
+++ b/bootstrap/linux-8.10.7.json
@@ -24,6 +24,10 @@
             "package": "deepseq",
             "version": "1.4.4.0"
         },
+        {
+            "package": "containers",
+            "version": "0.6.5.1"
+        },
         {
             "package": "ghc-boot-th",
             "version": "8.10.7"
@@ -36,10 +40,6 @@
             "package": "template-haskell",
             "version": "2.16.0.0"
         },
-        {
-            "package": "containers",
-            "version": "0.6.5.1"
-        },
         {
             "package": "transformers",
             "version": "0.5.6.2"
@@ -63,45 +63,40 @@
     ],
     "dependencies": [
         {
-            "cabal_sha256": "55390b63bbd7846aab6b16b7b255cf5108a3a422798a1e9a3b674eb0c68ac20c",
+            "cabal_sha256": "458d4794a5ced371a844e325fe539dd5fee8fe41f78b6f00e6c70920b7dd18e3",
+            "component": "lib:bytestring",
             "flags": [],
             "package": "bytestring",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "491aaef7625c693a06c26ae7f097caf23d9e3f9cae14af5ab17e71abb39576d3",
-            "version": "0.11.4.0"
+            "src_sha256": "76193d39b66197107f452184597a4e458194c64731efbba1e9605550c732f7f4",
+            "version": "0.11.5.0"
         },
         {
-            "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801",
-            "flags": [],
-            "package": "binary",
-            "revision": 0,
-            "source": "hackage",
-            "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0",
-            "version": "0.8.9.1"
-        },
-        {
-            "cabal_sha256": "ab6e3330c42817b0effb14cae9c60d5cdc41d61f7354d04bc529ed031113f27c",
+            "cabal_sha256": "2de84756d3907308230e34fcc7c1917a73f218f6d53838618b7d5b95dd33e2c3",
+            "component": "lib:filepath",
             "flags": [
                 "-cpphs"
             ],
             "package": "filepath",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "ed1d11173f5052461cd1df58b5ef4abbfa1803ad2b237da7ddb7c7d64e017de2",
-            "version": "1.4.100.3"
+            "src_sha256": "82876250347c2fdf0f9de5448ce44f02539f37951b671d9a30719a6c4f96e9ad",
+            "version": "1.4.100.4"
         },
         {
-            "cabal_sha256": "26eeda14432a2fcc6049045068ecf59525ffff9196616a642b5ab2326a003692",
+            "cabal_sha256": "91cbc951a742fc2c95d5902be38fcf1b859c2891241bc353ff16154a8f7c35ae",
+            "component": "lib:unix",
             "flags": [],
             "package": "unix",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "5e59d9ca0f8e505d2203af7dba17c67275621fbcd4ed8fcbdd59e80df4d79a7d",
-            "version": "2.8.1.0"
+            "src_sha256": "cc287659427c80f3598c199387ba7eb7d4cc3270cbb31f75e2f677e879f26384",
+            "version": "2.8.1.1"
         },
         {
             "cabal_sha256": "e384a4831b0ac0f8908a1d99d14ce44bf9c5fe2092eec5b2c47ea072d477a493",
+            "component": "lib:directory",
             "flags": [],
             "package": "directory",
             "revision": 0,
@@ -110,19 +105,41 @@
             "version": "1.3.8.1"
         },
         {
-            "cabal_sha256": "d495b2a2a53da7e66163477a5837d2109074f8818fc938739b9ecf27d506050a",
+            "cabal_sha256": "3c9e1e6b4f2f956623375dd15b904144dd3183b28f1ce1afcce11192f6d868dd",
+            "component": "exe:alex",
+            "flags": [],
+            "package": "alex",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "7a1cd4e21399c40ea9372d1c03bf38698944b8437ce95cf27d1a7c262babe38e",
+            "version": "3.4.0.0"
+        },
+        {
+            "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801",
+            "component": "lib:binary",
+            "flags": [],
+            "package": "binary",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0",
+            "version": "0.8.9.1"
+        },
+        {
+            "cabal_sha256": "71b5fa8c64d3c1fd0a08f993463220867b08290a2256e94b0952bf0e8f5a45cc",
+            "component": "lib:text",
             "flags": [
                 "-developer",
                 "+simdutf"
             ],
             "package": "text",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "c735be650a898606ce9f2c8642bc6ac6123eea82871d5e90f92797801f59efad",
             "version": "2.0.2"
         },
         {
             "cabal_sha256": "5769242043b01bf759b07b7efedcb19607837ee79015fcddde34645664136aed",
+            "component": "lib:parsec",
             "flags": [],
             "package": "parsec",
             "revision": 0,
@@ -132,6 +149,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal-syntax",
             "flags": [],
             "package": "Cabal-syntax",
             "revision": null,
@@ -141,6 +159,7 @@
         },
         {
             "cabal_sha256": "49d8a7f372d35363011591b253cae4c8db8b9ec594590448e20b7bed7acaee98",
+            "component": "lib:process",
             "flags": [],
             "package": "process",
             "revision": 0,
@@ -150,6 +169,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal",
             "flags": [],
             "package": "Cabal",
             "revision": null,
@@ -158,18 +178,32 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "29b28d2e19ae9f5ff92cea4ab8d2e185408ee5de73b4127f7b485a904c9a8b15",
+            "cabal_sha256": "115b8c34b9f83603cfd9eb8b1e2d7ac520da0a4a43d96be435f06ce01a7bc95e",
+            "component": "exe:hsc2hs",
+            "flags": [
+                "-in-ghc-tree"
+            ],
+            "package": "hsc2hs",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "c95b10ce0b2c881480e35118d738dcc9cefc435ec72baa0031af81d0d4d3bc0a",
+            "version": "0.68.9"
+        },
+        {
+            "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def",
+            "component": "lib:network",
             "flags": [
                 "-devel"
             ],
             "package": "network",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "fde2d4b065f1984c76755004c64a29ae9ec52c8bf74f2485d805ef577e7c7822",
-            "version": "3.1.2.8"
+            "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e",
+            "version": "3.1.4.0"
         },
         {
             "cabal_sha256": "e5ae7c083ef3a22248558f8451669bb1c55ea8090f5908b86b9033743c161730",
+            "component": "lib:th-compat",
             "flags": [],
             "package": "th-compat",
             "revision": 2,
@@ -179,6 +213,7 @@
         },
         {
             "cabal_sha256": "1fde59abf5d82a9666b4415bc2b2e9e33f6c1309074fda12d50410c7dbd95f3b",
+            "component": "lib:network-uri",
             "flags": [],
             "package": "network-uri",
             "revision": 0,
@@ -187,7 +222,8 @@
             "version": "2.6.4.2"
         },
         {
-            "cabal_sha256": "b878d575c470bd1f72d37af6654d924ab2b9489d88de8a71bd74d9d5d726c013",
+            "cabal_sha256": "d9220cc1b8c1f287248d650910710b96e62e54530772e3bcd19dbdec6547f8ae",
+            "component": "lib:HTTP",
             "flags": [
                 "-conduit10",
                 "+network-uri",
@@ -195,13 +231,14 @@
                 "-warp-tests"
             ],
             "package": "HTTP",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453",
             "version": "4000.4.1"
         },
         {
             "cabal_sha256": "0bdd3486d3a1bcbed0513b46af4a13ca74b395313fa5b6e0068d6b7413b76a04",
+            "component": "lib:base-orphans",
             "flags": [],
             "package": "base-orphans",
             "revision": 0,
@@ -211,6 +248,7 @@
         },
         {
             "cabal_sha256": "2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada",
+            "component": "lib:data-array-byte",
             "flags": [],
             "package": "data-array-byte",
             "revision": 1,
@@ -220,6 +258,7 @@
         },
         {
             "cabal_sha256": "585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a",
+            "component": "lib:hashable",
             "flags": [
                 "+integer-gmp",
                 "-random-initial-seed"
@@ -232,6 +271,7 @@
         },
         {
             "cabal_sha256": "46367dc0c8326dcbeb7b93f200b567491c2f6029bccf822b8bb26ee660397e08",
+            "component": "lib:async",
             "flags": [
                 "-bench"
             ],
@@ -243,6 +283,7 @@
         },
         {
             "cabal_sha256": "64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a",
+            "component": "lib:base16-bytestring",
             "flags": [],
             "package": "base16-bytestring",
             "revision": 0,
@@ -251,16 +292,18 @@
             "version": "1.0.2.0"
         },
         {
-            "cabal_sha256": "50ec0e229255d4c45cbdd568da011311b8887f304b931564886016f4984334d8",
+            "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803",
+            "component": "lib:base64-bytestring",
             "flags": [],
             "package": "base64-bytestring",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9",
             "version": "1.2.1.0"
         },
         {
             "cabal_sha256": "db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e",
+            "component": "lib:splitmix",
             "flags": [
                 "-optimised-mixer"
             ],
@@ -272,6 +315,7 @@
         },
         {
             "cabal_sha256": "dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9",
+            "component": "lib:random",
             "flags": [],
             "package": "random",
             "revision": 0,
@@ -281,6 +325,7 @@
         },
         {
             "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee",
+            "component": "lib:edit-distance",
             "flags": [],
             "package": "edit-distance",
             "revision": 1,
@@ -290,6 +335,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install-solver",
             "flags": [
                 "-debug-conflict-sets",
                 "-debug-expensive-assertions",
@@ -302,19 +348,21 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "facd0c04925ef925ec05243471fd16055229fdf51f64db1a1049de0cc6c6dfc3",
+            "cabal_sha256": "72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc",
+            "component": "lib:cryptohash-sha256",
             "flags": [
                 "-exe",
                 "+use-cbits"
             ],
             "package": "cryptohash-sha256",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6",
             "version": "0.11.102.1"
         },
         {
             "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42",
+            "component": "lib:echo",
             "flags": [
                 "-example"
             ],
@@ -325,7 +373,8 @@
             "version": "0.1.4"
         },
         {
-            "cabal_sha256": "885c9e2410e5d91a08b199897df0867fecedf818216d7329a2d43a512833dd63",
+            "cabal_sha256": "3db04d7c18b9e68ba5eef3fa7eeca05e1e248958dd182290c8e6b010c81ef73e",
+            "component": "lib:ed25519",
             "flags": [
                 "+no-donna",
                 "+test-doctests",
@@ -333,49 +382,53 @@
                 "+test-properties"
             ],
             "package": "ed25519",
-            "revision": 6,
+            "revision": 7,
             "source": "hackage",
             "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d",
             "version": "0.0.5.0"
         },
         {
-            "cabal_sha256": "efd4c08c4df1ac3f423858a834c0e3b5b4909febda66a901d12a8e1d57bddaa8",
+            "cabal_sha256": "9ab54ee4f80bbd8a3fddd639ea142b7039ee2deb27f7df031a93de1819e34146",
+            "component": "lib:lukko",
             "flags": [
                 "+ofd-locking"
             ],
             "package": "lukko",
-            "revision": 3,
+            "revision": 4,
             "source": "hackage",
             "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f",
             "version": "0.1.1.3"
         },
         {
-            "cabal_sha256": "bc14969ea4adfec6eee20264decf4a07c4002b38b2aa802d58d86b1a2cf7b895",
+            "cabal_sha256": "63dbcb0f507273a8331363e4c13a1fe91f4ea0c495883cf65f314629582a2630",
+            "component": "lib:tar",
             "flags": [
                 "-old-bytestring",
                 "-old-time"
             ],
             "package": "tar",
-            "revision": 5,
+            "revision": 6,
             "source": "hackage",
             "src_sha256": "b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de",
             "version": "0.5.1.1"
         },
         {
-            "cabal_sha256": "9adce39e4ca0b7a87d45df0a243134816c57059a08e28cff5469c98ae1f54dfc",
+            "cabal_sha256": "386dd93bc0352bf6ad5c6bca4dee0442b52d95b4c34e85901064f3eb05c81731",
+            "component": "lib:zlib",
             "flags": [
                 "-bundled-c-zlib",
                 "-non-blocking-ffi",
                 "-pkg-config"
             ],
             "package": "zlib",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "9eaa989ad4534438b5beb51c1d3a4c8f6a088fdff0b259a5394fbf39aaee04da",
             "version": "0.6.3.0"
         },
         {
-            "cabal_sha256": "18405474813b37ddfc27778c88c549f444661432224999068417dfab3471281e",
+            "cabal_sha256": "2e5893334ee8967a990349a04953331b28e83bebd64d4f7cb46b71603d183d0c",
+            "component": "lib:hackage-security",
             "flags": [
                 "+base48",
                 "+cabal-syntax",
@@ -385,60 +438,79 @@
                 "+use-network-uri"
             ],
             "package": "hackage-security",
-            "revision": 2,
+            "revision": 5,
             "source": "hackage",
             "src_sha256": "52ee0576971955571d846b8e6c09638f89f4f7881f4a95173e44ccc0d856a066",
             "version": "0.6.2.3"
         },
         {
-            "cabal_sha256": "4ff4425c710cddf440dfbac6cd52310bb6b23e17902390ff71c9fc7eaafc4fcc",
+            "cabal_sha256": "3a76c313f9f75e8e0b3c103c1bff5bbaf754da30cbddedc1d5b7061d001030e0",
+            "component": "lib:regex-base",
             "flags": [],
             "package": "regex-base",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1",
             "version": "0.94.0.2"
         },
         {
-            "cabal_sha256": "9dbba4b65a3bb6975d9740814be5593c6b2d2d6a0b3febc8ec940edb9a9bbdf4",
+            "cabal_sha256": "d479ca2cc6274c15801169f83dae883c9b62b78af3c7b30ed3fbd4b4612156b8",
+            "component": "lib:regex-posix",
             "flags": [
                 "-_regex-posix-clib"
             ],
             "package": "regex-posix",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c",
             "version": "0.96.0.1"
         },
         {
-            "cabal_sha256": "61e2d98ff634b8b4b3db467772420c0f9c79c2da9ddf3d2daeb2af2417f2c535",
+            "cabal_sha256": "a42b4a473478db92f4728f755403db232b55445e3091a957be073fc8e84e5d46",
+            "component": "lib:resolv",
             "flags": [],
             "package": "resolv",
-            "revision": 5,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "81a2bafad484db123cf8d17a02d98bb388a127fd0f822fa022589468a0e64671",
-            "version": "0.1.2.0"
+            "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b",
+            "version": "0.2.0.2"
         },
         {
-            "cabal_sha256": "6e9b1b233af80cc0aa17ea858d2641ba146fb11cbcc5970a52649e89d77282e2",
+            "cabal_sha256": "f4aad0eca90044cb1eba53b84f75d5fa142d25d695117730bf31178d409c4fe0",
+            "component": "lib:safe-exceptions",
             "flags": [],
             "package": "safe-exceptions",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "91ce28d8f8a6efd31788d4827ed5cdcb9a546ad4053a86c56f7947c66a30b5bf",
-            "version": "0.1.7.3"
+            "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6",
+            "version": "0.1.7.4"
         },
         {
-            "cabal_sha256": "868694b09361e7c6756542bcdcfba68a9b8b93410c6798709e475abd3751afe7",
+            "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017",
+            "component": "lib:semaphore-compat",
             "flags": [],
             "package": "semaphore-compat",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2",
             "version": "1.0.0"
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install",
+            "flags": [
+                "+lukko",
+                "+native-dns"
+            ],
+            "package": "cabal-install",
+            "revision": null,
+            "source": "local",
+            "src_sha256": null,
+            "version": "3.11.0.0"
+        },
+        {
+            "cabal_sha256": null,
+            "component": "exe:cabal",
             "flags": [
                 "+lukko",
                 "+native-dns"
diff --git a/bootstrap/linux-9.0.2.json b/bootstrap/linux-9.0.2.json
index 5700325f05cf8e98da9efeb5fbcb4ab703c49f07..36613ac64ea9f2aeff86ebbf262f00a6ce2e9d75 100644
--- a/bootstrap/linux-9.0.2.json
+++ b/bootstrap/linux-9.0.2.json
@@ -24,6 +24,10 @@
             "package": "deepseq",
             "version": "1.4.5.0"
         },
+        {
+            "package": "containers",
+            "version": "0.6.4.1"
+        },
         {
             "package": "ghc-boot-th",
             "version": "9.0.2"
@@ -36,10 +40,6 @@
             "package": "template-haskell",
             "version": "2.17.0.0"
         },
-        {
-            "package": "containers",
-            "version": "0.6.4.1"
-        },
         {
             "package": "transformers",
             "version": "0.5.6.2"
@@ -63,45 +63,40 @@
     ],
     "dependencies": [
         {
-            "cabal_sha256": "55390b63bbd7846aab6b16b7b255cf5108a3a422798a1e9a3b674eb0c68ac20c",
+            "cabal_sha256": "458d4794a5ced371a844e325fe539dd5fee8fe41f78b6f00e6c70920b7dd18e3",
+            "component": "lib:bytestring",
             "flags": [],
             "package": "bytestring",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "491aaef7625c693a06c26ae7f097caf23d9e3f9cae14af5ab17e71abb39576d3",
-            "version": "0.11.4.0"
+            "src_sha256": "76193d39b66197107f452184597a4e458194c64731efbba1e9605550c732f7f4",
+            "version": "0.11.5.0"
         },
         {
-            "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801",
-            "flags": [],
-            "package": "binary",
-            "revision": 0,
-            "source": "hackage",
-            "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0",
-            "version": "0.8.9.1"
-        },
-        {
-            "cabal_sha256": "ab6e3330c42817b0effb14cae9c60d5cdc41d61f7354d04bc529ed031113f27c",
+            "cabal_sha256": "2de84756d3907308230e34fcc7c1917a73f218f6d53838618b7d5b95dd33e2c3",
+            "component": "lib:filepath",
             "flags": [
                 "-cpphs"
             ],
             "package": "filepath",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "ed1d11173f5052461cd1df58b5ef4abbfa1803ad2b237da7ddb7c7d64e017de2",
-            "version": "1.4.100.3"
+            "src_sha256": "82876250347c2fdf0f9de5448ce44f02539f37951b671d9a30719a6c4f96e9ad",
+            "version": "1.4.100.4"
         },
         {
-            "cabal_sha256": "26eeda14432a2fcc6049045068ecf59525ffff9196616a642b5ab2326a003692",
+            "cabal_sha256": "91cbc951a742fc2c95d5902be38fcf1b859c2891241bc353ff16154a8f7c35ae",
+            "component": "lib:unix",
             "flags": [],
             "package": "unix",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "5e59d9ca0f8e505d2203af7dba17c67275621fbcd4ed8fcbdd59e80df4d79a7d",
-            "version": "2.8.1.0"
+            "src_sha256": "cc287659427c80f3598c199387ba7eb7d4cc3270cbb31f75e2f677e879f26384",
+            "version": "2.8.1.1"
         },
         {
             "cabal_sha256": "e384a4831b0ac0f8908a1d99d14ce44bf9c5fe2092eec5b2c47ea072d477a493",
+            "component": "lib:directory",
             "flags": [],
             "package": "directory",
             "revision": 0,
@@ -110,19 +105,41 @@
             "version": "1.3.8.1"
         },
         {
-            "cabal_sha256": "d495b2a2a53da7e66163477a5837d2109074f8818fc938739b9ecf27d506050a",
+            "cabal_sha256": "3c9e1e6b4f2f956623375dd15b904144dd3183b28f1ce1afcce11192f6d868dd",
+            "component": "exe:alex",
+            "flags": [],
+            "package": "alex",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "7a1cd4e21399c40ea9372d1c03bf38698944b8437ce95cf27d1a7c262babe38e",
+            "version": "3.4.0.0"
+        },
+        {
+            "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801",
+            "component": "lib:binary",
+            "flags": [],
+            "package": "binary",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0",
+            "version": "0.8.9.1"
+        },
+        {
+            "cabal_sha256": "71b5fa8c64d3c1fd0a08f993463220867b08290a2256e94b0952bf0e8f5a45cc",
+            "component": "lib:text",
             "flags": [
                 "-developer",
                 "+simdutf"
             ],
             "package": "text",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "c735be650a898606ce9f2c8642bc6ac6123eea82871d5e90f92797801f59efad",
             "version": "2.0.2"
         },
         {
             "cabal_sha256": "5769242043b01bf759b07b7efedcb19607837ee79015fcddde34645664136aed",
+            "component": "lib:parsec",
             "flags": [],
             "package": "parsec",
             "revision": 0,
@@ -132,6 +149,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal-syntax",
             "flags": [],
             "package": "Cabal-syntax",
             "revision": null,
@@ -141,6 +159,7 @@
         },
         {
             "cabal_sha256": "49d8a7f372d35363011591b253cae4c8db8b9ec594590448e20b7bed7acaee98",
+            "component": "lib:process",
             "flags": [],
             "package": "process",
             "revision": 0,
@@ -150,6 +169,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal",
             "flags": [],
             "package": "Cabal",
             "revision": null,
@@ -158,18 +178,32 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "29b28d2e19ae9f5ff92cea4ab8d2e185408ee5de73b4127f7b485a904c9a8b15",
+            "cabal_sha256": "115b8c34b9f83603cfd9eb8b1e2d7ac520da0a4a43d96be435f06ce01a7bc95e",
+            "component": "exe:hsc2hs",
+            "flags": [
+                "-in-ghc-tree"
+            ],
+            "package": "hsc2hs",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "c95b10ce0b2c881480e35118d738dcc9cefc435ec72baa0031af81d0d4d3bc0a",
+            "version": "0.68.9"
+        },
+        {
+            "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def",
+            "component": "lib:network",
             "flags": [
                 "-devel"
             ],
             "package": "network",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "fde2d4b065f1984c76755004c64a29ae9ec52c8bf74f2485d805ef577e7c7822",
-            "version": "3.1.2.8"
+            "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e",
+            "version": "3.1.4.0"
         },
         {
             "cabal_sha256": "e5ae7c083ef3a22248558f8451669bb1c55ea8090f5908b86b9033743c161730",
+            "component": "lib:th-compat",
             "flags": [],
             "package": "th-compat",
             "revision": 2,
@@ -179,6 +213,7 @@
         },
         {
             "cabal_sha256": "1fde59abf5d82a9666b4415bc2b2e9e33f6c1309074fda12d50410c7dbd95f3b",
+            "component": "lib:network-uri",
             "flags": [],
             "package": "network-uri",
             "revision": 0,
@@ -187,7 +222,8 @@
             "version": "2.6.4.2"
         },
         {
-            "cabal_sha256": "b878d575c470bd1f72d37af6654d924ab2b9489d88de8a71bd74d9d5d726c013",
+            "cabal_sha256": "d9220cc1b8c1f287248d650910710b96e62e54530772e3bcd19dbdec6547f8ae",
+            "component": "lib:HTTP",
             "flags": [
                 "-conduit10",
                 "+network-uri",
@@ -195,13 +231,14 @@
                 "-warp-tests"
             ],
             "package": "HTTP",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453",
             "version": "4000.4.1"
         },
         {
             "cabal_sha256": "0bdd3486d3a1bcbed0513b46af4a13ca74b395313fa5b6e0068d6b7413b76a04",
+            "component": "lib:base-orphans",
             "flags": [],
             "package": "base-orphans",
             "revision": 0,
@@ -211,6 +248,7 @@
         },
         {
             "cabal_sha256": "2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada",
+            "component": "lib:data-array-byte",
             "flags": [],
             "package": "data-array-byte",
             "revision": 1,
@@ -220,6 +258,7 @@
         },
         {
             "cabal_sha256": "585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a",
+            "component": "lib:hashable",
             "flags": [
                 "+integer-gmp",
                 "-random-initial-seed"
@@ -232,6 +271,7 @@
         },
         {
             "cabal_sha256": "46367dc0c8326dcbeb7b93f200b567491c2f6029bccf822b8bb26ee660397e08",
+            "component": "lib:async",
             "flags": [
                 "-bench"
             ],
@@ -243,6 +283,7 @@
         },
         {
             "cabal_sha256": "64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a",
+            "component": "lib:base16-bytestring",
             "flags": [],
             "package": "base16-bytestring",
             "revision": 0,
@@ -251,16 +292,18 @@
             "version": "1.0.2.0"
         },
         {
-            "cabal_sha256": "50ec0e229255d4c45cbdd568da011311b8887f304b931564886016f4984334d8",
+            "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803",
+            "component": "lib:base64-bytestring",
             "flags": [],
             "package": "base64-bytestring",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9",
             "version": "1.2.1.0"
         },
         {
             "cabal_sha256": "db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e",
+            "component": "lib:splitmix",
             "flags": [
                 "-optimised-mixer"
             ],
@@ -272,6 +315,7 @@
         },
         {
             "cabal_sha256": "dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9",
+            "component": "lib:random",
             "flags": [],
             "package": "random",
             "revision": 0,
@@ -281,6 +325,7 @@
         },
         {
             "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee",
+            "component": "lib:edit-distance",
             "flags": [],
             "package": "edit-distance",
             "revision": 1,
@@ -290,6 +335,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install-solver",
             "flags": [
                 "-debug-conflict-sets",
                 "-debug-expensive-assertions",
@@ -302,19 +348,21 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "facd0c04925ef925ec05243471fd16055229fdf51f64db1a1049de0cc6c6dfc3",
+            "cabal_sha256": "72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc",
+            "component": "lib:cryptohash-sha256",
             "flags": [
                 "-exe",
                 "+use-cbits"
             ],
             "package": "cryptohash-sha256",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6",
             "version": "0.11.102.1"
         },
         {
             "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42",
+            "component": "lib:echo",
             "flags": [
                 "-example"
             ],
@@ -325,7 +373,8 @@
             "version": "0.1.4"
         },
         {
-            "cabal_sha256": "885c9e2410e5d91a08b199897df0867fecedf818216d7329a2d43a512833dd63",
+            "cabal_sha256": "3db04d7c18b9e68ba5eef3fa7eeca05e1e248958dd182290c8e6b010c81ef73e",
+            "component": "lib:ed25519",
             "flags": [
                 "+no-donna",
                 "+test-doctests",
@@ -333,49 +382,53 @@
                 "+test-properties"
             ],
             "package": "ed25519",
-            "revision": 6,
+            "revision": 7,
             "source": "hackage",
             "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d",
             "version": "0.0.5.0"
         },
         {
-            "cabal_sha256": "efd4c08c4df1ac3f423858a834c0e3b5b4909febda66a901d12a8e1d57bddaa8",
+            "cabal_sha256": "9ab54ee4f80bbd8a3fddd639ea142b7039ee2deb27f7df031a93de1819e34146",
+            "component": "lib:lukko",
             "flags": [
                 "+ofd-locking"
             ],
             "package": "lukko",
-            "revision": 3,
+            "revision": 4,
             "source": "hackage",
             "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f",
             "version": "0.1.1.3"
         },
         {
-            "cabal_sha256": "bc14969ea4adfec6eee20264decf4a07c4002b38b2aa802d58d86b1a2cf7b895",
+            "cabal_sha256": "63dbcb0f507273a8331363e4c13a1fe91f4ea0c495883cf65f314629582a2630",
+            "component": "lib:tar",
             "flags": [
                 "-old-bytestring",
                 "-old-time"
             ],
             "package": "tar",
-            "revision": 5,
+            "revision": 6,
             "source": "hackage",
             "src_sha256": "b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de",
             "version": "0.5.1.1"
         },
         {
-            "cabal_sha256": "9adce39e4ca0b7a87d45df0a243134816c57059a08e28cff5469c98ae1f54dfc",
+            "cabal_sha256": "386dd93bc0352bf6ad5c6bca4dee0442b52d95b4c34e85901064f3eb05c81731",
+            "component": "lib:zlib",
             "flags": [
                 "-bundled-c-zlib",
                 "-non-blocking-ffi",
                 "-pkg-config"
             ],
             "package": "zlib",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "9eaa989ad4534438b5beb51c1d3a4c8f6a088fdff0b259a5394fbf39aaee04da",
             "version": "0.6.3.0"
         },
         {
-            "cabal_sha256": "18405474813b37ddfc27778c88c549f444661432224999068417dfab3471281e",
+            "cabal_sha256": "2e5893334ee8967a990349a04953331b28e83bebd64d4f7cb46b71603d183d0c",
+            "component": "lib:hackage-security",
             "flags": [
                 "+base48",
                 "+cabal-syntax",
@@ -385,60 +438,79 @@
                 "+use-network-uri"
             ],
             "package": "hackage-security",
-            "revision": 2,
+            "revision": 5,
             "source": "hackage",
             "src_sha256": "52ee0576971955571d846b8e6c09638f89f4f7881f4a95173e44ccc0d856a066",
             "version": "0.6.2.3"
         },
         {
-            "cabal_sha256": "4ff4425c710cddf440dfbac6cd52310bb6b23e17902390ff71c9fc7eaafc4fcc",
+            "cabal_sha256": "3a76c313f9f75e8e0b3c103c1bff5bbaf754da30cbddedc1d5b7061d001030e0",
+            "component": "lib:regex-base",
             "flags": [],
             "package": "regex-base",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1",
             "version": "0.94.0.2"
         },
         {
-            "cabal_sha256": "9dbba4b65a3bb6975d9740814be5593c6b2d2d6a0b3febc8ec940edb9a9bbdf4",
+            "cabal_sha256": "d479ca2cc6274c15801169f83dae883c9b62b78af3c7b30ed3fbd4b4612156b8",
+            "component": "lib:regex-posix",
             "flags": [
                 "-_regex-posix-clib"
             ],
             "package": "regex-posix",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c",
             "version": "0.96.0.1"
         },
         {
-            "cabal_sha256": "61e2d98ff634b8b4b3db467772420c0f9c79c2da9ddf3d2daeb2af2417f2c535",
+            "cabal_sha256": "a42b4a473478db92f4728f755403db232b55445e3091a957be073fc8e84e5d46",
+            "component": "lib:resolv",
             "flags": [],
             "package": "resolv",
-            "revision": 5,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "81a2bafad484db123cf8d17a02d98bb388a127fd0f822fa022589468a0e64671",
-            "version": "0.1.2.0"
+            "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b",
+            "version": "0.2.0.2"
         },
         {
-            "cabal_sha256": "6e9b1b233af80cc0aa17ea858d2641ba146fb11cbcc5970a52649e89d77282e2",
+            "cabal_sha256": "f4aad0eca90044cb1eba53b84f75d5fa142d25d695117730bf31178d409c4fe0",
+            "component": "lib:safe-exceptions",
             "flags": [],
             "package": "safe-exceptions",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "91ce28d8f8a6efd31788d4827ed5cdcb9a546ad4053a86c56f7947c66a30b5bf",
-            "version": "0.1.7.3"
+            "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6",
+            "version": "0.1.7.4"
         },
         {
-            "cabal_sha256": "868694b09361e7c6756542bcdcfba68a9b8b93410c6798709e475abd3751afe7",
+            "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017",
+            "component": "lib:semaphore-compat",
             "flags": [],
             "package": "semaphore-compat",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2",
             "version": "1.0.0"
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install",
+            "flags": [
+                "+lukko",
+                "+native-dns"
+            ],
+            "package": "cabal-install",
+            "revision": null,
+            "source": "local",
+            "src_sha256": null,
+            "version": "3.11.0.0"
+        },
+        {
+            "cabal_sha256": null,
+            "component": "exe:cabal",
             "flags": [
                 "+lukko",
                 "+native-dns"
diff --git a/bootstrap/linux-9.2.7.json b/bootstrap/linux-9.2.7.json
index 3b8fda58d69ac33c4746f6317e8b32b9edcd3f25..4cc8973f751e43d92eacf26df05f7b2fd7f8c25f 100644
--- a/bootstrap/linux-9.2.7.json
+++ b/bootstrap/linux-9.2.7.json
@@ -24,6 +24,10 @@
             "package": "deepseq",
             "version": "1.4.6.1"
         },
+        {
+            "package": "containers",
+            "version": "0.6.5.1"
+        },
         {
             "package": "ghc-boot-th",
             "version": "9.2.7"
@@ -40,14 +44,6 @@
             "package": "bytestring",
             "version": "0.11.4.0"
         },
-        {
-            "package": "containers",
-            "version": "0.6.5.1"
-        },
-        {
-            "package": "binary",
-            "version": "0.8.9.0"
-        },
         {
             "package": "transformers",
             "version": "0.5.6.2"
@@ -68,6 +64,10 @@
             "package": "time",
             "version": "1.11.1.1"
         },
+        {
+            "package": "binary",
+            "version": "0.8.9.0"
+        },
         {
             "package": "text",
             "version": "1.2.5.0"
@@ -79,27 +79,30 @@
     ],
     "dependencies": [
         {
-            "cabal_sha256": "ab6e3330c42817b0effb14cae9c60d5cdc41d61f7354d04bc529ed031113f27c",
+            "cabal_sha256": "2de84756d3907308230e34fcc7c1917a73f218f6d53838618b7d5b95dd33e2c3",
+            "component": "lib:filepath",
             "flags": [
                 "-cpphs"
             ],
             "package": "filepath",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "ed1d11173f5052461cd1df58b5ef4abbfa1803ad2b237da7ddb7c7d64e017de2",
-            "version": "1.4.100.3"
+            "src_sha256": "82876250347c2fdf0f9de5448ce44f02539f37951b671d9a30719a6c4f96e9ad",
+            "version": "1.4.100.4"
         },
         {
-            "cabal_sha256": "26eeda14432a2fcc6049045068ecf59525ffff9196616a642b5ab2326a003692",
+            "cabal_sha256": "91cbc951a742fc2c95d5902be38fcf1b859c2891241bc353ff16154a8f7c35ae",
+            "component": "lib:unix",
             "flags": [],
             "package": "unix",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "5e59d9ca0f8e505d2203af7dba17c67275621fbcd4ed8fcbdd59e80df4d79a7d",
-            "version": "2.8.1.0"
+            "src_sha256": "cc287659427c80f3598c199387ba7eb7d4cc3270cbb31f75e2f677e879f26384",
+            "version": "2.8.1.1"
         },
         {
             "cabal_sha256": "e384a4831b0ac0f8908a1d99d14ce44bf9c5fe2092eec5b2c47ea072d477a493",
+            "component": "lib:directory",
             "flags": [],
             "package": "directory",
             "revision": 0,
@@ -107,8 +110,19 @@
             "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c",
             "version": "1.3.8.1"
         },
+        {
+            "cabal_sha256": "3c9e1e6b4f2f956623375dd15b904144dd3183b28f1ce1afcce11192f6d868dd",
+            "component": "exe:alex",
+            "flags": [],
+            "package": "alex",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "7a1cd4e21399c40ea9372d1c03bf38698944b8437ce95cf27d1a7c262babe38e",
+            "version": "3.4.0.0"
+        },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal-syntax",
             "flags": [],
             "package": "Cabal-syntax",
             "revision": null,
@@ -118,6 +132,7 @@
         },
         {
             "cabal_sha256": "49d8a7f372d35363011591b253cae4c8db8b9ec594590448e20b7bed7acaee98",
+            "component": "lib:process",
             "flags": [],
             "package": "process",
             "revision": 0,
@@ -127,6 +142,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal",
             "flags": [],
             "package": "Cabal",
             "revision": null,
@@ -135,18 +151,32 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "29b28d2e19ae9f5ff92cea4ab8d2e185408ee5de73b4127f7b485a904c9a8b15",
+            "cabal_sha256": "115b8c34b9f83603cfd9eb8b1e2d7ac520da0a4a43d96be435f06ce01a7bc95e",
+            "component": "exe:hsc2hs",
+            "flags": [
+                "-in-ghc-tree"
+            ],
+            "package": "hsc2hs",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "c95b10ce0b2c881480e35118d738dcc9cefc435ec72baa0031af81d0d4d3bc0a",
+            "version": "0.68.9"
+        },
+        {
+            "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def",
+            "component": "lib:network",
             "flags": [
                 "-devel"
             ],
             "package": "network",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "fde2d4b065f1984c76755004c64a29ae9ec52c8bf74f2485d805ef577e7c7822",
-            "version": "3.1.2.8"
+            "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e",
+            "version": "3.1.4.0"
         },
         {
             "cabal_sha256": "e5ae7c083ef3a22248558f8451669bb1c55ea8090f5908b86b9033743c161730",
+            "component": "lib:th-compat",
             "flags": [],
             "package": "th-compat",
             "revision": 2,
@@ -156,6 +186,7 @@
         },
         {
             "cabal_sha256": "1fde59abf5d82a9666b4415bc2b2e9e33f6c1309074fda12d50410c7dbd95f3b",
+            "component": "lib:network-uri",
             "flags": [],
             "package": "network-uri",
             "revision": 0,
@@ -164,7 +195,8 @@
             "version": "2.6.4.2"
         },
         {
-            "cabal_sha256": "b878d575c470bd1f72d37af6654d924ab2b9489d88de8a71bd74d9d5d726c013",
+            "cabal_sha256": "d9220cc1b8c1f287248d650910710b96e62e54530772e3bcd19dbdec6547f8ae",
+            "component": "lib:HTTP",
             "flags": [
                 "-conduit10",
                 "+network-uri",
@@ -172,13 +204,14 @@
                 "-warp-tests"
             ],
             "package": "HTTP",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453",
             "version": "4000.4.1"
         },
         {
             "cabal_sha256": "2ef1bd3511e82ba56f7f23cd793dd2da84338a1e7c2cbea5b151417afe3baada",
+            "component": "lib:data-array-byte",
             "flags": [],
             "package": "data-array-byte",
             "revision": 1,
@@ -188,6 +221,7 @@
         },
         {
             "cabal_sha256": "585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a",
+            "component": "lib:hashable",
             "flags": [
                 "+integer-gmp",
                 "-random-initial-seed"
@@ -200,6 +234,7 @@
         },
         {
             "cabal_sha256": "46367dc0c8326dcbeb7b93f200b567491c2f6029bccf822b8bb26ee660397e08",
+            "component": "lib:async",
             "flags": [
                 "-bench"
             ],
@@ -211,6 +246,7 @@
         },
         {
             "cabal_sha256": "64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a",
+            "component": "lib:base16-bytestring",
             "flags": [],
             "package": "base16-bytestring",
             "revision": 0,
@@ -219,16 +255,18 @@
             "version": "1.0.2.0"
         },
         {
-            "cabal_sha256": "50ec0e229255d4c45cbdd568da011311b8887f304b931564886016f4984334d8",
+            "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803",
+            "component": "lib:base64-bytestring",
             "flags": [],
             "package": "base64-bytestring",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9",
             "version": "1.2.1.0"
         },
         {
             "cabal_sha256": "db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e",
+            "component": "lib:splitmix",
             "flags": [
                 "-optimised-mixer"
             ],
@@ -240,6 +278,7 @@
         },
         {
             "cabal_sha256": "dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9",
+            "component": "lib:random",
             "flags": [],
             "package": "random",
             "revision": 0,
@@ -249,6 +288,7 @@
         },
         {
             "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee",
+            "component": "lib:edit-distance",
             "flags": [],
             "package": "edit-distance",
             "revision": 1,
@@ -258,6 +298,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install-solver",
             "flags": [
                 "-debug-conflict-sets",
                 "-debug-expensive-assertions",
@@ -270,19 +311,21 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "facd0c04925ef925ec05243471fd16055229fdf51f64db1a1049de0cc6c6dfc3",
+            "cabal_sha256": "72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc",
+            "component": "lib:cryptohash-sha256",
             "flags": [
                 "-exe",
                 "+use-cbits"
             ],
             "package": "cryptohash-sha256",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6",
             "version": "0.11.102.1"
         },
         {
             "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42",
+            "component": "lib:echo",
             "flags": [
                 "-example"
             ],
@@ -293,7 +336,8 @@
             "version": "0.1.4"
         },
         {
-            "cabal_sha256": "885c9e2410e5d91a08b199897df0867fecedf818216d7329a2d43a512833dd63",
+            "cabal_sha256": "3db04d7c18b9e68ba5eef3fa7eeca05e1e248958dd182290c8e6b010c81ef73e",
+            "component": "lib:ed25519",
             "flags": [
                 "+no-donna",
                 "+test-doctests",
@@ -301,49 +345,53 @@
                 "+test-properties"
             ],
             "package": "ed25519",
-            "revision": 6,
+            "revision": 7,
             "source": "hackage",
             "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d",
             "version": "0.0.5.0"
         },
         {
-            "cabal_sha256": "efd4c08c4df1ac3f423858a834c0e3b5b4909febda66a901d12a8e1d57bddaa8",
+            "cabal_sha256": "9ab54ee4f80bbd8a3fddd639ea142b7039ee2deb27f7df031a93de1819e34146",
+            "component": "lib:lukko",
             "flags": [
                 "+ofd-locking"
             ],
             "package": "lukko",
-            "revision": 3,
+            "revision": 4,
             "source": "hackage",
             "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f",
             "version": "0.1.1.3"
         },
         {
-            "cabal_sha256": "bc14969ea4adfec6eee20264decf4a07c4002b38b2aa802d58d86b1a2cf7b895",
+            "cabal_sha256": "63dbcb0f507273a8331363e4c13a1fe91f4ea0c495883cf65f314629582a2630",
+            "component": "lib:tar",
             "flags": [
                 "-old-bytestring",
                 "-old-time"
             ],
             "package": "tar",
-            "revision": 5,
+            "revision": 6,
             "source": "hackage",
             "src_sha256": "b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de",
             "version": "0.5.1.1"
         },
         {
-            "cabal_sha256": "9adce39e4ca0b7a87d45df0a243134816c57059a08e28cff5469c98ae1f54dfc",
+            "cabal_sha256": "386dd93bc0352bf6ad5c6bca4dee0442b52d95b4c34e85901064f3eb05c81731",
+            "component": "lib:zlib",
             "flags": [
                 "-bundled-c-zlib",
                 "-non-blocking-ffi",
                 "-pkg-config"
             ],
             "package": "zlib",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "9eaa989ad4534438b5beb51c1d3a4c8f6a088fdff0b259a5394fbf39aaee04da",
             "version": "0.6.3.0"
         },
         {
-            "cabal_sha256": "18405474813b37ddfc27778c88c549f444661432224999068417dfab3471281e",
+            "cabal_sha256": "2e5893334ee8967a990349a04953331b28e83bebd64d4f7cb46b71603d183d0c",
+            "component": "lib:hackage-security",
             "flags": [
                 "+base48",
                 "+cabal-syntax",
@@ -353,60 +401,79 @@
                 "+use-network-uri"
             ],
             "package": "hackage-security",
-            "revision": 2,
+            "revision": 5,
             "source": "hackage",
             "src_sha256": "52ee0576971955571d846b8e6c09638f89f4f7881f4a95173e44ccc0d856a066",
             "version": "0.6.2.3"
         },
         {
-            "cabal_sha256": "4ff4425c710cddf440dfbac6cd52310bb6b23e17902390ff71c9fc7eaafc4fcc",
+            "cabal_sha256": "3a76c313f9f75e8e0b3c103c1bff5bbaf754da30cbddedc1d5b7061d001030e0",
+            "component": "lib:regex-base",
             "flags": [],
             "package": "regex-base",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1",
             "version": "0.94.0.2"
         },
         {
-            "cabal_sha256": "9dbba4b65a3bb6975d9740814be5593c6b2d2d6a0b3febc8ec940edb9a9bbdf4",
+            "cabal_sha256": "d479ca2cc6274c15801169f83dae883c9b62b78af3c7b30ed3fbd4b4612156b8",
+            "component": "lib:regex-posix",
             "flags": [
                 "-_regex-posix-clib"
             ],
             "package": "regex-posix",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c",
             "version": "0.96.0.1"
         },
         {
-            "cabal_sha256": "61e2d98ff634b8b4b3db467772420c0f9c79c2da9ddf3d2daeb2af2417f2c535",
+            "cabal_sha256": "a42b4a473478db92f4728f755403db232b55445e3091a957be073fc8e84e5d46",
+            "component": "lib:resolv",
             "flags": [],
             "package": "resolv",
-            "revision": 5,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "81a2bafad484db123cf8d17a02d98bb388a127fd0f822fa022589468a0e64671",
-            "version": "0.1.2.0"
+            "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b",
+            "version": "0.2.0.2"
         },
         {
-            "cabal_sha256": "6e9b1b233af80cc0aa17ea858d2641ba146fb11cbcc5970a52649e89d77282e2",
+            "cabal_sha256": "f4aad0eca90044cb1eba53b84f75d5fa142d25d695117730bf31178d409c4fe0",
+            "component": "lib:safe-exceptions",
             "flags": [],
             "package": "safe-exceptions",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "91ce28d8f8a6efd31788d4827ed5cdcb9a546ad4053a86c56f7947c66a30b5bf",
-            "version": "0.1.7.3"
+            "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6",
+            "version": "0.1.7.4"
         },
         {
-            "cabal_sha256": "868694b09361e7c6756542bcdcfba68a9b8b93410c6798709e475abd3751afe7",
+            "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017",
+            "component": "lib:semaphore-compat",
             "flags": [],
             "package": "semaphore-compat",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2",
             "version": "1.0.0"
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install",
+            "flags": [
+                "+lukko",
+                "+native-dns"
+            ],
+            "package": "cabal-install",
+            "revision": null,
+            "source": "local",
+            "src_sha256": null,
+            "version": "3.11.0.0"
+        },
+        {
+            "cabal_sha256": null,
+            "component": "exe:cabal",
             "flags": [
                 "+lukko",
                 "+native-dns"
diff --git a/bootstrap/linux-9.4.4.json b/bootstrap/linux-9.4.4.json
index bcb80b9104ab6e40c6f031999db76b39a486a984..af00acf12afa608a78c4551b9c285fea8dc6c254 100644
--- a/bootstrap/linux-9.4.4.json
+++ b/bootstrap/linux-9.4.4.json
@@ -36,17 +36,13 @@
             "package": "template-haskell",
             "version": "2.19.0.0"
         },
-        {
-            "package": "bytestring",
-            "version": "0.11.3.1"
-        },
         {
             "package": "containers",
             "version": "0.6.6"
         },
         {
-            "package": "binary",
-            "version": "0.8.9.1"
+            "package": "bytestring",
+            "version": "0.11.3.1"
         },
         {
             "package": "transformers",
@@ -68,6 +64,10 @@
             "package": "time",
             "version": "1.12.2"
         },
+        {
+            "package": "binary",
+            "version": "0.8.9.1"
+        },
         {
             "package": "text",
             "version": "2.0.1"
@@ -79,27 +79,30 @@
     ],
     "dependencies": [
         {
-            "cabal_sha256": "ab6e3330c42817b0effb14cae9c60d5cdc41d61f7354d04bc529ed031113f27c",
+            "cabal_sha256": "2de84756d3907308230e34fcc7c1917a73f218f6d53838618b7d5b95dd33e2c3",
+            "component": "lib:filepath",
             "flags": [
                 "-cpphs"
             ],
             "package": "filepath",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "ed1d11173f5052461cd1df58b5ef4abbfa1803ad2b237da7ddb7c7d64e017de2",
-            "version": "1.4.100.3"
+            "src_sha256": "82876250347c2fdf0f9de5448ce44f02539f37951b671d9a30719a6c4f96e9ad",
+            "version": "1.4.100.4"
         },
         {
-            "cabal_sha256": "26eeda14432a2fcc6049045068ecf59525ffff9196616a642b5ab2326a003692",
+            "cabal_sha256": "91cbc951a742fc2c95d5902be38fcf1b859c2891241bc353ff16154a8f7c35ae",
+            "component": "lib:unix",
             "flags": [],
             "package": "unix",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "5e59d9ca0f8e505d2203af7dba17c67275621fbcd4ed8fcbdd59e80df4d79a7d",
-            "version": "2.8.1.0"
+            "src_sha256": "cc287659427c80f3598c199387ba7eb7d4cc3270cbb31f75e2f677e879f26384",
+            "version": "2.8.1.1"
         },
         {
             "cabal_sha256": "e384a4831b0ac0f8908a1d99d14ce44bf9c5fe2092eec5b2c47ea072d477a493",
+            "component": "lib:directory",
             "flags": [],
             "package": "directory",
             "revision": 0,
@@ -107,8 +110,19 @@
             "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c",
             "version": "1.3.8.1"
         },
+        {
+            "cabal_sha256": "3c9e1e6b4f2f956623375dd15b904144dd3183b28f1ce1afcce11192f6d868dd",
+            "component": "exe:alex",
+            "flags": [],
+            "package": "alex",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "7a1cd4e21399c40ea9372d1c03bf38698944b8437ce95cf27d1a7c262babe38e",
+            "version": "3.4.0.0"
+        },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal-syntax",
             "flags": [],
             "package": "Cabal-syntax",
             "revision": null,
@@ -118,6 +132,7 @@
         },
         {
             "cabal_sha256": "49d8a7f372d35363011591b253cae4c8db8b9ec594590448e20b7bed7acaee98",
+            "component": "lib:process",
             "flags": [],
             "package": "process",
             "revision": 0,
@@ -127,6 +142,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:Cabal",
             "flags": [],
             "package": "Cabal",
             "revision": null,
@@ -135,18 +151,32 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "29b28d2e19ae9f5ff92cea4ab8d2e185408ee5de73b4127f7b485a904c9a8b15",
+            "cabal_sha256": "115b8c34b9f83603cfd9eb8b1e2d7ac520da0a4a43d96be435f06ce01a7bc95e",
+            "component": "exe:hsc2hs",
+            "flags": [
+                "-in-ghc-tree"
+            ],
+            "package": "hsc2hs",
+            "revision": 0,
+            "source": "hackage",
+            "src_sha256": "c95b10ce0b2c881480e35118d738dcc9cefc435ec72baa0031af81d0d4d3bc0a",
+            "version": "0.68.9"
+        },
+        {
+            "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def",
+            "component": "lib:network",
             "flags": [
                 "-devel"
             ],
             "package": "network",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "fde2d4b065f1984c76755004c64a29ae9ec52c8bf74f2485d805ef577e7c7822",
-            "version": "3.1.2.8"
+            "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e",
+            "version": "3.1.4.0"
         },
         {
             "cabal_sha256": "e5ae7c083ef3a22248558f8451669bb1c55ea8090f5908b86b9033743c161730",
+            "component": "lib:th-compat",
             "flags": [],
             "package": "th-compat",
             "revision": 2,
@@ -156,6 +186,7 @@
         },
         {
             "cabal_sha256": "1fde59abf5d82a9666b4415bc2b2e9e33f6c1309074fda12d50410c7dbd95f3b",
+            "component": "lib:network-uri",
             "flags": [],
             "package": "network-uri",
             "revision": 0,
@@ -164,7 +195,8 @@
             "version": "2.6.4.2"
         },
         {
-            "cabal_sha256": "b878d575c470bd1f72d37af6654d924ab2b9489d88de8a71bd74d9d5d726c013",
+            "cabal_sha256": "d9220cc1b8c1f287248d650910710b96e62e54530772e3bcd19dbdec6547f8ae",
+            "component": "lib:HTTP",
             "flags": [
                 "-conduit10",
                 "+network-uri",
@@ -172,13 +204,14 @@
                 "-warp-tests"
             ],
             "package": "HTTP",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453",
             "version": "4000.4.1"
         },
         {
             "cabal_sha256": "585792335d5541dba78fa8dfcb291a89cd5812a281825ff7a44afa296ab5d58a",
+            "component": "lib:hashable",
             "flags": [
                 "+integer-gmp",
                 "-random-initial-seed"
@@ -191,6 +224,7 @@
         },
         {
             "cabal_sha256": "46367dc0c8326dcbeb7b93f200b567491c2f6029bccf822b8bb26ee660397e08",
+            "component": "lib:async",
             "flags": [
                 "-bench"
             ],
@@ -202,6 +236,7 @@
         },
         {
             "cabal_sha256": "64abad7816ab8cabed8489e29f807b3a6f828e0b2cec0eae404323d69d36df9a",
+            "component": "lib:base16-bytestring",
             "flags": [],
             "package": "base16-bytestring",
             "revision": 0,
@@ -210,16 +245,18 @@
             "version": "1.0.2.0"
         },
         {
-            "cabal_sha256": "50ec0e229255d4c45cbdd568da011311b8887f304b931564886016f4984334d8",
+            "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803",
+            "component": "lib:base64-bytestring",
             "flags": [],
             "package": "base64-bytestring",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9",
             "version": "1.2.1.0"
         },
         {
             "cabal_sha256": "db25c2e17967aa6b6046ab8b1b96ba3f344ca59a62b60fb6113d51ea305a3d8e",
+            "component": "lib:splitmix",
             "flags": [
                 "-optimised-mixer"
             ],
@@ -231,6 +268,7 @@
         },
         {
             "cabal_sha256": "dea1f11e5569332dc6c8efaad1cb301016a5587b6754943a49f9de08ae0e56d9",
+            "component": "lib:random",
             "flags": [],
             "package": "random",
             "revision": 0,
@@ -240,6 +278,7 @@
         },
         {
             "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee",
+            "component": "lib:edit-distance",
             "flags": [],
             "package": "edit-distance",
             "revision": 1,
@@ -249,6 +288,7 @@
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install-solver",
             "flags": [
                 "-debug-conflict-sets",
                 "-debug-expensive-assertions",
@@ -261,19 +301,21 @@
             "version": "3.11.0.0"
         },
         {
-            "cabal_sha256": "facd0c04925ef925ec05243471fd16055229fdf51f64db1a1049de0cc6c6dfc3",
+            "cabal_sha256": "72ce9095872eae653addca5f412ac8070d6282d8e1c8578c2237c33f2cbbf4bc",
+            "component": "lib:cryptohash-sha256",
             "flags": [
                 "-exe",
                 "+use-cbits"
             ],
             "package": "cryptohash-sha256",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6",
             "version": "0.11.102.1"
         },
         {
             "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42",
+            "component": "lib:echo",
             "flags": [
                 "-example"
             ],
@@ -284,7 +326,8 @@
             "version": "0.1.4"
         },
         {
-            "cabal_sha256": "885c9e2410e5d91a08b199897df0867fecedf818216d7329a2d43a512833dd63",
+            "cabal_sha256": "3db04d7c18b9e68ba5eef3fa7eeca05e1e248958dd182290c8e6b010c81ef73e",
+            "component": "lib:ed25519",
             "flags": [
                 "+no-donna",
                 "+test-doctests",
@@ -292,49 +335,53 @@
                 "+test-properties"
             ],
             "package": "ed25519",
-            "revision": 6,
+            "revision": 7,
             "source": "hackage",
             "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d",
             "version": "0.0.5.0"
         },
         {
-            "cabal_sha256": "efd4c08c4df1ac3f423858a834c0e3b5b4909febda66a901d12a8e1d57bddaa8",
+            "cabal_sha256": "9ab54ee4f80bbd8a3fddd639ea142b7039ee2deb27f7df031a93de1819e34146",
+            "component": "lib:lukko",
             "flags": [
                 "+ofd-locking"
             ],
             "package": "lukko",
-            "revision": 3,
+            "revision": 4,
             "source": "hackage",
             "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f",
             "version": "0.1.1.3"
         },
         {
-            "cabal_sha256": "bc14969ea4adfec6eee20264decf4a07c4002b38b2aa802d58d86b1a2cf7b895",
+            "cabal_sha256": "63dbcb0f507273a8331363e4c13a1fe91f4ea0c495883cf65f314629582a2630",
+            "component": "lib:tar",
             "flags": [
                 "-old-bytestring",
                 "-old-time"
             ],
             "package": "tar",
-            "revision": 5,
+            "revision": 6,
             "source": "hackage",
             "src_sha256": "b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de",
             "version": "0.5.1.1"
         },
         {
-            "cabal_sha256": "9adce39e4ca0b7a87d45df0a243134816c57059a08e28cff5469c98ae1f54dfc",
+            "cabal_sha256": "386dd93bc0352bf6ad5c6bca4dee0442b52d95b4c34e85901064f3eb05c81731",
+            "component": "lib:zlib",
             "flags": [
                 "-bundled-c-zlib",
                 "-non-blocking-ffi",
                 "-pkg-config"
             ],
             "package": "zlib",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "9eaa989ad4534438b5beb51c1d3a4c8f6a088fdff0b259a5394fbf39aaee04da",
             "version": "0.6.3.0"
         },
         {
-            "cabal_sha256": "18405474813b37ddfc27778c88c549f444661432224999068417dfab3471281e",
+            "cabal_sha256": "2e5893334ee8967a990349a04953331b28e83bebd64d4f7cb46b71603d183d0c",
+            "component": "lib:hackage-security",
             "flags": [
                 "+base48",
                 "+cabal-syntax",
@@ -344,60 +391,79 @@
                 "+use-network-uri"
             ],
             "package": "hackage-security",
-            "revision": 2,
+            "revision": 5,
             "source": "hackage",
             "src_sha256": "52ee0576971955571d846b8e6c09638f89f4f7881f4a95173e44ccc0d856a066",
             "version": "0.6.2.3"
         },
         {
-            "cabal_sha256": "4ff4425c710cddf440dfbac6cd52310bb6b23e17902390ff71c9fc7eaafc4fcc",
+            "cabal_sha256": "3a76c313f9f75e8e0b3c103c1bff5bbaf754da30cbddedc1d5b7061d001030e0",
+            "component": "lib:regex-base",
             "flags": [],
             "package": "regex-base",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1",
             "version": "0.94.0.2"
         },
         {
-            "cabal_sha256": "9dbba4b65a3bb6975d9740814be5593c6b2d2d6a0b3febc8ec940edb9a9bbdf4",
+            "cabal_sha256": "d479ca2cc6274c15801169f83dae883c9b62b78af3c7b30ed3fbd4b4612156b8",
+            "component": "lib:regex-posix",
             "flags": [
                 "-_regex-posix-clib"
             ],
             "package": "regex-posix",
-            "revision": 1,
+            "revision": 2,
             "source": "hackage",
             "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c",
             "version": "0.96.0.1"
         },
         {
-            "cabal_sha256": "61e2d98ff634b8b4b3db467772420c0f9c79c2da9ddf3d2daeb2af2417f2c535",
+            "cabal_sha256": "a42b4a473478db92f4728f755403db232b55445e3091a957be073fc8e84e5d46",
+            "component": "lib:resolv",
             "flags": [],
             "package": "resolv",
-            "revision": 5,
+            "revision": 1,
             "source": "hackage",
-            "src_sha256": "81a2bafad484db123cf8d17a02d98bb388a127fd0f822fa022589468a0e64671",
-            "version": "0.1.2.0"
+            "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b",
+            "version": "0.2.0.2"
         },
         {
-            "cabal_sha256": "6e9b1b233af80cc0aa17ea858d2641ba146fb11cbcc5970a52649e89d77282e2",
+            "cabal_sha256": "f4aad0eca90044cb1eba53b84f75d5fa142d25d695117730bf31178d409c4fe0",
+            "component": "lib:safe-exceptions",
             "flags": [],
             "package": "safe-exceptions",
             "revision": 0,
             "source": "hackage",
-            "src_sha256": "91ce28d8f8a6efd31788d4827ed5cdcb9a546ad4053a86c56f7947c66a30b5bf",
-            "version": "0.1.7.3"
+            "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6",
+            "version": "0.1.7.4"
         },
         {
-            "cabal_sha256": "868694b09361e7c6756542bcdcfba68a9b8b93410c6798709e475abd3751afe7",
+            "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017",
+            "component": "lib:semaphore-compat",
             "flags": [],
             "package": "semaphore-compat",
-            "revision": 0,
+            "revision": 1,
             "source": "hackage",
             "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2",
             "version": "1.0.0"
         },
         {
             "cabal_sha256": null,
+            "component": "lib:cabal-install",
+            "flags": [
+                "+lukko",
+                "+native-dns"
+            ],
+            "package": "cabal-install",
+            "revision": null,
+            "source": "local",
+            "src_sha256": null,
+            "version": "3.11.0.0"
+        },
+        {
+            "cabal_sha256": null,
+            "component": "exe:cabal",
             "flags": [
                 "+lukko",
                 "+native-dns"
diff --git a/bootstrap/src/Main.hs b/bootstrap/src/Main.hs
index 0ca636ea0207adfb6ed300eaddd69951609fa098..8f06acba2ce931280f0ddc295935ec03297c2c59 100644
--- a/bootstrap/src/Main.hs
+++ b/bootstrap/src/Main.hs
@@ -1,11 +1,12 @@
 {-# LANGUAGE CPP #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE LambdaCase #-}
+{-# OPTIONS_GHC -Wno-deferred-out-of-scope-variables #-}
 
 module Main (main) where
 
-import Control.Monad      (when)
 import Data.Either        (partitionEithers)
-import Data.Foldable      (for_, traverse_)
-import Data.Maybe         (listToMaybe)
+import Data.Foldable      (for_)
 import Data.String        (fromString)
 import Data.Traversable   (for)
 import System.Environment (getArgs)
@@ -18,10 +19,11 @@ import qualified Cabal.Plan                     as P
 import qualified Data.Aeson                     as A
 import qualified Data.ByteString.Lazy           as LBS
 import qualified Data.Map.Strict                as Map
-import qualified Data.Set                       as Set
 import qualified Distribution.Types.PackageName as C
 import qualified Distribution.Types.Version as C
 import qualified Topograph                      as TG
+import Control.Exception
+import System.IO.Error (isDoesNotExistError)
 
 -------------------------------------------------------------------------------
 -- Main
@@ -31,8 +33,30 @@ main :: IO ()
 main = do
     args <- getArgs
     case args of
-        [fp] -> main1 fp
-        _    -> die "Usage: cabal-bootstrap-gen plan.json"
+        [fp] ->
+          handleJust
+            (\e -> if isDoesNotExistError e then Just e else Nothing)
+              (\e -> die $ unlines ["~~~ ERROR ~~~", "", displayException e, "", cabalDirWarning])
+              (main1 fp)
+        _ -> die "Usage: cabal-bootstrap-gen plan.json"
+
+cabalDirWarning :: String
+cabalDirWarning =
+  unlines [
+    "~~~ NOTE ~~~",
+    "",
+    "This script will look for cabal global config file in the following locations",
+    " - $CABAL_CONFIG",
+    " - $CABAL_DIR/config",
+    " - $HOME/.cabal/config (on Unix-like systems)",
+    " - %APPDATA%/cabal (on Windows)",
+    "",
+    "If you are using XDG paths or a entirely different location, you can set either",
+    "CABAL_CONFIG or CABAL_DIR to guide the script to the correct location.",
+    "",
+    "E.g.",
+    "  $ CABAL_DIR=$HOME/.config/cabal cabal-bootstrap-gen"
+    ]
 
 main1 :: FilePath -> IO ()
 main1 planPath = do
@@ -50,69 +74,60 @@ main2 :: Map.Map C.PackageName I.PackageInfo -> P.PlanJson -> IO ()
 main2 meta plan = do
     info $ show $ Map.keys $ P.pjUnits plan
 
-    -- find cabal-install:exe:cabal unit
-    (cabalUid, cabalUnit) <- case findCabalExe plan of
-        Just x  -> return x
-        Nothing -> die "Cannot find cabal-install:exe:cabal unit"
-
-    info $ "cabal-install:exe:cabal unit " ++ show cabalUid
+    let res = TG.runG (P.planJsonIdGraph plan) $ \g ->
+          map (TG.gFromVertex g) (reverse $ TG.gVertices g)
 
-    -- BFS from cabal unit, getting all dependencies
-    units <- bfs plan cabalUnit
+    units <- case res of
+              Left loop -> die $ "Loop in install-plan: " ++ show loop
+              Right uids -> for uids $ lookupUnit (P.pjUnits plan)
 
-    info $ "Unit order:"
+    info "Unit order:"
     for_ units $ \unit -> do
         info $ " - " ++ show (P.uId unit)
 
     (builtin, deps) <- fmap partitionEithers $ for units $ \unit -> do
         let P.PkgId pkgname@(P.PkgName tpkgname) ver@(P.Ver verdigits) = P.uPId unit
 
-        let uid = P.uId unit
-
         let cpkgname :: C.PackageName
             cpkgname = C.mkPackageName (T.unpack tpkgname)
 
         let cversion :: C.Version
             cversion = C.mkVersion verdigits
 
+        let flags = [ (if fval then "+" else "-") ++ T.unpack fname
+                        | (P.FlagName fname, fval) <- Map.toList (P.uFlags unit)
+                        ]
+        let relInfo = Map.lookup cpkgname meta >>= \pkgInfo -> Map.lookup cversion $ I.piVersions pkgInfo
         case P.uType unit of
             P.UnitTypeBuiltin ->
                 return $ Left Builtin
                   { builtinPackageName = pkgname
                   , builtinVersion     = ver
                   }
-
             _ -> do
-                (src, rev, revhash) <- case P.uSha256 unit of
-                    Just _  -> do
-                        pkgInfo <- maybe (die $ "Cannot find " ++ show uid ++ " package metadata") return $
-                            Map.lookup cpkgname meta
-                        relInfo <- maybe (die $ "Cannot find " ++ show uid ++ " version metadata") return $
-                            Map.lookup cversion $ I.piVersions pkgInfo
-
-                        return
-                            ( Hackage
-                            , Just $ fromIntegral (I.riRevision relInfo)
-                            , P.sha256FromByteString $ I.getSHA256 $ getHash relInfo
-                            )
-
-                    Nothing -> case P.uType unit of
-                        P.UnitTypeLocal   -> return (Local, Nothing, Nothing)
-                        t                 -> die $ "Unit of wrong type " ++ show uid ++ " " ++ show t
-
-                return $ Right Dep
-                    { depPackageName = pkgname
-                    , depVersion     = ver
-                    , depSource      = src
-                    , depSrcHash     = P.uSha256 unit
-                    , depRevision    = rev
-                    , depRevHash     = revhash
-                    , depFlags       =
-                        [ (if fval then "+" else "-") ++ T.unpack fname
-                        | (P.FlagName fname, fval) <- Map.toList (P.uFlags unit)
-                        ]
-                    }
-
+              let component = case Map.keys (P.uComps unit) of
+                                [c] -> Just (P.dispCompNameTarget pkgname c)
+                                _ -> Nothing
+
+              source <-
+                case P.uPkgSrc unit of
+                      Just (P.RepoTarballPackage (P.RepoSecure _uri)) ->
+                        return Hackage
+                      Just (P.LocalUnpackedPackage _path) -> 
+                        return Local
+                      pkgsrc ->
+                        die $ "package source not supported: " ++ show pkgsrc
+
+              return $ Right Dep
+                      { depPackageName = pkgname
+                      , depVersion     = ver
+                      , depSource      = source
+                      , depSrcHash     = P.uSha256 unit
+                      , depRevision    = fromIntegral . I.riRevision <$> relInfo
+                      , depRevHash     = relInfo >>= P.sha256FromByteString . I.getSHA256 . getHash
+                      , depFlags       = flags
+                      , depComponent   = component
+                      }
     LBS.putStr $ A.encode Result
         { resBuiltin      = builtin
         , resDependencies = deps
@@ -124,42 +139,6 @@ main2 meta plan = do
     getHash = I.riCabal
 #endif
 
-bfs :: P.PlanJson -> P.Unit -> IO [P.Unit]
-bfs plan unit0 = do
-    uids <- either (\loop -> die $ "Loop in install-plan " ++ show loop) id $ TG.runG am $ \g -> do
-        v <- maybe (die "Cannot find cabal-install unit in topograph") return $
-            TG.gToVertex g $ P.uId unit0
-
-        let t = TG.dfs g v
-
-        return $ map (TG.gFromVertex g) $
-            -- nub and sort
-            reverse $ Set.toList $ Set.fromList $ concat t
-
-    units <- for uids $ \uid -> do
-        unit <- lookupUnit (P.pjUnits plan) uid
-        case Map.toList (P.uComps unit) of
-            [(_, compinfo)] -> checkExeDeps uid (P.pjUnits plan) (P.ciExeDeps compinfo)
-            _               -> die $ "Unit with multiple components " ++ show uid
-        return unit
-
-    -- Remove non-exe copies of cabal-install. Otherwise, cabal-install
-    -- may appear as cabal-install:lib before dependencies of
-    -- cabal-install:exe:cabal, and the bootstrap build tries to build
-    -- all of cabal-install before those dependencies.
-    return $ filter (\u -> P.uId u == P.uId unit0 || P.uPId u /= P.uPId unit0) units
-  where
-    am :: Map.Map P.UnitId (Set.Set P.UnitId)
-    am = fmap (foldMap P.ciLibDeps . P.uComps) (P.pjUnits plan)
-
-checkExeDeps :: P.UnitId -> Map.Map P.UnitId P.Unit -> Set.Set P.UnitId -> IO ()
-checkExeDeps pkgUid units = traverse_ check . Set.toList where
-    check uid = do
-        unit <- lookupUnit units uid
-        let P.PkgId pkgname _ = P.uPId unit
-        when (pkgname /= P.PkgName (fromString "hsc2hs")) $ do
-            die $ "unit " ++ show pkgUid ++ " depends on executable " ++ show uid
-
 lookupUnit :: Map.Map P.UnitId P.Unit -> P.UnitId -> IO P.Unit
 lookupUnit units uid
     = maybe (die $ "Cannot find unit " ++ show uid) return
@@ -189,6 +168,7 @@ data Dep = Dep
     , depRevision    :: Maybe Int
     , depRevHash     :: Maybe P.Sha256
     , depFlags       :: [String]
+    , depComponent   :: Maybe T.Text
     }
   deriving (Show)
 
@@ -218,6 +198,7 @@ instance A.ToJSON Dep where
         , fromString "revision"     A..= depRevision dep
         , fromString "cabal_sha256" A..= depRevHash dep
         , fromString "flags"        A..= depFlags dep
+        , fromString "component"    A..= depComponent dep
         ]
 
 instance A.ToJSON SrcType where
@@ -241,16 +222,3 @@ die :: String -> IO a
 die msg = do
     hPutStrLn stderr msg
     exitFailure
-
--------------------------------------------------------------------------------
--- Pure bits
--------------------------------------------------------------------------------
-
-findCabalExe :: P.PlanJson -> Maybe (P.UnitId, P.Unit)
-findCabalExe plan = listToMaybe
-    [ (uid, unit)
-    | (uid, unit) <- Map.toList (P.pjUnits plan)
-    , let P.PkgId pkgname _ = P.uPId unit
-    , pkgname == P.PkgName (fromString "cabal-install")
-    , Map.keys (P.uComps unit) == [P.CompNameExe (fromString "cabal")]
-    ]