それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Puppet起動したら「Warning already initialized constant」

たぶんdebian/ubuntu特有のWarning

/usr/lib/ruby/1.8/xmlsimple.rb:275: warning: already initialized constant KNOWN_OPTIONS
/usr/lib/ruby/1.8/xmlsimple.rb:280: warning: already initialized constant DEF_KEY_ATTRIBUTES
/usr/lib/ruby/1.8/xmlsimple.rb:281: warning: already initialized constant DEF_ROOT_NAME
/usr/lib/ruby/1.8/xmlsimple.rb:282: warning: already initialized constant DEF_CONTENT_KEY
/usr/lib/ruby/1.8/xmlsimple.rb:283: warning: already initialized constant DEF_XML_DECLARATION
/usr/lib/ruby/1.8/xmlsimple.rb:284: warning: already initialized constant DEF_ANONYMOUS_TAG
/usr/lib/ruby/1.8/xmlsimple.rb:285: warning: already initialized constant DEF_FORCE_ARRAY
/usr/lib/ruby/1.8/xmlsimple.rb:286: warning: already initialized constant DEF_INDENTATION
/usr/lib/ruby/1.8/xmlsimple.rb:287: warning: already initialized constant DEF_KEY_TO_SYMBOL

xmlsimpleが、自分自身require を内部的に行うが、rubyのインクルードパスが衝突して2重ロードになっていた。うざい。

対応 余分なxmlsimple.rb を消す

重複してそうなファイルを移動させた。
takuya@colinux:$ sudo mv /usr/lib/ruby/1.8/lib/xmlsimple.rb /usr/lib/ruby/1.8/lib/xmlsimple.rb.bak 

エラーでなくなった。どこが余分か調べる。

/usr/lib/ruby/1.8/lib/xmlsimple.rb
  1 require File.dirname(__FILE__) + '/../xmlsimple.rb'
/usr/lib/ruby/1.8/xmlsimple.rb
   1 # = XmlSimple
   2 #
   3 # Author::    Maik Schmidt <contact@maik-schmidt.de>
   4 # Copyright:: Copyright (c) 2003-2006 Maik Schmidt
   5 # License::   Distributes under the same terms as Ruby.
   6 #
   7 require 'rexml/document'
   8 require 'stringio'
   9
  10 # Easy API to maintain XML (especially configuration files).
  11 class XmlSimple
  12   include REXML
  13
  14   @@VERSION = '1.0.11'
  15