BtSync 0.5.1 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +8 -8
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -0
  4. data/Vagrantfile +31 -0
  5. data/cookbooks/apt/.gitignore +14 -0
  6. data/cookbooks/apt/.kitchen.yml +38 -0
  7. data/cookbooks/apt/Berksfile +8 -0
  8. data/cookbooks/apt/CHANGELOG.md +97 -0
  9. data/cookbooks/apt/CONTRIBUTING +29 -0
  10. data/cookbooks/apt/LICENSE +201 -0
  11. data/cookbooks/apt/README.md +243 -0
  12. data/cookbooks/apt/TESTING.md +25 -0
  13. data/cookbooks/apt/attributes/default.rb +4 -0
  14. data/cookbooks/apt/files/default/apt-proxy-v2.conf +50 -0
  15. data/cookbooks/apt/metadata.json +1 -0
  16. data/cookbooks/apt/metadata.rb +30 -0
  17. data/cookbooks/apt/providers/preference.rb +61 -0
  18. data/cookbooks/apt/providers/repository.rb +132 -0
  19. data/cookbooks/apt/recipes/cacher-client.rb +59 -0
  20. data/cookbooks/apt/recipes/cacher-ng.rb +40 -0
  21. data/cookbooks/apt/recipes/default.rb +68 -0
  22. data/cookbooks/apt/resources/preference.rb +30 -0
  23. data/cookbooks/apt/resources/repository.rb +40 -0
  24. data/cookbooks/apt/templates/debian-6.0/acng.conf.erb +174 -0
  25. data/cookbooks/apt/templates/default/01proxy.erb +2 -0
  26. data/cookbooks/apt/templates/default/acng.conf.erb +276 -0
  27. data/cookbooks/apt/templates/ubuntu-10.04/acng.conf.erb +270 -0
  28. data/cookbooks/btsync/README.md +2 -0
  29. data/cookbooks/btsync/metadata.rb +14 -0
  30. data/cookbooks/btsync/recipes/default.rb +13 -0
  31. data/cookbooks/build-essential/.gitignore +4 -0
  32. data/cookbooks/build-essential/.kitchen.yml +42 -0
  33. data/cookbooks/build-essential/Berksfile +3 -0
  34. data/cookbooks/build-essential/CHANGELOG.md +42 -0
  35. data/cookbooks/build-essential/CONTRIBUTING +29 -0
  36. data/cookbooks/build-essential/LICENSE +201 -0
  37. data/cookbooks/build-essential/README.md +139 -0
  38. data/cookbooks/build-essential/TESTING.md +25 -0
  39. data/cookbooks/build-essential/attributes/default.rb +33 -0
  40. data/cookbooks/build-essential/metadata.json +44 -0
  41. data/cookbooks/build-essential/metadata.rb +16 -0
  42. data/cookbooks/build-essential/recipes/debian.rb +45 -0
  43. data/cookbooks/build-essential/recipes/default.rb +24 -0
  44. data/cookbooks/build-essential/recipes/fedora.rb +36 -0
  45. data/cookbooks/build-essential/recipes/mac_os_x.rb +40 -0
  46. data/cookbooks/build-essential/recipes/rhel.rb +43 -0
  47. data/cookbooks/build-essential/recipes/smartos.rb +36 -0
  48. data/cookbooks/build-essential/recipes/solaris2.rb +42 -0
  49. data/cookbooks/build-essential/recipes/suse.rb +36 -0
  50. data/lib/btsync.rb +13 -13
  51. data/lib/btsync/communicator.rb +14 -4
  52. data/lib/btsync/directory.rb +12 -12
  53. data/lib/btsync/version.rb +1 -1
  54. data/spec/BtSync/bt_sync_spec.rb +13 -9
  55. data/spec/BtSync/directory_spec.rb +13 -20
  56. data/spec/fixtures/cassettes/{get-known-hosts.yml → Remove-Default-Host.yml} +5 -5
  57. data/spec/fixtures/cassettes/Setup-BtSync-Directory.yml +289 -12
  58. data/spec/fixtures/cassettes/Setup-BtSync.yml +252 -0
  59. data/spec/fixtures/cassettes/Setup-Directory-Settings.yml +8 -38
  60. data/spec/fixtures/cassettes/add-folder-list.yml +32 -35
  61. data/spec/fixtures/cassettes/add-folder.yml +10 -94
  62. data/spec/fixtures/cassettes/add-known-host.yml +6 -6
  63. data/spec/fixtures/cassettes/change_download_limit.yml +15 -42
  64. data/spec/fixtures/cassettes/change_listening_port.yml +15 -42
  65. data/spec/fixtures/cassettes/change_name.yml +13 -40
  66. data/spec/fixtures/cassettes/change_upload_limit.yml +15 -42
  67. data/spec/fixtures/cassettes/get-folders.yml +54 -24
  68. data/spec/fixtures/cassettes/get-os-type.yml +3 -30
  69. data/spec/fixtures/cassettes/get-peers.yml +7 -8
  70. data/spec/fixtures/cassettes/get-preferences.yml +24 -24
  71. data/spec/fixtures/cassettes/get-settings.yml +6 -33
  72. data/spec/fixtures/cassettes/get-version.yml +3 -30
  73. data/spec/fixtures/cassettes/remove-folder-list.yml +18 -20
  74. data/spec/fixtures/cassettes/remove-folder.yml +35 -38
  75. data/spec/fixtures/cassettes/remove-known-host.yml +6 -6
  76. data/spec/fixtures/cassettes/reset_device_name.yml +13 -13
  77. data/spec/fixtures/cassettes/reset_download_limit.yml +15 -15
  78. data/spec/fixtures/cassettes/reset_listening_port.yml +15 -15
  79. data/spec/fixtures/cassettes/reset_upload_limit.yml +15 -15
  80. data/spec/fixtures/cassettes/set-preferences-delete.yml +11 -11
  81. data/spec/fixtures/cassettes/set-preferences-dht.yml +11 -11
  82. data/spec/fixtures/cassettes/set-preferences-hosts.yml +11 -11
  83. data/spec/fixtures/cassettes/set-preferences-lan.yml +11 -11
  84. data/spec/fixtures/cassettes/set-preferences-relay.yml +11 -11
  85. data/spec/fixtures/cassettes/set-preferences-tracker.yml +11 -11
  86. data/spec/fixtures/cassettes/view-folders.yml +5 -5
  87. metadata +52 -4
@@ -0,0 +1,243 @@
1
+ Description
2
+ ===========
3
+
4
+ This cookbook includes recipes to execute apt-get update to ensure the
5
+ local APT package cache is up to date. There are recipes for managing
6
+ the apt-cacher-ng caching proxy and proxy clients. It also includes a
7
+ LWRP for managing APT repositories in /etc/apt/sources.list.d as well as
8
+ an LWRP for pinning packages via /etc/apt/preferences.d.
9
+
10
+ Requirements
11
+ ============
12
+
13
+ Version 2.0.0+ of this cookbook requires **Chef 11.0.0** or later.
14
+
15
+ If your Chef version is earlier than 11.0.0, use version 1.10.0 of
16
+ this cookbook.
17
+
18
+ See [COOK-2258](http://tickets.opscode.com/browse/COOK-2258) for more
19
+ information on this requirement.
20
+
21
+ Version 1.8.2 to 1.10.0 of this cookbook requires **Chef 10.16.4** or
22
+ later.
23
+
24
+ If your Chef version is earlier than 10.16.4, use version 1.7.0 of
25
+ this cookbook.
26
+
27
+ See [CHEF-3493](http://tickets.opscode.com/browse/CHEF-3493) and
28
+ [this code comment](http://bit.ly/VgvCgf) for more information on this
29
+ requirement.
30
+
31
+ ## Platform
32
+
33
+ * Debian
34
+ * Ubuntu
35
+
36
+ May work with or without modification on other Debian derivatives.
37
+
38
+ Recipes
39
+ =======
40
+
41
+ ## default
42
+
43
+ This recipe installs the `update-notifier-common` package to provide
44
+ the timestamp file used to only run `apt-get update` if the cache is
45
+ more than one day old.
46
+
47
+ This recipe should appear first in the run list of Debian or Ubuntu
48
+ nodes to ensure that the package cache is up to date before managing
49
+ any `package` resources with Chef.
50
+
51
+ This recipe also sets up a local cache directory for preseeding packages.
52
+
53
+ ## cacher-ng
54
+
55
+ Installs the `apt-cacher-ng` package and service so the system can
56
+ provide APT caching. You can check the usage report at
57
+ http://{hostname}:3142/acng-report.html. The `cacher-ng` recipe
58
+ includes the `cacher-client` recipe, so it helps seed itself.
59
+
60
+ ## cacher-client
61
+
62
+ Configures the node to use the `apt-cacher-ng` server as a client. If you
63
+ want to restrict your node to using the `apt-cacher-ng` server in your
64
+ Environment, set `['apt']['cacher-client']['restrict_environment']` to `true`.
65
+
66
+ To use a cacher server (or standard proxy server) not available via search
67
+ set the atttribute `['apt']['cacher-ipaddress']` and for a custom port
68
+ set `['apt']['cacher_port']`.
69
+
70
+ Resources/Providers
71
+ ===================
72
+
73
+ ## Managing repositories
74
+
75
+ This LWRP provides an easy way to manage additional APT repositories.
76
+ Adding a new repository will notify running the `execute[apt-get-update]`
77
+ resource immediately.
78
+
79
+ ### Actions
80
+
81
+ - :add: creates a repository file and builds the repository listing
82
+ - :remove: removes the repository file
83
+
84
+ ### Attribute Parameters
85
+
86
+ - repo_name: name attribute. The name of the channel to discover
87
+ - uri: the base of the Debian distribution
88
+ - distribution: this is usually your release's codename...ie something
89
+ like `karmic`, `lucid` or `maverick`
90
+ - components: package groupings..when it doubt use `main`
91
+ - arch: constrain package to a particular arch like `i386`, `amd64` or
92
+ even `armhf` or `powerpc`. Defaults to nil.
93
+ - deb_src: whether or not to add the repository as a source repo as
94
+ well - value can be `true` or `false`, default `false`.
95
+ - keyserver: the GPG keyserver where the key for the repo should be retrieved
96
+ - key: if a `keyserver` is provided, this is assumed to be the
97
+ fingerprint, otherwise it can be either the URI to the GPG key for
98
+ the repo, or a cookbook_file.
99
+ - key_proxy: if set, pass the specified proxy via `http-proxy=` to GPG.
100
+ - cookbook: if key should be a cookbook_file, specify a cookbook where
101
+ the key is located for files/default. Defaults to nil, so it will
102
+ use the cookbook where the resource is used.
103
+
104
+ ### Examples
105
+
106
+ # add the Zenoss repo
107
+ apt_repository "zenoss" do
108
+ uri "http://dev.zenoss.org/deb"
109
+ components ["main","stable"]
110
+ end
111
+
112
+ # add the Nginx PPA; grab key from keyserver
113
+ apt_repository "nginx-php" do
114
+ uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
115
+ distribution node['lsb']['codename']
116
+ components ["main"]
117
+ keyserver "keyserver.ubuntu.com"
118
+ key "C300EE8C"
119
+ end
120
+
121
+ # add the Nginx PPA; grab key from keyserver, also add source repo
122
+ apt_repository "nginx-php" do
123
+ uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
124
+ distribution node['lsb']['codename']
125
+ components ["main"]
126
+ keyserver "keyserver.ubuntu.com"
127
+ key "C300EE8C"
128
+ deb_src true
129
+ end
130
+
131
+ # add the Cloudkick Repo
132
+ apt_repository "cloudkick" do
133
+ uri "http://packages.cloudkick.com/ubuntu"
134
+ distribution node['lsb']['codename']
135
+ components ["main"]
136
+ key "http://packages.cloudkick.com/cloudkick.packages.key"
137
+ end
138
+
139
+ # add the Cloudkick Repo with the key downloaded in the cookbook
140
+ apt_repository "cloudkick" do
141
+ uri "http://packages.cloudkick.com/ubuntu"
142
+ distribution node['lsb']['codename']
143
+ components ["main"]
144
+ key "cloudkick.packages.key"
145
+ end
146
+
147
+ # add the Cloudera Repo of CDH4 packages for Ubuntu 12.04 on AMD64
148
+ apt_repository "cloudera" do
149
+ uri "http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh"
150
+ arch "amd64"
151
+ distribution "precise-cdh4"
152
+ components ["contrib"]
153
+ key "http://archive.cloudera.com/debian/archive.key"
154
+ end
155
+
156
+ # remove Zenoss repo
157
+ apt_repository "zenoss" do
158
+ action :remove
159
+ end
160
+
161
+ ## Pinning packages
162
+
163
+ This LWRP provides an easy way to pin packages in /etc/apt/preferences.d.
164
+ Although apt-pinning is quite helpful from time to time please note that Debian
165
+ does not encourage its use without thorough consideration.
166
+
167
+ Further information regarding apt-pinning is available via
168
+ http://wiki.debian.org/AptPreferences.
169
+
170
+ ### Actions
171
+
172
+ - :add: creates a preferences file under /etc/apt/preferences.d
173
+ - :remove: Removes the file, therefore unpin the package
174
+
175
+ ### Attribute Parameters
176
+
177
+ - package_name: name attribute. The name of the package
178
+ - glob: Pin by glob() expression or regexp surrounded by /.
179
+ - pin: The package version/repository to pin
180
+ - pin_priority: The pinning priority aka "the highest package version wins"
181
+
182
+ ### Examples
183
+
184
+ # Pin libmysqlclient16 to version 5.1.49-3
185
+ apt_preference "libmysqlclient16" do
186
+ pin "version 5.1.49-3"
187
+ pin_priority "700"
188
+ end
189
+
190
+ # Unpin libmysqlclient16
191
+ apt_preference "libmysqlclient16" do
192
+ action :remove
193
+ end
194
+
195
+ # Pin all packages from dotdeb.org
196
+ apt_preference "dotdeb" do
197
+ glob "*"
198
+ pin "origin packages.dotdeb.org "
199
+ pin_priority "700"
200
+ end
201
+
202
+ Usage
203
+ =====
204
+
205
+ Put `recipe[apt]` first in the run list. If you have other recipes
206
+ that you want to use to configure how apt behaves, like new sources,
207
+ notify the execute resource to run, e.g.:
208
+
209
+ template "/etc/apt/sources.list.d/my_apt_sources.list" do
210
+ notifies :run, resources(:execute => "apt-get update"), :immediately
211
+ end
212
+
213
+ The above will run during execution phase since it is a normal
214
+ template resource, and should appear before other package resources
215
+ that need the sources in the template.
216
+
217
+ Put `recipe[apt::cacher-ng]` in the run_list for a server to provide
218
+ APT caching and add `recipe[apt::cacher-client]` on the rest of the
219
+ Debian-based nodes to take advantage of the caching server.
220
+
221
+ If you want to cleanup unused packages, there is also the `apt-get autoclean`
222
+ and `apt-get autoremove` resources provided for automated cleanup.
223
+
224
+ License and Author
225
+ ==================
226
+
227
+ Author:: Joshua Timberman (<joshua@opscode.com>)
228
+ Author:: Matt Ray (<matt@opscode.com>)
229
+ Author:: Seth Chisamore (<schisamo@opscode.com>)
230
+
231
+ Copyright 2009-2013 Opscode, Inc.
232
+
233
+ Licensed under the Apache License, Version 2.0 (the "License");
234
+ you may not use this file except in compliance with the License.
235
+ You may obtain a copy of the License at
236
+
237
+ http://www.apache.org/licenses/LICENSE-2.0
238
+
239
+ Unless required by applicable law or agreed to in writing, software
240
+ distributed under the License is distributed on an "AS IS" BASIS,
241
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
242
+ See the License for the specific language governing permissions and
243
+ limitations under the License.
@@ -0,0 +1,25 @@
1
+ This cookbook includes support for running tests via Test Kitchen (1.0). This has some requirements.
2
+
3
+ 1. You must be using the Git repository, rather than the downloaded cookbook from the Chef Community Site.
4
+ 2. You must have Vagrant 1.1 installed.
5
+ 3. You must have a "sane" Ruby 1.9.3 environment.
6
+
7
+ Once the above requirements are met, install the additional requirements:
8
+
9
+ Install the berkshelf plugin for vagrant, and berkshelf to your local Ruby environment.
10
+
11
+ vagrant plugin install vagrant-berkshelf
12
+ gem install berkshelf
13
+
14
+ Install Test Kitchen 1.0 (unreleased yet, use the alpha / prerelease version).
15
+
16
+ gem install test-kitchen --pre
17
+
18
+ Install the Vagrant driver for Test Kitchen.
19
+
20
+ gem install kitchen-vagrant
21
+
22
+ Once the above are installed, you should be able to run Test Kitchen:
23
+
24
+ kitchen list
25
+ kitchen test
@@ -0,0 +1,4 @@
1
+ default['apt']['cacher-client']['restrict_environment'] = false
2
+ default['apt']['cacher_port'] = 3142
3
+ default['apt']['key_proxy'] = ''
4
+ default['apt']['caching_server'] = false
@@ -0,0 +1,50 @@
1
+ [DEFAULT]
2
+ ;; All times are in seconds, but you can add a suffix
3
+ ;; for minutes(m), hours(h) or days(d)
4
+
5
+ ;; commented out address so apt-proxy will listen on all IPs
6
+ ;; address = 127.0.0.1
7
+ port = 9999
8
+ cache_dir = /var/cache/apt-proxy
9
+
10
+ ;; Control files (Packages/Sources/Contents) refresh rate
11
+ min_refresh_delay = 1s
12
+ complete_clientless_downloads = 1
13
+
14
+ ;; Debugging settings.
15
+ debug = all:4 db:0
16
+
17
+ time = 30
18
+ passive_ftp = on
19
+
20
+ ;;--------------------------------------------------------------
21
+ ;; Cache housekeeping
22
+
23
+ cleanup_freq = 1d
24
+ max_age = 120d
25
+ max_versions = 3
26
+
27
+ ;;---------------------------------------------------------------
28
+ ;; Backend servers
29
+ ;;
30
+ ;; Place each server in its own [section]
31
+
32
+ [ubuntu]
33
+ ; Ubuntu archive
34
+ backends =
35
+ http://us.archive.ubuntu.com/ubuntu
36
+
37
+ [ubuntu-security]
38
+ ; Ubuntu security updates
39
+ backends = http://security.ubuntu.com/ubuntu
40
+
41
+ [debian]
42
+ ;; Backend servers, in order of preference
43
+ backends =
44
+ http://debian.osuosl.org/debian/
45
+
46
+ [security]
47
+ ;; Debian security archive
48
+ backends =
49
+ http://security.debian.org/debian-security
50
+ http://ftp2.de.debian.org/debian-security
@@ -0,0 +1 @@
1
+ {"name":"apt","description":"Configures apt and apt services and LWRPs for managing apt repositories and preferences","long_description":"Description\n===========\n\nThis cookbook includes recipes to execute apt-get update to ensure the\nlocal APT package cache is up to date. There are recipes for managing\nthe apt-cacher-ng caching proxy and proxy clients. It also includes a\nLWRP for managing APT repositories in /etc/apt/sources.list.d as well as\nan LWRP for pinning packages via /etc/apt/preferences.d.\n\nRequirements\n============\n\nVersion 2.0.0+ of this cookbook requires **Chef 11.0.0** or later.\n\nIf your Chef version is earlier than 11.0.0, use version 1.10.0 of\nthis cookbook.\n\nSee [COOK-2258](http://tickets.opscode.com/browse/COOK-2258) for more\ninformation on this requirement.\n\nVersion 1.8.2 to 1.10.0 of this cookbook requires **Chef 10.16.4** or\nlater.\n\nIf your Chef version is earlier than 10.16.4, use version 1.7.0 of\nthis cookbook.\n\nSee [CHEF-3493](http://tickets.opscode.com/browse/CHEF-3493) and\n[this code comment](http://bit.ly/VgvCgf) for more information on this\nrequirement.\n\n## Platform\n\n* Debian\n* Ubuntu\n\nMay work with or without modification on other Debian derivatives.\n\nRecipes\n=======\n\n## default\n\nThis recipe installs the `update-notifier-common` package to provide\nthe timestamp file used to only run `apt-get update` if the cache is\nmore than one day old.\n\nThis recipe should appear first in the run list of Debian or Ubuntu\nnodes to ensure that the package cache is up to date before managing\nany `package` resources with Chef.\n\nThis recipe also sets up a local cache directory for preseeding packages.\n\n## cacher-ng\n\nInstalls the `apt-cacher-ng` package and service so the system can\nprovide APT caching. You can check the usage report at\nhttp://{hostname}:3142/acng-report.html. The `cacher-ng` recipe\nincludes the `cacher-client` recipe, so it helps seed itself.\n\n## cacher-client\n\nConfigures the node to use the `apt-cacher-ng` server as a client. If you\nwant to restrict your node to using the `apt-cacher-ng` server in your\nEnvironment, set `['apt']['cacher-client']['restrict_environment']` to `true`.\n\nTo use a cacher server (or standard proxy server) not available via search\nset the atttribute `['apt']['cacher-ipaddress']` and for a custom port\nset `['apt']['cacher_port']`.\n\nResources/Providers\n===================\n\n## Managing repositories\n\nThis LWRP provides an easy way to manage additional APT repositories.\nAdding a new repository will notify running the `execute[apt-get-update]`\nresource immediately.\n\n### Actions\n\n- :add: creates a repository file and builds the repository listing\n- :remove: removes the repository file\n\n### Attribute Parameters\n\n- repo_name: name attribute. The name of the channel to discover\n- uri: the base of the Debian distribution\n- distribution: this is usually your release's codename...ie something\n like `karmic`, `lucid` or `maverick`\n- components: package groupings..when it doubt use `main`\n- arch: constrain package to a particular arch like `i386`, `amd64` or\n even `armhf` or `powerpc`. Defaults to nil.\n- deb_src: whether or not to add the repository as a source repo as\n well - value can be `true` or `false`, default `false`.\n- keyserver: the GPG keyserver where the key for the repo should be retrieved\n- key: if a `keyserver` is provided, this is assumed to be the\n fingerprint, otherwise it can be either the URI to the GPG key for\n the repo, or a cookbook_file.\n- key_proxy: if set, pass the specified proxy via `http-proxy=` to GPG.\n- cookbook: if key should be a cookbook_file, specify a cookbook where\n the key is located for files/default. Defaults to nil, so it will\n use the cookbook where the resource is used.\n\n### Examples\n\n # add the Zenoss repo\n apt_repository \"zenoss\" do\n uri \"http://dev.zenoss.org/deb\"\n components [\"main\",\"stable\"]\n end\n\n # add the Nginx PPA; grab key from keyserver\n apt_repository \"nginx-php\" do\n uri \"http://ppa.launchpad.net/nginx/php5/ubuntu\"\n distribution node['lsb']['codename']\n components [\"main\"]\n keyserver \"keyserver.ubuntu.com\"\n key \"C300EE8C\"\n end\n\n # add the Nginx PPA; grab key from keyserver, also add source repo\n apt_repository \"nginx-php\" do\n uri \"http://ppa.launchpad.net/nginx/php5/ubuntu\"\n distribution node['lsb']['codename']\n components [\"main\"]\n keyserver \"keyserver.ubuntu.com\"\n key \"C300EE8C\"\n deb_src true\n end\n\n # add the Cloudkick Repo\n apt_repository \"cloudkick\" do\n uri \"http://packages.cloudkick.com/ubuntu\"\n distribution node['lsb']['codename']\n components [\"main\"]\n key \"http://packages.cloudkick.com/cloudkick.packages.key\"\n end\n\n # add the Cloudkick Repo with the key downloaded in the cookbook\n apt_repository \"cloudkick\" do\n uri \"http://packages.cloudkick.com/ubuntu\"\n distribution node['lsb']['codename']\n components [\"main\"]\n key \"cloudkick.packages.key\"\n end\n\n # add the Cloudera Repo of CDH4 packages for Ubuntu 12.04 on AMD64\n apt_repository \"cloudera\" do\n uri \"http://archive.cloudera.com/cdh4/ubuntu/precise/amd64/cdh\"\n arch \"amd64\"\n distribution \"precise-cdh4\"\n components [\"contrib\"]\n key \"http://archive.cloudera.com/debian/archive.key\"\n end\n\n # remove Zenoss repo\n apt_repository \"zenoss\" do\n action :remove\n end\n\n## Pinning packages\n\nThis LWRP provides an easy way to pin packages in /etc/apt/preferences.d.\nAlthough apt-pinning is quite helpful from time to time please note that Debian\ndoes not encourage its use without thorough consideration.\n\nFurther information regarding apt-pinning is available via\nhttp://wiki.debian.org/AptPreferences.\n\n### Actions\n\n- :add: creates a preferences file under /etc/apt/preferences.d\n- :remove: Removes the file, therefore unpin the package\n\n### Attribute Parameters\n\n- package_name: name attribute. The name of the package\n- glob: Pin by glob() expression or regexp surrounded by /.\n- pin: The package version/repository to pin\n- pin_priority: The pinning priority aka \"the highest package version wins\"\n\n### Examples\n\n # Pin libmysqlclient16 to version 5.1.49-3\n apt_preference \"libmysqlclient16\" do\n pin \"version 5.1.49-3\"\n pin_priority \"700\"\n end\n\n # Unpin libmysqlclient16\n apt_preference \"libmysqlclient16\" do\n action :remove\n end\n\n # Pin all packages from dotdeb.org\n apt_preference \"dotdeb\" do\n glob \"*\"\n pin \"origin packages.dotdeb.org \"\n pin_priority \"700\"\n end\n\nUsage\n=====\n\nPut `recipe[apt]` first in the run list. If you have other recipes\nthat you want to use to configure how apt behaves, like new sources,\nnotify the execute resource to run, e.g.:\n\n template \"/etc/apt/sources.list.d/my_apt_sources.list\" do\n notifies :run, resources(:execute => \"apt-get update\"), :immediately\n end\n\nThe above will run during execution phase since it is a normal\ntemplate resource, and should appear before other package resources\nthat need the sources in the template.\n\nPut `recipe[apt::cacher-ng]` in the run_list for a server to provide\nAPT caching and add `recipe[apt::cacher-client]` on the rest of the\nDebian-based nodes to take advantage of the caching server.\n\nIf you want to cleanup unused packages, there is also the `apt-get autoclean`\nand `apt-get autoremove` resources provided for automated cleanup.\n\nLicense and Author\n==================\n\nAuthor:: Joshua Timberman (<joshua@opscode.com>)\nAuthor:: Matt Ray (<matt@opscode.com>)\nAuthor:: Seth Chisamore (<schisamo@opscode.com>)\n\nCopyright 2009-2013 Opscode, Inc.\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","maintainer":"Opscode, Inc.","maintainer_email":"cookbooks@opscode.com","license":"Apache 2.0","platforms":{"ubuntu":">= 0.0.0","debian":">= 0.0.0"},"dependencies":{},"recommendations":{},"suggestions":{},"conflicting":{},"providing":{},"replacing":{},"attributes":{"apt/cacher-client/restrict_environment":{"description":"Whether to restrict the search for the caching server to the same environment as this node","default":"false","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apt/cacher_port":{"description":"Default listen port for the caching server","default":"3142","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apt/key_proxy":{"description":"Passed as the proxy passed to GPG for the apt_repository resource","default":"","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]},"apt/caching_server":{"description":"Set this to true if the node is a caching server","default":"false","choice":[],"calculated":false,"type":"string","required":"optional","recipes":[]}},"groupings":{},"recipes":{"apt":"Runs apt-get update during compile phase and sets up preseed directories","apt::cacher-ng":"Set up an apt-cacher-ng caching proxy","apt::cacher-client":"Client for the apt::cacher-ng caching proxy"},"version":"2.0.0"}
@@ -0,0 +1,30 @@
1
+ name "apt"
2
+ maintainer "Opscode, Inc."
3
+ maintainer_email "cookbooks@opscode.com"
4
+ license "Apache 2.0"
5
+ description "Configures apt and apt services and LWRPs for managing apt repositories and preferences"
6
+ long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
7
+ version "2.0.0"
8
+ recipe "apt", "Runs apt-get update during compile phase and sets up preseed directories"
9
+ recipe "apt::cacher-ng", "Set up an apt-cacher-ng caching proxy"
10
+ recipe "apt::cacher-client", "Client for the apt::cacher-ng caching proxy"
11
+
12
+ %w{ ubuntu debian }.each do |os|
13
+ supports os
14
+ end
15
+
16
+ attribute "apt/cacher-client/restrict_environment",
17
+ :description => "Whether to restrict the search for the caching server to the same environment as this node",
18
+ :default => "false"
19
+
20
+ attribute "apt/cacher_port",
21
+ :description => "Default listen port for the caching server",
22
+ :default => "3142"
23
+
24
+ attribute "apt/key_proxy",
25
+ :description => "Passed as the proxy passed to GPG for the apt_repository resource",
26
+ :default => ""
27
+
28
+ attribute "apt/caching_server",
29
+ :description => "Set this to true if the node is a caching server",
30
+ :default => "false"
@@ -0,0 +1,61 @@
1
+ #
2
+ # Cookbook Name:: apt
3
+ # Provider:: preference
4
+ #
5
+ # Copyright 2010-2011, Opscode, 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
+ # Build preferences.d file contents
21
+ def build_pref(package_name, pin, pin_priority)
22
+ preference_content = "Package: #{package_name}\nPin: #{pin}\nPin-Priority: #{pin_priority}\n"
23
+ end
24
+
25
+ action :add do
26
+ new_resource.updated_by_last_action(false)
27
+
28
+ preference = build_pref(new_resource.glob || new_resource.package_name,
29
+ new_resource.pin,
30
+ new_resource.pin_priority)
31
+
32
+ preference_dir = directory "/etc/apt/preferences.d" do
33
+ owner "root"
34
+ group "root"
35
+ mode 00755
36
+ recursive true
37
+ action :nothing
38
+ end
39
+
40
+ preference_file = file "/etc/apt/preferences.d/#{new_resource.name}" do
41
+ owner "root"
42
+ group "root"
43
+ mode 00644
44
+ content preference
45
+ action :nothing
46
+ end
47
+
48
+ preference_dir.run_action(:create)
49
+ # write out the preference file, replace it if it already exists
50
+ preference_file.run_action(:create)
51
+ end
52
+
53
+ action :remove do
54
+ if ::File.exists?("/etc/apt/preferences.d/#{new_resource.name}")
55
+ Chef::Log.info "Un-pinning #{new_resource.name} from /etc/apt/preferences.d/"
56
+ file "/etc/apt/preferences.d/#{new_resource.name}" do
57
+ action :delete
58
+ end
59
+ new_resource.updated_by_last_action(true)
60
+ end
61
+ end
@@ -0,0 +1,132 @@
1
+ #
2
+ # Cookbook Name:: apt
3
+ # Provider:: repository
4
+ #
5
+ # Copyright 2010-2011, Opscode, 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
+ use_inline_resources
21
+
22
+ def whyrun_supported?
23
+ true
24
+ end
25
+
26
+ # install apt key from keyserver
27
+ def install_key_from_keyserver(key, keyserver)
28
+ execute "install-key #{key}" do
29
+ if !node['apt']['key_proxy'].empty?
30
+ command "apt-key adv --keyserver-options http-proxy=#{node['apt']['key_proxy']} --keyserver #{keyserver} --recv #{key}"
31
+ else
32
+ command "apt-key adv --keyserver #{keyserver} --recv #{key}"
33
+ end
34
+ action :run
35
+ not_if "apt-key list | grep #{key}"
36
+ end
37
+ end
38
+
39
+ # run command and extract gpg ids
40
+ def extract_gpg_ids_from_cmd(cmd)
41
+ so = Mixlib::ShellOut.new(cmd)
42
+ so.run_command
43
+ so.stdout.split(/\n/).collect do |t|
44
+ if z = t.match(/^pub\s+\d+\w\/([0-9A-F]{8})/)
45
+ z[1]
46
+ end
47
+ end.compact
48
+ end
49
+
50
+ # install apt key from URI
51
+ def install_key_from_uri(uri)
52
+ key_name = uri.split(/\//).last
53
+ cached_keyfile = "#{Chef::Config[:file_cache_path]}/#{key_name}"
54
+ if new_resource.key =~ /http/
55
+ remote_file cached_keyfile do
56
+ source new_resource.key
57
+ mode 00644
58
+ action :create
59
+ end
60
+ else
61
+ cookbook_file cached_keyfile do
62
+ source new_resource.key
63
+ cookbook new_resource.cookbook
64
+ mode 00644
65
+ action :create
66
+ end
67
+ end
68
+
69
+ execute "install-key #{key_name}" do
70
+ command "apt-key add #{cached_keyfile}"
71
+ action :run
72
+ not_if do
73
+ installed_ids = extract_gpg_ids_from_cmd("apt-key finger")
74
+ key_ids = extract_gpg_ids_from_cmd("gpg --with-fingerprint #{cached_keyfile}")
75
+ (installed_ids & key_ids).sort == key_ids.sort
76
+ end
77
+ end
78
+ end
79
+
80
+ # build repo file contents
81
+ def build_repo(uri, distribution, components, arch, add_deb_src)
82
+ components = components.join(' ') if components.respond_to?(:join)
83
+ repo_info = "#{uri} #{distribution} #{components}\n"
84
+ repo_info = "[arch=#{arch}] #{repo_info}" if arch
85
+ repo = "deb #{repo_info}"
86
+ repo << "deb-src #{repo_info}" if add_deb_src
87
+ repo
88
+ end
89
+
90
+ action :add do
91
+ # add key
92
+ if new_resource.keyserver && new_resource.key
93
+ install_key_from_keyserver(new_resource.key, new_resource.keyserver)
94
+ elsif new_resource.key
95
+ install_key_from_uri(new_resource.key)
96
+ end
97
+
98
+ file "/var/lib/apt/periodic/update-success-stamp" do
99
+ action :nothing
100
+ end
101
+
102
+ execute "apt-get update" do
103
+ ignore_failure true
104
+ action :nothing
105
+ end
106
+
107
+ # build repo file
108
+ repository = build_repo(new_resource.uri,
109
+ new_resource.distribution,
110
+ new_resource.components,
111
+ new_resource.arch,
112
+ new_resource.deb_src)
113
+
114
+ file "/etc/apt/sources.list.d/#{new_resource.name}.list" do
115
+ owner "root"
116
+ group "root"
117
+ mode 00644
118
+ content repository
119
+ action :create
120
+ notifies :delete, "file[/var/lib/apt/periodic/update-success-stamp]", :immediately
121
+ notifies :run, "execute[apt-get update]", :immediately if new_resource.cache_rebuild
122
+ end
123
+ end
124
+
125
+ action :remove do
126
+ if ::File.exists?("/etc/apt/sources.list.d/#{new_resource.name}.list")
127
+ Chef::Log.info "Removing #{new_resource.name} repository from /etc/apt/sources.list.d/"
128
+ file "/etc/apt/sources.list.d/#{new_resource.name}.list" do
129
+ action :delete
130
+ end
131
+ end
132
+ end