pkg・ports アップデート関連 - perl5 - perl5.40 → 5.44


 


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日では終わりそうにない。

audiobook.jp
ハイスピードプラン
ベルリッツ
葬送のフリーレン Prime Video
EaseUS
アフィリエイトのアクセストレード
薬屋の独り言
Amazonギフトカード
健康サポート特集
損保との違い
それがだいじWi-Fi
サウンドハウス
ネットオークションの相場、統計、価格比較といえばオークファン
JETBOY
5G CONNECT
earthcar(アースカー)
【usus ウズウズ】
U-NEXT
TikTok Shop 【リピート用プログラム】