Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

" UnicodeDecodeError: 'ascii' codec can't decode byte 0xbe in position 2851: ordinal not in range(128) " エラーが発生して satellite-sync が失敗する

Solution Unverified - Updated -

Environment

  • Red Hat Satellite または Proxy 5.5
  • Satellite-sync

Issue

  • Red Hat Satellite で以下のエラーが発生して satellite-sync が失敗しました。
SYNC ERROR: unhandled exception occurred:

Exception reported from satellite.example.com
Time:Wed Jan 30 16:46:07 2013
Exception type <type 'exceptions.UnicodeDecodeError'>

Exception Handler Information
Traceback (most recent call last):
  File "/usr/bin/satellite-sync", line 139, in main
    return satsync.Runner().main()
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/satsync.py", line 225, in main
    ret = method()
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/satsync.py", line 320, in _step_download_packages
    return self.syncer.download_package_metadata()
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/satsync.py", line 1097, in download_package_metadata
    stream_loader.process, is_slow=True)
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/satsync.py", line 1572, in _proces_batch
    prompt, nevermorethan, process_function_args)
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/satsync.py", line 1552, in _processWithProgressBar
    process_function(chunk, *process_function_args)
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/satsync.py", line 1996, in process
    self.handler.process(stream)
  File "/usr/lib/python2.6/site-packages/spacewalk/satellite_tools/xmlSource.py", line 135, in process
    Traceback(ostream=sys.stderr, with_locals=1)
  File "/usr/lib/python2.6/site-packages/spacewalk/common/rhnTB.py", line 174, in Traceback
    outstring = exc.getvalue()
  File "/usr/lib64/python2.6/StringIO.py", line 270, in getvalue
    self.buf += ''.join(self.buflist)
UnicodeDecodeError:'ascii' codec can't decode byte 0xbe in position 2851: ordinal not in range(128)
  • satellite-syncException type <type 'exceptions.UnicodeDecodeError'> エラーで失敗します。
UnicodeDecodeError:'ascii' codec can't decode byte 0xbe in position 2851: ordinal not in range(128)

(バイトとポジションはシステムによって異なります)。

Resolution

  • この (英語版の) 記事が作成された時点では、この問題を解決する明確な方法はありません。
  • この問題の影響を受ける場合は Red Hat グローバルサービスにご連絡ください。

  • 以下を試してみてください。

    # rm -rf /var/cache/rhn/satsync
    
    • satellite-sync で --no-ssl オプションを使用してみてください。

Root Cause

この問題は UTF-8 以外の文字セットで書かれたパッケージのメタデータか、メタデータに書かれ UTF-8 として読み込まれるバイナリーデータが原因で発生します。

変換または再処理を連続して行ったことがこの破損の原因の 1 つとなります。アクセント記号付き文字を使用する名前 (たとえば Martin Večeřa) には、Unicode 文字の 'C4 8D' (16 進) および 'C5 99' が含まれます。この名前が Windows-1252 文字として読み込まれる場合はそれぞれ Ä (Windows-1252 では文字が表示されない 8D) および Å™ となります。次に、これを UTF-8 に戻すとそれぞれ 'C3 84' と 'C3 85 E2 84 A2' になります。このように、出力内の文字が増えます。その後再変換を続けると名前が長くなり、最後には、Satellite データベースの変更ログと著者詳細にある一部の名前が、事前定義のフィールド制限を超えます。このコードを切り取ると、UTF-8 デコードプロセスで予期せぬ文字があたります (たとえば C3 の後には 80 と BF の間にある文字が続きません)。同様に、Windows-1252 で C4 8D の文字列を読み込む際に変換できないバイト 8D が残る場合、UTF-8 デコードは、80 と BF との間にあるバイトが C0 と上述の文字によって先行される必要があるためエラーを表示します。

同様の問題はテキスト以外 (gzip 化データなど) のデータを読み込むと発生します。Unicode デコードプロセスでは文字テキストとなります。

ただし、このデータが Unicode と処理されるパッケージメタデータに表示される理由は不明です。可能性はいくつかあります。

  • 異なる文字セットとして処理されることによるデータ破損。これは、通常、データベースがネイティブに UTF-8 文字を使用していない場合に発生します。
  • CDN から読み込まれた時にパッケージメタデータの切り詰めまたは変更。 これは、プロキシーが Satellite サーバーと Red Hat CDN との間にある場合に発生し、(たとえば、CDN によって転送された gzip 化されたファイルのウィルススキャンの実行などにより) 長時間の接続を落とすか停止します。データがプロキシーによって変更されることは一定ではありませんが不可能ではありません。たとえば、プロキシーが、組み込みテストの文字セットを変更しようとする場合があります。
  • Red Hat はプライベートの証明書認証を使用して CDN とそのクライアントとの間の接続を保護する (https://access.redhat.com/articles/1373143 を参照) ため、プロキシーまたはファイアウォールが認識しない SSL 証明書が存在する場合に一部のプロキシーまたはファイアウォールが接続を妨げます。この場合、戻ってきたエラーメッセージがパッケージメタデータとして誤って解析され、誤ってデコードされます。

Diagnostic Steps

  • 関係するプロキシーがあるかどうかを確認します。関係する場合は何か問題が発生していないかを確認します。
  • sat-sync キャッシュを削除してやり直します。
  rm -rf /var/cache/rhn/satsync
  • sosreport および spacewalk-debug

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.