Making erchef
Opscode publish the new Chef server called erchef. It is build from erlang.
This blog is a log of making erchef on Ubuntu 12.04.1.
1st. erlang install
A default ubuntu erlang apt-package is a little bit old. I compile from the source.
% sudo apt-get install make gcc libncurses5-dev libssl-dev \
libssl1.0.0 openssl libstdc++6 libstdc++6-4.6-dev
% curl -O http://www.erlang.org/download/otp_src_R15B02.tar.gz
% gzip -dc otp_src_R15B02.tar.gz | tar xvf -
% cd otp_src_R15B02
% ./configure --prefix=/usr/local/ && make
% sudo make install
Next, compile the reber(dependency management tool).
% git clone git://github.com/basho/rebar.git
% cd rebar
% ./bootstrap
% sudo cp -p rebar /usr/local/bin/
2. make
make.
% git clone git://github.com/opscode/erchef.git
% cd erchef
% make rel
That's it. easy.
I was just tought.
until launching erchef....
3. creating app.config
A configuration file called app.config is required to launching erchef. However, that repository does not contain app.config.
After several googling, I found the omnibus-chef repository.
% sudo apt-get install ruby-bundler rake
% git clone git://github.com/opscode/omnibus-chef.git
% cd omnibus-chef
% bundle install
% mv omnibus.rb.example omnibus.rb
% sudo CHEF_GIT_REV=10.14.4 rake projects:chef-server
But I could not launch this omnibus-chef-server (sorry, I forgot why it could not). So, I use only a attribute and template to build app.config.
Here is the app.config I made after a lot of, a lot of, trial and error.
There are some notes to create app.config.
- use relative path to choose log directory. not Absolute.
- I use '/' as rabbitmq directory. A guest can read/write to there. But it should be change.
- should be change postgres dbname and password.
4. Running erchef
OK. now I got the shiny app.config. Let's launch erchef!
Install dependency.
(solr does not required?)
% apt-get install postgres rabbitmq-server openjdk-7-jre solr-common solr-jetty
Create log directory.
% mkdir -p log/chef-server/erchef/
Use postgres schema (I cutting corner to use postgres user).
% sudo -u postgres createdb opscode_chef
% sudo -u postgres psql opscode_chef -f deps/chef_db/priv/pgsql_schema.sql
Create chef certificate.
% sudo escript bin/bootstrap-chef-server
client <<"admin">> created. Key written to
<<"/etc/chef-server/admin.pem">>
client <<"chef-validator">> created. Key written to
<<"/etc/chef-server/chef-validator.pem">>
client <<"chef-webui">> created. Key written to
<<"/etc/chef-server/chef-webui.pem">>
environment '_default' created
Place app.config under the erchef/etc.
% mv ~/app.config etc
Launch erchef.
% sudo bin/erchef start
Confirm.
% sudo bin/erchef ping
pong
Yah. erchef started. finally.
next, configure chef-client.
% knife configure -i
Overwrite /home/ubuntu/.chef/knife.rb? (Y/N) Y
Please enter the chef server URL: [http://blah.example:4000] http://localhost:4000
Please enter a clientname for the new client: [ubuntu] user1 <-- !Another user!
Please enter the existing admin clientname: [chef-webui]
Please enter the location of the existing admin client's private key:
[/etc/chef/webui.pem] /etc/chef-server/chef-webui.pem
Please enter the validation clientname: [chef-validator]
Please enter the location of the validation key:
[/etc/chef/validation.pem] /etc/chef-server/chef-validator.pem
Please enter the path to a chef repository (or leave blank):
Creating initial API user...
Created client[user1]
Configuration file written to /home/ubuntu/.chef/knife.rb
That's it.
% knife client list
admin
chef-validator
chef-webui
user1
5. However...
I can get list, role, node. However, I still could not upload cookbook or rebuild index. If you have any suggestions, please let me know.