diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index cfc0497..8bb37c3 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -6,6 +6,9 @@
  */
 
 use Drupal\Component\Utility\UrlHelper;
+use Drupal\Core\Config\ConfigImporter;
+use Drupal\Core\Config\ConfigImporterException;
+use Drupal\Core\Config\StorageComparer;
 use Drupal\Core\DrupalKernel;
 use Drupal\Core\Database\Database;
 use Drupal\Core\Database\DatabaseExceptionWrapper;
@@ -445,10 +448,16 @@ function install_begin_request($class_loader, &$install_state) {
     }
   }
 
-  // Use the language from the profile configuration, if available, to override
-  // the language previously set in the parameters.
-  if (isset($install_state['profile_info']['distribution']['langcode'])) {
-    $install_state['parameters']['langcode'] = $install_state['profile_info']['distribution']['langcode'];
+  // Use the language from profile configuration if available.
+  if (!empty($install_state['config_install']) && $install_state['config']['system.site']) {
+    $install_state['parameters']['langcode'] = $install_state['config']['system.site']['default_langcode'];
+  }
+  else {
+    // Otherwise, Use the language from the profile configuration, if available,
+    // to override the language previously set in the parameters.
+    if (isset($install_state['profile_info']['distribution']['langcode'])) {
+      $install_state['parameters']['langcode'] = $install_state['profile_info']['distribution']['langcode'];
+    }
   }
 
   // Set the default language to the selected language, if any.
@@ -787,6 +796,26 @@ function install_tasks($install_state) {
     ],
   ];
 
+  if (!empty($install_state['config_install'])) {
+    // @todo add a load of commentary about what is happening.
+    unset($tasks['install_download_translation']);
+    $key = array_search('install_profile_modules', array_keys($tasks), TRUE);
+    unset($tasks['install_profile_modules']);
+    unset($tasks['install_profile_themes']);
+    unset($tasks['install_install_profile']);
+    $config_tasks = [
+      'install_config_import_batch' => [
+        'display_name' => t('Install configuration'),
+        'type' => 'batch',
+      ],
+      'install_config_download_translations' => [],
+      'install_config_fix_profile' => [],
+    ];
+    $tasks = array_slice($tasks, 0, $key, TRUE) +
+      $config_tasks +
+      array_slice($tasks, $key, NULL, TRUE);
+  }
+
   // Now add any tasks defined by the installation profile.
   if (!empty($install_state['parameters']['profile'])) {
     // Load the profile install file, because it is not always loaded when
@@ -1464,6 +1493,12 @@ function install_load_profile(&$install_state) {
   $profile = $install_state['parameters']['profile'];
   $install_state['profiles'][$profile]->load();
   $install_state['profile_info'] = install_profile_info($profile, isset($install_state['parameters']['langcode']) ? $install_state['parameters']['langcode'] : 'en');
+  // If the profile has a config/sync directory copy the information to the
+  // install_state global.
+  if (!empty($install_state['profile_info']['config_install'])) {
+    $install_state['config_install'] = $install_state['profile_info']['config_install'];
+    $install_state['config'] = $install_state['profile_info']['config'];
+  }
 }
 
 /**
@@ -2217,3 +2252,192 @@ function install_write_profile($install_state) {
     throw new InstallProfileMismatchException($install_state['parameters']['profile'], $settings_profile, $settings_path, \Drupal::translation());
   }
 }
+
+/**
+ * Creates a batch for the config importer to process.
+ *
+ * @see install_tasks()
+ */
+function install_config_import_batch() {
+  // We need to manually trigger the installation of core-provided entity types,
+  // as those will not be handled by the module installer.
+  // @see install_profile_modules()
+  install_core_entity_type_definitions();
+
+  // Get the sync storage.
+  $sync = \Drupal::service('config.storage.sync');
+  // 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();
+
+  // Create the storage comparer and the config importer.
+  $config_manager = \Drupal::service('config.manager');
+  $storage_comparer = new StorageComparer($sync, \Drupal::service('config.storage'), $config_manager);
+  $storage_comparer->createChangelist();
+  $config_importer = new ConfigImporter(
+    $storage_comparer,
+    \Drupal::service('event_dispatcher'),
+    $config_manager,
+    \Drupal::service('lock.persistent'),
+    \Drupal::service('config.typed'),
+    \Drupal::service('module_handler'),
+    \Drupal::service('module_installer'),
+    \Drupal::service('theme_handler'),
+    \Drupal::service('string_translation')
+  );
+
+  try {
+    $sync_steps = $config_importer->initialize();
+
+    $batch = [
+      'operations' => [],
+      'finished' => 'install_config_import_batch_finish',
+      'title' => t('Synchronizing configuration'),
+      'init_message' => t('Starting configuration synchronization.'),
+      'progress_message' => t('Completed @current step of @total.'),
+      'error_message' => t('Configuration synchronization has encountered an error.'),
+      'file' => drupal_get_path('module', 'config') . '/config.admin.inc',
+    ];
+    foreach ($sync_steps as $sync_step) {
+      $batch['operations'][] = ['install_config_import_batch_process', [$config_importer, $sync_step]];
+    }
+
+    return $batch;
+  }
+  catch (ConfigImporterException $e) {
+    global $install_state;
+    // There are validation errors.
+    drupal_set_message(t('The configuration synchronization failed validation.'), 'error');
+    foreach ($config_importer->getErrors() as $message) {
+      drupal_set_message($message, 'error');
+    }
+    install_display_output(['#title' => t('Configuration validation')], $install_state);
+  }
+}
+
+/**
+ * Processes the config import batch and persists the importer.
+ *
+ * @param \Drupal\Core\Config\ConfigImporter $config_importer
+ *   The batch config importer object to persist.
+ * @param string $sync_step
+ *   The synchronisation step to do.
+ * @param $context
+ *   The batch context.
+ *
+ * @see install_config_import_batch()
+ */
+function install_config_import_batch_process(ConfigImporter $config_importer, $sync_step, &$context) {
+  if (!isset($context['sandbox']['config_importer'])) {
+    $context['sandbox']['config_importer'] = $config_importer;
+  }
+
+  $config_importer = $context['sandbox']['config_importer'];
+  $config_importer->doSyncStep($sync_step, $context);
+  if ($errors = $config_importer->getErrors()) {
+    if (!isset($context['results']['errors'])) {
+      $context['results']['errors'] = [];
+    }
+    $context['results']['errors'] += $errors;
+  }
+}
+
+/**
+ * Finish config importer batch.
+ *
+ * @see install_config_import_batch()
+ */
+function install_config_import_batch_finish($success, $results, $operations) {
+  if ($success) {
+    if (!empty($results['errors'])) {
+      foreach ($results['errors'] as $error) {
+        drupal_set_message($error, 'error');
+        \Drupal::logger('config_sync')->error($error);
+      }
+      drupal_set_message(t('The configuration was imported with errors.'), 'warning');
+    }
+    else {
+      // Configuration sync needs a complete cache flush.
+      drupal_flush_all_caches();
+    }
+  }
+  else {
+    // An error occurred.
+    // $operations contains the operations that remained unprocessed.
+    $error_operation = reset($operations);
+    $message = t('An error occurred while processing %error_operation with arguments: @arguments', [
+      '%error_operation' => $error_operation[0],
+      '@arguments' => print_r($error_operation[1], TRUE)
+    ]);
+    drupal_set_message($message, 'error');
+  }
+}
+
+
+/**
+ * Replaces install_download_translation() during configuration installs.
+ *
+ * @param array $install_state
+ *   An array of information about the current installation state.
+ *
+ * @return string
+ *   A themed status report, or an exception if there are requirement errors.
+ *   Upon successful download the page is reloaded and no output is returned.
+ *
+ * @see install_download_translation()
+ */
+function install_config_download_translations(&$install_state) {
+  $needs_download = isset($install_state['parameters']['langcode']) && !isset($install_state['translations'][$install_state['parameters']['langcode']]) && $install_state['parameters']['langcode'] !== 'en';
+  if ($needs_download) {
+    return install_download_translation($install_state);
+  }
+}
+
+
+/**
+ * Fixes configuration if the install profile has made changes in hook_install().
+ */
+function install_config_fix_profile() {
+  global $install_state;
+  // It is possible that installing the profile makes unintended configuration
+  // changes.
+  $config_manager = \Drupal::service('config.manager');
+  $storage_comparer = new StorageComparer(\Drupal::service('config.storage.sync'), \Drupal::service('config.storage'), $config_manager);
+  $storage_comparer->createChangelist();
+  if ($storage_comparer->hasChanges()) {
+    $config_importer = new ConfigImporter(
+      $storage_comparer,
+      \Drupal::service('event_dispatcher'),
+      $config_manager,
+      \Drupal::service('lock.persistent'),
+      \Drupal::service('config.typed'),
+      \Drupal::service('module_handler'),
+      \Drupal::service('module_installer'),
+      \Drupal::service('theme_handler'),
+      \Drupal::service('string_translation')
+    );
+    try {
+      $config_importer->import();
+    }
+    catch (ConfigImporterException $e) {
+      global $install_state;
+      // There are validation errors.
+      drupal_set_message(t('The configuration synchronization failed validation.'), 'error');
+      foreach ($config_importer->getErrors() as $message) {
+        drupal_set_message($message, 'error');
+      }
+      install_display_output(['#title' => t('Configuration validation')], $install_state);
+    }
+
+    // At this point the configuration should match completely.
+    if (\Drupal::moduleHandler()->moduleExists('language')) {
+      // If the English language exists at this point we need to ensure
+      // install_download_additional_translations_operations() does not delete
+      // it.
+      if (ConfigurableLanguage::load('en')) {
+        $install_state['profile_info']['keep_english'] = TRUE;
+      }
+    }
+  }
+}
diff --git a/core/includes/install.inc b/core/includes/install.inc
index c5b93b5..fb1dfd7 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 settings.php does not contain a config sync directory name we need to
+  // configure one.
   if (empty($config_directories[CONFIG_SYNC_DIRECTORY])) {
-    $config_directories[CONFIG_SYNC_DIRECTORY] = \Drupal::service('site.path') . '/files/config_' . Crypt::randomBytesBase64(55) . '/sync';
+    if (empty($install_state['config_install'])) {
+      // Add a randomized config directory name to settings.php
+      $config_directories[CONFIG_SYNC_DIRECTORY] = \Drupal::service('site.path') . '/files/config_' . Crypt::randomBytesBase64(55) . '/sync';
+    }
+    else {
+      // Install profiles can contain a config sync directory. If they do,
+      // 'config_install' is a path to the directory.
+      $config_directories[CONFIG_SYNC_DIRECTORY] = $install_state['config_install'];
+    }
     $settings['config_directories'][CONFIG_SYNC_DIRECTORY] = (object) [
       'value' => $config_directories[CONFIG_SYNC_DIRECTORY],
       'required' => TRUE,
@@ -1077,9 +1086,10 @@ function install_profile_info($profile, $langcode = 'en') {
       'version' => NULL,
       'hidden' => FALSE,
       'php' => DRUPAL_MINIMUM_PHP,
+      'config_install' => NULL,
     ];
-    $profile_file = drupal_get_path('profile', $profile) . "/$profile.info.yml";
-    $info = \Drupal::service('info_parser')->parse($profile_file);
+    $profile_path = drupal_get_path('profile', $profile);
+    $info = \Drupal::service('info_parser')->parse($profile_path . "/$profile.info.yml");
     $info += $defaults;
 
     // drupal_required_modules() includes the current profile as a dependency.
@@ -1090,6 +1100,12 @@ function install_profile_info($profile, $langcode = 'en') {
 
     $info['dependencies'] = array_unique(array_merge($required, $info['dependencies'], $locale));
 
+    // If the profile has a config/sync directory use that to install drupal.
+    if (is_dir($profile_path . '/config/sync')) {
+      $info['config_install'] = $profile_path . '/config/sync';
+      $sync = new FileStorage($profile_path . '/config/sync');
+      $info['config']['system.site'] = $sync->read('system.site');
+    }
     $cache[$profile][$langcode] = $info;
   }
   return $cache[$profile][$langcode];
diff --git a/core/lib/Drupal/Core/Config/ConfigImporter.php b/core/lib/Drupal/Core/Config/ConfigImporter.php
index 06fed4b..25937e6 100644
--- a/core/lib/Drupal/Core/Config/ConfigImporter.php
+++ b/core/lib/Drupal/Core/Config/ConfigImporter.php
@@ -405,6 +405,14 @@ protected function createExtensionChangelist() {
     $module_list = array_reverse($module_list);
     $this->extensionChangelist['module']['install'] = array_intersect(array_keys($module_list), $install);
 
+    // If we're installing the install profile ensure it comes last. This will
+    // when installing a site from configuration.
+    $install_profile_key = array_search($new_extensions['profile'], $this->extensionChangelist['module']['install'], TRUE);
+    if ($install_profile_key !== FALSE) {
+      unset($this->extensionChangelist['module']['install'][$install_profile_key]);
+      $this->extensionChangelist['module']['install'][] = $new_extensions['profile'];
+    }
+
     // Work out what themes to install and to uninstall.
     $this->extensionChangelist['theme']['install'] = array_keys(array_diff_key($new_extensions['theme'], $current_extensions['theme']));
     $this->extensionChangelist['theme']['uninstall'] = array_keys(array_diff_key($current_extensions['theme'], $new_extensions['theme']));
diff --git a/core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php b/core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php
index c28b7f8..0632ca9 100644
--- a/core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php
+++ b/core/lib/Drupal/Core/Installer/Form/SiteConfigureForm.php
@@ -118,6 +118,7 @@ protected function getEditableConfigNames() {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
+    global $install_state;
     $form['#title'] = $this->t('Configure site');
 
     // Warn about settings.php permissions risk
@@ -145,12 +146,14 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $form['site_information'] = [
       '#type' => 'fieldgroup',
       '#title' => $this->t('Site information'),
+      '#access' => empty($install_state['config_install']),
     ];
     $form['site_information']['site_name'] = [
       '#type' => 'textfield',
       '#title' => $this->t('Site name'),
       '#required' => TRUE,
       '#weight' => -20,
+      '#access' => empty($install_state['config_install']),
     ];
     $form['site_information']['site_mail'] = [
       '#type' => 'email',
@@ -159,6 +162,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#description' => $this->t("Automated emails, such as registration information, will be sent from this address. Use an address ending in your site's domain to help prevent these emails from being flagged as spam."),
       '#required' => TRUE,
       '#weight' => -15,
+      '#access' => empty($install_state['config_install']),
     ];
 
     $form['admin_account'] = [
@@ -188,6 +192,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $form['regional_settings'] = [
       '#type' => 'fieldgroup',
       '#title' => $this->t('Regional settings'),
+      '#access' => empty($install_state['config_install']),
     ];
     $countries = $this->countryManager->getList();
     $form['regional_settings']['site_default_country'] = [
@@ -198,6 +203,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#options' => $countries,
       '#description' => $this->t('Select the default country for the site.'),
       '#weight' => 0,
+      '#access' => empty($install_state['config_install']),
     ];
     $form['regional_settings']['date_default_timezone'] = [
       '#type' => 'select',
@@ -208,17 +214,20 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#description' => $this->t('By default, dates in this site will be displayed in the chosen time zone.'),
       '#weight' => 5,
       '#attributes' => ['class' => ['timezone-detect']],
+      '#access' => empty($install_state['config_install']),
     ];
 
     $form['update_notifications'] = [
       '#type' => 'fieldgroup',
       '#title' => $this->t('Update notifications'),
       '#description' => $this->t('The system will notify you when updates and important security releases are available for installed components. Anonymous information about your site is sent to <a href=":drupal">Drupal.org</a>.', [':drupal' => 'https://www.drupal.org']),
+      '#access' => empty($install_state['config_install']),
     ];
     $form['update_notifications']['enable_update_status_module'] = [
       '#type' => 'checkbox',
       '#title' => $this->t('Check for updates automatically'),
       '#default_value' => 1,
+      '#access' => empty($install_state['config_install']),
     ];
     $form['update_notifications']['enable_update_status_emails'] = [
       '#type' => 'checkbox',
@@ -229,6 +238,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
           'input[name="enable_update_status_module"]' => ['checked' => TRUE],
         ],
       ],
+      '#access' => empty($install_state['config_install']),
     ];
 
     $form['actions'] = ['#type' => 'actions'];
@@ -255,21 +265,25 @@ public function validateForm(array &$form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->config('system.site')
-      ->set('name', (string) $form_state->getValue('site_name'))
-      ->set('mail', (string) $form_state->getValue('site_mail'))
-      ->save(TRUE);
+    global $install_state;
 
-    $this->config('system.date')
-      ->set('timezone.default', (string) $form_state->getValue('date_default_timezone'))
-      ->set('country.default', (string) $form_state->getValue('site_default_country'))
-      ->save(TRUE);
+    if (empty($install_state['config_install'])) {
+      $this->config('system.site')
+        ->set('name', (string) $form_state->getValue('site_name'))
+        ->set('mail', (string) $form_state->getValue('site_mail'))
+        ->save(TRUE);
+
+      $this->config('system.date')
+        ->set('timezone.default', (string) $form_state->getValue('date_default_timezone'))
+        ->set('country.default', (string) $form_state->getValue('site_default_country'))
+        ->save(TRUE);
+    }
 
     $account_values = $form_state->getValue('account');
 
     // Enable update.module if this option was selected.
     $update_status_module = $form_state->getValue('enable_update_status_module');
-    if ($update_status_module) {
+    if (empty($install_state['config_install']) && $update_status_module) {
       $this->moduleInstaller->install(['file', 'update'], FALSE);
 
       // Add the site maintenance account's email address to the list of
diff --git a/core/modules/system/src/Tests/Installer/InstallerExistingConfigMultilingualTest.php b/core/modules/system/src/Tests/Installer/InstallerExistingConfigMultilingualTest.php
new file mode 100644
index 0000000..60cac03
--- /dev/null
+++ b/core/modules/system/src/Tests/Installer/InstallerExistingConfigMultilingualTest.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace Drupal\system\Tests\Installer;
+
+/**
+ * Verifies that installing from existing configuration works.
+ *
+ * @group Installer
+ */
+class InstallerExistingConfigMultilingualTest extends InstallerExistingConfigTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected $profile = 'testing_config_install_multilingual';
+
+  /**
+   * @inheritDoc
+   */
+  protected function getConfigTarball() {
+    return __DIR__ . '/../../../tests/fixtures/config_install/multilingual.tar.gz';
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Installer/InstallerExistingConfigNoConfigTest.php b/core/modules/system/src/Tests/Installer/InstallerExistingConfigNoConfigTest.php
new file mode 100644
index 0000000..2e7fdbc
--- /dev/null
+++ b/core/modules/system/src/Tests/Installer/InstallerExistingConfigNoConfigTest.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\system\Tests\Installer;
+
+/**
+ * Verifies that installing from existing configuration works.
+ *
+ * @group Installer
+ */
+class InstallerExistingConfigNoConfigTest extends InstallerExistingConfigTestBase {
+
+  protected $profile = 'no_config_profile';
+
+  /**
+   * Final installer step: Configure site.
+   */
+  protected function setUpSite() {
+    // There are errors therefore there is nothing to do here.
+    return;
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function getConfigTarball() {
+    return __DIR__ . '/../../../tests/fixtures/config_install/testing_config_install_no_config.tar.gz';
+  }
+
+  public function testConfigSync() {
+    $this->assertTitle('Configuration validation | Drupal');
+    $this->assertText('The configuration synchronization failed validation.');
+    $this->assertText('This import is empty and if applied would delete all of your configuration, so has been rejected.');
+
+    // Ensure there is no continuation button.
+    $this->assertNoText('Save and continue');
+    $this->assertNoFieldById('edit-submit');
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Installer/InstallerExistingConfigTest.php b/core/modules/system/src/Tests/Installer/InstallerExistingConfigTest.php
new file mode 100644
index 0000000..4ea2c5c
--- /dev/null
+++ b/core/modules/system/src/Tests/Installer/InstallerExistingConfigTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Drupal\system\Tests\Installer;
+
+/**
+ * Verifies that installing from existing configuration works.
+ *
+ * @group Installer
+ */
+class InstallerExistingConfigTest extends InstallerExistingConfigTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUpSite() {
+    // The configuration is from a site installed in French.
+    // So after selecting the profile the installer detects that the site must
+    // be installed in French, thus we change the button translation.
+    $this->translations['Save and continue'] = 'Enregistrer et continuer';
+    parent::setUpSite();
+  }
+
+  /**
+   * @inheritDoc
+   */
+  protected function getConfigTarball() {
+    return __DIR__ . '/../../../tests/fixtures/config_install/testing_config_install.tar.gz';
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Installer/InstallerExistingConfigTestBase.php b/core/modules/system/src/Tests/Installer/InstallerExistingConfigTestBase.php
new file mode 100644
index 0000000..2f42fc8
--- /dev/null
+++ b/core/modules/system/src/Tests/Installer/InstallerExistingConfigTestBase.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace Drupal\system\Tests\Installer;
+
+use Drupal\Component\Serialization\Yaml;
+use Drupal\Core\Archiver\ArchiveTar;
+use Drupal\simpletest\InstallerTestBase;
+
+/**
+ * Provides a base class for testing installing from existing configuration.
+ */
+abstract class InstallerExistingConfigTestBase extends InstallerTestBase {
+
+  /**
+   * This is set by the profile in the core.extension extracted.
+   */
+  protected $profile = NULL;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    $archiver = new ArchiveTar($this->getConfigTarball(), 'gz');
+
+    if ($this->profile === NULL) {
+      $core_extension = Yaml::decode($archiver->extractInString('core.extension.yml'));
+      $this->profile = $core_extension['profile'];
+    }
+
+    // Create a profile for testing.
+    $info = [
+      'type' => 'profile',
+      'core' => \Drupal::CORE_COMPATIBILITY,
+      'name' => 'Configuration installation test profile (' . $this->profile . ')',
+    ];
+    // File API functions are not available yet.
+    $path = $this->siteDirectory . '/profiles/' . $this->profile;
+    mkdir($path, 0777, TRUE);
+    file_put_contents("$path/{$this->profile}.info.yml", Yaml::encode($info));
+
+    // Create config/sync directory and extract tarball contents to it.
+    $config_sync_directory = $path . '/config/sync';
+    mkdir($config_sync_directory, 0777, TRUE);
+    $files = [];
+    $list = $archiver->listContent();
+    if (is_array($list)) {
+      /** @var array $list */
+      foreach ($list as $file) {
+        $files[] = $file['filename'];
+      }
+      $archiver->extractList($files, $config_sync_directory);
+    }
+
+    parent::setUp();
+  }
+
+  /**
+   * Gets the filepath to the configuration tarball.
+   *
+   * The tarball will be extracted to the install profile's config/sync
+   * directory for testing.
+   *
+   * @return string
+   *   The filepath to the configuration tarball.
+   */
+  abstract protected function getConfigTarball();
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function installParameters() {
+    $parameters = parent::installParameters();
+
+    // The options that change configuration are disabled when installing from
+    // existing configuration.
+    unset($parameters['forms']['install_configure_form']['site_name']);
+    unset($parameters['forms']['install_configure_form']['site_mail']);
+    unset($parameters['forms']['install_configure_form']['update_status_module']);
+
+    return $parameters;
+  }
+
+  /**
+   * Confirms that the installation installed the configuration correctly.
+   */
+  public function testConfigSync() {
+    // After installation there is no snapshot and nothing to import.
+    $change_list = $this->configImporter()->getStorageComparer()->getChangelist();
+    $expected = [
+      'create' => [],
+      // The system.mail is changed configuration because the test system
+      // changes it to ensure that mails are not sent.
+      'update' => ['system.mail'],
+      'delete' => [],
+      'rename' => [],
+    ];
+    $this->assertEqual($expected, $change_list);
+  }
+
+}
diff --git a/core/modules/system/tests/fixtures/config_install/multilingual.tar.gz b/core/modules/system/tests/fixtures/config_install/multilingual.tar.gz
new file mode 100644
index 0000000..d43aafa
--- /dev/null
+++ b/core/modules/system/tests/fixtures/config_install/multilingual.tar.gz
@@ -0,0 +1,52 @@
+ ",X }r8fSp:QѷX&,˷n(@(q3m0<B $%k-gLWgˈB E;888uQ(.yˇi)W/&1xENh[zFǷ-4foO~
+o(\'9|C."ʴ=N.XOȃ!::.e	BvP)*utΓ:"l[_:vFU\_p};mJuґg\HE!
+?E~+Qzlvw|ʮ&WoB䧷ٯ&MΒ	&9-lh8Iw/r"?D8F@"+@Peh:	q:C
+9'qQ
+`2"GGf	R|(@L*3-:;.]=v|\J@sHGp4>`*
+E5# >M-RN> u^;!?t$K/!ԑ
+aAx2Cp~wr":hhɭȏ,7~z0)~ʯפ(BR	2\|t3,SBNɓBli!(}>tt|;K 	5^1XA 4Ce5j?C0yyzQ,K-Q+OaU~#1̦_cvJUc	eXr5OX1VgOESԋ4 Zrn7JH~ni+C'-y#Das(BE?+J9@g@82Ԁ!hDSuIo&aMP(BX%Q9eN]ϹvcK_l}vb`MwJ^Ku~6FT<Simғ2Gף50?7?$gY9 PBuȼ*8UhG_V/7КH;=ypq]YcM{{;`֛߬f~;iNjRb=zߦ\ xÌl<eѢG}D9Kf*ghãoS{ߴN7J&j4й5`-ՖP~mH 4Dث
+t)*>=+t}(kߛRC)tK,dBH4pup'BO8ëy-Ôo.s)\z%(lHU~ǬIUoOژ:i>=|-t,	py:+,Aֱ1(2@HҿLtyeCs@wKp|*k٫kfAN{M
+f?>EŧK_1{? ? h ϳP aM@CJs(GY;5yao"ÇyStx</FF͙?<j?#c/ōk/<> OL!$g,bip<	p_?$74*f$Uu14Ry/.6mzlyc3m.wJyᇝ`MU<Y"]J	aӛ`"p+e},S.8QhcA9N?	)1!i`pa#@j@E8*L_4VmCM6Y_́Jc!2N0Ag)Sʸ5:C>8<3|??*D<' u ej(kxnUJצ5D{{qumz*6Iܗ?w%h^:h
+w ?@p$^Yl
+iQ5h:QJYm;Zad@<N:ufXUhT{)_#Eoh 9eo'8~o9@*B02#t "V5D(w5idjIG)_be\TǍ5~>!t	|/50Yeb_
+4uovS{{?USv:mP1bgS&FSnK^r_ g?7$ 8 ZUӈ @!/2:˫~L7hb67ف<n\o5ߢiPk.?)%q_vH6H"(H'YU$l
+eh CP4c%1/{pVo.J;HwʕͫK4Ùew6םr_Srk!_x{cng|/#$g$*U/X7T	hp?w(Q1Tok3ŋU[SV3{qkƗ
+6u WBװfdgǉ^)x$(b#@CD#^ѕcY
+:@X1"E,ۘؗXS_)$@R|@?oa* =_6?@!u Bp
+q(k _9\u?JUE~VP-qn!rq1" 3MDpho>R# kP8Y	/8~QGaq-mctW>cZ*{6@fl+Z:DEܩ;n5VAs>if	YV&'	F4.l"ϐ濨Iʲ`H?o 7rʙWǏTлɎռbNáC YXw`D.vH {%._ Gs@VI?jh"PETfSﱆRyi|P[O'ж
+ w;zos&~?$wFL֐,&@9I߸AuYl]׺T 3R/Uњt.f]s= G~]D ?kc?]Z>#Ck$H:0bhRu {MQ%>M]<
+9I`:^[x!f3<iO% ` B +m<|fU_xhw3=ޢg'sNrs2U͵=a-0]tngUONf =5 P7!kD%7KL];meq|_-ЙJS-<|OJ |[?sa?$W+@t"TNꀪiuQ! Ue`ܷ}ieԁ`
+>(eX՞qj<"'0^H/L$&E%6SrDhu0_JHi$]9ĝ2D*_el,NL$#?Y}G#[bnqՇcyNQkEcol[ZXL84#E	s)}S?2cƙjGK.vA3fcTP\ 0+C}?~Dԟ~??K{Ӂm#Y`5CfVn=6ꥶZp,/UAoXtLEP0F\bX8$	)4K
+,Wzuqw[5bqz_8RidDt.H>Œu?bw\>R$hIU0Sg5E#1y=A6+|?vdox.{w43n\NkˀGrb$sJ?EuӁIp}$X0W=<f^qM;kR.'s"<?|th	8sϚ qGL8CVaSKj馏4iI/9LRp(`P[N04i#&U"W!>ɔY׳?(8w" 5]PE ^ /"Ȋb E!j$£_Cq2Dwز2$\j*|6~P'ɀ~zGf,NOzL=}tXI>AXA/UJ{Sw
+q֯%
+
+ʑo]}Ǖvm^f|ywqN]Hj?fWXXeV S5``]OUn\zzq0JA*ۙcڣjPUV7y!#2^^^?6Y5~r?6>96~.Xw
+;4?eM"u,n5_Gor/ ߙ^9fXǶ~@D@9ziދ/FV, 7`. ~T8C}.i?3Dm9!rG=ng9:3j/Edȏ?6Q ?A]٥ӡ'&WS &+ /e?F񟱽'x_׵r-GI'$>3:j*VQ!4LdUˑ	r⾯p{t5_wC
+zɯZ(ςM'ΠFv{AZݢ;1+W#O3(z>s$} :y!3{%QL` c30Cm_M]ᮃ.>Ya, b w)݀BeGJQU<@DPx?^?yύo1R?f9J3Q57[cO iG?
+_&H~|'&cO(yL Y.Upon.~"|&ۋ.ylHWx@e"F4)1?ZŇot#_[~m]PӧA ;IZB9Dv~z|&ew|ig^h1G
+CP@H6ǬVm{yLGn?!&"-J+ BZ %IW~u[)þ9ڈk nTbMe-ߔJ4'2O_)Z^Gn w0V>sgtWT `EyD&9nwN(!:Kh.BmAA3fW>xhC^y+{濍E ?=l_;a~$e&ACsu9#g4Mv
+lw@#l.qvZ;(x.9/CR?*zרGBZǻ+Ya޶}yoEq
+4}h8WK7I#Ü/PaV&ǌu3 YxFY σ]ΕދtTfܕLaq{hufn~橨_Ś$'Ŧ~<g&VLplo'B(d)_kjctI"n}hU	IRm^/
+i֢RJgBn]-'7<~]^3WMҸDydѩ7+I3@?7/KR	4 $Wl+JVVc8Iȝ,+fDx<vq=u!#Hd|wԩXzӍ/UX'%(/FCә㤔}Vt~.>1jl5ϋg7ܪP<<XL5"HQ'8O7+`%@O3+4Z0`[^UP*N[2zTԸNrgE>2<+y!	ߙ׍mJm۸m
+FĉZ޵eύb>*xԇg?A$_8:_ϫd<PUY !p@1hMC:]B#M"@y2scVr@[+EJ\CurP9.MX'IF<+΋^BϓpB,S,#_`wp|>	˜ĨE"0yh*+^Qzi`T{Dԟ,=f3Z*KykI]Kt>	:##rX*s@*U)ZLC|ۗ_5878N?}Y*mR{L 8<?2AZe  <+
+@PA~+H:*;O߸u;B/.Rjax}v?]3.)^?t)ǟ)u	}d?Cs+$xݐ5^cj@yEֵ4';G՛]ګ{JjzÂhP[V?}R|x`?Q1_7q[8g*(4 !>sPE W`y;fhV⢬#AƝz37m\v9i#[ f9@[dJ`da4K
+%N#j@Y'mQԩ͹5Yc1OBlY~	O ^q-w?e"3@gϨ@dE]-
+GXm>U-Z4lpY]Y3ʬX_ 56~oa$ N ??G vϲ	b(ʐg	ȼ FYCU^w//޲ctF]4gS;B]aӿ{'_kP$gp=$+k$uDpCH@<iKX8*CԿUԊi-SUo:W,HzGv(۠}~?]R|j_PP	ߔ/㊂9G .u!E ҟ |dw}tdYpC4[M2p=<ptq		~R?.c#7~w_`/FV#wx<, e"r_bXiMZZ273:q̤/?Rk>q,ar?##׊79)2}d#'3;3B1+iO"҇BBv/vo,HGKعz0ȅEHO~9fo7 6s,!٧L)*]D7QO4-E鍖	{lCMU1jTVUjKSsߌM43\/+d8e:(XϮ}`ZiTezбhLk@		r6naH[u^ρ<_|?@rg	hy`5NChIpx\;`{D9md}<ܴ#{fBRW)/XBv9K0BQ[J(	D&nǏNpp𢔏`)bKҘ\_w;KT}Xݶ~u>li~3A
+A.9:3;1>3%AEJ3ӬP3(#Os}Sg6Ho!>'+"4>6d|dԍ88D/ڸ`h\bg̲4}.B.M_,x=%R4a}ؽD+F]Yqe?)OvJOJӻ?6
+x$
+1e>rBkAҮ!TQȍ,RE"CW>:#LQ듿>	ol"m ڃiI^s^Gq%Ų#u?3rљ]??Hx
+@F
+x(C H4yMc#qgtubiRp;Ò^+3}Ӟ޻O{!L{ޚ$|D$q&Sg3I{?+&HBCAHU"C:-(d'"H
+ z&/W+eѼzë{v՛b]QXt^M㞹bA$z	b?=_&'ϋo&H@'Z0u2'@&+·zRYC#VnڵqXV^E*TI\	JrMvl8c]?1>c'etWE$,CVƚh UG<5ѠwlrcýϯDF]bAraqgn5ʁSs}WA΅!lJgiof
+i@3Y 1&Jn0<wLK50g3ThJQ1ig.o\̕ ۤ'HR"XE#9{H!?֜>c!q$0ݱoyKhA
+~ဧyRs;?aߐz>o%_=guh_W|૩_հ_UUh<7I&F4׬]7|f؋-ET6Q~Fӿ[??~BOvvTQ]}3ب~x[$
+<cuKB`@9ASX	Gf@%9+~;pI͜q'P-sqbzX,~Xй(=E?7=Axn<H|T_޳{rL +	 fQh6c-oYXR>Eod#nwِ)'X%T-4r42;'k?Ab"i j
+hMEրI'I&v4	KWg,tI`CH^Ez|L>8(ꜬȞ㯘IA-LMmd&ќ3"m	< 
+ȍYFu10Q֓^W'-~)gCU@_wA	8ƗGm3mDF󩣟٦滁kg:a}ȷV;*	#?LB$Q<S#'Il;\'qJ bA]nIVla|*KK3#[ӎU*{m{?|'m̑5;h5PSB5zd¤џe20[	q0GM/o&XGxln3$	*6n|Ph>K°x}H~L]ON?`:bD hr03ݝ}8"b{u:9ZOnߨ-Ӗ7rמi֑\mkf/%FF?_ڟ<k6H<mB]*u3, d~);ɮ^vuJEȡl#
+/qgsl^luү`".ej&̓r}Js)R.nU%oJ	pE
+,&'}5Ls}4E~`Kg}/h>
+@ 'iYx~0b %=n
+ jQQ!_"u4}s;yd>6f͢[_xx3ͪ~,wH1/~,=?*(2-_VH,xC#>c	j6B>H+aqF] Z'-L?tGC3IdGdԻzE]>oWn=iׯGaΨ(~q}qgf|㤘ΈȌ'[\da&Y]yϗ}qv/ܿ}w
+A8=j{oY{OCtb2vQD|Iϱ{Sg6N՝Q͍1.96_4DA"+DDSQBӉ{ކp^_;įqoJKkG>}P[x"
+֏odyuO.~HygC=Jso:/xIX5;%7 >ObQ[q#{7vųӍ<֟^W$~ƪ5jSm\<E~VsmO/Wba}jx8]lYntU_"fgU\
+MW%@I•i8?ЯO%ZMz8HxuQnc7כ 8iF,A3m3{ +?|&6	^t.Ed4h:^E Q2(~M߲z{,<jݗ6/ogY#\1?C^LYP!$\؛s{yֲªx92yvMWfW=Wko):شpT띤?FID1?YilM|o0X|~25jU},/%kxq㨯I1j۷]9rȑ#G9rȑ#G?7?	  
\ No newline at end of file
diff --git a/core/modules/system/tests/fixtures/config_install/testing_config_install.tar.gz b/core/modules/system/tests/fixtures/config_install/testing_config_install.tar.gz
new file mode 100644
index 0000000..7cd14a2
--- /dev/null
+++ b/core/modules/system/tests/fixtures/config_install/testing_config_install.tar.gz
@@ -0,0 +1,43 @@
+ v)X }rȶfS'>'[8}63[7))!	L]>}LI̶a¸RIjZ\+נZ6V~ i_/O"ː4%D)&Dc(3-pS:C!k|)l6{fo%'04Y^uhg02Hy Ӵ|eA9:~Ad/DW:r#[3shm})h|=Fvx1n;zhK0@M+a+EsIG@Wd
+lNY#{xіr&sSekOniWFX*>YrML߸W3dMr=gy7;+
+&%tܜ&˕ g~g&cAY7,n|-}s*\do"ДAGO𳡮edWzO?@3iʪ
+8( D(7\6՜Lwme7gF^(N1b"W:bDMb^kDiʬ~9	_(/+wǼjCrg>Gh)P#2?8evP4-%?˩LQ)p"0T9İ&߀oz0͵|PvO~S"?9:}o熖Pv| ٛo~g7Z9"뙤.Sx΃ŧ"i 1P9GPU#JP[q]8p{_\TKE{8D3G.{߆"IHJgo7-a_NJ1bP ǫt-h߆@߽S{װZv7rY|5T*HsԷ<XqW
+o	ސ6KchϚ	e(vcyC8>sM?}H3tKPV $d ih^5d9RGV|kkKMӅGC%^[`oA>O6F|k=fC,t.	p/rOC(#J MH0ɺJG=M;KήSs1*i=SO\o}3?谁w<+WXg:LKPYEIx 1 8MrD#j-{/b39|s4RZqui:=~Ѥaop7G|^Ջ?i/鹖$5+'~ߊӽֱz7-KXO?+T簊o@^3NYʢ!RCӨSsGV/w	K13m.ub~ٚmNc{)Vsn1bV2%=Z+,' @iُCc,gp)oU <ŋ 4dYT
+sVi}M4OMB!T	hF[=fʵ kW3{`mL2<_9	hAc GC"P*k:{)΍5{)7˺6x tG˼P<9-3UowOP7H_Kg=zcg[ |RJ`@lƞ/C*JWoWc3H:T|C:+RĔௐwV )ڏ?O("ҢJ
+hIC. 	!q.Y_S:0h.xWֽ,,r`)еE8,ↆ̾lsy?Bg4 ~Oө"H!MP ?CSy@xU #Qd=<)bLeneVy--.FK}Ywd6'L.ny{M^A/B$@q#	H<k<6D#>M(Ұv{fgqR_k,-a]pz:@oBRPW5	1XxD 3eAFO;g~[Ϗsj5F;45̵]PCn[!xo9O߅(?528h 4[Ŀӗ ީw˰?i-\q2{Ԍ\ű7vB<bԸxZ9SΤoH7EX9I/B+?M"KISU@Q`%uO|usYV[PYklw#>S/f	7{txy }_`wJDA( (K Y<"eXY8Z"Je;ןK)|6_h̒Z?ف,"	&%Ǐ}_PQ1y`@t0*S~#~A[sy~-cmP/=^qŧ#3C}ws%Qp1u{$V`4?5,ƿMe]$+I*/PFNxP4?o 9[^P. tlo2SiзkD//"ROx|/"j*$'3x@
+F^ PRPOr₆q~qhM Sc4Ylt=Z)濇Q?͋"pX7(h2-ckF(iV3x*S5omީF`M:BMm͠u@+jD:(ǿ|~ 8f_g(JL	-YdSuFd+ſP`Xge^!m)oԉ=Zyݲ// McrC?@?slJ2YC3X ySf h Rt=z=Pa3[*ᐭ wE1p4 NM:#]a/;/0ZBf N5R $뒬GE:zcC \jh)nJ?ϕ '_S;xٷ3iPD-08 CaN_  ƍrQ1pl?<j.߆JѭEAW
+h رh7n*
+RyltΛ{Mϳ_gEs/B92&_YM-λ&Gkh$%!Q$O>ۑ<!3ş̠'U!ߎEGN"eKʏ	&4NVCiNQá;m4сւUn;_?JH$:~Q~B˴G3Eg?1I^0ӛU9-s*耆?ە3WQAnRiUx(׫d3~'pEsfXڏ <G?$|/gE_VK\Vͷ*ayR?Ek?M.BnUdE6P|sjgUux̻o%&/Ӻ~kRSl/fP'DPHGi< ^x"'o?E'p㈓ZwPyeZ,7ŧ]+?myX95$f`	$W KpLjm*PrFiMƹo ʢy\v"WM猕}S\OGs!g UY$bԨ'U%hF2nzHL+|%ty,?{AiItK}]t	i_ׂNQp4MRPROq<2Ky,Q9O{Z~hALM&S8nن>2zU<iM[o2v]WꡩHQaAdQ<mjƝ%ģC:8#n3'}e%Efsz{pQￄO[y(<c㿰,J?.BJ+2Z3̔u?mZWy_vxa1+6ш/q*`MyC8cT?4R,0C @B4Jzk-7E\zcTg
+ꊻ6~&??cgyj\xQ 24
+T	@  %ϩ`=
+'v2` ,ZSb
+;Mm}Yu50_*n~Trb_/CAAFt@3"81@u
+!r,}VU%4gRjOYyӕ67A\躖M7Ϧ?gADlNPvdl8b#@  ^b.` m?٪!>נ4{moZWH\GPհr^R/2j/hQ	L|@Q?b"#O~]16V\q_Nz0lFw_:chڻ>$teA@[T/r$t'˱VŊQϛ}nͳUz^NHkO<p 6uE\V6^6'wVfЋ\jkv
+[
+d1XM\}뇤Ck
+Vć+4BK8aq}uz;\5bL]mԕ>uTZ2E\*~[rjD
+gC8؞
+	C,<4vƫ u[!c]qߧuF\֏|.& ܛ_ֽЅֵ#4u_y)I(#e\nv+N#qݨB$]T_WAB^`(+ z$7(7[4ݒ,jI6bq0)**KtRHSO1qO`j|K{[rA`X&`6t0,K3(85,Q-Di\cXv?ˤ뿋PaAuQd^PX rx('/sjXB
+k0|(n۰s߹UGu.n"[ 6?M_x#l}c8"GfE(@eRS)ր1<CAUkhڤ*"7Uhҋ6?ӵC+-	^o?'_Gie(f4'by :/:'~BEO˥l(f0_Zx^>ip6Rta=>}]:cRΥ ?ϥKgxE0M%Ve&PRB=18r.t!*u~>v\5ÕM=>]#78z(`o^Ϥ_4+B^K48,*ͩT?t#h(N!_/=aHņ
+cȞt[(ߥW9>.B1eiˤ!IUP
+d@A?{ߑ|_>εྌP+BaQPZT8z]kU=U"·e? x}fN]19
+YAe`rP}*?,#yoW-C-eӵh3( x?>I8Qs?}J, Ҫ 85I4Ugi8^HKg廳EYZK)w;-e͜YП_ :u1~ .Iy%*D# 4gIPǀ7h	p cM@"@3T]G~w6ڃg*3nܪoox'uuC>]9	(;~+I]J1!
+^mYg GЬ"ZsLk`yDN4 8q{=jѴQ5kłˊz.V T[O7C 5	]Iʸ]Q
+C+~OZHPi*%BVt
+٪g65Il͖0Ѕ4F"Tg۶86OT ; ׅ~D+%c!ll8<Zo)/Ue[XbsjݙQn/Nңn?.%׼*	ȇ4"<+
+r$4=4Fv+3٦ݿ"#QayGPpnw(V]o9-]/:Z2PxQ`l,%'񩟆=EaoܛLye8ectl6}}	=S*F+[Y!	^LotLx<ɝ{fJ6W%`JƤXb͒4Ֆ>8VZ4ϛR"ͣ|i#_ԣiY7aJw=yWV$|RNOYUb~7MǠQO?/Bвb>B)k9ԧu-NmkWQR-$dݫwe8+QY;b=6w²gUVʓr@P__8r sRsLϟQAgNL$L
+Zwڃ;Ty^C45y@;Qsq~,au	]䚓Y0kQ@f߇CRi(XxUHȌ)6G=uCCiL·^bNEAfM̌^隬t3P14Oi -NI
+a#1ԡQg>*/z1\Zv$AZ>V[I? Reh|?2}8 HlmTs蘇-x~F5י
+4:Hc|ˮ8<Wm?J춥Y+Þ+5/tn^J^'goJj$DJ'3!Ӳ7}%7h/,:nD窓Ѳ"|zq(Ypƽw˗?3"ugt<dI
+ L<zh'ˏ^%n$;Ȉ̈$'Yu :kO[JNY^4m/?1ӎ
+-zbcq
+Y\}c=x16'$GDaLPq`Fxvߨ/.</gP.rL>y~hUƝlWPE1[JgnR|xRQcW cچ#]?>#xM.B1]fJ Һ
+xce4o0M45?h6O.{F쁑H	gn5f?KB?F'{S`gSPY@k2?P@bX41h>+s
+>e>UiIdJ>,ՆRx?m܃H%mg@-LmEt!s1dcAKu$`ȋVLagSE(W'c8v+͏]!_|1(ő	G_zu̃\[4~'mfjoͰi}7oe7_MR5+${ȋ-+>d(^6j/_?SuL	mq/_./pw_[=_(
+D>3vefظAgR$ؿ|u_r5<Qc&PT-Snf^f*7VmmUOMj`6C)uq(Q:!9ː6Xjl/\a=jǁac!Jf8geGm݉܁1qctM`Qݰ
+T\Ot]VeʈAQ
+$1 ^2K	"䫸@w!}EÒ}@s8v-t9+r0%GwK>Eo2_^WӾ1\fHoǉYWn%rA emٗjMcV1ǹE^hլ^e+G?!NeGY13Ezש_Ms|Iuág>h;*	B/!MRY\S#A%֒+\}6	,F/} {W"s6&piiV|arڶ9O-?.CѬad@FG!X>W䅿P+rz`6h=;zSF?5<D\(LQ&?S:C8d<!7B3UJw%WF8s˺%H?.Եa9Ǥ~L]8X-MWI}<EL[wf7hս:[?%KgTNXsCU$jt[sSq!џG/re()v]ɛ3J訛k WW;$Q3
+XϨٙ1Q$hk2B	VgOTD2^#xq:V}͘AƴE3#wBS|NG/Xoo2d#7>`n{Uf)|SPt/kzg72:ArM7rM3Ӳq]`L#x@|Iz4 G	?THo{r);׹z~@?s<]o}я`8щ,O9/~,]y7
+?UFbȹEr!c0CQ<*VO:S֬  yq×of&I1gqz>jAl}	:+pQ	g=bdD|kH:WE?Qw4lw7N	ꌐX<ՒtN㍙':yțӞ(gK|lG9Sh)IS=͐VEo~WG垄Cte\Ϲ)׵m[|߮z&WY]uFޱ5Ň+H$BDQ)Jhm	j:!|?G<׈G>}dy"
+֏ＨxyuEO.zH{!"[R?'R	/ՀgIϓXa$5.F6Zk<{lFr]nc54D#cm֜)n'aWzTlp2-eyT`E;Td^@GBsJhC3t:KIuC^OJMMZ`w:rWd`K'u`vO!EE}؊Q@W7?|&m?u1:fQ8>qJ<- pUX4%<O_B5'KOM@oTNzR772`uOЩ8"xXgߋzfS*0Jvrnmv6Vށ
+a^ׁ):~XpD]%?F+CBr'D8/NǍfZ*w*R丞F+zjVjqCʳRJ)RJ)RJ)RJ)RJiCԭ h 
\ No newline at end of file
diff --git a/core/modules/system/tests/fixtures/config_install/testing_config_install_no_config.tar.gz b/core/modules/system/tests/fixtures/config_install/testing_config_install_no_config.tar.gz
new file mode 100644
index 0000000..06d7405
--- /dev/null
+++ b/core/modules/system/tests/fixtures/config_install/testing_config_install_no_config.tar.gz
@@ -0,0 +1 @@
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
\ No newline at end of file
