etch 3.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,84 @@
1
+ # This class stores numbers with multiple decimal points, a format
2
+ # commonly used for version numbers. For example '2.5.1'.
3
+
4
+ class Version
5
+ include Comparable
6
+
7
+ def initialize(version)
8
+ @version = version.to_s
9
+ end
10
+
11
+ def to_s
12
+ @version
13
+ end
14
+
15
+ def <=>(other)
16
+ ourfields = @version.split('.')
17
+ otherfields = other.to_s.split('.')
18
+ # Convert anything like '.5' to '0.5'
19
+ # '.5'.split('.') returns ['', '5']
20
+ [ourfields, otherfields].each do |fields|
21
+ if fields[0] == ''
22
+ fields[0] = '0'
23
+ end
24
+ end
25
+
26
+ convert_and_split!(ourfields, otherfields)
27
+
28
+ # Array conveniently implements <=>
29
+ ourfields <=> otherfields
30
+ end
31
+
32
+ # Private methods below
33
+ private
34
+
35
+
36
+ # Loops over two arrays in parallel. If the entry at a given
37
+ # position in both arrays is numeric it is converted from a string to
38
+ # a number, or if either entry is a mixture of numeric and
39
+ # non-numeric characters then both are split into an array consisting
40
+ # of the numeric and non-numeric components.
41
+ def convert_and_split!(fields0, fields1)
42
+ # Pad the shorter of two arrays with zeros so that both arrays are
43
+ # the same length. This ensures that '1' == '1.0', etc.
44
+ if fields0.length != fields1.length
45
+ larger = [fields0.length, fields1.length].max
46
+ # For the longer number this depends on something like (3...1).each
47
+ # doing nothing. That currently works, but is not documented behavior.
48
+ (fields0.length...larger).each { fields0 << '0' }
49
+ (fields1.length...larger).each { fields1 << '0' }
50
+ end
51
+
52
+ # Squish both arrays together
53
+ bothfields = []
54
+ (0...fields0.length).each { |i| bothfields << [fields0[i], fields1[i]] }
55
+
56
+ bothfields.map! do |fields|
57
+ # Convert fields of all digits from string to number to get a numeric
58
+ # rather than string comparison. This ensures that 5.9 < 5.10
59
+ # Unless either start with a zero, as 1.1 != 1.01, but converting
60
+ # 01 to a number turns it into 1.
61
+ if fields[0] =~ /^[1-9]\d*$/ && fields[1] =~ /^[1-9]\d*$/
62
+ fields.map! { |f| f.to_i }
63
+ else
64
+ # If the field is a mixture of numeric and non-numeric
65
+ # characters then split it up into an array of those components
66
+ # so that we compare "naturally". I.e. 9a < 10a
67
+ # This is similar to the method used by most "natural sort"
68
+ # algorithms that aim to sort file9 above file10.
69
+ if fields[0] =~ /\d\D/ || fields[0] =~ /\D\d/ ||
70
+ fields[1] =~ /\d\D/ || fields[1] =~ /\D\d/
71
+ fields.map! { |f| f.scan(/\d+|\D+/) }
72
+ # Pass back through this method to convert the numeric
73
+ # entries to numbers
74
+ convert_and_split!(fields[0], fields[1])
75
+ end
76
+ end
77
+ fields
78
+ end
79
+ # Unsquish back to separate arrays
80
+ fields0.clear
81
+ fields1.clear
82
+ bothfields.each { |fields| fields0 << fields[0]; fields1 << fields[1] }
83
+ end
84
+ end
data/man/man8/etch.8 ADDED
@@ -0,0 +1,204 @@
1
+ .TH etch 8 "October 2009"
2
+
3
+ .SH NAME
4
+
5
+ .B etch
6
+ \- Configuration management for Unix systems
7
+
8
+ .SH SYNOPSIS
9
+
10
+ .B etch
11
+ .RB [ --generate-all ]
12
+ .RB [ --dry-run | \-n ]
13
+ .RB [ --damp-run ]
14
+ .RB [ --interactive ]
15
+ .RB [ --full-file ]
16
+ .RB [ --filename-only ]
17
+ .RB [ --disable-force ]
18
+ .RB [ --lock-force ]
19
+ .RB [ --debug ]
20
+ .RB [ --local
21
+ .IR DIR ]
22
+ .RB [ --server
23
+ .IR SERVER ]
24
+ .RB [ --tag
25
+ .IR TAG ]
26
+ .RB [ --test-base
27
+ .IR TESTDIR ]
28
+ .RB [ --key
29
+ .IR PRIVATE_KEY ]
30
+ .RB [ --version ]
31
+ .RB [ --help | \-h ]
32
+ .RI [ "file ..." ]
33
+
34
+ .SH DESCRIPTION
35
+
36
+ Etch is a tool for managing the configuration of Unix systems. Etch can manage
37
+ text or binary files, links and directories. The contents of files can be
38
+ supplied from static files or generated on the fly by scripts or templates.
39
+ Permissions and ownership as well as any pre or post commands to run when
40
+ updating the file are configured in simple XML files.
41
+
42
+ .SH OPTIONS
43
+ .TP
44
+ .B --generate-all
45
+ Request that the server generate and send over all available configuration.
46
+ Can be used instead of specifying specific files to request.
47
+ .TP
48
+ .B --dry-run | \-n
49
+ .B etch
50
+ will not make any changes to the system. Contents of generated config
51
+ files are displayed instead of being written to disk.
52
+ .TP
53
+ .B --damp-run
54
+ Perform an almost dry run, except that 'setup' entries for files are run.
55
+ Normally all setup/pre/post entries are ignored for a dry run. However, files
56
+ with setup entries will generally fail to build properly if the setup entry
57
+ hasn't been run. This allows you to preview the full and correct
58
+ configuration while making minimal changes to the system.
59
+ .TP
60
+ .B --interactive
61
+ Causes
62
+ .B etch
63
+ to pause before making each change and prompt the user for
64
+ confirmation.
65
+ .TP
66
+ .B --full-file
67
+ Normally
68
+ .B etch
69
+ will print a diff to show what changes it will make to a file. This will cause
70
+ .B etch
71
+ to display the full new file contents instead. Useful if the diff is hard to
72
+ read for a particular file.
73
+ .TP
74
+ .B --filename-only
75
+ Normally
76
+ .B etch
77
+ will print a diff to show what changes it will make to a file. This will cause
78
+ etch to display only the name of file to be changed. Useful on the initial
79
+ run during your system build process or other times when you want less output.
80
+ .TP
81
+ .B --disable-force
82
+ Ignore the disable_etch file. Use with caution. Typically used with
83
+ --interactive or --dry-run to evaluate what would happen if etch were
84
+ re-enabled.
85
+ .TP
86
+ .B --lock-force
87
+ .B Etch
88
+ does per-file internal locking as it runs to prevent problems with
89
+ simultaneous instances of the
90
+ .B etch
91
+ client stepping on each other.
92
+ .B Etch
93
+ automatically cleans up lockfiles over two hours old on the assumption that
94
+ any lockfiles that old were left behind by a previous instance that failed for
95
+ some (hopefully transient) reason. In a large environment you don't want to
96
+ have to run around manually cleaning up lockfiles every time a full disk or
97
+ unavailable package server or other transient failure causes
98
+ .B etch
99
+ to fail
100
+ temporarily. This option forces the removal of any existing lockfiles no
101
+ matter how old. Useful if a buggy configuration or local environmental issue
102
+ caused
103
+ .B etch
104
+ to abort and you want to immediately retry.
105
+ .TP
106
+ .BI --local " DIR"
107
+ Read configuration from a local directory rather than requesting it from
108
+ a server.
109
+ .TP
110
+ .BI --server " SERVER"
111
+ Point
112
+ .B etch
113
+ to an alternate server, specified in the form of a URL.
114
+ .TP
115
+ .BI --tag " TAG"
116
+ Request a specific repository tag from the server. Tags are directory paths
117
+ relative to /etc/etchserver by default. Thus examples might be
118
+ .I trunk
119
+ for /etc/etchserver/trunk, or
120
+ .I branches/mytestbranch
121
+ for /etc/etchserver/branches/mytestbranch.
122
+ .TP
123
+ .BI --key " PRIVATE_KEY"
124
+ Use an alternate SSH private key file for signing messages that are sent to
125
+ the server.
126
+ .TP
127
+ .BI --test-base " TESTDIR"
128
+ Use an alternate local working directory instead of /var/etch. Generally only
129
+ used for allowing the etch test suite to be run as a non-root user.
130
+ .TP
131
+ .B --debug
132
+ Print lots of messages about what etch is doing.
133
+ .TP
134
+ .B --version
135
+ Show the etch client version and exit.
136
+ .TP
137
+ .B --help | \-h
138
+ Display the etch usage message and exit.
139
+
140
+ .SH FILES
141
+
142
+ .TP
143
+ .B /etc/etch/ca.pem
144
+ SSL certificate(s) needed to verify the
145
+ .B etch
146
+ server's identity. If
147
+ .B etch
148
+ is using a server with an https:// URL and if this file exists then
149
+ .B etch
150
+ will not proceed if the server's SSL certificate can't be verified against the
151
+ certs in this file.
152
+ .TP
153
+ .B /etc/etch/dhparams
154
+ The Diffie-Hellman parameters used as part of the SSL connection process. Etch
155
+ comes with a set and there's no need to generate your own, but a new set can
156
+ be generated via "openssl dhparam" if desired. If this file is not present the
157
+ Ruby SSL library will warn that it is using its internal default set of
158
+ parameters.
159
+ .TP
160
+ .B /var/etch/disable_etch
161
+ If this file is present
162
+ .B etch
163
+ will do nothing other than send a message to the
164
+ .B etch
165
+ server that it is disabled. Any text in this file will be included in
166
+ that message to the server and displayed locally. If you are disabling
167
+ .B etch
168
+ always put a note in this file indicating who you are, today's date, and why
169
+ you are disabling
170
+ .B etch
171
+ so that fellow administrators won't have to guess later why
172
+ .B etch
173
+ was disabled. Re-enabling
174
+ .B etch
175
+ after it has been disabled for a long
176
+ time can be time-consuming, as the person doing so must review any potential
177
+ changes that have been queued up and ensure that they won't interfere with the
178
+ current usage of the system. As such be thoughtful about whether disabling
179
+ .B etch
180
+ is necessary, and re-enable it as soon as possible.
181
+ .TP
182
+ .B /var/etch/history
183
+ A revision history of each
184
+ .B etch
185
+ managed file, stored using the RCS revision control system.
186
+ .TP
187
+ .B /var/etch/locks
188
+ Directory used by the
189
+ .B etch
190
+ internal locking mechanism. See the --lock-force option for more details.
191
+ .TP
192
+ .B /var/etch/orig
193
+ A backup of the original contents of each
194
+ .B etch
195
+ managed file as it was before etch first touched it.
196
+
197
+ .SH DIAGNOSTICS
198
+
199
+ See the --debug option and the server logs.
200
+
201
+ .SH AUTHOR
202
+
203
+ .B Etch
204
+ is designed and maintained by Jason Heiss
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: etch
3
+ version: !ruby/object:Gem::Version
4
+ version: "3.12"
5
+ platform: ruby
6
+ authors:
7
+ - Jason Heiss
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-14 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: facter
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description:
26
+ email: etch-users@lists.sourceforge.net
27
+ executables:
28
+ - etch
29
+ - etch_to_trunk
30
+ - etch_cron_wrapper
31
+ extensions: []
32
+
33
+ extra_rdoc_files: []
34
+
35
+ files:
36
+ - bin
37
+ - bin/etch
38
+ - bin/etch_cron_wrapper
39
+ - bin/etch_to_trunk
40
+ - etc
41
+ - etc/ca.pem
42
+ - etc/dhparams
43
+ - lib
44
+ - lib/etch.rb
45
+ - lib/etchclient.rb
46
+ - lib/versiontype.rb
47
+ - man
48
+ - man/man8
49
+ - man/man8/etch.8
50
+ - Rakefile
51
+ has_rdoc: false
52
+ homepage: http://etch.sourceforge.net
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: "1.8"
63
+ version:
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ requirements: []
71
+
72
+ rubyforge_project:
73
+ rubygems_version: 1.3.1
74
+ signing_key:
75
+ specification_version: 2
76
+ summary: Etch system configuration management client
77
+ test_files: []
78
+