それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

debianのphpでapcuを有効にする。

APCuが有効にならない。

sudo -u www-data php occ
An unhandled exception has been thrown:
OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

清く正しくdebian提供の、コマンドphpenmodでモジュールを有効にする。

# phpenmod apc

apc のモジュールはロードされている。

ls -l /etc/php/*/*/*apc*
-rw-r--r-- 1 root root  31 Nov  4  2018 /etc/php/7.3/mods-available/apcu_bc.ini
-rw-r--r-- 1 root root 109 Jul  5 15:14 /etc/php/7.3/mods-available/apcu.ini

しかし、有効にならない。

sudo -u www-data php occ
An unhandled exception has been thrown:
OC\HintException: [0]: Memcache \OC\Memcache\APCu not available for local cache (Is the matching PHP module installed and enabled?)

php -i で状況を見る。有効にならない・・・

# php -i | grep -i apcu

/etc/php/7.3/cli/conf.d/20-apcu.ini,
/etc/php/7.3/cli/conf.d/25-apcu_bc.ini
APCu Version => 5.1.17
apcu
APCu Support => Disabled
APCu Debugging => Disabled

apc 関連のphp.iniが欠損していると気づく。マジか。

cat <<EOF  >> /etc/php/7.3/cli/conf.d/20-apcu.ini

[apcu]
apc.enabled=1
apc.shm_size=32M
apc.ttl=7200
apc.enable_cli=1
apc.serializer=php

EOF

APCuが有効になった。

php -i | grep -i apcu
/etc/php/7.3/cli/conf.d/20-apcu.ini,
/etc/php/7.3/cli/conf.d/25-apcu_bc.ini
APCu Version => 5.1.17
apcu
APCu Support => Enabled
APCu Debugging => Disabled

結論

debianphp-apcu のモジュールでは apc.enabled = 1 が欠損している。

debian 系の php-mods のインストールには気をつけろ。

今回は少し古いdebianphpでメンテナンスをしていたので、最新版では治ってるかもしれないが。十分に気をつける必要がある。

nextcloud でまた起きた(2022-05-12)

debian をbullseyeにアップデートしたら、このエラーが再現して、nextcloud が死んだ

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

php-fpm がエラーになり、nginxが500を返すようになった。

sudo apt install php8.0 php8.0-fpm \
 php8.0-apcu \
 php8.0-xsl \
 php8.0-zip \
 php8.0-mbstring \
 php8.0-curl \
 php8.0-gd \
 php8.0-imagick \
 php8.0-sqlite3 \
 php8.0-redis \
 php8.0-mysql \
 php8.0-intl \
 php8.0-mcrypt \
 php8.0-memcache \
 php8.0-bcmath \
 php8.0-gmp \
 libmagickcore-6.q16-6-extra \

をして、phpenmodをした

phpenmod -v 8.0 apcu

これで生き返ったと思う。