none
Web App Linux - Kudu deployment failing - can't find node or bcmath RRS feed

  • Question

  • Hey guys,

    I have a couple of Web Apps running Linux and PHP 7.3 stack. My last successful deployment to my primary one was on August 30 (exactly 2 weeks ago). Yesterday I tried deploying and it failed.

    The first error was that Node could not be found.

    Detecting node version spec...
    Using default version: 10.16.0
    Node.js versions available on the platform are: 4.4.7, 4.5.0, 4.8.0, 6.2.2, 6.6.0, 6.9.3, 6.10.3, 6.11.0, 6.17.1, 8.0.0, 8.1.4, 8.2.1, 8.8.1, 8.9.4, 8.11.2, 8.12.0, 8.15.1, 8.16.0, 9.4.0, 10.1.0, 10.10.0, 10.14.2, 10.16.0, 12.7.0.
    ENOENT: no such file or directory, open '/opt/nodejs/10.16.0/npm.txt'
    Resolved to version 10.16.0
    Detecting npm version spec...
    An error has occurred during web site deployment.
    select node version failed
    ENOENT: no such file or directory, open '/opt/nodejs/10.16.0/npm.txt'\n/opt/Kudu/Scripts/starter.sh bash deploy.sh


    I removed the Node commands in my Kudu script and it still failed now complaining that PHP extension bcmath couldn't be found.

    Composer (version 1.9.0) successfully installed to: /home/site/wwwroot/composer.phar
    Use it: php composer.phar
    
    Loading composer repositories with package information
    Installing dependencies (including require-dev) from lock file
    Your requirements could not be resolved to an installable set of packages.
    
    An error has occurred during web site deployment.
      Problem 1
        - moontoast/math 1.1.2 requires ext-bcmath * -> the requested PHP extension bcmath is missing from your system.
    composer failed
        - moontoast/math 1.1.2 requires ext-bcmath * -> the requested PHP extension bcmath is missing from your system.
        - Installation request for moontoast/math 1.1.2 -> satisfiable by moontoast/math[1.1.2].
    
      To enable extensions, verify that they are enabled in your .ini files:
        - /opt/php/7.3.7/ini/php.ini
        - /opt/php/7.3.7/ini/conf.d/docker-php-ext-sodium.ini
      You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
    Loading composer repositories with package information\nInstalling dependencies (including require-dev) from lock file\nYour requirements could not be resolved to an installable set of packages.\n\n  Problem 1\n    - moontoast/math 1.1.2 requires ext-bcmath * -> the requested PHP extension bcmath is missing from your system.\n    - moontoast/math 1.1.2 requires ext-bcmath * -> the requested PHP extension bcmath is missing from your system.\n    - Installation request for moontoast/math 1.1.2 -> satisfiable by moontoast/math[1.1.2].\n\n  To enable extensions, verify that they are enabled in your .ini files:\n    - /opt/php/7.3.7/ini/php.ini\n    - /opt/php/7.3.7/ini/conf.d/docker-php-ext-sodium.ini\n  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.\n/opt/Kudu/Scripts/starter.sh bash deploy.sh


    I haven't changed anything in my Kudu script or my Composer repositories before this started.

    Any ideas what is going on here? Has something changed with the Web App for Linux container images? @AzureSupport on twitter asked me to post here.

    Full Kudu deployment script is below. This was originally taken from a tutorial on Azure docs. I modified the composer install but otherwise it had been working just fine for me for quite a long time.

    Friday, September 13, 2019 12:40 PM

All replies

  • #!/bin/bash
    
    # ----------------------
    # KUDU Deployment Script
    # Version: 0.2.2
    # ----------------------
    
    # Helpers
    # -------
    
    exitWithMessageOnError () {
      if [ ! $? -eq 0 ]; then
        echo "An error has occurred during web site deployment."
        echo $1
        exit 1
      fi
    }
    
    # Prerequisites
    # -------------
    
    # Verify node.js installed
    hash node 2>/dev/null
    exitWithMessageOnError "Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment."
    
    # Setup
    # -----
    
    SCRIPT_DIR="${BASH_SOURCE[0]%\\*}"
    SCRIPT_DIR="${SCRIPT_DIR%/*}"
    ARTIFACTS=$SCRIPT_DIR/../artifacts
    KUDU_SYNC_CMD=${KUDU_SYNC_CMD//\"}
    
    if [[ ! -n "$DEPLOYMENT_SOURCE" ]]; then
      DEPLOYMENT_SOURCE=$SCRIPT_DIR
    fi
    
    if [[ ! -n "$NEXT_MANIFEST_PATH" ]]; then
      NEXT_MANIFEST_PATH=$ARTIFACTS/manifest
    
      if [[ ! -n "$PREVIOUS_MANIFEST_PATH" ]]; then
        PREVIOUS_MANIFEST_PATH=$NEXT_MANIFEST_PATH
      fi
    fi
    
    if [[ ! -n "$DEPLOYMENT_TARGET" ]]; then
      DEPLOYMENT_TARGET=$ARTIFACTS/wwwroot
    else
      KUDU_SERVICE=true
    fi
    
    if [[ ! -n "$KUDU_SYNC_CMD" ]]; then
      # Install kudu sync
      echo Installing Kudu Sync
      npm install kudusync -g --silent
      exitWithMessageOnError "npm failed"
    
      if [[ ! -n "$KUDU_SERVICE" ]]; then
        # In case we are running locally this is the correct location of kuduSync
        KUDU_SYNC_CMD=kuduSync
      else
        # In case we are running on kudu service this is the correct location of kuduSync
        KUDU_SYNC_CMD=$APPDATA/npm/node_modules/kuduSync/bin/kuduSync
      fi
    fi
    
    
    # Node Helpers
    # ------------
    
    selectNodeVersion () {
      if [[ -n "$KUDU_SELECT_NODE_VERSION_CMD" ]]; then
        SELECT_NODE_VERSION="$KUDU_SELECT_NODE_VERSION_CMD \"$DEPLOYMENT_SOURCE\" \"$DEPLOYMENT_TARGET\" \"$DEPLOYMENT_TEMP\""
        eval $SELECT_NODE_VERSION
        exitWithMessageOnError "select node version failed"
    
        if [[ -e "$DEPLOYMENT_TEMP/__nodeVersion.tmp" ]]; then
          NODE_EXE=`cat "$DEPLOYMENT_TEMP/__nodeVersion.tmp"`
          exitWithMessageOnError "getting node version failed"
        fi
    
        if [[ -e "$DEPLOYMENT_TEMP/.tmp" ]]; then
          NPM_JS_PATH=`cat "$DEPLOYMENT_TEMP/__npmVersion.tmp"`
          exitWithMessageOnError "getting npm version failed"
        fi
    
        if [[ ! -n "$NODE_EXE" ]]; then
          NODE_EXE=node
        fi
    
        NPM_CMD="\"$NODE_EXE\" \"$NPM_JS_PATH\""
      else
        NPM_CMD=npm
        NODE_EXE=node
      fi
    }
    
    ##################################################################################################################################
    # Deployment
    # ----------
    
    echo Handling node.js deployment.
    
    # 1. KuduSync
    if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then
      "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh"
      exitWithMessageOnError "Kudu Sync failed"
    fi
    
    # 2. Select node version
    selectNodeVersion
    
    # 3. Install NPM packages
    if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then
      cd "$DEPLOYMENT_TARGET"
      eval $NPM_CMD install --production
      exitWithMessageOnError "npm failed"
      cd - > /dev/null
    fi
    
    # 4. Install Bower modules
    if [ -e "$DEPLOYMENT_TARGET/bower.json" ]; then
      cd "$DEPLOYMENT_TARGET"
      eval ./node_modules/.bin/bower install
      exitWithMessageOnError "bower failed"
      cd - > /dev/null
    fi
    
    # 5. Install Composer modules
    if [ -e "$DEPLOYMENT_TARGET/composer.json" ]; then
      cd "$DEPLOYMENT_TARGET"
    
      # Install latest version of composer
      eval curl -s https://getcomposer.org/installer | php
      exitWithMessageOnError "composer install failed"
    
      # Run composer install
      eval php composer.phar install
      exitWithMessageOnError "composer failed"
      cd - > /dev/null
    fi
    
    ##################################################################################################################################
    
    # Post deployment stub
    if [[ -n "$POST_DEPLOYMENT_ACTION" ]]; then
      POST_DEPLOYMENT_ACTION=${POST_DEPLOYMENT_ACTION//\"}
      cd "${POST_DEPLOYMENT_ACTION_DIR%\\*}"
      "$POST_DEPLOYMENT_ACTION"
      exitWithMessageOnError "post deployment action failed"
    fi
    
    echo "Finished successfully."
    


    Friday, September 13, 2019 12:40 PM
  • Hi CDMMPE,

    We apologize for the delay in response. To better assist you, can you please share with us what documentation you were following and what node commands you removed that led to the "PHP extension bcmath couldn't be found" error?

    Thanks,

    Grace


    Tuesday, September 17, 2019 6:05 AM
    Moderator
  • Hi CDMMPE,

    By chance, what region is your app deployed in?


    Thanks in advance, Ryan

    Monday, September 30, 2019 8:05 PM
    Moderator
  • There was a regression in Kudu, were the bcmath module was removed, it will be added back with ant 85

    I'm not sure if node 10.16 is released yet, please try node 10.14, this should be fixed by ant 85

    Monday, October 14, 2019 8:42 PM