Skip to content

Instantly share code, notes, and snippets.

@tavisrudd
Created October 21, 2010 19:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tavisrudd/639143 to your computer and use it in GitHub Desktop.
Save tavisrudd/639143 to your computer and use it in GitHub Desktop.
#!/bin/bash
$(dirname $0)/bootstrap-portage.sh
# keyword chef and dependencies
cat <<EOF > /etc/portage/package.keywords/chef
=app-admin/chef-0.9.8
=dev-ruby/abstract-1.0.0
=dev-ruby/bunny-0.6.0
=dev-ruby/erubis-2.6.5
=dev-ruby/extlib-0.9.15
=dev-ruby/highline-1.5.2-r1
=dev-ruby/json-1.4.6
=dev-ruby/mime-types-1.16-r2
=dev-ruby/mixlib-authentication-1.1.4
=dev-ruby/mixlib-cli-1.2.0
=dev-ruby/mixlib-config-1.1.2
=dev-ruby/mixlib-log-1.1.0
=dev-ruby/moneta-0.6.0-r1
=dev-ruby/ohai-0.5.6-r1
=dev-ruby/rest-client-1.5.1
=dev-ruby/rubygems-1.3.7-r1
=dev-ruby/systemu-1.2.0
=dev-ruby/uuidtools-2.1.1-r1
EOF
emerge chef -nk
#!/bin/bash
cat <<"EOF" > /etc/make.conf
# portage directories
PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages/${ARCH}"
# compiler settings
CFLAGS="-march=athlon64 -O2 -pipe"
CXXFLAGS="${CFLAGS}"
# build-time flags
USE="bash-completion bzip2 caps -cups fontconfig gs idn jpeg png svg tiff truetype urandom vhosts vim-syntax "
# advanced masking
ACCEPT_LICENSE="*"
# mirror settings
GENTOO_MIRRORS="ftp://ftp.spline.de/pub/gentoo http://distfiles.gentoo.org http://www.ibiblio.org/pub/Linux/distributions/gentoo"
SYNC="rsync://rsync.spline.de/gentoo-portage"
# advanced features
EMERGE_DEFAULT_OPTS="--quiet-build --with-bdeps=y --binpkg-respect-use=y --rebuilt-binaries=n --keep-going --usepkg"
MAKEOPTS="-j1"
PORTAGE_NICENESS="15"
EBEEP_IGNORE="yes"
FEATURES="collision-protect noinfo parallel-fetch preserve-libs sfperms strict unmerge-orphans userpriv usersandbox buildpkg"
# logging related variables:
PORTAGE_ELOG_SYSTEM="save echo"
PORTAGE_ELOG_CLASSES="warn error info log qa"
# language support
LINGUAS="en"
# configuration file protection
CONFIG_PROTECT=""
CONFIG_PROTECT_MASK=""
EOF
# create /etc/portage/package.* directories
for i in keywords mask unmask use; do
if [[ -f /etc/portage/package.$i ]]; then
mv /etc/portage/package.$i /etc/portage/package.$i.bak
mkdir /etc/portage/package.$i
mv /etc/portage/package.$i.bak /etc/portage/package.$i/local
elif [[ ! -d /etc/portage/package.$i ]]; then
mkdir /etc/portage/package.$i
fi
done
# just remerge the damn fucker because of its bindist license crap
emerge --oneshot --usepkg=n openssl
#!/bin/bash
$(dirname $0)/bootstrap-client.sh
GIT_REPO=$1
# keyword chef and dependencies
cat <<EOF > /etc/portage/package.keywords/chef-server
=app-admin/chef-server-0.9.8
=app-admin/chef-server-api-0.9.8
=app-admin/chef-server-webui-0.9.8
=app-admin/chef-solr-0.9.8
=dev-ruby/bundler-0.9.26
=dev-ruby/coderay-0.9.3
=dev-ruby/daemons-1.0.10-r1
=dev-ruby/eventmachine-0.12.10-r2
=dev-ruby/haml-2.2.24
=dev-ruby/hpricot-0.8.2-r1
=dev-ruby/libxml-1.1.4
=dev-ruby/merb-assets-1.1.2
=dev-ruby/merb-core-1.1.2
=dev-ruby/merb-haml-1.1.2
=dev-ruby/merb-helpers-1.1.2
=dev-ruby/merb-param-protection-1.1.2
=dev-ruby/rack-1.1.0
=dev-ruby/rake-0.8.7-r5
=dev-ruby/rake-compiler-0.7.0-r1
=dev-ruby/ruby-openid-2.1.7-r2
=net-misc/rabbitmq-server-2.1.0
=www-servers/thin-1.2.5-r1
EOF
emerge chef-server chef-server-webui -nk
# setup RabbitMQ
/etc/init.d/rabbitmq start && sleep 5
AMQP_PASS=$(dd if=/dev/urandom count=50 2>/dev/null | md5sum | awk '{print $1}')
rabbitmqctl add_vhost /chef
rabbitmqctl add_user chef ${AMQP_PASS}
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
echo "amqp_pass '${AMQP_PASS}'" >> /etc/chef/server.rb
echo "amqp_pass '${AMQP_PASS}'" >> /etc/chef/solr.rb
echo "${AMQP_PASS}" >> /etc/chef/amqp_pass
chown chef:chef /etc/chef/{amqp_pass,server.rb,solr.rb,webui.rb}
chmod 0600 /etc/chef/{amqp_pass,server.rb,solr.rb,webui.rb}
# start chef-server
for i in solr solr-indexer server-api server-webui; do
rc-update add chef-$i default
/etc/init.d/chef-$i start
sleep 2
done
# configure knife client for root
mkdir -p /root/.chef
cat <<EOF > /root/.chef/knife.rb
log_level :info
log_location STDOUT
node_name 'chef-webui'
client_key '/etc/chef/webui.pem'
validation_client_name 'chef-validator'
validation_key '/etc/chef/validation.pem'
chef_server_url 'http://localhost:4000'
cookbook_path [ '/usr/src/chef/cookbooks', '/usr/src/chef/site-cookbooks' ]
EOF
# initial cookbook upload
mkdir -p /usr/src && cd /usr/src
git clone ${GIT_REPO} chef && cd ./chef
rake init && rake deploy
# initial chef server convergence
chef-client -V
knife node run_list add $(hostname -f) 'role[chef]'
chef-client -V
# cleanup
rm -rf /usr/src/chef
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment