Setting up Open Chef Server and a Workstation

The quick and dirty way…

Prep work

For me, I stood up two Centos 6.5 instances in virtualbox. I did the basics of installing the EPEL repo, groupinstall of “Base” and “developer tools” in YUM, setup and configured a user for myself.

Create my user:

useradd -m -G wheel seth
passwd seth

Install EPEL repo:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

YUM Groupinstall:

sudo yum groupinstall base "developer tools"


Downloading the needed files

http://www.getchef.com/chef/install/

First we will install the server…

 

For the server

Pick which package you need here and download it to the “chef-server”

cd /opt
sudo wget "https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.12-1.el6.x86_64.rpm"
sudo rpm -ivh  chef-server-11.0.12-1.el6.x86_64.rpm
sudo chef-server-ctl reconfigure

This command will set up all of the required components, including Erchef, RabbitMQ, and PostgreSQL

 sudo chef-server-ctl test

 

For the Workstation

As root run the curl command supplied to you from the Chef Download page. For me it was…

curl -L https://www.opscode.com/chef/install.sh | bash

Once this completes do this to test the install and see the version number:

chef-client -v

Now install GIT…

yum install git

(This will install version 1.7.1-ish)

From here as my own user I went to my home directory and cloned down the Chef GIT repo:

git clone git://github.com/opscode/chef-repo.git

Next cd into the chef-repo dir and create your .chef folder. This folder will hold your authorization files in a few steps from now.

cd chef-repo
 mkdir .chef

Add your .chef to the .gitignore file so it and its contents will not be uploaded.

echo .chef >> .gitignore

Get the .pem files and knife.rb files
You will need to copy these files from the chefserver that you previously setup. These files essentially give you access to connect to the server via chef-client and with knife. For me the command run from my workstation was…

sudo scp root@192.168.1.152:/etc/chef-server/admin.pem /home/seth/chef-repo/.chef/admin.pem
sudo scp root@192.168.1.152:/etc/chef-server/chef-validator.pem /home/seth/chef-repo/.chef/chef-validator.pem

You then want to run the knife initial command to create the knife.rb file in your .chef folder. Unless you know the hostname of your server and the locations of your admin and chef-validator.pem files this step will fail. You also need to make sure that port 443 is open on your server. You can do that with this:

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
sudo service iptables save

Now do this:

knife configure --initial

Here is what my output looked like to give you an idea of what to expect:

[seth@chefworkstation001 .chef]$ knife configure --initial
 Overwrite /home/seth/.chef/knife.rb? (Y/N)y
 Please enter the chef server URL: [https://chefworkstation001.devopshomelab:443] https://192.168.1.152:443
 Please enter a name for the new user: [seth]
 Please enter the existing admin name: [admin]
 Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem] /home/seth/chef-repo/.chef/admin.pem
 Please enter the validation clientname: [chef-validator]
 Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem] /home/seth/chef-repo/.chef/chef-validator.pem
 Please enter the path to a chef repository (or leave blank):
 Creating initial API user...
 Please enter a password for the new user:
 Created user[seth]
 Configuration file written to /home/seth/.chef/knife.rb

Once you successfully make it past this point you should be good to go. You can test your configuration and connectivity to your server by running the following two commands:

knife client list
knife user list

Now lets bootstrap our new chef workstation

On the server you will need to configure knife like we did on the client side so do:

sudo knife configure -i

You will see something similar to what we saw the firwst time we ran this. Here is my output…

WARNING: No knife configuration file found
Where should I put the config file? [/root/.chef/knife.rb]
Please enter the chef server URL: [https://chefserver.devopshomelab:443]
Please enter a name for the new user: [seth] chefserver
Please enter the existing admin name: [admin]
Please enter the location of the existing admin's private key: [/etc/chef-server/admin.pem]
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key: [/etc/chef-server/chef-validator.pem]
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Please enter a password for the new user:
Created user[chefserver]
Configuration file written to /root/.chef/knife.rb

If you have everything configured correctly you can now bootstrap your workstation by running the following command:

sudo ./knife bootstrap 192.168.1.153 --sudo -x seth -N "chefworkstation001"

 

You should have successfully installed and configured a working Chef open server and workstation following these steps. If you have questions or comments please feel free to use the comment section below. As always you can also consult the official Chef documentation on this subject by going here:

SERVER: http://docs.opscode.com/install_server.html

WORKSTATION: http://docs.opscode.com/install_workstation.html

Also check out my other post about bootstrapping a node in your new Chef environment. HERE

Advertisements

Chef Logs

Looking for chef’s log files? Look in your /etc/chef/client.rb file.

Here’s mine on my local test machine…

log_level :info
log_location STDOUT
chef_server_url 'https://localhost:443'
validation_client_name 'chef-validator'

You can change the location of where the log file points to here to something like: /var/log/chef/client.log

If such a place doesnt already exist you can always do:

sudo mkdir /var/log/chef/
sudo touch /var/log/chef/chef-client.log

I suppose if you wanted to be fancy about it you could hook that logfile into Logstash to track whatever type of trends you wanted.

Happy logging…

 

Bootstrapping a Chef Client

Installing Chef as client is a fairly straight forward thing to do after you already have your Chef Server setup. Heres a brief overview of the key steps you will need to take.

First you will need to install Chef Client. You can do that by following this link. This will take you to the Opscode page that helps you figure out what you need and gives you options on how to actually get the chef-client package.
For my case since I am running CentOS 6 I chose Enterprise Linux 6 on a 64-Bit platform. The command that the page gave me to use was:

curl -L https://www.opscode.com/chef/install.sh | bash

From here you log in as your root user and run the command. As a side note I tried this using just my sudo user and it did not work because for some reason it could not create a lock file. Here is what my error looked like:

downloading https://www.opscode.com/chef/metadata?v=&prerelease=false&p=el&pv=6&m=x86_64
 to file /tmp/install.sh.5247/metadata.txt
trying wget...
url https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.10.4-1.el6.x86_64.rpm
md5 3fe6dd8e19301b6c66032496a89097db
sha256 edd5d2bcc174f67e5e5136fd7e5fffd9414c5f4949c68b28055b124185904d9f
downloaded metadata file looks valid...
downloading https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-11.10.4-1.el6.x86_64.rpm
 to file /tmp/install.sh.5247/chef-11.10.4-1.el6.x86_64.rpm
trying wget...
Checksum compare with sha256sum succeeded.
Installing Chef 
installing with rpm...
warning: /tmp/install.sh.5247/chef-11.10.4-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
error: can't create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
Installation failed
Please file a bug report at http://tickets.opscode.com
Project: Chef
Component: Packages
Label: Omnibus
Version:
Please detail your operating system type, version and any other relevant details

Once I tried it again as the actual root user everything worked fine.

And now on to the good stuff…

On your master you need to “create the client”

sudo knife bootstrap 192.168.1.151 --sudo -x seth -N "centos-lab-001"

and you will see something like this…

[sudo] password for seth:
Bootstrapping Chef on 192.168.1.151
Enter your password:
192.168.1.151 Starting Chef Client, version 11.6.0
192.168.1.151 Creating a new client identity for centos-lab-001 using the validator key.
192.168.1.151 resolving cookbooks for run list: []
192.168.1.151 Synchronizing Cookbooks:
192.168.1.151 Compiling Cookbooks...
192.168.1.151 [2014-03-20T22:03:29-04:00] WARN: Node centos-lab-001 has an empty run list.
192.168.1.151 Converging 0 resources
192.168.1.151 Chef Client finished, 0 resources updated

Once this has completed you will need to log into either your on Chef server or as I do, my Opscode hosted management page at https://manage.opscode.com/ Once you have connected go to your Node tab at the top and then click Edit next to your new node that you should see here. From here you will see your available recipes on the left and Run List on the right. What you want to do is click and drag a name of a recipe over to the right to your run list. An easy one to test with is NTP which you can get from the Opscode community or on Github. Once you have done this save and open a terminal to your new node.

do:

sudo chef-client

and you should see a bunch of stuff scroll by and then a success message.

This is a VERY brief guide and there are much more detailed  descriptions of this process that can be found out there. Good luck and feel free to ask questions in the comments or tweet me @devopshomelab