Codebuild не устанавливает пакеты PHP - PullRequest
2 голосов
/ 03 мая 2019

Моя кодовая сборка работала хорошо до сегодняшнего дня. Это происходит со следующими ошибками:

Reading state information... 
E: Unable to locate package php7.1 
E: Couldn't find any package by regex 'php7.1' 
E: Unable to locate package php7.1-xml 
E: Couldn't find any package by regex 'php7.1-xml' 
E: Unable to locate package php7.1-xmlrpc 
E: Couldn't find any package by regex 'php7.1-xmlrpc' 
E: Unable to locate package php7.1-zip 
E: Couldn't find any package by regex 'php7.1-zip' 
E: Unable to locate package php7.1-mysql 
E: Couldn't find any package by regex 'php7.1-mysql' 
E: Unable to locate package php7.1-mbstring 
E: Couldn't find any package by regex 'php7.1-mbstring' 
E: Unable to locate package php7.1-mcrypt 
E: Couldn't find any package by regex 'php7.1-mcrypt' 
E: Unable to locate package php7.1-gd 

в чем может быть проблема? Обратите внимание, что с этой настройкой сборки работали хорошо. В файле buildspec не было никаких изменений.

Вот что я пробовал:

version: 0.2
phases:
 install:
   commands:
     - |

         apt-get install -y software-properties-common

         export DEBIAN_FRONTEND=noninteractive
         apt-get update

         LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php

version: 0.2
phases:
 install:
   commands:
     - |

         apt-get install -y software-properties-common

         export DEBIAN_FRONTEND=noninteractive
         apt-get update

         LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
         apt-get update
         apt-get install -y php7.1 \
                  php7.1-xml \
                  php7.1-xmlrpc \
                  php7.1-zip \
                  php7.1-mysql \
                  php7.1-mbstring \
                  php7.1-mcrypt \
                  php7.1-gd \
                  php7.1-opcache \
                  php7.1-dom \
                  php7.1-bcmath \
                  php7.1-curl \
                  unzip \
                  nasm

Я ожидал, что пакеты php будут установлены как обычно.

Ответы [ 3 ]

3 голосов
/ 06 мая 2019

Это была проблема с базовым образом, который я использовал, который был на Ubuntu 14.04. Ubuntu 14.04 LTS прекратил поддержку с апреля 2019 года, и из репозитория ondrej нет папки репо, соответствующей Ubuntu 14.04.

Мне пришлось переключить свой базовый образ на aws / codebuild / standard: 2.0, что решило мою проблему.

1 голос
/ 08 мая 2019

Когда вы переключаетесь на aws / codebuild / standard: 2.0, он предоставляет вам Ubuntu 18. Вы также должны указать время выполнения, например

phases:
  install:
    runtime-versions:
      php: 7.3

Я обнаружил, что AWS помещает свои PHP ini в /usr/local/etc/php/conf.d/, но когда вы устанавливаете расширения, ini помещается в /etc/php/7.3/cli/php.ini - так вы необходимо присоединить нестандарт к стандарту, чтобы найти файлы расширения.

Эту проблему можно решить, добавив стандартный путь к INI-файлу следующим образом:

touch /usr/local/etc/php/conf.d/extra_config.ini
echo extension_dir="/usr/lib/php/20180731/" >> /usr/local/etc/php/conf.d/extra_config.ini
echo extension=gd.so >> /usr/local/etc/php/conf.d/extra_config.ini
Running command php -m

Окончательный buildspec.yml выглядит следующим образом (с некоторой отладкой, чтобы вы могли видеть до и после, а также содержимое extra_config.ini:

phases:
  install:
    runtime-versions:
      php: 7.3
    commands:
      - php -v
      - php -m
      - lsb_release -a
      - LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php
      - apt-get update -y
      - apt-get install -y php7.3-gd  php7.3-xdebug
      - ls /usr/lib/php/20180731
      - touch /usr/local/etc/php/conf.d/extra_config.ini
      - "echo extension_dir=\"/usr/lib/php/20180731/\" >> /usr/local/etc/php/conf.d/extra_config.ini"
      - "echo extension=gd.so >> /usr/local/etc/php/conf.d/extra_config.ini"
      - "echo zend_extension=xdebug.so >> /usr/local/etc/php/conf.d/extra_config.ini"  
      - cat /usr/local/etc/php/conf.d/extra_config.ini
      - php -m
0 голосов
/ 21 июня 2019

Я собираюсь обновить этот вопрос, потому что принятый здесь ответ, похоже, не работает для меня, и даже если это так, это очень хрупкое решение. Установка PHP, подтвержденная AWS для Ubuntu 18.04 (v2), похоже, была скомпилирована из исходного кода вместе со всеми другими поддерживаемыми «версиями времени выполнения», а затем выгружена в / usr / local. Если вы заглянете в эту папку, вы сразу заметите, что вы получили ВСЕ версии среды выполнения, независимо от того, какую версию вы указали в файле buildspec. Возникает вопрос, почему версия времени выполнения требуется или даже включена в файл buildspec? Я предполагаю, что AWS делает это, делая вид, что у них больше возможностей и более сложной системы, чем они есть на самом деле.

Итак, как вы получаете рабочую версию PHP? Следующее является частью файла buildspec.yml, который я использую. Вы можете выбрать любые версии исполнения, какие захотите, мы уже установили, что этот параметр ничего не делает. Затем вам нужно удалить весь мусор PHP AWS, включенный в / usr / local / bin, потому что это местоположение находится перед / usr / bin в среде PATH. Я предполагаю, что это было сделано Amazon, чтобы сделать этот процесс максимально трудным. Теперь, когда у вас больше нет PHP в пути, вы можете установить версию PHP для менеджеров пакетов через apt-get install -y php7.2-cli php7.2-zip. Наконец, не забудьте запустить phpenmod для установленных модулей, чтобы убедиться, что они включены.

version: 0.2

run-as: root

phases:
  install:
    runtime-versions:
      nodejs: 8
    commands:
      - rm -f /usr/local/bin/php*
      - rm -f /usr/local/bin/phar*
      - rm -f /usr/local/bin/pear*
      - rm -f /usr/local/bin/pecl*
      - apt-get update
      - apt-get upgrade -y
      - apt-get install -y php7.2-cli php7.2-zip
      - phpenmod zip
...