mirror of
https://github.com/discourse/discourse.git
synced 2024-11-30 23:05:48 +08:00
f3bcbd8bc3
This introduces two configuration management runs into the Vagrant provisioning phase. The first chef-solo run ensures that a current version of chef is installed using the omnibus updater. The second chef-solo run installs vim and phantomjs. Much more is possible, this is a proof of concept. Cookbooks are stored in the chef directory, and managed by librarian-chef, which is like a bundler for cookbooks. Chef is run when VM is first downloaded and booted, but not on subsequent halt/up cycles. To force chef to run again, use `vagrant provision`.
230 lines
7.3 KiB
Markdown
230 lines
7.3 KiB
Markdown
Description
|
|
===========
|
|
|
|
This cookbook includes recipes to execute apt-get update to ensure the
|
|
local APT package cache is up to date. There are recipes for managing
|
|
the apt-cacher-ng caching proxy and proxy clients. It also includes a
|
|
LWRP for managing APT repositories in /etc/apt/sources.list.d as well as
|
|
an LWRP for pinning packages via /etc/apt/preferences.d.
|
|
|
|
Requirements
|
|
============
|
|
|
|
Version 1.8.2+ of this cookbook requires **Chef 10.16.4** or later.
|
|
|
|
If your Chef version is earlier than 10.16.4, use version 1.7.0 of
|
|
this cookbook.
|
|
|
|
See [CHEF-3493](http://tickets.opscode.com/browse/CHEF-3493) and
|
|
[this code comment](http://bit.ly/VgvCgf) for more information on this
|
|
requirement.
|
|
|
|
Platform
|
|
--------
|
|
|
|
* Debian
|
|
* Ubuntu
|
|
|
|
May work with or without modification on other Debian derivatives.
|
|
|
|
Recipes
|
|
=======
|
|
|
|
default
|
|
-------
|
|
|
|
This recipe installs the `update-notifier-common` package to provide
|
|
the timestamp file used to only run `apt-get update` if the cache is
|
|
more than one day old.
|
|
|
|
This recipe should appear first in the run list of Debian or Ubuntu
|
|
nodes to ensure that the package cache is up to date before managing
|
|
any `package` resources with Chef.
|
|
|
|
This recipe also sets up a local cache directory for preseeding packages.
|
|
|
|
cacher-ng
|
|
---------
|
|
|
|
Installs the `apt-cacher-ng` package and service so the system can
|
|
provide APT caching. You can check the usage report at
|
|
http://{hostname}:3142/acng-report.html. The `cacher-ng` recipe
|
|
includes the `cacher-client` recipe, so it helps seed itself.
|
|
|
|
cacher-client
|
|
-------------
|
|
Configures the node to use the `apt-cacher-ng` server as a client. If you
|
|
want to restrict your node to using the `apt-cacher-ng` server in your
|
|
Environment, set `['apt']['cacher-client']['restrict_environment']` to `true`.
|
|
To use a cacher server (or standard proxy server) not available via search
|
|
set the atttribute `['apt']['cacher-ipaddress']` and for a custom port
|
|
set `['apt']['cacher_port']`
|
|
|
|
Resources/Providers
|
|
===================
|
|
|
|
Managing repositories
|
|
---------------------
|
|
|
|
This LWRP provides an easy way to manage additional APT repositories.
|
|
Adding a new repository will notify running the `execute[apt-get-update]`
|
|
resource immediately.
|
|
|
|
# Actions
|
|
|
|
- :add: creates a repository file and builds the repository listing
|
|
- :remove: removes the repository file
|
|
|
|
# Attribute Parameters
|
|
|
|
- repo_name: name attribute. The name of the channel to discover
|
|
- uri: the base of the Debian distribution
|
|
- distribution: this is usually your release's codename...ie something
|
|
like `karmic`, `lucid` or `maverick`
|
|
- components: package groupings..when it doubt use `main`
|
|
- arch: constrain package to a particular arch like `i386`, `amd64` or
|
|
even `armhf` or `powerpc`. Defaults to nil.
|
|
- deb_src: whether or not to add the repository as a source repo as
|
|
well - value can be `true` or `false`, default `false`.
|
|
- keyserver: the GPG keyserver where the key for the repo should be retrieved
|
|
- key: if a `keyserver` is provided, this is assumed to be the
|
|
fingerprint, otherwise it can be either the URI to the GPG key for
|
|
the repo, or a cookbook_file.
|
|
- cookbook: if key should be a cookbook_file, specify a cookbook where
|
|
the key is located for files/default. Defaults to nil, so it will
|
|
use the cookbook where the resource is used.
|
|
|
|
# Examples
|
|
|
|
# add the Zenoss repo
|
|
apt_repository "zenoss" do
|
|
uri "http://dev.zenoss.org/deb"
|
|
components ["main","stable"]
|
|
end
|
|
|
|
# add the Nginx PPA; grab key from keyserver
|
|
apt_repository "nginx-php" do
|
|
uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
|
|
distribution node['lsb']['codename']
|
|
components ["main"]
|
|
keyserver "keyserver.ubuntu.com"
|
|
key "C300EE8C"
|
|
end
|
|
|
|
# add the Nginx PPA; grab key from keyserver, also add source repo
|
|
apt_repository "nginx-php" do
|
|
uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
|
|
distribution node['lsb']['codename']
|
|
components ["main"]
|
|
keyserver "keyserver.ubuntu.com"
|
|
key "C300EE8C"
|
|
deb_src true
|
|
end
|
|
|
|
# add the Cloudkick Repo
|
|
apt_repository "cloudkick" do
|
|
uri "http://packages.cloudkick.com/ubuntu"
|
|
distribution node['lsb']['codename']
|
|
components ["main"]
|
|
key "http://packages.cloudkick.com/cloudkick.packages.key"
|
|
end
|
|
|
|
# add the Cloudkick Repo with the key downloaded in the cookbook
|
|
apt_repository "cloudkick" do
|
|
uri "http://packages.cloudkick.com/ubuntu"
|
|
distribution node['lsb']['codename']
|
|
components ["main"]
|
|
key "cloudkick.packages.key"
|
|
end
|
|
|
|
# add the Cloudera Repo of CDH4 packages for Ubuntu 12.04 on AMD64
|
|
apt_repository "cloudera" do
|
|
uri "http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh"
|
|
arch "amd64"
|
|
distribution "precise-cdh4"
|
|
components ["contrib"]
|
|
key "http://archive.cloudera.com/debian/archive.key"
|
|
end
|
|
|
|
# remove Zenoss repo
|
|
apt_repository "zenoss" do
|
|
action :remove
|
|
end
|
|
|
|
Pinning packages
|
|
----------------
|
|
|
|
This LWRP provides an easy way to pin packages in /etc/apt/preferences.d.
|
|
Although apt-pinning is quite helpful from time to time please note that Debian
|
|
does not encourage its use without thorough consideration.
|
|
|
|
Further information regarding apt-pinning is available via
|
|
http://wiki.debian.org/AptPreferences.
|
|
|
|
# Actions
|
|
|
|
- :add: creates a preferences file under /etc/apt/preferences.d
|
|
- :remove: Removes the file, therefore unpin the package
|
|
|
|
# Attribute Parameters
|
|
|
|
- package_name: name attribute. The name of the package
|
|
- pin: The package version/repository to pin
|
|
- pin_priority: The pinning priority aka "the highest package version wins"
|
|
|
|
# Examples
|
|
|
|
# Pin libmysqlclient16 to version 5.1.49-3
|
|
apt_preference "libmysqlclient16" do
|
|
pin "version 5.1.49-3"
|
|
pin_priority "700"
|
|
end
|
|
|
|
# Unpin libmysqlclient16
|
|
apt_preference "libmysqlclient16" do
|
|
action :remove
|
|
end
|
|
|
|
Usage
|
|
=====
|
|
|
|
Put `recipe[apt]` first in the run list. If you have other recipes
|
|
that you want to use to configure how apt behaves, like new sources,
|
|
notify the execute resource to run, e.g.:
|
|
|
|
template "/etc/apt/sources.list.d/my_apt_sources.list" do
|
|
notifies :run, resources(:execute => "apt-get update"), :immediately
|
|
end
|
|
|
|
The above will run during execution phase since it is a normal
|
|
template resource, and should appear before other package resources
|
|
that need the sources in the template.
|
|
|
|
Put `recipe[apt::cacher-ng]` in the run_list for a server to provide
|
|
APT caching and add `recipe[apt::cacher-client]` on the rest of the
|
|
Debian-based nodes to take advantage of the caching server.
|
|
|
|
If you want to cleanup unused packages, there is also the `apt-get autoclean`
|
|
and `apt-get autoremove` resources provided for automated cleanup.
|
|
|
|
License and Author
|
|
==================
|
|
|
|
Author:: Joshua Timberman (<joshua@opscode.com>)
|
|
Author:: Matt Ray (<matt@opscode.com>)
|
|
Author:: Seth Chisamore (<schisamo@opscode.com>)
|
|
|
|
Copyright 2009-2012 Opscode, Inc.
|
|
|
|
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.
|