chefメモ

CentOS7にChef server 12をインストール
    file /etc/opscode/pivotal.pem is missing.

    というエラー  (https://github.com/chef/chef-server/issues/727)
     -> cp /opt/opscode/embedded/service/omnibus-ctl/spec/fixtures/pivotal.pem /etc/opscode/

No resource, method, or local variable named `create_stop_system_service' for `Chef::Provider::MysqlService エラー
   
http://stackoverflow.com/questions/31051890/chef-failed-to-install-mysql-no-resouce-method-or-variable-named-createに対策が書いてあった。私の場合、alb2_installのrecipeを変更した

    以下のエラーがでたが、chef-server-ctl reconfigureしたら解決した。
  (install chef-manageの後で chef-server-ctl reconfigureを実行しなかったのが原因と思われる)
    注意:pivotalというユーザは削除してはならないらしい。

[root@alb Downloads]# chef-server-ctl user-create anagix Joe Anagix support@anagix.com 'xxxxxxxxxxxx' --filename /home/anagix/chef/anagix.pem
ERROR: Failed to authenticate to https://127.0.0.1:443 as pivotal with key /etc/opscode/pivotal.pem
Response:  Failed to authenticate as 'pivotal'. Ensure that your node_name and client key are correct.
 次にorgとvalidatorを作る
chef-server-ctl org-create anagix 'Anagix Corporation' --association_user anagix --filename /home/anagix/chef/anagix-validator.pem
  適当にclient.rbをつくってchef-clientを実行したところ以下のエラー
Authentication Error:
---------------------
Failed to authenticate to the chef server (http 401).
  原因は、
chef_server_url  'https://alb.anagix.com/
としていたこと。managerにWEBで入り、Administration->Organizations->Generate Knife Configしたらわかった
  client.rbを以下のようにしたら動いた
log_level        :info
log_location     STDOUT
chef_server_url  'https://alb.anagix.com/organizations/anagix'
validation_client_name 'anagix-validator'
validation_key   '/etc/chef/anagix-validator.pem'
node_name        'restore'
ssl_verify_mode  :verify_none
client_key       '/Users/anagix/.chef/client.pem'

  knife cookbook upload -a で、以下のエラー
ERROR: You authenticated successfully to https://alb.anagix.com/organizations/anagix as restore but you \
are not authorized for this action
Response:  missing create permission
  knife.rbのnode_name をanagix、client_keyをanagix.pemにしたらエラーしなくなった。

  普通のnodeのknife.rbの場合、knife cookbook uplaod -a --user anagix --key ~/.chef/anagix.pem でもよい


omnibus installer:

    curl -L https://www.chef.io/chef/install.sh | sudo bash

mysql cookbook(v6.0.3)をLinuxMint 17.1で使おうとしてはまった(未解決)
 しばらくmysqlをアップデートしてなかったので、 仕様がまったく変わっていた。
 以前は、LWRPではなかったように思う。 それはさておき本題。
 linuxmint 17.1では、ohaiが 以下をかえす。
        platform = 'linuxmint'
        platform_family = 'debian'
        platform_version = '17.1'
 mysqlでは、ubuntu(10.04-14.04と14.10とdebianしかサポートしてない。
 helpers.rbで、以下とかやってみた:
@pkginfo.set['debian']['17']['5.5']['client_package'] = %w(mysql-client libmysqlclient-dev)
        def keyname_forで、return '7' if platform == 'linuxmint'
        return '5.5' if node['platform_family'] == 'debian' && node['platform_version'].to_i == 17

        /spec/mysql_service/debian/linuxmint_70_service_55_multi_spec.rb も作ってみたけどダメ。
    chef-clientが以下のエラーで止まる:
        No resource, method, or local variable named `create_stop_system_service' for `Chef::Provider::MysqlService ""'
        Cookbook Trace:
        ---------------
        /var/chef/cache/cookbooks/mysql/libraries/provider_mysql_service.rb:37:in `block in <class:MysqlService>'
    とりあえずgive up。

chef 12 clientでは、SSL証明書を使うようになった
/var/opt/chef-server/nginx/caの下に home.anagix.com.crtというのがあるから
 これをinstall.anagix.com.crtにrenameして利用者に渡せばいいっぽい。
 利用者は、そのファイルを c:\chef\trusted_certs の下に置く。ディレクトリは
 自分で作ってもらう。
 Windows版chef 12 clientでは、rubyのバージョンが2に上がった(これまでは1.9.3)。
 12.0.3では、ruby 2.0.0p451だった。

redmine installation
1. Used chef's ruby (/opt/chef/embedded/bin/ruby)
    export PATH=/opt/chef/embedded/bin:$PATH
2. gem install rmagick --no-ri --no-rdoc failed
    yum install ImageMagick-devel
    setenv PKG_CONFIG_PATH /usr/lib/pkgconfig

backup serverの立ち上げ
1. 以下のようなknife.rbを作る
log_level                :info
log_location             STDOUT
node_name                'restore'
client_key               '/Users/anagix/.chef/client.pem'
validation_client_name   'chef-validator'
validation_key           '/Users/anagix/.chef/chef-validator.pem'
chef_server_url          'https://backup.anagix.com'
cache_type               'BasicFile'
cache_options( :path => '/Users/anagix/.chef/checksums' )
cookbook_path [ "/Users/anagix/chef-repo/cookbooks" ]
chef-validator.pemはbackup serverからもってくる。
2. chef-client -c knife.rb を実行
  client.pemが作られる
3. webuiで、ノード(この場合restore)をadminにかえる
4. HOMEで、knife backup restoreを実行
    以下のようなエラーが出た
=== Restoring cookbooks ===
Restoring cookbook alb_install
Uploading alb_install    [0.1.15]
ERROR: Cookbook alb_install depends on cookbook mysql version >= 0.0.0,
ERROR: which is not currently being uploaded and cannot be found on the server.

5. backup serverで、chef-server-ctl reconfigure を実行
その前に、/etc/hostsを以下のように設定するのがミソかも知れない:
127.0.0.1       backup.anagix.com tomoko localhost.localdomain localhost
::1             localhost6.localdomain6 localhost6
192.168.0.228   backup.anagix.com tomoko
  注意:127.0.0.1の行で、backup.anagix.com はlocalhostxxxより前でなくてはならない 
6. cookbook は入れなおす
 chef-repoで、knife cookbook upload -a
7. 再度、knife backup restoreを実行するとエラーは出なかった(cookbookは入れなおしていたので当然か)
以上


vagrantでv-rootがマウントされない
 mount -t vboxsf v-root /vagrant
 /etc/init.d/vboxadd setup (guest additionsがあたらしくなってkernel moduleのコンパイルが必要な場合)

ubuntuでパッケージが見つからない場合
 apt-get update する
 Vagrantでboxが古くなっている場合は、

ユーザrubyへのgemのインストール

    # Need to reload OHAI to ensure the newest ruby is loaded up
ohai "reload" do
  action :reload
end

["bundler", "rake", "...."].each do |gem_to_install|
  ruby_block "install #{gem_to_install} in new ruby" do
    block do
      g = Chef::Resource::GemPackage.new(gem_to_install)
      g.gem_binary "#{node['languages']['ruby']['bin_dir']}/gem"
      g.run_action(:install)
    end
    action :create
  end
end
mysqlのルートパスワード
 自動生成されたものが、/etc/mysql/grant.sql に記録されている

mysql serverが入らないときの recipe
   recipe[mysql::server]

古いlinux kernel (2.6.30以前らしい)で、shefなどが止まる問題の対策
   centos4.8(32bit, kernel 2.6.9-89)で対策したが、centos5(64bit, kernel 2.6.18)では必要なかったのでよくわからん
 対策: lib/ohai/plugins/linux/[memory.rb, uptime.rb]で以下のように修正した
             
  #File.open("/proc/meminfo").each do |line|                                                             
       `/bin/cat /proc/meminfo`.each_line do |line|

      #uptime, idletime = File.open("/proc/uptime").gets.split(" ")                                          
      uptime, idletime = `/bin/cat /proc/uptime`.split(" ")

 参考:Files in /proc should not be read directly by Ruby rubyで既知の問題のようだ
             Fix for older linux kernels and blocking read of /proc/* files in virtualization plugin  ohaiでも指摘されているがohai-6.16.0時点で修正されてない
Comments