berks-api will not run on ubuntu in azure - get Permission denied @ rb_sysopen - /etc/chef/client.pem

139 Views Asked by At

As part of our chef infrastructure I'm trying to set up and configure a berks-api server. I have created an Ubuntu server in azure and i have bootstrapped it and it appears as a node in my chef-server.

I have followed the instructions at github - bekshelf-api installation to install the berks-api via a cookbook. I have run

sudo chef-client 

on my node and the cookbook appears to have been run successfully.

The problem is that the berks-api doesn't appear to run. My Linux terminology isn't great so sorry if I'm making mistakes in what I say but it appears as if the berks-api service isn't able to run. If I navigate to /etc/service/berks-api and run this command

sudo berks-api

I get this error

I, [2015-07-23T11:56:37.490075 #16643]  INFO -- : Cache manager starting...
I, [2015-07-23T11:56:37.491006 #16643]  INFO -- : Cache Builder starting...
E, [2015-07-23T11:56:37.493137 #16643] ERROR -- : Actor crashed!
Errno::EACCES: Permission denied @ rb_sysopen - /etc/chef/client.pem
    /opt/berkshelf-api/v2.1.1/vendor/bundle/ruby/2.1.0/gems/ridley-4.1.2/lib/ridley/client.rb:144:in `read'
    /opt/berkshelf-api/v2.1.1/vendor/bundle/ruby/2.1.0/gems/ridley-4.1.2/lib/ridley/client.rb:144:in `initialize'

If anyone could help me figure out what is going on, I'd really appreciate it. If you need to explain the setup any more let me know.

1

There are 1 best solutions below

0
On

It turns out I misunderstood the configuration of the berks-api. I needed to get a new private key for my client (berkshelf) from manage.chef.io for our organization. I then needed to upload the new key (berkshelf.pem) to /etc/berkshelf/api-server and reconfigure the berks-api to use the new key. so my config for the berks-api now looks like below:

{
  "home_path":"/etc/berkshelf/api-server",
  "endpoints":[
    {
      "type":"chef_server",
      "options":
      {
        "url":"https://api.opscode.com/organizations/my-organization",
        "client_key":"/etc/berkshelf/api-server/berkshelf.pem",
        "client_name":"berkshelf"
      }
    }
  ],
  "build_interval":5.0
}

I couldn't upload berkshelf.pem directly to the target location, i had to upload it to my home location, then copy it from within linux.

Having done this, the service starts and works perfectly.