from-scratch 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Berksfile.lock +11 -0
  4. data/chefignore +1 -0
  5. data/cookbooks/apt/CHANGELOG.md +248 -0
  6. data/cookbooks/apt/README.md +294 -0
  7. data/cookbooks/apt/attributes/default.rb +51 -0
  8. data/cookbooks/apt/files/default/15update-stamp +1 -0
  9. data/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
  10. data/cookbooks/apt/libraries/helpers.rb +61 -0
  11. data/cookbooks/apt/libraries/matchers.rb +17 -0
  12. data/cookbooks/apt/libraries/network.rb +31 -0
  13. data/cookbooks/apt/metadata.json +1 -0
  14. data/cookbooks/apt/providers/preference.rb +84 -0
  15. data/cookbooks/apt/providers/repository.rb +246 -0
  16. data/cookbooks/apt/recipes/cacher-client.rb +83 -0
  17. data/cookbooks/apt/recipes/cacher-ng.rb +43 -0
  18. data/cookbooks/apt/recipes/default.rb +112 -0
  19. data/cookbooks/apt/recipes/unattended-upgrades.rb +47 -0
  20. data/cookbooks/apt/resources/preference.rb +37 -0
  21. data/cookbooks/apt/resources/repository.rb +60 -0
  22. data/cookbooks/apt/templates/debian-6.0/acng.conf.erb +173 -0
  23. data/cookbooks/apt/templates/default/01proxy.erb +9 -0
  24. data/cookbooks/apt/templates/default/10recommends.erb +3 -0
  25. data/cookbooks/apt/templates/default/20auto-upgrades.erb +2 -0
  26. data/cookbooks/apt/templates/default/50unattended-upgrades.erb +68 -0
  27. data/cookbooks/apt/templates/default/acng.conf.erb +275 -0
  28. data/cookbooks/apt/templates/default/unattended-upgrades.seed.erb +1 -0
  29. data/cookbooks/apt/templates/ubuntu-10.04/acng.conf.erb +269 -0
  30. data/cookbooks/build-essential/CHANGELOG.md +136 -0
  31. data/cookbooks/build-essential/README.md +108 -0
  32. data/cookbooks/build-essential/attributes/default.rb +20 -0
  33. data/cookbooks/build-essential/libraries/matchers.rb +5 -0
  34. data/cookbooks/build-essential/libraries/timing.rb +124 -0
  35. data/cookbooks/build-essential/libraries/xcode_command_line_tools.rb +210 -0
  36. data/cookbooks/build-essential/metadata.json +1 -0
  37. data/cookbooks/build-essential/recipes/_debian.rb +28 -0
  38. data/cookbooks/build-essential/recipes/_fedora.rb +32 -0
  39. data/cookbooks/build-essential/recipes/_freebsd.rb +24 -0
  40. data/cookbooks/build-essential/recipes/_mac_os_x.rb +22 -0
  41. data/cookbooks/build-essential/recipes/_omnios.rb +33 -0
  42. data/cookbooks/build-essential/recipes/_rhel.rb +36 -0
  43. data/cookbooks/build-essential/recipes/_smartos.rb +27 -0
  44. data/cookbooks/build-essential/recipes/_solaris2.rb +48 -0
  45. data/cookbooks/build-essential/recipes/_suse.rb +29 -0
  46. data/cookbooks/build-essential/recipes/default.rb +29 -0
  47. data/cookbooks/chef-sugar/CHANGELOG.md +159 -0
  48. data/cookbooks/chef-sugar/README.md +464 -0
  49. data/cookbooks/chef-sugar/metadata.json +1 -0
  50. data/cookbooks/chef-sugar/recipes/default.rb +34 -0
  51. data/cookbooks/openssl/CHANGELOG.md +30 -0
  52. data/cookbooks/openssl/README.md +115 -0
  53. data/cookbooks/openssl/attributes/default.rb +21 -0
  54. data/cookbooks/openssl/libraries/secure_password.rb +37 -0
  55. data/cookbooks/openssl/metadata.json +31 -0
  56. data/cookbooks/openssl/providers/x509.rb +94 -0
  57. data/cookbooks/openssl/recipes/default.rb +18 -0
  58. data/cookbooks/openssl/recipes/upgrade.rb +39 -0
  59. data/cookbooks/openssl/resources/x509.rb +16 -0
  60. data/cookbooks/postgresql/CHANGELOG.md +220 -0
  61. data/cookbooks/postgresql/README.md +464 -0
  62. data/cookbooks/postgresql/attributes/default.rb +549 -0
  63. data/cookbooks/postgresql/files/default/tests/minitest/apt_pgdg_postgresql_test.rb +39 -0
  64. data/cookbooks/postgresql/files/default/tests/minitest/default_test.rb +27 -0
  65. data/cookbooks/postgresql/files/default/tests/minitest/ruby_test.rb +28 -0
  66. data/cookbooks/postgresql/files/default/tests/minitest/server_test.rb +43 -0
  67. data/cookbooks/postgresql/files/default/tests/minitest/support/helpers.rb +29 -0
  68. data/cookbooks/postgresql/libraries/default.rb +377 -0
  69. data/cookbooks/postgresql/metadata.json +56 -0
  70. data/cookbooks/postgresql/recipes/apt_pgdg_postgresql.rb +18 -0
  71. data/cookbooks/postgresql/recipes/client.rb +32 -0
  72. data/cookbooks/postgresql/recipes/config_initdb.rb +148 -0
  73. data/cookbooks/postgresql/recipes/config_pgtune.rb +284 -0
  74. data/cookbooks/postgresql/recipes/contrib.rb +44 -0
  75. data/cookbooks/postgresql/recipes/default.rb +18 -0
  76. data/cookbooks/postgresql/recipes/ruby.rb +117 -0
  77. data/cookbooks/postgresql/recipes/server.rb +89 -0
  78. data/cookbooks/postgresql/recipes/server_conf.rb +34 -0
  79. data/cookbooks/postgresql/recipes/server_debian.rb +38 -0
  80. data/cookbooks/postgresql/recipes/server_redhat.rb +100 -0
  81. data/cookbooks/postgresql/recipes/yum_pgdg_postgresql.rb +45 -0
  82. data/cookbooks/postgresql/templates/default/pg_hba.conf.erb +35 -0
  83. data/cookbooks/postgresql/templates/default/pgsql.sysconfig.erb +4 -0
  84. data/cookbooks/postgresql/templates/default/postgresql.conf.erb +21 -0
  85. data/cookbooks/scratchify/.chef/knife.rb +2 -5
  86. data/cookbooks/scratchify/Berksfile +2 -1
  87. data/cookbooks/scratchify/Berksfile.lock +11 -0
  88. data/cookbooks/scratchify/README.md +34 -17
  89. data/cookbooks/scratchify/bin/scratchify +1 -1
  90. data/cookbooks/scratchify/chefignore +1 -0
  91. data/cookbooks/scratchify/from-scratch.gemspec +2 -5
  92. data/cookbooks/scratchify/lib/from-scratch.rb +25 -0
  93. data/cookbooks/scratchify/lib/{from/scratch → from-scratch}/version.rb +1 -1
  94. data/cookbooks/scratchify/metadata.json +2 -1
  95. data/cookbooks/scratchify/templates/node.json.erb +34 -0
  96. data/cookbooks/scratchify/templates/user.json.erb +6 -0
  97. data/lib/from-scratch.rb +2 -2
  98. data/lib/from-scratch/version.rb +1 -1
  99. data/templates/node.json.erb +6 -3
  100. metadata +85 -10
  101. data/cookbooks/scratchify/bin/console +0 -14
  102. data/cookbooks/scratchify/bin/setup +0 -7
  103. data/cookbooks/scratchify/data_bags/users/deploy.json +0 -6
  104. data/cookbooks/scratchify/environments/.gitkeep +0 -0
  105. data/cookbooks/scratchify/lib/from/scratch.rb +0 -31
  106. data/cookbooks/scratchify/lib/from/scratch/interviewer.rb +0 -35
  107. data/cookbooks/scratchify/nodes/normfood.ru.json +0 -75
  108. data/cookbooks/scratchify/roles/.gitkeep +0 -0
@@ -0,0 +1,136 @@
1
+ build-essential Cookbook CHANGELOG
2
+ ==================================
3
+ This file is used to list changes made in each version of the build-essential cookbook.
4
+
5
+ v2.2.4 (2015-10-06)
6
+ -------------------
7
+ * Add patch package on Fedora systems
8
+ * Add additional platforms to Kitchen CI
9
+ * Use Chef standard Rubocop file and resolve several issues
10
+ * Update contributing and testing docs
11
+ * Update Gemfile with the latest testing and development deps
12
+ * Add maintainers.md and maintainers.toml files
13
+ * Add chefignore file to limit the files uploaded to the Chef server
14
+ * Add source_url and issues_url metadata for Supermarket
15
+
16
+ v2.2.3 (2015-04-15)
17
+ -------------------
18
+ * Don’t install omnibus-build-essential on Solaris 10 - We decided it’s easier to use the old GCC that ships with Solaris 10.
19
+ * Use ChefDK for all Travis testing.
20
+
21
+ v2.2.2 (2015-03-27)
22
+ -------------------
23
+ * Update Solar 10’s omnibus-build-essential to 0.0.5
24
+
25
+ v2.2.1 (2015-03-23)
26
+ -------------------
27
+ * Install GNU Patch on Solaris 11
28
+
29
+ v2.2.0 (2015-03-18)
30
+ -------------------
31
+ * [solaris] Differentiate between Solaris 10 and 11
32
+ * [solaris] Add ucb compat package
33
+ * [solaris] Solaris 10 build essential setup
34
+ * Fix metadata to use a string instead of a bool (see #56, #57)
35
+
36
+ v2.1.3 (2014-11-18)
37
+ -------------------
38
+ * Update metadata for supported versions of OS X (10.7+) as noted from
39
+ v2.0.0 previously (#38)
40
+ * Clarify requirement to have apt package cache updated in README. (#41)
41
+ * Fix Xcode CLI installation on OS X (#50)
42
+
43
+ v2.1.2 (2014-10-14)
44
+ -------------------
45
+ * Mac OS X 10.10 Yosemite support
46
+
47
+ v2.1.0 (2014-10-14)
48
+ -------------------
49
+ * Use fully-qualified names when installing FreeBSD package
50
+
51
+ v2.0.6 (2014-08-11)
52
+ -------------------
53
+ * Use the resource form of `remote_file` to prevent context issues
54
+
55
+ v2.0.4 (2014-06-06)
56
+ -------------------
57
+ * [COOK-4661] added patch package to _rhel recipe
58
+
59
+
60
+ v2.0.2 (2014-05-02)
61
+ -------------------
62
+ - Updated documentation about older Chef versions
63
+ - Added new SVG badges to the README
64
+ - Fix a bug where `potentially_at_compile_time` fails on non-resources
65
+
66
+ v2.0.0 (2014-03-13)
67
+ -------------------
68
+ - Updated tested harnesses to use latest ecosystem tools
69
+ - Added support for FreeBSD
70
+ - Added support for installing XCode Command Line Tools on OSX (10.7, 10.8, 10.9)
71
+ - Created a DSL method for wrapping compile_time vs runtime execution
72
+ - Install additional developement tools on some platforms
73
+ - Add nicer log and warning messages with helpful information
74
+
75
+ **Potentially Breaking Changes**
76
+
77
+ - Dropped support for OSX 10.6
78
+ - OSX no longer downloads OSX GCC and uses XCode CLI tools instead
79
+ - `build_essential` -> `build-essential` in node attributes
80
+ - `compiletime` -> `compile_time` in node attributes
81
+ - Cookbook version 2.x no longer supports Chef 10.x
82
+
83
+ v1.4.4 (2014-02-27)
84
+ -------------------
85
+ - [COOK-4245] Wrong package name used for developer tools on OS X 10.9
86
+
87
+ v1.4.2
88
+ ------
89
+ ### Bug
90
+ - **[COOK-3318](https://tickets.chef.io/browse/COOK-3318)** - Use Mixlib::ShellOut instead of Chef::ShellOut
91
+
92
+ ### New Feature
93
+ - **[COOK-3093](https://tickets.chef.io/browse/COOK-3093)** - Add OmniOS support
94
+
95
+ ### Improvement
96
+ - **[COOK-3024](https://tickets.chef.io/browse/COOK-3024)** - Use newer package on SmartOS
97
+
98
+ v1.4.0
99
+ ------
100
+ This version splits up the default recipe into recipes included based on the node's platform_family.
101
+
102
+ - [COOK-2505] - backport omnibus builder improvements
103
+
104
+ v1.3.4
105
+ ------
106
+ - [COOK-2272] - Complete `platform_family` conversion in build-essential
107
+
108
+ v1.3.2
109
+ ------
110
+ - [COOK-2069] - build-essential will install osx-gcc-installer when XCode is present
111
+
112
+ v1.3.0
113
+ ------
114
+ - [COOK-1895] - support smartos
115
+
116
+ v1.2.0
117
+ ------
118
+ - Add test-kitchen support (source repo only)
119
+ - [COOK-1677] - build-essential cookbook support for OpenSuse and SLES
120
+ - [COOK-1718] - build-essential cookbook metadata should include scientific
121
+ - [COOK-1768] - The apt-get update in build-essentials needs to be renamed
122
+
123
+ v1.1.2
124
+ ------
125
+ - [COOK-1620] - support OS X 10.8
126
+
127
+ v1.1.0
128
+ ------
129
+ - [COOK-1098] - support amazon linux
130
+ - [COOK-1149] - support Mac OS X
131
+ - [COOK-1296] - allow for compile-time installation of packages through an attribute (see README)
132
+
133
+ v1.0.2
134
+ ------
135
+ - [COOK-1098] - Add Amazon Linux platform support
136
+ - [COOK-1149] - Add OS X platform support
@@ -0,0 +1,108 @@
1
+ Description
2
+ ===========
3
+ [![Cookbook Version](http://img.shields.io/cookbook/v/build-essential.svg)][cookbook]
4
+ [![Build Status](http://img.shields.io/travis/chef-cookbooks/build-essential.svg)][travis]
5
+
6
+ [cookbook]: https://community.chef.io/cookbooks/build-essential
7
+ [travis]: http://travis-ci.org/chef-cookbooks/build-essential
8
+
9
+ Installs packages required for compiling C software from source. Use this
10
+ cookbook if you wish to compile C programs, or install RubyGems with native
11
+ extensions.
12
+
13
+ Requirements
14
+ ------------
15
+ Chef 11+ and Ohai 6.14+ are required. For the latest list of supported
16
+ platforms, please see the `metadata.rb`.
17
+
18
+ **Note for Debian platform family:** On Debian platform-family systems, it is recommended that `apt-get update` be run, to ensure that the package cache is updated. It's not in the scope of this cookbook to do that, as it can [create a duplicate resource](https://tickets.chef.io/browse/CHEF-3694). We recommend using the [apt](https://supermarket.chef.io/cookbooks/apt) cookbook to do this.
19
+
20
+ **Note for OmniOS**: Currently, OmniOS's Ruby package is built with
21
+ GCC 4.6.3, and the path is hardcoded, as the gcc binaries are not
22
+ installed in the default $PATH. This means that in order to install
23
+ RubyGems into the "system" Ruby, one must install `developer/gcc46`.
24
+ [An issue](https://github.com/omniti-labs/omnios-build/issues/19) is
25
+ open upstream w/ OmniOS to rebuild the Ruby package with GCC 4.7.2.
26
+
27
+ Attributes
28
+ ----------
29
+ | Attribute | Default | Description |
30
+ |----------------|:-------:|-----------------------------------|
31
+ | `compile_time` | `false` | Execute resources at compile time |
32
+
33
+
34
+ Usage
35
+ -----
36
+ Include the build-essential recipe in your run list:
37
+
38
+ ```sh
39
+ knife node run_list add NODE "recipe[build-essential::default]"
40
+ ```
41
+
42
+ or add the build-essential recipe as a dependency and include it from inside
43
+ another cookbook:
44
+
45
+ ```ruby
46
+ include_recipe 'build-essential::default'
47
+ ```
48
+
49
+ ### Gems with C extensions
50
+ For RubyGems that include native C extensions you wish to use with Chef, you
51
+ should do the following.
52
+
53
+ 1. Set the `compile_time` attribute to true in your wrapper cookbook or role:
54
+
55
+ ```ruby
56
+ # Wrapper attribute
57
+ default['build-essential']['compile_time'] = true
58
+ ```
59
+
60
+ ```ruby
61
+ # Role
62
+ default_attributes(
63
+ 'build-essential' => {
64
+ 'compile_time' => true
65
+ }
66
+ )
67
+ ```
68
+
69
+ 1. Ensure that the C libraries, which include files and other assorted "dev"
70
+ type packages, are installed in the compile phase after the build-essential
71
+ recipe is executed. For example:
72
+
73
+ ```ruby
74
+ include_recipe 'build-essential::default'
75
+
76
+ package('mypackage-devel') { action :nothing }.run_action(:install)
77
+ ```
78
+
79
+ 1. Use the `chef_gem` resource in your recipe to install the gem with the native
80
+ extension:
81
+
82
+ ```ruby
83
+ chef_gem 'gem-with-native-extension'
84
+ ```
85
+
86
+
87
+ License & Authors
88
+ -----------------
89
+ - Author: Seth Vargo (<sethvargo@gmail.com>)
90
+ - Author: Joshua Timberman (<joshua@chef.io>)
91
+ - Author: Seth Chisamore (<schisamo@chef.io>)
92
+
93
+ ```text
94
+ Copyright 2009-2015, Chef Software, Inc. (<legal@chef.io>)
95
+
96
+ Licensed under the Apache License, Version 2.0 (the "License");
97
+ you may not use this file except in compliance with the License.
98
+ You may obtain a copy of the License at
99
+
100
+ http://www.apache.org/licenses/LICENSE-2.0
101
+
102
+ Unless required by applicable law or agreed to in writing, software
103
+ distributed under the License is distributed on an "AS IS" BASIS,
104
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
105
+ See the License for the specific language governing permissions and
106
+ limitations under the License.
107
+ ```
108
+
@@ -0,0 +1,20 @@
1
+ #
2
+ # Cookbook Name:: build-essential
3
+ # Attributes:: default
4
+ #
5
+ # Copyright 2008-2012, Chef Software, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ default['build-essential']['compile_time'] = false
@@ -0,0 +1,5 @@
1
+ if defined?(ChefSpec)
2
+ def install_xcode_command_line_tools(resource_name)
3
+ ChefSpec::Matchers::ResourceMatcher.new(:xcode_command_line_tools, :install, resource_name)
4
+ end
5
+ end
@@ -0,0 +1,124 @@
1
+ #
2
+ # Cookbook Name:: build-essential
3
+ # Library:: timing
4
+ #
5
+ # Copyright 2014, Chef Software, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ #
21
+ # This module is used to clean up the recipe DSL and "potentially" execute
22
+ # resources at compile time (depending on the value of an attribute).
23
+ #
24
+ # This library is only for use within the build-essential cookbook. Resources
25
+ # inside the potentially_at_compile_time block will not fire notifications in
26
+ # some situations. This is fixable, but since none of the resources in this
27
+ # cookbook actually use notifications, it is not worth the added technical debt.
28
+ #
29
+ # TL;DR Don't use this DSL method outside of this cookbook.
30
+ #
31
+ module BuildEssential
32
+ module Timing
33
+ #
34
+ # Potentially evaluate the given block at compile time, depending on the
35
+ # value of the +node['build-essential']['compile_time']+ attribute.
36
+ #
37
+ # @example
38
+ # potentially_at_compile_time do
39
+ # package 'apache2'
40
+ # end
41
+ #
42
+ # @param [Proc] block
43
+ # the thing to eval
44
+ #
45
+ def potentially_at_compile_time(&block)
46
+ if compile_time?
47
+ CompileTime.new(self).evaluate(&block)
48
+ else
49
+ instance_eval(&block)
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ #
56
+ # Checks if the DSL should be evaluated at compile time.
57
+ #
58
+ # @return [true, false]
59
+ #
60
+ def compile_time?
61
+ check_for_old_attributes!
62
+ !!node['build-essential']['compile_time']
63
+ end
64
+
65
+ #
66
+ # Checks for the presence of the "old" attributes.
67
+ #
68
+ # @todo Remove in 2.0.0
69
+ #
70
+ # @return [void]
71
+ #
72
+ def check_for_old_attributes!
73
+ unless node['build_essential'].nil?
74
+ Chef::Log.warn <<-EOH
75
+ node['build_essential'] has been changed to node['build-essential'] to match the
76
+ cookbook name and community standards. I have gracefully converted the attribute
77
+ for you, but this warning and conversion will be removed in the next major
78
+ release of the build-essential cookbook.
79
+ EOH
80
+ node.default['build-essential'] = node['build_essential']
81
+ end
82
+
83
+ unless node['build-essential']['compiletime'].nil?
84
+ Chef::Log.warn <<-EOH
85
+ node['build-essential']['compiletime'] has been deprecated. Please use
86
+ node['build-essential']['compile_time'] instead. I have gracefully converted the
87
+ attribute for you, but this warning and conversion will be removed in the next
88
+ major release of the build-essential cookbook.
89
+ EOH
90
+ node.default['build-essential']['compile_time'] = node['build-essential']['compiletime']
91
+ end
92
+ end
93
+
94
+ #
95
+ # A class graciously borrowed from Chef Sugar for evaluating a resource at
96
+ # compile time in a block.
97
+ #
98
+ class CompileTime
99
+ def initialize(recipe)
100
+ @recipe = recipe
101
+ end
102
+
103
+ def evaluate(&block)
104
+ instance_eval(&block)
105
+ end
106
+
107
+ def method_missing(m, *args, &block)
108
+ resource = @recipe.send(m, *args, &block)
109
+ if resource.is_a?(Chef::Resource)
110
+ actions = Array(resource.action)
111
+ resource.action(:nothing)
112
+
113
+ actions.each do |action|
114
+ resource.run_action(action)
115
+ end
116
+ end
117
+ resource
118
+ end
119
+ end
120
+ end
121
+ end
122
+
123
+ # Include the timing module into the main recipe DSL
124
+ Chef::Recipe.send(:include, BuildEssential::Timing)
@@ -0,0 +1,210 @@
1
+ #
2
+ # Cookbook Name:: build-essential
3
+ # Library:: xcode_command_line_tools
4
+ #
5
+ # Copyright 2014, Chef Software, Inc.
6
+ #
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+ #
19
+
20
+ class Chef
21
+ class Resource::XcodeCommandLineTools < Resource::LWRPBase
22
+ def self.resource_name
23
+ :xcode_command_line_tools
24
+ end
25
+
26
+ actions :install
27
+ default_action :install
28
+
29
+ def initialize(name, run_context = nil)
30
+ super
31
+
32
+ @provider = case node['platform_version'].to_f
33
+ when 10.7, 10.8
34
+ Provider::XcodeCommandLineToolsFromDmg
35
+ when 10.9, 10.10
36
+ Provider::XcodeCommandLineToolsFromSoftwareUpdate
37
+ else
38
+ Chef::Log.warn <<-EOH
39
+ OSX #{node['platform_version']} is not an officially supported platform for the
40
+ build-essential cookbook. I am going to try and install the command line tools
41
+ from Software Update, but there is a high probability that it will fail...
42
+
43
+ If you have tested and verified OSX #{node['platform_version']} and you are sick
44
+ of seeing this warning in your Chef Client runs, please submit a Pull Request to
45
+ https://github.com/chef-cookbooks/build-essential and add this version of OSX
46
+ to provider list.
47
+ EOH
48
+ Provider::XcodeCommandLineToolsFromSoftwareUpdate
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ #
55
+ # This is a legacy provider for installing OSX from DMGs. It only supports OSX
56
+ # versions 10.7 and 10.8 and will (hopefully) be deprecated in the future. It
57
+ # downloads a remote .dmg file, mounts it, installs it, and unmounts it
58
+ # automatically. In later versions of OSX, the operating system handles this for
59
+ # the end user.
60
+ #
61
+ class Chef
62
+ class Provider::XcodeCommandLineToolsFromDmg < Provider::LWRPBase
63
+ action(:install) do
64
+ if installed?
65
+ Chef::Log.debug("#{new_resource} already installed - skipping")
66
+ else
67
+ converge_by("Install #{new_resource}") do
68
+ download
69
+ attach
70
+ install
71
+ detach
72
+ end
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ #
79
+ # Determine if the XCode Command Line Tools are installed
80
+ #
81
+ # @return [true, false]
82
+ #
83
+ def installed?
84
+ cmd = Mixlib::ShellOut.new('pkgutil --pkgs=com.apple.pkg.DeveloperToolsCLI')
85
+ cmd.run_command
86
+ cmd.error!
87
+ true
88
+ rescue Mixlib::ShellOut::ShellCommandFailed
89
+ false
90
+ end
91
+
92
+ #
93
+ # The path where the dmg should be cached on disk.
94
+ #
95
+ # @return [String]
96
+ #
97
+ def dmg_cache_path
98
+ ::File.join(Chef::Config[:file_cache_path], 'osx-command-line-tools.dmg')
99
+ end
100
+
101
+ #
102
+ # The path where the dmg should be downloaded from. This is intentionally
103
+ # not a configurable object by the end user. If you do not like where we
104
+ # are downloading XCode from - too bad.
105
+ #
106
+ # @return [String]
107
+ #
108
+ def dmg_remote_source
109
+ case node['platform_version'].to_f
110
+ when 10.7
111
+ 'http://devimages.apple.com/downloads/xcode/command_line_tools_for_xcode_os_x_lion_april_2013.dmg'
112
+ when 10.8
113
+ 'http://devimages.apple.com/downloads/xcode/command_line_tools_for_xcode_os_x_mountain_lion_march_2014.dmg'
114
+ else
115
+ fail "Unknown DMG download URL for OSX #{node['platform_version']}"
116
+ end
117
+ end
118
+
119
+ #
120
+ # The path where the volume should be mounted.
121
+ #
122
+ # @return [String]
123
+ #
124
+ def mount_path
125
+ ::File.join(Chef::Config[:file_cache_path], 'osx-command-line-tools')
126
+ end
127
+
128
+ #
129
+ # Action: download the remote dmg.
130
+ #
131
+ # @return [void]
132
+ #
133
+ def download
134
+ remote_file = Resource::RemoteFile.new(dmg_cache_path, run_context)
135
+ remote_file.source(dmg_remote_source)
136
+ remote_file.backup(false)
137
+ remote_file.run_action(:create)
138
+ end
139
+
140
+ #
141
+ # Action: attach the dmg (basically, double-click on it)
142
+ #
143
+ # @return [void]
144
+ #
145
+ def attach
146
+ execute %(hdiutil attach "#{dmg_cache_path}" -mountpoint "#{mount_path}")
147
+ end
148
+
149
+ #
150
+ # Action: install the package inside the dmg
151
+ #
152
+ # @return [void]
153
+ #
154
+ def install
155
+ execute %|installer -package "$(find '#{mount_path}' -name *.mpkg)" -target "/"|
156
+ end
157
+
158
+ #
159
+ # Action: detach the dmg (basically, drag it to eject on the dock)
160
+ #
161
+ # @return [void]
162
+ #
163
+ def detach
164
+ execute %(hdiutil detach "#{mount_path}")
165
+ end
166
+ end
167
+ end
168
+
169
+ class Chef
170
+ class Provider::XcodeCommandLineToolsFromSoftwareUpdate < Provider::LWRPBase
171
+ action(:install) do
172
+ if installed?
173
+ Chef::Log.debug("#{new_resource} already installed - skipping")
174
+ else
175
+ converge_by("Install #{new_resource}") do
176
+ # This script was graciously borrowed and modified from Tim Sutton's
177
+ # osx-vm-templates at https://github.com/timsutton/osx-vm-templates/blob/b001475df54a9808d3d56d06e71b8fa3001fff42/scripts/xcode-cli-tools.sh
178
+ execute 'install XCode Command Line tools' do
179
+ command <<-EOH.gsub(/^ {14}/, '')
180
+ # create the placeholder file that's checked by CLI updates' .dist code
181
+ # in Apple's SUS catalog
182
+ touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
183
+ # find the CLI Tools update
184
+ PROD=$(softwareupdate -l | grep "\*.*Command Line" | head -n 1 | awk -F"*" '{print $2}' | sed -e 's/^ *//' | tr -d '\n')
185
+ # install it
186
+ softwareupdate -i "$PROD" -v
187
+ EOH
188
+ # rubocop:enable Metrics/LineLength
189
+ end
190
+ end
191
+ end
192
+ end
193
+
194
+ private
195
+
196
+ #
197
+ # Determine if the XCode Command Line Tools are installed
198
+ #
199
+ # @return [true, false]
200
+ #
201
+ def installed?
202
+ cmd = Mixlib::ShellOut.new('pkgutil --pkgs=com.apple.pkg.CLTools_Executables')
203
+ cmd.run_command
204
+ cmd.error!
205
+ true
206
+ rescue Mixlib::ShellOut::ShellCommandFailed
207
+ false
208
+ end
209
+ end
210
+ end