第4章 コンパイラーおよびツール
sockaddr_inとの gcc 互換性の問題の解決
デフォルトの RHEL 6 コンパイラーには、新しいバージョンの gcc (Red Hat Developer Toolset で提供されるツールなど)と大きく異なる struct sockaddr_in をコピーする方法に関するルールがあります。これにより、新しいコンパイラーの使用時に sockaddr_in オーバーレイが破損しました。
この更新により、sockaddr_in 構造の 未使用 部分を定義する方法が変更されます。現在、新しいバージョンの gcc が正しくコピーされるようになりました。
このようなソースのコンパイルには、引き続き -fno-strict-aliasing が必要であることに注意してください。(BZ#1338673)
メモリーを割り当てていないプロセスのメモリー使用量を測定する際の浮動小数点例外エラーの解決
これ以上メモリーを割り当てていないプログラムで memusage ユーティリティーを実行すると、浮動小数点の例外が発生しました。
今回の更新では、ゼロになった内部統計がチェックされ、それらによって分割されないため、例外が回避されます。(BZ#1331304)
IP アドレスを渡した後にインターフェイスをスキャンする際の getaddrinfo ()の動作が改善されました。
このバージョンより前の glibc は、ホスト名自体が数値の IP アドレスであった場合でも、getaddrinfo ()呼び出しによって参照されるインターフェイス上のすべての IP アドレスをスキャンします。インターフェイス上で多数の IP アドレスが設定されているシステムでは、呼び出しに過度に時間がかかりました。
今回の更新により、スキャンが必要な場合にのみ行われ、数値の IP アドレスを渡すと呼び出しが迅速に返されます。(BZ#1270950)
スレッドキャンセルが発生した場合にオープンファイル記述子を処理するための修正
POSIX スレッドキャンセルを使用すると、glibc がオープンファイル記述子、特に ID 情報の処理時に開かれたファイル記述子を適切に処理する可能性があります。
これを修正し、スレッドがキャンセルされている場合でも、getpwuid_r などの関数を完了するために、ライブラリーの呼び出しが変更され、exec ファミリーからの呼び出しで、開いているファイル記述子が正しく処理されるようになりました。(BZ#1012343)
tzdata-update が使用できない umask を継承するための修正
/etc/localtime を更新すると、tzdata-update は現在のプロセス umask を適用して、ファイルパーミッションを決定します。
umask が 077 などの制限値である場合は、root 以外のユーザーが新しい /etc/localtime ファイルを読み取れない場合があります。これを解決するために、tzdata-update はパーミッションを rw-r--r--(0644)に無条件に設定するようになりました。(BZ# 1373646)
初期化されていないデータにアクセスする getaddrinfo の解決策
nscd が有効になっているシステムでは、glibc の getaddrinfo 関数は初期化されていないデータにアクセスし、誤ったアドレス情報を返す可能性があります。
この更新により、初期化されていないデータへのアクセスが回避され、正しいアドレスが返されるようになります。(BZ#1223095)
システムのデフォルト CA バンドルが、コンパイルされたデフォルト設定または muttの設定でデフォルトとして設定されている。
以前は、TLS/SSL 経由で新しいシステムに接続する場合、
mutt メールクライアントはユーザーに証明書の保存を要求していました。今回の更新で、システム認証局(CA)バンドルがデフォルトで mutt に設定されるようになりました。その結果、mutt は、証明書の承認または拒否を求められることなく、SSL/TLS 経由で有効な証明書を持つホストに接続するようになりました。(BZ#1196787)
resolv::DNS が切り捨てられた DNS 応答を返さなくなりました。
DNS 応答がハードコーディングされた 512 バイトの制限に収まらない場合に、Ruby Resolv:: DNS リゾルバーが DNS 応答をサイレントに切り捨てました。そのため、DNS 接続の User Datagram Protocol (UDP)から Transmission Control Protocol (TCP)に、完全な DNS 応答を受け取るために、多くの DNS レコードが必要でした。これは影響を受けるのは、たとえば、Key Distribution Center (KDC)リストにより大きなサーバーのセットが含まれている Microsoft Active Directory ドメインなどです。今回の更新により、UDP 応答が切り捨てられた場合、Resolv::DNS が TCP を使用して再試行します。これは、RFC 1123 による正しい動作です。その結果、完全な DNS 応答が返されます。(BZ#1331086)
.history ファイルがネットワークファイルシステムに置かれても tcsh が応答しなくなることはなくなりました。
以前は、
.history ファイルが NFS や Samba などのネットワークファイルシステムにある場合、ログインプロセス中に tcsh コマンド言語インタープリターが応答しなくなることがありました。今回の更新により、.history ファイルがネットワークファイルシステムにある場合にロックされなくなりました。その結果、上記の状況で tcsh が応答しなくなることはなくなりました。
tcsh の複数のインスタンスを実行すると、.history ファイルが破損する可能性があることに注意してください。この問題は、明示的なファイルロックメカニズムを有効にすることで解決できます。これを行うには、tcsh 設定ファイルの savehist オプションに lock パラメーターを追加します。以下に例を示します。
$ cat /etc/csh.cshrc
# csh configuration for all shell invocations.
set savehist = (1024 merge lock)
.history がネットワークファイルシステムにあるときに tcsh にファイルロックを強制的に使用させるには、savehist オプションの 3 番目のパラメーターに lock パラメーターが必要です。Red Hat は、ロック パラメーターを使用すると、ログインプロセス中に tcsh が応答しなくなることを保証しないため、自己責任でこれを行ってください。(BZ#885901)
LWP::UserAgent Perl モジュールが HTTPS 要求のプロキシー設定を正しく処理するようになりました
以前は、
LWP::UserAgent Perl モジュールは、デフォルトで HTTPS プロキシー環境変数を受け入れませんでした。perl-libwww-perl パッケージのバージョン 5.883-3 は、TLS を実装するための Net ::SSL モジュールの代わりに、IO::Socket::SSL モジュールの使用を開始しました。そのため、Net:SSL モジュールの https_proxy 環境変数の処理に依存するアプリケーションは、HTTPS プロキシーサーバー経由ではなく、HTTPS サーバーに直接接続するように確立されました。
今回の更新で、
Net::SSL モジュールの動作が LWP::UserAgent モジュールに追加され、env_proxy オプションが LWP::UserAgent モジュールの new () メソッドに渡されていない場合、https_proxy および HTTPS_PROXY 環境変数が受け入れられるようになりました。さらに、URL スキーマのないプロキシー仕様が認識されるようになりました。その結果、Net::SSL モジュールを使用するアプリケーションは、perl-libwww-perl パッケージから IO::Socket::SSL 暗号化バックエンドに切り替えた後に正しく機能します。(BZ#1400632)
Frontier::Client Perl モジュールは HTTPS リクエストのプロキシー設定を無視しなくなりました
Frontier::Client Perl モジュールを使用して、プロキシーサービス経由で XML-RPC リクエストを HTTPS サーバーに送信する場合、プロキシー設定は無視されていました。その結果、リクエストはプロキシーサーバーではなく、HTTPS サーバーに直接送信されました。今回の更新で、Frontier::Client Perl モジュールが修正され、HTTP と HTTPS スキーマタの両方についてプロキシー設定を基礎となる LWP::UserAgent オブジェクトに渡すようになり、Frontier::Client は HTTPS 要求もプロキシー設定を尊重するようになりました。(BZ#832390)
RPM 検証で /var/account/pacct ファイルに障害が報告されなくなりました。
以前は、インストール後に
/var/account/pacct ファイルのモードが設定されていなかったため、RPM 検証およびコンプライアンスチェックで失敗が報告されていました。このバグを修正するには、インストールの直後に /var/account/pacct のモードが 0600 に変更されます。その結果、RPM 検証チェックは /var/account/pacct で障害を報告しなくなり、ファイルに root のみがアクセスできるようになりました。(BZ#1182317)
tcsh の ジョブ 出力が stdout に正しく表示されるようになりました。
以前は、ジョブ 組み込みコマンドの出力が、標準出力ではなく標準エラーに表示されていました。このバグは修正され、ジョブ の出力が stdout に正しく表示されるようになりました。(BZ#1338986)
tcsh のいくつかのリグレッションが修正されました。
今回の更新で、tcsh コマンド言語インタープリターにおけるいくつかのリグレッションが修正されました。
Ctrl+PまたはUp Arrowキーを使用してコマンド履歴を参照すると、バックスラッシュが正しく表示されるようになりました。- バックスラッシュはユーザー定義のエイリアスを正しくエスケープするようになりました。これにより、git-completion が修正されました。
解放されたメモリーを使用しても git shortlog がクラッシュしなくなりました
以前は、メールアドレスエントリーが場合にのみ異なる場合、git shortlog コマンドの
.mailmap 機能は、重複したメールエントリーを盗難ポインターに置き換えず、解放されたメモリーが参照されていました。その結果、すでに解放されたメモリーが使用されているため、Git が予期せず終了しました。パッチが適用され、これらのエントリーが置き換えられる前にメモリーが解放され、git shortlog が割り当てられたメモリーのみを正しく使用するようになります。(BZ#874659)
Can't coerce HASH to string と報告しようとすると、perl インタープリターがクラッシュしなくなりました。
mod_perl 環境で XML::LibXSLT Perl スクリプトを実行している場合、Cant coerce HASH to string のランタイムエラーを報告しようとした間に、Perl インタープリターがセグメンテーション違反で予期せず終了する可能性があります。このコードは、スクリプト行の詳細の欠落を正しく処理するようにエラーメッセージを出力し、このシナリオで Perl インタープリターがクラッシュしなくなりました。(BZ#1364206)
gdbserver が、コンテナーからのプロセスのシームレスなデバッグをサポートするようになりました。
この更新より前は、
GDB が Super-Privileged Container (SPC)内で実行され、Red Hat Enterprise Linux Atomic Host 上の別のコンテナーで実行されているプロセスに割り当てられている場合、GDB は、デバッグするプロセスによって読み込まれるメインの実行可能ファイルまたは共有ライブラリーのバイナリーイメージを見つけられませんでした。
その結果、
GDB が存在していない、または存在するが不一致になっているファイルに関連するエラーメッセージが表示される可能性がありました。また、GDB が正しくアタッチされているように見えるにも関わらず、その後のコマンドが失敗したり、破損した情報が表示されている可能性があります。
Red Hat Enterprise Linux 6.9 では、gdbserver は、コンテナーからのデバッグプロセスをシームレスにサポートできるように拡張されました。Red Hat Enterprise Linux 6.9 バージョンの gdbserver は、
qXfer:exec-file:read および vFile:setfs パケットに新しく対応しています。ただし、Red Hat Enterprise Linux 6.9 バージョンの gdb は、これらのパケットを使用できません。コンテナーおよび Red Hat Enterprise Linux 6.9 gdb を使用するには、Red Hat Developer Toolset 4.1 (以降)バージョン gdb を使用することが推奨されます。また、Red Hat Developer Toolset の gdbserver も使用できます。
Red Hat Enterprise Linux 6.9 gdb は、-p パラメーター(または attach コマンド)で実行する場合に gdbserver の使用を提案できるようになりました。同時に、アタッチされているプロセスがコンテナーからあることを検出します。Red Hat Enterprise Linux 6.9 gdb は、デバッグするコンテナーでのプロセスの実行場所を指定するための file コマンドの明示的な使用を提案するようになりました。代わりに Red Hat Developer Toolset バージョンの gdb を使用している場合は、file コマンドを入力する必要はありません。
今回の更新で、Red Hat Enterprise Linux 6.9 gdbserver は、Red Hat Developer Toolset 4.1 (以降) gdb と共に、コンテナーからのプロセスをシームレスにデバッグできるようになりました。また、Red Hat Enterprise Linux 6.9 gdb が利用できない場合は、Red Hat Developer Toolset gdb が利用できない場合は、コンテナーからのプロセスのデバッグを説明します。(BZ#1316539)