tpkg 2.3.3 → 2.3.4

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.
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