#!/usr/bin/env ruby # # ./chef-server - Serving up piping hot infrastructure! # # Author:: Adam Jacob () # Copyright:: Copyright (c) 2008 Opscode, Inc. # License:: Apache License, Version 2.0 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Based on the 'merb' command, by Ezra require "rubygems" require "merb-core" # Load chef and chef-server-api from source rather than gem, if present $:.unshift(File.expand_path(File.dirname(__FILE__) + '/../../chef/lib/')) $:.unshift(File.expand_path(File.dirname(__FILE__) + '/../lib')) # Print the version if we have -v or --version if ARGV.any? { |arg| arg =~ /\-v|\-\-version/ } require 'chef-server-api/version' puts "Chef Server (API) Version: #{ChefServerApi::VERSION}" exit 1 end require 'chef' require 'chef-server-api' # Ensure the chef gem we load is the same version as the chef server unless defined?(Chef) gem "chef", "=" + CHEF_SERVER_VERSION require 'chef' end # Print the help message if our argv looks fishy if ARGV[0] && ARGV[0] =~ /^[^-]/ ARGV.push "-H" end # Default to thin unless %w[-a --adapter -i --irb-console -r --script-runner].any? { |o| ARGV.index(o) } ARGV.push *%w[-a thin] end # Tell merb where to root ARGV.push *[ "-m", CHEF_SERVER_API_ROOT] # attempt to find the user and group that this process will become. Fixes CHEF-1015 if (index = ARGV.index("-u")) Chef::Config[:signing_ca_user] = ARGV[index+1] end if (index = ARGV.index("-G")) Chef::Config[:signing_ca_group] = ARGV[index+1] end # Find and load the config if index = ARGV.index("-C") config = ARGV[index+1] ARGV.delete("-C") ARGV.delete(config) Chef::Config.from_file(File.expand_path(config)) else Chef::Config.from_file( File.join("/etc", "chef", "server.rb") ) end Chef::Log.init(Chef::Config[:log_location]) Chef::Log.level = Chef::Config[:log_level] begin Merb.start rescue RuntimeError => e if e.message =~ /no acceptor/ Chef::Log.fatal("Another process is already listening on port #{Merb::Config[:port]}. Is chef-server already running?") exit 127 else raise end end