tpkg 2.3.3 → 2.3.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE +20 -0
  5. data/Portfile +39 -0
  6. data/Portfile.template +39 -0
  7. data/README.md +43 -0
  8. data/Rakefile +468 -18
  9. data/bin/gem2tpkg +2 -2
  10. data/bin/tpkg +18 -13
  11. data/bin/tpkg_uploader +132 -0
  12. data/ca.pem +1 -0
  13. data/control +7 -0
  14. data/depend +3 -0
  15. data/externals-etch/authorized_keys +40 -0
  16. data/externals-etch/group +9 -0
  17. data/externals-etch/iptables +38 -0
  18. data/externals-etch/limits +30 -0
  19. data/externals-etch/nfs +30 -0
  20. data/externals-etch/sudo +30 -0
  21. data/externals-etch/supplemental_groups +8 -0
  22. data/externals-etch/sysctl +30 -0
  23. data/externals-etch/user +41 -0
  24. data/externals/group +39 -0
  25. data/externals/supplemental_groups +48 -0
  26. data/externals/user +39 -0
  27. data/lib/tpkg.rb +260 -991
  28. data/lib/tpkg/os.rb +164 -0
  29. data/lib/tpkg/os/debian.rb +159 -0
  30. data/lib/tpkg/os/freebsd.rb +113 -0
  31. data/lib/tpkg/os/macosx.rb +113 -0
  32. data/lib/tpkg/os/redhat.rb +173 -0
  33. data/lib/tpkg/os/solaris.rb +101 -0
  34. data/lib/tpkg/os/windows.rb +26 -0
  35. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify.rb +67 -0
  36. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/errors.rb +127 -0
  37. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/kwalify.schema.yaml +58 -0
  38. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/main.rb +442 -0
  39. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/messages.rb +173 -0
  40. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/meta-validator.rb +275 -0
  41. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/parser/base.rb +127 -0
  42. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/parser/yaml.rb +841 -0
  43. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/rule.rb +559 -0
  44. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-java.eruby +222 -0
  45. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-php.eruby +104 -0
  46. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/templates/genclass-ruby.eruby +113 -0
  47. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/types.rb +156 -0
  48. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util.rb +158 -0
  49. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/assert-text-equal.rb +46 -0
  50. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/hash-interface.rb +18 -0
  51. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/hashlike.rb +51 -0
  52. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/option-parser.rb +220 -0
  53. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/ordered-hash.rb +57 -0
  54. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/util/testcase-helper.rb +112 -0
  55. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/validator.rb +282 -0
  56. data/lib/tpkg/thirdparty/kwalify-0.7.2/lib/kwalify/yaml-parser.rb +870 -0
  57. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh.rb +219 -0
  58. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/agent.rb +179 -0
  59. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/constants.rb +18 -0
  60. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/key_manager.rb +219 -0
  61. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/abstract.rb +60 -0
  62. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/hostbased.rb +71 -0
  63. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/keyboard_interactive.rb +66 -0
  64. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/password.rb +39 -0
  65. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/methods/publickey.rb +92 -0
  66. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/pageant.rb +183 -0
  67. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/authentication/session.rb +134 -0
  68. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/buffer.rb +340 -0
  69. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/buffered_io.rb +198 -0
  70. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/config.rb +205 -0
  71. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/channel.rb +630 -0
  72. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/constants.rb +33 -0
  73. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/session.rb +597 -0
  74. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/connection/term.rb +178 -0
  75. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/errors.rb +85 -0
  76. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/key_factory.rb +102 -0
  77. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/known_hosts.rb +129 -0
  78. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/loggable.rb +61 -0
  79. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/packet.rb +102 -0
  80. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/prompt.rb +93 -0
  81. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/command.rb +75 -0
  82. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/errors.rb +14 -0
  83. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/http.rb +94 -0
  84. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/socks4.rb +70 -0
  85. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/proxy/socks5.rb +142 -0
  86. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/ruby_compat.rb +43 -0
  87. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/service/forward.rb +288 -0
  88. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test.rb +89 -0
  89. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/channel.rb +129 -0
  90. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/extensions.rb +152 -0
  91. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/kex.rb +44 -0
  92. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/local_packet.rb +51 -0
  93. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/packet.rb +81 -0
  94. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/remote_packet.rb +38 -0
  95. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/script.rb +157 -0
  96. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/test/socket.rb +64 -0
  97. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/algorithms.rb +384 -0
  98. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/cipher_factory.rb +97 -0
  99. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/constants.rb +30 -0
  100. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac.rb +31 -0
  101. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/abstract.rb +79 -0
  102. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/md5.rb +12 -0
  103. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/md5_96.rb +11 -0
  104. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/none.rb +15 -0
  105. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/sha1.rb +13 -0
  106. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/hmac/sha1_96.rb +11 -0
  107. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/identity_cipher.rb +55 -0
  108. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex.rb +13 -0
  109. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex/diffie_hellman_group1_sha1.rb +208 -0
  110. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/kex/diffie_hellman_group_exchange_sha1.rb +77 -0
  111. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/openssl.rb +127 -0
  112. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/packet_stream.rb +235 -0
  113. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/server_version.rb +71 -0
  114. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/session.rb +276 -0
  115. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/transport/state.rb +206 -0
  116. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/lenient.rb +30 -0
  117. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/null.rb +12 -0
  118. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/verifiers/strict.rb +53 -0
  119. data/lib/tpkg/thirdparty/net-ssh-2.1.0/lib/net/ssh/version.rb +62 -0
  120. data/lib/tpkg/version.rb +3 -0
  121. data/man/man1/cpan2tpkg.1 +82 -0
  122. data/man/man1/gem2tpkg.1 +120 -0
  123. data/man/man1/tpkg.1 +411 -0
  124. data/pkginfo +8 -0
  125. data/postinstall.solaris +11 -0
  126. data/postremove.solaris +16 -0
  127. data/schema/schema-1.0.5.yml +0 -0
  128. data/schema/schema-1.0.6.yml +0 -0
  129. data/schema/schema-1.0.7.yml +0 -0
  130. data/schema/schema-1.0.8.yml +0 -0
  131. data/schema/schema-1.0.9.yml +0 -0
  132. data/schema/schema.yml +0 -0
  133. data/schema/tpkg-1.0.0.dtd +0 -0
  134. data/schema/tpkg-1.0.1.dtd +0 -0
  135. data/schema/tpkg-1.0.2.dtd +0 -0
  136. data/schema/tpkg-1.0.3.dtd +0 -0
  137. data/schema/tpkg-1.0.4.dtd +0 -0
  138. data/schema/tpkg-1.0.5.dtd +0 -0
  139. data/schema/tpkg-1.0.6.dtd +0 -0
  140. data/schema/tpkg-1.0.7.dtd +0 -0
  141. data/schema/tpkg-1.0.8.dtd +0 -0
  142. data/schema/tpkg-1.0.9.dtd +0 -0
  143. data/schema/tpkg.dtd +0 -0
  144. data/test/TODO +30 -0
  145. data/test/premadetestpkg/pkg_without_file_metadata-1.0-1.tpkg +0 -0
  146. data/test/test_checksum.rb +53 -0
  147. data/test/test_compress.rb +55 -0
  148. data/test/test_conflict.rb +41 -0
  149. data/test/test_crontabs.rb +398 -0
  150. data/test/test_dependency.rb +1113 -0
  151. data/test/test_downgrade.rb +80 -0
  152. data/test/test_download.rb +95 -0
  153. data/test/test_encrypt.rb +136 -0
  154. data/test/test_filemetadata.rb +131 -0
  155. data/test/test_initscript.rb +93 -0
  156. data/test/test_install.rb +186 -0
  157. data/test/test_lock.rb +82 -0
  158. data/test/test_make.rb +410 -0
  159. data/test/test_metadata.rb +805 -0
  160. data/test/test_misc.rb +379 -0
  161. data/test/test_options.rb +1711 -0
  162. data/test/test_os.rb +193 -0
  163. data/test/test_os_debian.rb +99 -0
  164. data/test/test_os_freebsd.rb +89 -0
  165. data/test/test_os_macosx.rb +79 -0
  166. data/test/test_os_redhat.rb +124 -0
  167. data/test/test_os_solaris.rb +85 -0
  168. data/test/test_os_windows.rb +26 -0
  169. data/test/test_query.rb +134 -0
  170. data/test/test_remove.rb +539 -0
  171. data/test/test_tar.rb +99 -0
  172. data/test/test_unpack.rb +977 -0
  173. data/test/test_upgrade.rb +398 -0
  174. data/test/test_version.rb +54 -0
  175. data/test/testcmds/crontab +14 -0
  176. data/test/testcmds/debian/apt-cache +145 -0
  177. data/test/testcmds/debian/dpkg-query +16 -0
  178. data/test/testcmds/freebsd/pkg_info +13 -0
  179. data/test/testcmds/macosx/port +35 -0
  180. data/test/testcmds/redhat/rpmbuild +6 -0
  181. data/test/testcmds/redhat/yum +90 -0
  182. data/test/testcmds/solaris/pkginfo +25 -0
  183. data/test/testcmds/solaris/pkgutil +36 -0
  184. data/test/testpkg/reloc/encfile +2 -0
  185. data/test/testpkg/reloc/file +2 -0
  186. data/test/testpkg/reloc/precryptfile +1 -0
  187. data/test/testpkg/reloc/precryptfile.plaintext +3 -0
  188. data/test/testpkg/tpkg-bad-ownergroup.xml +25 -0
  189. data/test/testpkg/tpkg-bad-ownergroup.yml +18 -0
  190. data/test/testpkg/tpkg-default-perms.xml +28 -0
  191. data/test/testpkg/tpkg-default-perms.yml +20 -0
  192. data/test/testpkg/tpkg-good-ownergroup.xml +25 -0
  193. data/test/testpkg/tpkg-good-ownergroup.yml +18 -0
  194. data/test/testpkg/tpkg-nativedeps.yml +13 -0
  195. data/test/testpkg/tpkg-nofiles.xml +14 -0
  196. data/test/testpkg/tpkg-nofiles.yml +9 -0
  197. data/test/testpkg/tpkg.xml +35 -0
  198. data/test/testpkg/tpkg.yml +25 -0
  199. data/test/tpkgtest.rb +300 -0
  200. data/tpkg.conf +16 -0
  201. data/tpkg.gemspec +24 -0
  202. data/tpkg.spec +28 -0
  203. data/tpkg.xml +17 -0
  204. data/tpkg_profile.sh +32 -0
  205. metadata +306 -31
@@ -19,7 +19,7 @@ require 'facter'
19
19
 
20
20
  # We don't want to just use the first gem command in the user's PATH by
21
21
  # default, as that may not be a tpkg gem. I.e. /usr/bin/gem on Mac OS X.
22
- DEFAULT_GEM_COMMAND = "#{Tpkg::DEFAULT_BASE}/ruby-1.8/bin/gem"
22
+ DEFAULT_GEM_COMMAND = "#{Tpkg::DEFAULT_BASE}/bin/gem"
23
23
 
24
24
  # Ruby 1.8.7 and later have Dir.mktmpdir, but we support ruby 1.8.5 for
25
25
  # RHEL/CentOS 5. So this is a basic substitute.
@@ -423,7 +423,7 @@ def package(gem)
423
423
  # If the gemspec lists any extensions then the package has native
424
424
  # code and needs to be flagged as specific to the OS and architecture
425
425
  if gemspec.extensions && !gemspec.extensions.empty?
426
- os = Tpkg::get_os
426
+ os = tpkg.os.os
427
427
  if os =~ /RedHat-(.*)/
428
428
  os = os + ", CentOS-#{$1}"
429
429
  elsif os =~ /CentOS-(.*)/
data/bin/tpkg CHANGED
@@ -23,6 +23,7 @@ require 'tpkg'
23
23
  @prompt = true
24
24
  @quiet = false
25
25
  @sudo = nil
26
+ @sudo_option = nil
26
27
  @force = false
27
28
  @deploy = false
28
29
  @deploy_params = ARGV # hold parameters for how to invoke tpkg on the machines we're deploying to
@@ -65,7 +66,7 @@ def parse_config_files
65
66
 
66
67
  # FIXME: Move config file parsing to tpkg.rb
67
68
  # https://github.com/tpkg/client/issues/22
68
- fsroot = @tpkg_options[:file_system_root] ? @tpkg_options[:file_system_root] : ''
69
+ fsroot = @tpkg_options[:file_system_root] || ''
69
70
  settings = {:sources => []}
70
71
  [File.join(fsroot, Tpkg::DEFAULT_CONFIGDIR, 'tpkg.conf'),
71
72
  File.join(fsroot, ENV['HOME'], ".tpkg.conf")].each do |configfile|
@@ -168,7 +169,7 @@ opts.on('--groups', '-g', '=GROUP', Array, 'Group of server on which to apply ac
168
169
  # abbreviation. I.e. if the option is --servers and the user specified
169
170
  # --serv (which OptionParser will accept as long as it is unambiguous) this
170
171
  # won't detect and remove it.
171
- @deploy_params = @deploy_params - ['--groups', '-g', @groups.join(","), "--servers=#{@groups.join(',')}"]
172
+ @deploy_params = @deploy_params - ['--groups', '-g', @groups.join(","), "--groups=#{@groups.join(',')}"]
172
173
  end
173
174
  opts.on('--ua', 'Upgrade all packages') do |opt|
174
175
  @rerun_with_sudo = true
@@ -363,7 +364,7 @@ opts.on('--quiet', 'Reduce informative but non-essential output') do |opt|
363
364
  @quiet = opt
364
365
  end
365
366
  opts.on('--no-sudo', 'No calls to sudo for operations that might need root') do |opt|
366
- @sudo = opt
367
+ @sudo_option = opt
367
368
  end
368
369
  opts.on('--lock-force', 'Force the removal of an existing lockfile') do |opt|
369
370
  @tpkg_options[:lockforce] = opt
@@ -449,7 +450,7 @@ if @groups
449
450
  end
450
451
  servers = []
451
452
  @groups.each do |group|
452
- IO.popen(settings[:host_group_script]) do |pipe|
453
+ IO.popen(settings[:host_group_script]<<" "<<group.chomp) do |pipe|
453
454
  pipe.each_line do |line|
454
455
  servers << line.chomp
455
456
  end
@@ -510,14 +511,17 @@ end
510
511
  # order:
511
512
  # - command line option
512
513
  # - config file
513
- # - Tpkg.sudo_default? method defined in tpkg.rb
514
+ # - Default based on OS (Tpkg::OS#sudo_default?)
514
515
  case
515
- when !@sudo.nil?
516
- @tpkg_options[:sudo] = @sudo
516
+ when !@sudo_option.nil?
517
+ @sudo = @sudo_option
517
518
  when settings.has_key?(:sudo)
518
- @sudo = @tpkg_options[:sudo] = settings[:sudo]
519
+ @sudo = settings[:sudo]
519
520
  else
520
- @sudo = @tpkg_options[:sudo] = Tpkg.sudo_default?
521
+ # This bit of horribleness will be better when option parsing gets moved
522
+ # into tpkg.rb
523
+ os = Tpkg::OS.create
524
+ @sudo = os.sudo_default?
521
525
  end
522
526
  @tpkg_options[:force] = @force
523
527
 
@@ -529,7 +533,7 @@ if !@sudo
529
533
  # modified by other users who properly run --no-sudo as a regular user.
530
534
  raise "--no-sudo cannot be used as 'root' user or via sudo"
531
535
  end
532
- fsroot = @tpkg_options[:file_system_root] ? @tpkg_options[:file_system_root] : ''
536
+ fsroot = @tpkg_options[:file_system_root] || ''
533
537
  base = File.join(fsroot, @tpkg_options[:base])
534
538
  if File.exist?(base)
535
539
  baseuid = File.stat(base).uid
@@ -961,7 +965,7 @@ when :query_requires
961
965
  dependencies.each do | requiree, deps |
962
966
  next if deps.nil?
963
967
  deps.each do | dep |
964
- if Tpkg::package_meets_requirement?(pkg, dep)
968
+ if tpkg.package_meets_requirement?(pkg, dep)
965
969
  pkgfilename = pkg[:metadata][:filename]
966
970
  if !requirees[pkgfilename]
967
971
  requirees[pkgfilename] = []
@@ -1152,8 +1156,9 @@ when :query_tpkg_metadata_available
1152
1156
  FileUtils.rm_rf(downloaddir)
1153
1157
  end
1154
1158
  when :query_env
1155
- puts "Operating System: #{Tpkg::get_os}"
1156
- puts "Architecture: #{Tpkg::get_arch}"
1159
+ tpkg = Tpkg.new(@tpkg_options)
1160
+ puts "Operating System: #{tpkg.os.os}"
1161
+ puts "Architecture: #{tpkg.os.arch}"
1157
1162
  puts "Tar: #{Tpkg::find_tar}"
1158
1163
  when :query_conf
1159
1164
  # This is somewhat arbitrarily limited to the options read from the
@@ -0,0 +1,132 @@
1
+ #!/usr/bin/ruby
2
+ ##############################################################################
3
+ # tpkg package management system
4
+ # License: MIT (http://www.opensource.org/licenses/mit-license.php)
5
+ ##############################################################################
6
+
7
+ # Simple script for uploading packages to a tpkg server.
8
+ # Requires curl in order to work
9
+
10
+ require 'ping'
11
+ require 'tempfile'
12
+ require 'optparse'
13
+ require 'etc'
14
+ require 'uri'
15
+ require 'cgi'
16
+
17
+ ##########################################################################
18
+ # Set these variables to the appropriate values that suit your environment
19
+ authentication_url = "http://localhost:3000/login"
20
+ tpkg_upload_url = "http://localhost:3000/uploads/create"
21
+ proxy_server = "proxy.local:8080"
22
+ ##########################################################################
23
+
24
+ username = Etc.getlogin
25
+ password = nil
26
+ files_to_upload = nil
27
+ proxy = ""
28
+ cookie_file = nil
29
+ opts = OptionParser.new
30
+ opts.banner = 'Usage: tpkg [options]'
31
+ opts.on('-u', '--username USERNAME', 'Your username') do |opt|
32
+ username = opt
33
+ end
34
+ opts.on('-p', '--password PASSWORD', 'Your password') do |opt|
35
+ password = opt
36
+ end
37
+ opts.on('-f', '--file FILES', Array, 'Comma-separated list of files you want to upload') do |opt|
38
+ files_to_upload = opt
39
+ end
40
+ opts.on('--source_dir DIR', 'Directory containing *.tpkg files that you want to upload') do |opt|
41
+ if !File.directory?(opt)
42
+ raise "#{opt} is not a directory"
43
+ else
44
+ files_to_upload = Dir.glob(File.join(opt, '*.tpkg'))
45
+ end
46
+ end
47
+ opts.on('-x', '--proxy PROXY', 'Proxy to connect to tpkg server (if needed)') do |opt|
48
+ proxy = "--proxy #{opt}"
49
+ end
50
+ opts.on('--server SERVER', 'Where to upload the package to') do |opt|
51
+ tpkg_upload_url = "http://#{opt}/uploads/create"
52
+ end
53
+ opts.on('--cookie FILE', 'Path where cookie is stored') do |opt|
54
+ cookie_file = opt
55
+ end
56
+
57
+ opts.on_tail("-h", "--help", "Show this message") do
58
+ puts opts
59
+ exit
60
+ end
61
+
62
+ opts.parse(ARGV)
63
+
64
+ # Authenticate against tpkg server either using existing cookie file (saved from curl)
65
+ # or username/password
66
+ # To save cookie file, use the following curl command
67
+ # curl https://myserver/login --data 'login=username&password=password' -k -c path_to_save_the_cookie
68
+
69
+ if cookie_file
70
+ if !File.exists?(cookie_file)
71
+ puts "Cookie file doesn't exist"
72
+ exit
73
+ end
74
+ else
75
+ # ask for username and password if user doesn't specify it
76
+ if username.nil?
77
+ print "Enter your username: "
78
+ username = STDIN.gets.chomp
79
+ end
80
+
81
+ if password.nil?
82
+ begin
83
+ system 'stty -echo'
84
+ print "Enter your password: "
85
+ password = STDIN.gets.chomp
86
+ ensure
87
+ system 'stty echo; echo ""'
88
+ end
89
+ end
90
+
91
+ curl_config=Tempfile.new("curl_config")
92
+ cookie_file=Tempfile.new("cookie").path
93
+
94
+ # See if we can talk to the authentication server. If not, we might need to use a proxy
95
+ if (proxy.nil? || proxy.empty?) && !Ping.pingecho(URI.parse(authentication_url).host, 2, URI.parse(authentication_url).port)
96
+ proxy = "--proxy #{proxy_server}"
97
+ puts "Can't connect to authentication server directly. Trying to connect via #{proxy}."
98
+ end
99
+
100
+ # We need to authenticate against the server first in order to get a cookie
101
+ # To prevent username and password showing up when we call
102
+ # curl, we will tell curl to look it up from a config file
103
+ config="data = \"login=#{CGI.escape(username)}&password=#{CGI.escape(password)}\""
104
+ File.open(curl_config.path, 'w') {|f| f.write(config) }
105
+ result = `curl #{authentication_url} -s -L -K #{curl_config.path} -k -c #{cookie_file} #{proxy}`
106
+ if result =~ /failed/
107
+ puts "Failed to authenticate."
108
+ exit
109
+ end
110
+ end
111
+
112
+ # Get file to upload
113
+ if files_to_upload.nil?
114
+ print "Specify the file you want to upload: "
115
+ files_to_upload = [STDIN.gets.chomp]
116
+ end
117
+
118
+
119
+ # Do the actual upload
120
+ files_to_upload.each do | file |
121
+ # check if file exists
122
+ if File.file?(file)
123
+ file = File.expand_path(file)
124
+ else
125
+ puts "File doesn't exist"
126
+ exit
127
+ end
128
+
129
+ puts "Uploading #{file} to #{URI.parse(tpkg_upload_url).host}"
130
+ out=`curl -b #{cookie_file} -F upload[upload]=@'#{file}' #{tpkg_upload_url} #{proxy}`
131
+ puts out
132
+ end
data/ca.pem ADDED
@@ -0,0 +1 @@
1
+ # Add your SSL certificate authority's cert(s) to this file
data/control ADDED
@@ -0,0 +1,7 @@
1
+ Package: tpkg
2
+ Version: %VER%-1
3
+ Maintainer: tpkg-users@lists.sourceforge.net
4
+ Architecture: all
5
+ Depends: ruby-interpreter, facter, lsb-release, lsb-base
6
+ Description: tpkg client
7
+
data/depend ADDED
@@ -0,0 +1,3 @@
1
+ P CSWruby
2
+ P CSWfacter
3
+
@@ -0,0 +1,40 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ pkgfile=$1
6
+ operation=$2
7
+
8
+ # Grab the data passed to us on stdin
9
+ datafile=`mktemp`
10
+ cat > $datafile
11
+ # We expect just one line of data containing the home directory path
12
+ homedir=`head -1 $datafile`
13
+ # Make sure we got some sort of string for the home directory
14
+ test -n "$homedir"
15
+
16
+ requestfile=/var/etch/requests/$homedir/.ssh/authorized_keys/$pkgfile
17
+
18
+ case "$operation" in
19
+ 'install')
20
+ mkdir -p `dirname "$requestfile"`
21
+ tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
22
+ echo "<request>" > $tmpfile
23
+ # Dump in the data we captured above
24
+ cat $datafile >> $tmpfile
25
+ echo "</request>" >> $tmpfile
26
+ chmod 644 "$tmpfile"
27
+ ;;
28
+ 'remove')
29
+ rm -f "$requestfile".*
30
+ ;;
31
+ *)
32
+ echo "$0: Invalid arguments"
33
+ exit 1
34
+ ;;
35
+ esac
36
+
37
+ # There's no guarantee that the user has keys in etch, and etch will throw an
38
+ # error if you ask it to generate a file that it doesn't know about.
39
+ #/usr/sbin/etch $homedir/.ssh/authorized_keys
40
+
@@ -0,0 +1,9 @@
1
+ #!/bin/sh
2
+
3
+ # This is a no-op in our environment as we always add all available groups to
4
+ # all systems.
5
+
6
+ # However, we need to take all the data fed to us so as not to trigger a
7
+ # SIGPIPE in the caller.
8
+ cat > /dev/null
9
+
@@ -0,0 +1,38 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ pkgfile=$1
6
+ operation=$2
7
+
8
+ # /etc/sysconfig/iptables for Red Hat
9
+ # /var/lib/iptables/active for Debian
10
+ requestfiles="/var/etch/requests/etc/sysconfig/iptables/$pkgfile /var/etch/requests/var/lib/iptables/active/$pkgfile"
11
+
12
+ case "$operation" in
13
+ 'install')
14
+ for requestfile in $requestfiles
15
+ do
16
+ mkdir -p `dirname "$requestfile"`
17
+ tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
18
+ echo "<request>" > $tmpfile
19
+ # Dump in the data passed to us on stdin
20
+ cat >> $tmpfile
21
+ echo "</request>" >> $tmpfile
22
+ chmod 644 "$tmpfile"
23
+ done
24
+ ;;
25
+ 'remove')
26
+ for requestfile in $requestfiles
27
+ do
28
+ rm -f "$requestfile".*
29
+ done
30
+ ;;
31
+ *)
32
+ echo "$0: Invalid arguments"
33
+ exit 1
34
+ ;;
35
+ esac
36
+
37
+ /usr/sbin/etch /etc/sysconfig/iptables /var/lib/iptables/active
38
+
@@ -0,0 +1,30 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ pkgfile=$1
6
+ operation=$2
7
+
8
+ requestfile=/var/etch/requests/etc/security/limits.conf/$pkgfile
9
+
10
+ case "$operation" in
11
+ 'install')
12
+ mkdir -p `dirname "$requestfile"`
13
+ tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
14
+ echo "<request>" > $tmpfile
15
+ # Dump in the data passed to us on stdin
16
+ cat >> $tmpfile
17
+ echo "</request>" >> $tmpfile
18
+ chmod 644 "$tmpfile"
19
+ ;;
20
+ 'remove')
21
+ rm -f "$requestfile".*
22
+ ;;
23
+ *)
24
+ echo "$0: Invalid arguments"
25
+ exit 1
26
+ ;;
27
+ esac
28
+
29
+ /usr/sbin/etch /etc/security/limits.conf
30
+
@@ -0,0 +1,30 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ pkgfile=$1
6
+ operation=$2
7
+
8
+ requestfile=/var/etch/requests/etc/auto.auto/$pkgfile
9
+
10
+ case "$operation" in
11
+ 'install')
12
+ mkdir -p `dirname "$requestfile"`
13
+ tmpfile=`mktemp "$requestfile.XXXXXX"`
14
+ echo "<request>" > $tmpfile
15
+ # Dump in the data passed to us on stdin
16
+ cat >> $tmpfile
17
+ echo "</request>" >> $tmpfile
18
+ chmod 644 "$tmpfile"
19
+ ;;
20
+ 'remove')
21
+ rm -f "$requestfile".*
22
+ ;;
23
+ *)
24
+ echo "$0: Invalid arguments"
25
+ exit 1
26
+ ;;
27
+ esac
28
+
29
+ /usr/sbin/etch /etc/auto.auto
30
+
@@ -0,0 +1,30 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ pkgfile=$1
6
+ operation=$2
7
+
8
+ requestfile=/var/etch/requests/etc/sudoers/$pkgfile
9
+
10
+ case "$operation" in
11
+ 'install')
12
+ mkdir -p `dirname "$requestfile"`
13
+ tmpfile=`mktemp "$requestfile.XXXXXX"` || exit 1
14
+ echo "<request>" > $tmpfile
15
+ # Dump in the data passed to us on stdin
16
+ cat >> $tmpfile
17
+ echo "</request>" >> $tmpfile
18
+ chmod 644 "$tmpfile"
19
+ ;;
20
+ 'remove')
21
+ rm -f "$requestfile".*
22
+ ;;
23
+ *)
24
+ echo "$0: Invalid arguments"
25
+ exit 1
26
+ ;;
27
+ esac
28
+
29
+ /usr/sbin/etch /etc/sudoers
30
+
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ # This is a no-op in our environment as we always add all available groups to
4
+ # all systems.
5
+
6
+ # However, we need to take all the data fed to us so as not to trigger a
7
+ # SIGPIPE in the caller.
8
+ cat > /dev/null