diff --git a/core/includes/install.inc b/core/includes/install.inc
index 3a9c2bc..b3a0d7b 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -10,6 +10,7 @@
 use Drupal\Component\Utility\Crypt;
 use Drupal\Component\Utility\OpCodeCache;
 use Drupal\Component\Utility\UrlHelper;
+use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Extension\ExtensionDiscovery;
 use Drupal\Core\Site\Settings;
 
@@ -482,12 +483,20 @@ function _drupal_rewrite_settings_dump_one(\stdClass $variable, $prefix = '', $s
  * @see update_prepare_d8_bootstrap()
  */
 function drupal_install_config_directories() {
-  global $config_directories;
+  global $config_directories, $install_state;
 
   // Add a randomized config directory name to settings.php, unless it was
   // manually defined in the existing already.
   if (empty($config_directories[CONFIG_SYNC_DIRECTORY])) {
-    $config_directories[CONFIG_SYNC_DIRECTORY] = \Drupal::service('site.path') . '/files/config_' . Crypt::randomBytesBase64(55) . '/sync';
+    // @todo Should the info key be config_install or config_sync? The directory
+    //   can't be config/install because that would clash with module install.
+    if ($install_state['profile_info']['config_install']) {
+      $profile = $install_state['parameters']['profile'];
+      $config_directories[CONFIG_SYNC_DIRECTORY] = $install_state['profiles'][$profile]->getPath() . '/config/sync';
+    }
+    else {
+      $config_directories[CONFIG_SYNC_DIRECTORY] = \Drupal::service('site.path') . '/files/config_' . Crypt::randomBytesBase64(55) . '/sync';
+    }
     $settings['config_directories'][CONFIG_SYNC_DIRECTORY] = (object) [
       'value' => $config_directories[CONFIG_SYNC_DIRECTORY],
       'required' => TRUE,
@@ -632,6 +641,14 @@ function drupal_install_system($install_state) {
       ->set('default_langcode', (string) $install_state['parameters']['langcode'])
       ->save(TRUE);
   }
+  if ($install_state['profile_info']['config_install']) {
+    global $config_directories;
+    $sync = new FileStorage($config_directories[CONFIG_SYNC_DIRECTORY]);
+    // Match up the site uuids, the install_base_system install task will have
+    // installed the system module and created a new UUID.
+    $system_site = $sync->read('system.site');
+    \Drupal::configFactory()->getEditable('system.site')->set('uuid', $system_site['uuid'])->save();
+  }
 }
 
 /**
@@ -1062,6 +1079,7 @@ function install_profile_info($profile, $langcode = 'en') {
       'version' => NULL,
       'hidden' => FALSE,
       'php' => DRUPAL_MINIMUM_PHP,
+      'config_install' => FALSE,
     );
     $profile_file = drupal_get_path('profile', $profile) . "/$profile.info.yml";
     $info = \Drupal::service('info_parser')->parse($profile_file);
