弊社のクラウドはオンプレミスで構築しています。クラウドのシステムは「NEXTCLOUD」です。
それまで「ownCloud」でオンプレミスクラウドを構築していましたが、なんとなく速度も遅いし、バージョンアップなどのシステム管理の面でも結構めんどくいさいのもあって、流れをくむ「NEXTCLOUD」に乗り換えた次第です。サーバーのマシンはちょっと古いものを使いまわしするので、必然的に軽量なOSを選定して、FREEBSDでサーバー環境を構築しています。
FREEBSDは、WINDOWSではありませんので、OS自体のバージョンアップやシステムに付随しているサービスなんかのバージョンアップが単純に「更新」と「アップデート」で済ませるようなお手軽さはありませんw まぁ、それでも古いマシンを現役バリバリで使えるわけでハードウェアの資産を有効に使える点ではちょっと気合いを入れればメリットのほうが大きいかもしれませんw
とはいえ、システムはOSだけでなく、付随のサービス(ApacheとかPHPなど)も含めて環境をアップデートしていかなくてはなりませんし、お手軽さがない分、失敗すればクリーンインストールからという事態になることも不思議ではありませんw
そんな中、NEXTCLOUDが「34」になるタイミングで、サーバーシステム対する要求仕様も結構新しめになってきました。

ここで重要になってくるのが「PHP」です。PHPのバージョンは8.2なのが弊社のサーバーだったので、これを8.3やそれ以上にアップデートすることが必要になってきます。FREEBSDの場合、パッケージリポジトリをアップデートしていけば、とりあえずソフトウェアとしてのサービス機能はアップデートが簡単(でもないけどw)にできます。そこで、インストールされているPHP関連のソフトウェアを検索してみたところこんな感じでした。
# pkg info -r php82
php82-8.2.7:
php82-sodium-8.2.15
php82-pecl-memcache-8.2
php82-pecl-redis-5.3.7_1
php82-sysvsem-8.2.7
php82-bcmath-8.2.7
php82-pecl-imagick-im7-3.7.0_1
php82-pecl-APCu-5.1.22
phpMyAdmin-php82-4.9.11_1
php82-zip-8.2.7
php82-shmop-8.2.7
php82-pgsql-8.2.7
php82-pdo_pgsql-8.2.7
php82-pdo_odbc-8.2.7
php82-exif-8.2.7
php82-gmp-8.2.7
php82-gettext-8.2.7
php82-gd-8.2.7
php82-fileinfo-8.2.7
php82-ftp-8.2.7
php82-ffi-8.2.7
php82-mysqli-8.2.7
php82-zlib-8.2.7
php82-pdo_mysql-8.2.9
php82-odbc-8.2.9
php82-mbstring-8.2.7
php82-ldap-8.2.9
php82-intl-8.2.9
php82-imap-8.2.9
php82-curl-8.2.7
php82-bz2-8.2.7
php82-extensions-1.0
php82-pdo_sqlite-8.2.7
php82-filter-8.2.7
php82-opcache-8.2.7
php82-iconv-8.2.7
php82-ctype-8.2.7
php82-xmlwriter-8.2.7
php82-xml-8.2.7
php82-xmlreader-8.2.7
php82-sqlite3-8.2.7
php82-posix-8.2.7
php82-phar-8.2.7
php82-tokenizer-8.2.7
php82-simplexml-8.2.7
php82-session-8.2.7
php82-pdo-8.2.7
php82-dom-8.2.7
これらのPHP82をPHP85にすればいいわけですが、そう簡単にはいきませんwww
パッケージリポジトリは、FREEBSDのバージョンによって対応するパッケージが管理されています。弊社のFREEBSDのバージョンは13.2ですでに「EOL(End of Life)」となっていて閉鎖されていましたwww つまり、OSが13.2の状態では、13.2のパッケージリポジトリを更新することはできないわけではないけど、相当メンドクサイ話しになるということです。
メンドクサイ話しとは、パッケージリポジトリを使わないということ、つまり、portsからソースをコンパイルしてインストールするってわけですwww そんなことやるくらいなら、クリーンインストールのほうが100倍マシかもしれませんw
というわけで、FREEBSDのバージョンをアップするという方法をとって、その後、リポジトリのアップデートを行うという2段階の手順を踏むことにしました。現在のFREEBSDの公開バージョンは、14.3、14.4、そして15.0ですw

13.2なんてのは相当古いわけですw

でも、13から14や15は、メジャーバージョンアップで結構な変更があります。13.2から13.5であれば、マイナーバージョンアップですので、アップデートによる影響は大きくないのです(事故率は低いですwww)。そこで、13の最終バージョンである13.5までOSのアップデートを行い、13.5でパッケージリポジトリをアップデートすることにしました。
具体的な手順としては、
Step1: 13.3へ
freebsd-update -r 13.3-RELEASE upgrade
freebsd-update install
reboot
再起動後
freebsd-update install
Step1: 13.4へ
freebsd-update -r 13.4-RELEASE upgrade
freebsd-update install
reboot
再起動後
freebsd-update install
Step1: 13.5へ
freebsd-update -r 13.5-RELEASE upgrade
freebsd-update install
reboot
再起動後
freebsd-update install
という手順なんですが、実は、13.4へ行く段階で嵌りましたw
The following file could not be merged automatically: /etc/master.passwd
Press Enter to edit this file in ee and resolve the conflicts manually…
ってことで、マイナーバージョンアップが止まりましたw まぁ、master.passwdを編集して再設定しろってことなんですが、ご丁寧に「コンフリクトマーカー」をつけてくれてるので、その部分を消し込んでいけば対応はOKなわけですが、
<<<<<<< current version
$FreeBSD$
root:**************************
=======
root::0:0:0:0:Charlie &:/root:/bin/csh
>>>>>>>13.3-RELEASE
となっているのを、<と=の行だけ消せばいいのを、これらの行を消したことで、「root」がなくなってしまいましたwww まぁ、復活はさせましたが、余計なことをしましたw
これらのマイナーバージョンアップの作業を13.5まで繰り返して、OSが起動し操作できることを確認して、
pkg update
で、ようやくパッケージリポジトリをアップデートすることができるようになりましたw あとは簡単ですw
pkg install php85 \
php85-curl php85-gd php85-mbstring php85-xml \
php85-zip php85-intl php85-pdo php85-pdo_mysql \
php85-bcmath php85-gmp \
php85-pecl-imagick php85-pecl-APCu \
php85-fileinfo php85-posix php85-exif \
php85-bz2 php85-sodium php85-ldap \
php85-sysvsem php85-mysqli php85-iconv \
php85-ctype php85-xmlwriter php85-xmlreader \
php85-sqlite3 php85-phar php85-tokenizer \
php85-simplexml php85-session php85-pdo \
php85-dom php85-shmop php85-ftp \
php85-pecl-imap php85-pgsql php85-pdo_pgsql \
php85-pecl-memcache php85-pecl-redis \
php85-filter php85-zlib php85-gettext php85-posix
という感じでモジュールをアップデートインストールすればいいわけです。
ですが、これだけではすみませんでした。iniっファイルの設定では、パスの設定もありますし、そのパスに、日付から作られたようなディレクトリ(20220829のような)の設定あって、これをアップデートした環境で直す必要があります。
と、如何にも自分で調べたように書いてますが、ここまでのサポートはすべて「Claude」がやってくれましたwww 私はコンソールに表示されたエラーなどを張り付けるだけで対処方法を返してくれます。ホントに便利な世の中になりました。
そしてめでたくPHPは8.5になり、NEXTCLOUD34の推奨環境となりました。



