Setup Chef Workstation on a Linux Server (Ubuntu)

In my last post I had explained to you how we can install Chef Server on an Ubuntu server. In this post, I will show you how to setup Chef Workstation on another Ubuntu server. Chef Workstation is a machine that you will prepare your recipes & cookbooks on. These recipes are then sent to Chef Server, which are then used to manage Chef nodes.

Let us begin with this tutorial 🙂 Please put entries of all Chef machines in your /etc/hosts file first.

Chef Server Details : –

  • Hostname – chef-server
  • IP Address –

Chef Workstation Details : –

  • Hostname – chef-workstation
  • IP Address –

1. Install Chef Development Kit. Go to & download the package for your OS. I have chosen Ubuntu for this tutorial.

root@chef-workstation:/home/shashank# dpkg -i ~shashank/chefdk_0.13.21-1_amd64.deb

2. Generate Chef Repository. Issue below command to generate Chef Repository. This will create a new directory called chef-repo

root@chef-workstation:/home/shashank# chef generate repo chef-repo
root@chef-workstation:/home/shashank# cd chef-repo

3. Create a directory to keep authentication keys. We will need authentication keys to communicate with Chef Server. If you remember, I had created 2 keys while setting up Chef Server. These keys will have to be copied to this directory.

root@chef-workstation:/home/shashank# scp *.pem shashank@
root@chef-workstation:/home/shashank# mkdir .chef
root@chef-workstation:/home/shashank# mv ~shashank/*pem .chef/

4. Create a knife file. Create a new file knife.rb with below contents. Make changes accordingly (explained below).

root@chef-workstation:/home/shashank# vim knife.rb
log_level                :info
log_location             STDOUT
node_name                'chef-admin'
client_key               '/home/shashank/chef-repo/.chef/chef-admin.pem'
validation_client_name   'shashank-validator'
validation_key           '/home/shashank/chef-repo/.chef/chef-validator.pem'
chef_server_url          'https://chef-server/organizations/shashank'
syntax_check_cache_path  '/home/shashank/chef-repo/.chef/syntax_check_cache'
cookbook_path [ '/home/shashank/chef-repo/cookbooks' ]

A little explanation to this file. Refer to my last post for more clarity.
node_name is your Chef username that you created while setting up Chef Server.
client_key is the key that you generated for the Chef user.
validation_client_name is organization shortname followed by hyphen validator. In my case it was “shashank”.
validation_key is the organization key.
chef_server_url is URL to Chef Server’s organization. You will need to put the entries in /etc/hosts file on all Chef machines so as to avoid errors while executing this Ruby script.

5. Authenticate Workstation with Server. Issue below commands to fetch the SSL certificate. We need to go one directory back & then run the mentioned command.

root@chef-workstation:/home/shashank# cd ..
root@chef-workstation:/home/shashank# knife ssl fetch
WARNING: Certificates from will be fetched and placed in your trusted_cert
directory (/home/shashank/chef-repo/.chef/trusted_certs). Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading. Adding certificate for chef-server in /home/shashank/chef-repo/.chef/trusted_certs/chef-server.crt

6. Check the connectivity. Issue below command to verify the connectivity between Chef Server & Workstation.

root@chef-workstation:/home/shashank# knife client list

If there are errors like below, make sure you are putting correct entries in /etc/hosts file.

ERROR: SSL Validation failure connecting to host: - hostname "" does not match the server certificate
ERROR: SSL Error connecting to, retry 1/5
ERROR: SSL Validation failure connecting to host: - hostname "" does not match the server certificate
ERROR: SSL Error connecting to, retry 2/5
ERROR: SSL Validation failure connecting to host: - hostname "" does not match the server certificate
ERROR: SSL Error connecting to, retry 3/5

This happens because the SSL certificate was generated for the hostname & not the IP address. I corrected the /etc/hosts file & it fixed that. See it below 🙂

root@chef-workstation:/home/shashank# knife client list

That’s all for this post 🙂 We now have a working Chef Server & a working Chef Workstation. I will explain how to set up a Chef node in my next post. Stay tuned 🙂


Setup Chef Server on Ubuntu

Hi There! I am back after a long time 😉 Was really stuck with other things.

In this post, I will explain how you can setup your Chef Server on an Ubuntu machine. Chef, as we know, is an Infrastructure Automation platform that helps manage, maintain & housekeep a number of servers by keeping them in the desired state. Sounds complicated? Ok, let me put this in an easy way 😉

Suppose you have 25 servers in your infrastructure. 10 are Apache web-servers, 5 are Database servers, 2 are monitoring servers, 2 are LDAP servers & rest are Tomcat servers. You are given the responsibility to set up all of them 😀 You will have to install packages, create users & groups & do tons of modifications like editing /etc/hosts or /etc/resolv.conf files. All this leads to a lot of wastage in terms of time & resources. That’s where Chef or similar software helps. Chef will allow you to do all these tasks in much simpler & efficient manner. You define what packages are to be installed on what servers & Chef will do it. Add users to the  passwd file & Chef will populate this file to all the required servers. This is known as Chef recipes. Seems fun, right? 😉

Chef has 3 components.

  • Workstation : – A server on which you define all your modifications like contents of passwd file, packages to be installed etc. In other words, here you create Chef recipes & cookbooks.
  • Server : – Where you manage all your nodes & where all the recipes are sent to. Server then adjusts the nodes according to the recipes. It also has a web UI where you can see & manage your nodes. Chef Server can only be installed on Unix/Linux machines.
  • Nodes : – The individual servers that are to be managed by Chef. Like your Apache or DB servers. Could be any OS.

Now that you know the basic terminologies, lets setup our Chef Server 🙂

Lab Description : –

  • OS – Ubuntu 14.04
  • RAM – 4 GB
  • IP Address range – 192.168.0.XX
  • Chef Server version – 12.4.0
  • Chef Manage version – 2.3.0

Steps to perform : – 

1. Download & Install Chef Server package. Go to and download the package for your OS. In this tutorial, I have chosen Ubuntu. Install it by using below command.

root@chef-server:/home/shashank# dpkg -i chef-server-core_12.4.0-1_amd64.deb
Selecting previously unselected package chef-server-core.
(Reading database ... 166216 files and directories currently installed.)
Preparing to unpack chef-server-core_12.4.0-1_amd64.deb ...
Unpacking chef-server-core (12.4.0-1) ...

2. Configure Chef Server. Next step will be to configure it. So run the command mentioned below. It will dump an output similar to it. Please note that this step will take around 2-3 minutes or more.

root@chef-server:/home/shashank# chef-server-ctl reconfigure
Starting Chef Client, version 12.6.0
resolving cookbooks for run list: ["private-chef::default"]
Synchronizing Cookbooks:

Deprecated features used!
Cannot specify both default and name_property together on property path of resource yum_globalconfig. Only one (name_property) will be obeyed. In Chef 13, this will become an error. Please remove one or the other from the property. at 1 location:
- /opt/opscode/embedded/cookbooks/cache/cookbooks/yum/resources/globalconfig.rb:76:in `class_from_file'

Chef Client finished, 323/451 resources updated in 03 minutes 10 seconds
Chef Server Reconfigured!

3. Create Chef user & its organisation. Issue below command to create a user & its organisation for Chef. This user will be used to log-in to its web UI & perform other admin tasks. These .pem keys will be used to authenticate & validate the certificates. Choose any desired location.

root@chef-server:/home/shashank# chef-server-ctl user-create chef-admin Chef Admin root@chef-server 'chefadmin' --filename /home/shashank/chef-admin.pem
root@chef-server:/home/shashank# chef-server-ctl org-create shashank 'Shashank Chef Server' --association_user chef-admin --filename /home/shashank/chef-validator.pem

4. Install Chef Manage(web UI). Default step is to install it using Chef itself by issuing chef-server-ctl install chef-manage command But it threw an error on my machine that apt-get update was unable to retrieve this package. So, I downloaded the package from Chef’s site & installed it using dpkg command. It will ask you to accept the license agreement.

root@chef-server:/home/shashank# dpkg -i Downloads/chef-manage_2.3.0-1_amd64.deb

To use this software, you must agree to the terms of the software license agreement.
Press any key to continue.
Type 'yes' to accept the software license agreement, or anything else to cancel.
Starting Chef Client, version 12.4.1

When its done installing it, it will prompt you to issue another command.

Chef Client finished, 323/451 resources updated in 03 minutes 10 seconds
Chef Server Reconfigured!
Thank you for installing the Chef Management Console add-on!

The next step in the process is to run:

chef-manage-ctl reconfigure

5. Configure Chef Manage. Issue above command to configure it. It will take some time. Wait for it to finish.

6. Configure Chef Server again. Run chef-server-ctl reconfigure again to configure it.

If everything goes well, you will have your Chef Server ready.

7. Login to Web console (UI). Point your browser to https://localhost:443/login. You may also use IP address. Enter the credentials that you used in step 3 above. And lo!! You are done 🙂

Chef Manage

Logging into Chef Server UI

Chef Manage UI

Chef Server UI

Watch out for other Chef posts on my blog! Coming soon 😉