👻

【mise】PHP を最小限のオプションでビルドする

2024/05/26に公開

【2024年6月25日追記】設定がすべて反映されていないので修正する必要があります

mise で PHP をインストールする場合、PEAR や Composer をダウンロードできなくて失敗したり、不要なエクステンションが多いのでビルド時間が長くなる問題に遭遇した。

ほとんどのコンパイルオプションを無効にするために $HOME/.local/share/mise/plugins/php/bin/install の3箇所を修正することになった

install
 if [ "$PHP_NUTRAL" = "yes" ]; then
    global_config="--prefix=$install_path \
      --sysconfdir=$install_path \
      --with-config-file-path=$install_path \
      --with-config-file-scan-dir=$install_path/conf.d"
    export PHP_WITHOUT_PDO_PGSQL=yes
    export PHP_WITHOUT_PEAR=yes
    export PHP_WITHOUT_COMPOSER=yes
  else
    global_config="--prefix=$install_path \
      --enable-bcmath \
      --enable-calendar \
      --enable-dba \
      --enable-exif \
      --enable-fpm \
      --enable-ftp \
      --enable-gd \
      --enable-gd-native-ttf \
      --enable-intl \
      --enable-mbregex \
      --enable-mbstring \
      --enable-mysqlnd \
      --enable-pcntl \
      --enable-shmop \
      --enable-soap \
      --enable-sockets \
      --enable-sysvmsg \
      --enable-sysvsem \
      --enable-sysvshm \
      --enable-wddx \
      --enable-zip \
      --sysconfdir=$install_path \
      --with-config-file-path=$install_path \
      --with-config-file-scan-dir=$install_path/conf.d \
      --with-curl \
      --with-external-gd \
      --with-fpm-group=www-data \
      --with-fpm-user=www-data \
      --with-gd \
      --with-mhash \
      --with-mysql=mysqlnd \
      --with-mysqli=mysqlnd \
      --with-pdo-mysql=mysqlnd \
      --with-xmlrpc \
      --with-zip \
      --with-zlib \
      --without-snmp"
  fi
install
if [ "$PHP_NEUTRAL" = "yes" ]; then
  configure_options="--with-openssl \
    --with-curl \
    --with-zlib \
    --with-readline \
    --with-gettext"
fi
install

if [ "$PHP_NEUTRAL" = "yes" ]; then
  export PHP_WITHOUT_PEAR=yes
  export PHP_WITHOUT_PDO_PGSQL=yes
  export PHP_WITHOUT_COMPOSER=yes
fi

install_php "$ASDF_INSTALL_TYPE" "$ASDF_INSTALL_VERSION" "$ASDF_INSTALL_PATH"

if [ "$PHP_WITHOUT_COMPOSER" = "yes" ]; then
  install_composer "$ASDF_INSTALL_PATH"
fi

ビルドは次のように行う

ASDF_CONCURRENCY=$(nproc) \
PHP_NUETRAL=yes \
mise install php 8.3.7

PHP_NEUTRAL という名前は phpbrewneutral オプションに由来する。PHP_WITHOUT_DEFAULT も考えたが DEFAULT は乱用されがちな言葉なので却下した。

PEAR を無効にすると pecl もインストールされないので pecl.php.net を利用したい場合、pickel を手動でインストールする必要がある。

Discussion