検索

第15章 動的プログラミング言語、Web サーバー、およびデータベースサーバー

download PDF

15.1. 動的プログラミング言語

15.1.1. Python への主な変更点

15.1.1.1. Python 3 が RHEL 8 におけるデフォルトの Python 実装に

Red Hat Enterprise Linux 8 には、Python 3 の複数のバージョンが同梱されています。Python 3.6 は、RHEL 8 のライフサイクル全体でサポートされる予定です。それぞれのパッケージは、デフォルトではインストールされない場合があります。

Python 2.7 は、python2 パッケージで入手できます。ただし、Python 3 への移行をより円滑に進められるように、Python 2 のライフサイクルは短くなっています。

詳細は、Python のバージョン を参照してください。

デフォルトの python パッケージまたはバージョンを指定しない /usr/bin/python 実行ファイルは、いずれも RHEL 8 では配布されません。python3 または python2 を直接使用することが推奨されます。もしくは、管理者が、alternatives コマンドを使用して、バージョン管理外の python コマンドを設定できます。バージョン管理されていない Python の設定 を参照してください。

15.1.1.2. Python 2 から Python 3 への移行

開発者は、Python 2 で記述したコードを Python 3 に移行できます。

大規模なコードベースを Python 3 に移行する方法は The Conservative Python 3 Porting Guide を参照してください。

この移行が終了すると、元の Python 2 コードは Python 3 インタープリターにより解釈できるようになり、同様に Python 2 インタープリターは解釈できるままとなることに注意してください。

15.1.1.3. バージョンを指定しない Python の設定

システム管理者は、alternatives コマンドを使用して、/usr/bin/python に、バージョンを管理しない python コマンドを設定できます。必要なパッケージ (python3、python38、python39、python3.11、または python2) は、バージョンを指定しないコマンドをそれぞれのバージョンに設定する前にインストールする必要があります。

重要

/usr/bin/python 実行ファイルは 代替 システムによって制御されます。更新時に手動の変更が上書きされる可能性があります。

その他の Python 関連のコマンド (pip3 など) には、バージョンを指定しないで設定できるバリアントがあります。

15.1.1.3.1. バージョンを指定しない python コマンドを直接設定

バージョンを指定しない python コマンドを、選択した Python バージョンに直接設定できます。

前提条件

  • 必要なバージョンの Python がインストールされていることを確認する。

手順

  • バージョンを指定しない python コマンドを Python 3.6 に設定するには、以下を使用します。

    # alternatives --set python /usr/bin/python3
  • バージョンを指定しない python コマンドを Python 3.8 に設定するには、以下を使用します。

    # alternatives --set python /usr/bin/python3.8
  • バージョンを指定しない python コマンドを Python 3.9 に設定するには、以下を使用します。

    # alternatives --set python /usr/bin/python3.9
  • バージョンを指定しない python コマンドを Python 3.11 に設定するには、以下を使用します。

    # alternatives --set python /usr/bin/python3.11
  • バージョンを指定しない python コマンドを Python 3.11 に設定するには、以下を使用します。

    # alternatives --set python /usr/bin/python3.12
  • バージョンを指定しない python コマンドを Python 2 に設定するには、以下のコマンドを実行します。

    # alternatives --set python /usr/bin/python2
15.1.1.3.2. バージョンを指定しない python コマンドを、必要な Python バージョンに対話的に設定する

バージョンを指定しない python コマンドを、必要な Python バージョンに対話的に設定できます。

前提条件

  • 必要なバージョンの Python がインストールされていることを確認する。

手順

  1. バージョンを指定しない python コマンドを対話的に設定するには、次のコマンドを実行します。

    # alternatives --config python
  2. 表示されたリストから必要なバージョンを選択します。
  3. この設定をリセットし、バージョンを指定しない python コマンドを削除するには、次のコマンドを実行します。

    # alternatives --auto python
15.1.1.3.3. 関連情報
  • man ページの alternatives(8) および unversioned-python(1)

15.1.1.4. Python スクリプトでのインタープリターディレクティブの処理

Red Hat Enterprise Linux 8 では、実行可能な Python スクリプトは、少なくとも主要な Python バージョンを明示的に指定するインタープリターディレクティブ (別名 hashbangs または shebangs) を使用することが想定されます。以下に例を示します。

#!/usr/bin/python3
#!/usr/bin/python3.6
#!/usr/bin/python3.8
#!/usr/bin/python3.9
#!/usr/bin/python3.11
#!/usr/bin/python3.12
#!/usr/bin/python2

/usr/lib/rpm/redhat/brp-mangle-shebangs BRP (buildroot policy) スクリプトは、RPM パッケージをビルドする際に自動的に実行され、実行可能なすべてのファイルでインタープリターディレクティブを修正しようとします。

BRP スクリプトは、以下のようにあいまいなインタープリターディレクティブを含む Python スクリプトを検出すると、エラーを生成します。

#!/usr/bin/python

または

#!/usr/bin/env python
15.1.1.4.1. Python スクリプトでインタープリターディレクティブの変更

RPM ビルド時にビルドエラーが発生する Python スクリプト内のインタープリターディレクティブを変更します。

前提条件

  • Python スクリプトのインタープリターディレクティブの一部でビルドエラーが発生する。

手順

インタープリターディレクティブを変更するには、以下のタスクのいずれかを実行します。

  • platform-python-devel パッケージから pathfix.py スクリプトを適用します。

    # pathfix.py -pn -i %{__python3} PATH …​

    複数の PATH を指定できます。PATH がディレクトリーの場合、pathfix.py はあいまいなインタープリターディレクティブを持つスクリプトだけでなく、^[a-zA-Z0-9_]+\.py$ のパターンに一致する Python スクリプトを再帰的にスキャンします。このコマンドを %prep セクション、または %install セクションに追加します。

  • パッケージ化した Python スクリプトを、想定される形式に準拠するように変更します。この目的のために、pathfix.py は、RPM ビルドプロセス以外でも使用できます。pathfix.py を RPM ビルド以外で実行する場合は、上記の例の %{__python3} を、/usr/bin/python3 などのインタープリターディレクティブのパスに置き換えます。

パッケージ化された Python スクリプトに Python 3.6 以外のバージョンが必要な場合は、上記のコマンドを調整して必要なバージョンを含めます。

15.1.1.4.2. カスタムパッケージの /usr/bin/python3 インタープリターディレクティブの変更

デフォルトでは、/usr/bin/python3 の形式でのインタープリターディレクティブは、Red Hat Enterprise Linux のシステムツールに使用される platform-python パッケージから Python を参照するインタープリターディレクティブに置き換えられます。カスタムパッケージの /usr/bin/python3 インタープリターディレクティブを変更して、AppStream リポジトリーからインストールした特定バージョンの Python を参照できます。

手順

  • Python の特定バージョンのパッケージを構築するには、対応する python パッケージの python*-rpm-macros サブパッケージを SPEC ファイルの BuildRequires セクションに追加します。たとえば、Python 3.6 の場合は、以下の行を追加します。

    BuildRequires:  python36-rpm-macros

    これにより、カスタムパッケージの /usr/bin/python3 インタープリターディレクティブは、自動的に /usr/bin/python3.6 に変換されます。

注記

BRP スクリプトがインタープリターディレクティブを確認したり、変更したりしないようにするには、以下の RPM ディレクティブを使用します。

%undefine __brp_mangle_shebangs

15.1.1.5. net-snmp パッケージの Python バインディングが利用できない

Net-SNMP のツールスイートは、RHEL 8 のデフォルトの Python の実装である Python 3 にバインディングを提供しません。これにより、python-net-snmp パッケージ、python2-net-snmp パッケージ、または python3-net-snmp パッケージが RHEL 8 では使用できません。

15.1.2. PHP への主な変更点

Red Hat Enterprise Linux 8 には PHP 7.2 が同梱されています。このバージョンには、RHEL 7 で利用できた PHP 5.4 に対する重要な変更が追加されています。

  • PHP はデフォルトで FastCGI Process Manager (FPM) を使用します (スレッド化された httpd で安全に使用できます)。
  • php_value 変数と php-flag 変数が httpd 設定ファイルで使用されなくなり、代わりにプール設定の /etc/php-fpm.d/*.conf で設定する必要があります。
  • PHP スクリプトのエラーと警告のログは、/var/log/httpd/error.log ではなく /var/log/php-fpm/www-error.log ファイルに記録されます。
  • PHP の max_execution_time 設定変数を変更する時は、変更した値に合わせて httpd ProxyTimeout 設定を増やす必要があります。
  • PHP スクリプトを実行するユーザーが、FPM プール設定 (apache ユーザーがデフォルトとなる /etc/php-fpm.d/www.conf ファイル) に設定されるようになりました。
  • 設定を変更した場合、または新しい拡張機能をインストールした場合は、php-fpm サービスを再起動する必要があります。
  • zip 拡張が、php-common から、別のパッケージ php-pecl-zip に移動しました。

以下の拡張機能が削除されました。

  • aspell
  • mysql (拡張機能の mysqli および pdo_mysql は、php-mysqlnd パッケージで引き続き利用できます)
  • memcache

15.1.3. Perl への主な変更点

RHEL 8 で提供される Perl 5.26 では、RHEL 7 で提供されていたバージョンに以下のような変更が追加されました。

  • Unicode 9.0 に対応するようになりました。
  • 新しい SystemTap のプローブ op-entryloading-file、および loaded-file が提供されるようになりました。
  • パフォーマンスを向上させるために、スカラーの割り当て時に、コピーオンライトメカニズムが使用されます。
  • IPv4 ソケットおよび IPv6 ソケットを透過的に処理するために IO::Socket::IP モジュールが追加されました。
  • 構造化された方法で perl -V データにアクセスするために、Config::Perl::V モジュールが追加されました。
  • Comprehensive Perl Archive Network (CPAN) リポジトリーからモジュールを取得、抽出、ビルド、およびインストールする cpanm ユーティリティーを同梱する perl-App-cpanminus パッケージが追加されました。
  • セキュリティー上の理由により、@INC モジュールの検索パスから、現在のディレクトリー (.) が削除されました。
  • 上記の動作上の変更によりファイルの読み込みに失敗した時に、do ステートメントが非推奨の警告を返すようになりました。
  • do subroutine(LIST) 呼び出しに対応しなくなり、構文エラーが発生するようになりました。
  • ハッシュがデフォルトでランダム化されるようになりました。ハッシュから鍵と値が返される順序は、perl の実行ごとに変わります。ランダム化を無効にするには、PERL_PERTURB_KEYS 環境変数を 0 に設定します。
  • 正規表現のパターンで、エスケープされていないリテラルの { 文字が使用できなくなりました。
  • $_ 変数に対する語彙的なスコープへの対応が削除されました。
  • 配列またはハッシュに defined 演算子を使用すると、致命的なエラーが発生します。
  • UNIVERSAL モジュールから関数をインポートすると、致命的なエラーが発生します。
  • find2perl ツール、s2p ツール、a2pc2ph ツール、および pstruct ツールが削除されました。
  • ${^ENCODING} 機能が削除されました。encoding プラグマのデフォルトモードに対応しなくなりました。UTF-8 以外のエンコーディングでソースコードを記述する場合は、エンコーディングの Filter オプションを使用します。
  • アップストリームに合わせて、perl パッケージが変更になりました。perl パッケージはコアモジュール群をインストールし、/usr/bin/perl インタープリターは perl-interpreter パッケージで提供されます。以前のリリースでは、perl パッケージに最小限のインタープリターだけが同梱され、perl-core パッケージにインタープリターとコアモジュールの両方が同梱されていました。
  • Perl モジュールの IO::Socket::SSL は、./certs/my-ca.pem ファイルまたは ./ca ディレクトリーから認証局の証明書、./certs/server-key.pem ファイルからサーバーの秘密鍵、./certs/server-cert.pem ファイルからサーバーの証明書、./certs/client-key.pem ファイルからクライアントの秘密鍵、./certs/client-cert.pem ファイルからクライアント証明書を読み込まなくなりました。代わりにファイルのパスを明示的に指定します。

15.1.4. Ruby への主な変更点

RHEL 8 では、RHEL 7 に同梱されていた Ruby 2.5 に新機能および機能強化を追加した Ruby 2.0.0 が提供されます。以下は、主な変更点です。

  • インクリメンタルガベージコレクターが追加されました。
  • Refinements 構文が追加されました。
  • シンボルは、ガベージコレクションが行われるようになりました。
  • 安全レベルの $SAFE=2 および $SAFE=3 が廃止されました。
  • Fixnum クラスと Bignum クラスが、Integer クラスに統合されました。
  • Hash クラスの最適化、インスタンス変数へのアクセスの向上、ならびに Mutex クラスの小型化および高速化により、パフォーマンスが向上しました。
  • 古い API が非推奨になりました。
  • RubyGemsRakeRDocPsychMinitesttest-unit などのバンドルされたライブライリーが更新されました。
  • Ruby とともに配布されていた mathnDLext/tkXMLRPC などのライブラリーは非推奨になり、同梱されなくなりました。
  • SemVer バージョン管理スキームが、Ruby バージョン管理に使用されるようになりました。

15.1.5. SWIG への主な変更点

RHEL 8 には、SWIG (Simplified Wrapper and Interface Generator) バージョン 3.0 が含まれています。RHEL 7 に同梱されていたバージョン 2.0 に新機能、機能拡張、およびバグ修正が数多く追加されました。特に注目すべきは、C++11 標準仕様への対応が実装されたことです。SWIG は、Go 1.6PHP 7Octave 4.2、および Python 3.5 に対応するようになりました。

15.1.6. Node.js が RHEL に新登場

JavaScript プログラミング言語で高速でスケーラブルなネットワークアプリケーションを構築するソフトウェア開発プラットフォームである Node.js が RHEL で初めて提供されます。以前は、Software Collection からしか入手できませんでした。RHEL 8 では Node.js 10 が提供されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.