0

I am a Drupal site builder experimenting with WSL2 and I am finding the routine creating a Drupal project with composer does not complete.

My PC has 16GB RAM and composer is allowed unlimited memory. To the best of my understanding I have Docker configured correctly for WSL2.

The create-project process starts normally but then stalls when installing drupal/core (9.0.2). This appears to be so whether downloading from source or from cache. After a considerable time the process will fail. The contents of the project folder are largely incomplete.

I first attempted this with a Drupal 9 recipe for DDEV, a container based local dev environment which includes composer.

Not wishing to point the finger at DDEV, I then installed composer via Homebrew in the Home directory of WSL2 and tried again, independently of DDEV or Docker. After running composer create-project drupal/recommended-project my_site_name_dir I find that composer fails in exactly the same way.

Composer output follows;

paul@DESKTOP-TQA1I7L:/mnt/c/Users/Paul/Sites/D9$ composer create-project drupal/recommended-project my_site_name_dir Creating a "drupal/recommended-project" project at "./my_site_name_dir" Installing drupal/recommended-project (9.0.2)

  • Installing drupal/recommended-project (9.0.2): Loading from cache Created project in /mnt/c/Users/Paul/Sites/D9/my_site_name_dir Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Package operations: 59 installs, 0 updates, 0 removals
  • Installing composer/installers (v1.9.0): Loading from cache
  • Installing drupal/core-composer-scaffold (9.0.2): Loading from cache
  • Installing drupal/core-project-message (9.0.2): Loading from cache
  • Installing typo3/phar-stream-wrapper (v3.1.4): Loading from cache
  • Installing symfony/polyfill-mbstring (v1.17.0): Loading from cache
  • Installing symfony/polyfill-ctype (v1.17.0): Loading from cache
  • Installing twig/twig (v2.12.5): Loading from cache
  • Installing symfony/yaml (v4.4.9): Loading from cache
  • Installing symfony/polyfill-php80 (v1.17.0): Loading from cache
  • Installing symfony/var-dumper (v5.1.0): Loading from cache
  • Installing symfony/translation-contracts (v2.1.2): Loading from cache
  • Installing symfony/validator (v4.4.9): Loading from cache
  • Installing symfony/translation (v4.4.9): Loading from cache
  • Installing psr/container (1.0.0): Loading from cache
  • Installing symfony/service-contracts (v2.1.2): Loading from cache
  • Installing symfony/serializer (v4.4.9): Loading from cache
  • Installing symfony/routing (v4.4.9): Loading from cache
  • Installing symfony/polyfill-php72 (v1.17.0): Loading from cache
  • Installing symfony/polyfill-intl-idn (v1.17.0): Loading from cache
  • Installing symfony/mime (v5.1.0): Loading from cache
  • Installing symfony/http-foundation (v4.4.9): Loading from cache
  • Installing psr/http-message (1.0.1): Loading from cache
  • Installing symfony/psr-http-message-bridge (v2.0.0): Loading from cache
  • Installing symfony/process (v4.4.9): Loading from cache
  • Installing symfony/polyfill-php73 (v1.17.0): Loading from cache
  • Installing symfony/polyfill-iconv (v1.17.0): Loading from cache
  • Installing symfony/event-dispatcher-contracts (v1.1.7): Loading from cache
  • Installing symfony/event-dispatcher (v4.4.9): Loading from cache
  • Installing psr/log (1.1.3): Loading from cache
  • Installing symfony/debug (v4.4.9): Loading from cache
  • Installing symfony/error-handler (v4.4.9): Loading from cache
  • Installing symfony/http-kernel (v4.4.9): Loading from cache
  • Installing symfony/dependency-injection (v4.4.9): Loading from cache
  • Installing symfony/console (v4.4.9): Loading from cache
  • Installing symfony-cmf/routing (2.3.2): Loading from cache
  • Installing stack/builder (v1.0.6): Loading from cache
  • Installing ralouphie/getallheaders (3.0.3): Loading from cache
  • Installing psr/http-factory (1.0.1): Loading from cache
  • Installing pear/pear_exception (v1.0.1): Loading from cache
  • Installing pear/console_getopt (v1.4.3): Loading from cache
  • Installing pear/pear-core-minimal (v1.10.10): Loading from cache
  • Installing pear/archive_tar (1.4.9): Loading from cache
  • Installing masterminds/html5 (2.7.0): Loading from cache
  • Installing laminas/laminas-zendframework-bridge (1.0.4): Loading from cache
  • Installing laminas/laminas-stdlib (3.2.1): Loading from cache
  • Installing laminas/laminas-escaper (2.6.1): Loading from cache
  • Installing laminas/laminas-feed (2.12.2): Loading from cache
  • Installing laminas/laminas-diactoros (2.3.0): Loading from cache
  • Installing guzzlehttp/psr7 (1.6.1): Loading from cache
  • Installing guzzlehttp/promises (v1.3.1): Loading from cache
  • Installing guzzlehttp/guzzle (6.5.4): Loading from cache
  • Installing doctrine/lexer (1.2.1): Loading from cache
  • Installing egulias/email-validator (2.1.17): Loading from cache
  • Installing doctrine/annotations (1.10.3): Loading from cache
  • Installing doctrine/reflection (1.2.1): Loading from cache
  • Installing composer/semver (1.5.1): Loading from cache
  • Installing asm89/stack-cors (1.3.0): Loading from cache
  • Installing drupal/core (9.0.2): Loading from cache Failed to download drupal/core from dist: Could not delete /mnt/c/Users/Paul/Sites/D9/my_site_name_dir/vendor/composer/782129de/drupal-core-ea6e0ce/lib/Drupal/Core: Now trying to download from source
  • Installing drupal/core (9.0.2): Cloning ea6e0cef32 from cache

[Symfony\Component\Process\Exception\ProcessTimedOutException] The process "git checkout '9.0.2' --" exceeded the timeout of 300 seconds.

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [] [] []

paul@DESKTOP-TQA1I7L:/mnt/c/Users/Paul/Sites/D9$ paul@DESKTOP-TQA1I7L:/mnt/c/Users/Paul/Sites/D9$ composer create-project drupal/recommended-project my_site_name_dir Creating a "drupal/recommended-project" project at "./my_site_name_dir"

[InvalidArgumentException] Project directory "/mnt/c/Users/Paul/Sites/D9/my_site_name_dir" is not empty.

create-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--ignore-platform-reqs] [--] [] [] []

MrPaulDriver
  • 243
  • 1
  • 13

2 Answers2

2

You absolutely need to put your project on the WSL2 filesystem for decent performance, yes. See @MrPaulDriver answer, absolutely critical.

But we recommend using ddev composer everywhere. That makes your composer build using the same composer settings and php version that your project runs with, and it helps most people. It's not even required to install php or composer on the host of a ddev host computer because of this.

For example, the Drupal 9 Quickstart shows

mkdir my-drupal9-site
cd my-drupal9-site
ddev config --project-type=drupal9 --docroot=web --create-docroot
ddev start
ddev composer create "drupal/recommended-project"
ddev composer require drush/drush
ddev launch

I imagine this would have worked for you even in your previous setup; it's worked loads of places.

For more detail, please take a look at DDEV and Composer in the docs.

rfay
  • 9,963
  • 1
  • 47
  • 89
  • It was this recipe that was failing with the windows file system. Perhaps my PC just ran out of steam :-) – MrPaulDriver Jul 20 '20 at 12:12
  • 1
    NTFS is really, really bad with lots of small files like in a composer-based PHP project. So I imagine you're right! Since you were using the host-side PHP and composer settings, composer just croaked. – rfay Jul 21 '20 at 13:40
1

After reading some updated documentation I now understand the problem was that I was attempting to perform this operation under the Windows file system at .mnt/c/Users/Paul instead of the Linux location of /home/paul

As well as completing without errors, performance is vastly improved.

MrPaulDriver
  • 243
  • 1
  • 13