LoginSignup
7
6

More than 5 years have passed since last update.

dockerでpuppet実行エラー (invalid byte sequence in US-ASCII)

Last updated at Posted at 2016-05-14

ロケール設定をちゃんとやってなかったdockerコンテナ上で、2バイト文字でつまったとき用のメモです。普通の環境であればインストール時にロケール設定されているはずですが、dockerでちょっと試したい時の暫定対処用。

症状

既存ファイルがないときやdiffが表示されない場合などはエラーにならないけど、ファイルを置き換えるなどで2バイト文字を含むdiffが表示される場合(--testオプションあり)で次のようなエラーになる。

Error: invalid byte sequence in US-ASCII
Error: /Stage[main]/Main/File[/tmp/puppet_erb_sample.txt]/content: change from {md5}5bf1f316d6eebb76edac121be636451c to {md5}f1995f537d52ea45d62b5858778f4368 failed: invalid byte sequence in US-ASCII

原因

RubyがUS-ASCIIになっている。

# /opt/puppetlabs/puppet/bin/ruby -e 'puts Encoding.default_external'
US-ASCII

暫定対策

試すだけであれば、一時的にRUBYOPTをUTF-8に設定。
実行するコマンドの前に、RUBYOPT=-EUTF-8をつける。

# RUBYOPT=-EUTF-8 /opt/puppetlabs/puppet/bin/ruby -e 'puts Encoding.default_external'
UTF-8

puppet applyするときも。

# RUBYOPT=-EUTF-8 /opt/puppetlabs/bin/puppet apply erb01.pp --modulepath=modules -t --noop

きちんとするなら、docker run時に言語設定。

docker run -it -e RUBYOPT=-EUTF-8 centos /bin/bash

さらにきちんとする場合は、Dockerfileでビルドするときにロケール設定をする。

バージョンとか

# cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)

# rpm -qa | grep puppet
puppetlabs-release-pc1-1.0.0-1.el7.noarch
puppet-agent-1.4.1-1.el7.x86_64
7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6