- 1. 概要
- 2. 状況
- 3. バージョンの変更
- 4. /etc/make.conf 編集
- 5. アップグレード
- 6. 依存パッケージアップグレード
1. 概要
本記事は、2026年8月4日に書いております。
以下、「FreeBSD 15.1 RELEASE-p1」での作業です。
2. 状況
もともと、下記の状況にありまして。
portversion -v | grep '<'
perl5-5.40.4 < needs updating (port has 5.40.5)
アップグレードするのでありますが、出力メッセージの最後の方で。
[Reading data from pkg(8) ... - 626 packages found - done]
---> Installing the new version via the port
===> Deinstalling for perl5
===> perl5 not installed, skipping
===> Installing for perl5-5.40.5
===> Checking if perl5 is already installed
===> Registering installation for perl5-5.40.5
Installing perl5-5.40.5...
===> NOTICE:
This port is deprecated; you may wish to reconsider installing it:
Support end three years after .0 release, please upgrade to a more recent version of Perl.
It is scheduled to be removed on or after 2027-06-09.
===> Cleaning for perl5-5.40.5
---> Cleaning out obsolete shared libraries
2027年6月9日で、「perl5.40」のサポート期限が切れるそうな。
1年近く余裕はありますが、この際、アップグレードしようと思い立ちました。
「perl5」は、「ruby」や「python」に比べて、バージョンをあげることによる弊害が少ないですでな。
調べてみると。
ls -lhd /usr/ports/lang/perl5*
drwxr-xr-x 3 root wheel 8 7月 27 07:35 /usr/ports/lang/perl5-devel
drwxr-xr-x 3 root wheel 8 8月 4 07:19 /usr/ports/lang/perl5.40
drwxr-xr-x 3 root wheel 8 8月 4 07:04 /usr/ports/lang/perl5.42
drwxr-xr-x 3 root wheel 8 7月 17 07:04 /usr/ports/lang/perl5.44
「perl5.44」があるので、これにアップグレードしようと思います。
3. バージョンの変更
「ports」と「pkg」の「perl」のバージョンを変更します。
portupgrade -f perl5.40 -o lang/perl5.44
pkg set -o lang/perl5.40:lang/perl5.44
2つ目のコマンド、実行時に問いかけがあります
Change origin from lang/perl5.40 to lang/perl5.44 for perl5-5.40.5? [y/N]:
yEnter で答えます。
4. /etc/make.conf 編集
vi /etc/make.conf
DEFAULT_VERSIONS+=perl5=5.40
を以下に書き換えます(もともとない場合は追加)。
DEFAULT_VERSIONS+=perl5=5.44
5. アップグレード
先にオプションを設定しておきます。
cd /usr/ports/lang/perl5.44
make config
オプションは、デフォルトのままで。
アップグレード。
portmaster -o lang/perl5.44 perl5-5.40.5
最終的に下記のメッセージが表示されます。
===>>> Creating a backup package for old version perl5-5.40.5
Creating package for perl5-5.40.5
Updating database digests format: 100%
Checking integrity... done (0 conflicting)
Deinstallation has been requested for the following 1 packages (of 0 packages in the universe):
Installed packages to be REMOVED:
perl5: 5.40.5
Number of packages to be removed: 1
The operation will free 64 MiB.
[1/1] Deinstalling perl5-5.40.5...
[1/1] Deleting files for perl5-5.40.5: 100%
No packages matched for pattern 'perl5-5.40.5'
Checking integrity... done (0 conflicting)
1 packages requested for removal: 0 locked, 1 missing
===> Installing for perl5-5.44.0
===> Checking if perl5 is already installed
===> Registering installation for perl5-5.44.0 as automatic
Installing perl5-5.44.0...
===>>> Updating dependency entry for perl5-5.44.0 in each dependent port
===>>> Upgrade of perl5-5.40.5 to perl5-5.44.0 complete
うまくアップグレードできたようです。
6. 依存パッケージアップグレード
依存するパッケージをアップグレードします。
portmaster -r perl5-5.44.0
というコマンドでもできるのですが、これは、膨大な量になります。
下記の内容のシェルスクリプトを作成します。
#!/bin/sh
set -e
ORIGIN="lang/perl5.44"
echo "=== ${ORIGIN} がインストールされているか確認... ==="
if ! pkg info -e "${ORIGIN}" >/dev/null 2>&1; then
echo "エラー: ${ORIGIN} がシステムにインストールされていません。"
exit 1
fi
PERL_VER=$(pkg info -e "${ORIGIN}")
echo "検出された Perl: ${PERL_VER}"
echo "=== ${ORIGIN} に依存している ports を抽出中... ==="
# 新 Perl に依存するパッケージの Ports Origin を取得
TARGET_PORTS=$(pkg query '%ro' "${ORIGIN}" | sort -u)
if [ -z "$TARGET_PORTS" ]; then
echo "依存する ports は見つかりませんでした。"
exit 0
fi
echo "----------------------------------------"
echo "以下の ports を再ビルドします:"
echo "$TARGET_PORTS"
echo "----------------------------------------"
read -p "再ビルドを開始しますか? (y/N): " ANS
if [ "$ANS" != "y" ] && [ "$ANS" != "Y" ]; then
echo "処理を中止しました。"
exit 0
fi
echo "=== 再ビルドを開始します ==="
for target in $TARGET_PORTS; do
echo "========================================"
echo " Rebuilding: $target"
echo "========================================"
if [ -d "/usr/ports/$target" ]; then
cd "/usr/ports/$target"
make BATCH=yes deinstall reinstall clean
else
echo "警告: /usr/ports/$target が存在しません。スキップします。"
fi
done
echo "=== すべての依存 ports の再ビルドが完了いたしました ==="
これを実行すると。
=== lang/perl5.44 がインストールされているか確認... ===
検出された Perl:
=== lang/perl5.44 に依存している ports を抽出中... ===
----------------------------------------
以下の ports を再ビルドします:
の後に、再ビルド対象となる依存パッケージが列挙されます。
結局、これも大量にあるので、本項、冒頭のコマンドを使用することにしましたが・・・。
列挙したおかげで、下記が対象に存在することがわかりました。
databases/mysql84-client
databases/mysql84-server
mail/mailgraph
mail/opendkim
mail/rspamd
net/ntp
sysutils/webmin
www/apache24
これらは、抜粋ですが、「service」のパッケージなので、アップグレードに再起動します。
では、実際にアップグレード。
portmaster -r perl5-5.44.0
途中で、オプション設定が表示されたりします(次回は、それも表示しないようにしよう・・・)。
さらに。
===>>> Total ports: 1 >> (147)
===>>> The following actions will be taken if you choose to proceed:
Re-install perl5-5.44.0
Re-install apache24-2.4.68
Re-install autoconf-2.73
・・・ 略 ・・・
Re-install vim-9.2.0738
Re-install w3m-0.5.6_1
Re-install webmin-2.652_1
===>>> Proceed? y/n [y]
てな表示になります。
Enter しかないですな。
恐ろしく、時間がかかります。
1日では終わりそうにない。
|