frm 0.0.4 → 0.0.5

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,73 @@
1
+ # Effing Repo Management.
2
+
3
+ ## Background
4
+
5
+ I love using FPM: <http://goo.gl/u3pJB> to create debian packages. It's an
6
+ awesome tool that takes all of the BS work to package debs and has made my life
7
+ easier and more productive.
8
+
9
+ However, after creating packages, the next pain-point is how to actually
10
+ publish those packages for internal testing/verification and finally for public
11
+ consumption. That is, until FRM!
12
+
13
+ Previous solutions require you either to host your own repo and use several tools like
14
+ reprepro along with a webserver, or to be confined to the requirements of a PPA.
15
+
16
+ ## What is frm?
17
+
18
+ FRM is a simple solution for creating cloud-based repos. It is a small ruby
19
+ library that pushes a specified set of deb packages into an Amazon s3 bucket
20
+ allong with the required files and format needed to use it directly as a
21
+ personal or public ubuntu mirror.
22
+
23
+ It is designed to be the easiest way possible to host your own debian packages
24
+ on your own mirror without having to maintain any servers!
25
+
26
+ ## Why is this good?
27
+
28
+ FRM provides some really cool benifits, such as:
29
+
30
+ * cloud based (no servers to maintain!)
31
+ * really easy to use
32
+ * can easily be backed backed by cloudfront to provide a worldwide geo-dns caching solution
33
+ * allows you to create unlimited seperate repos allowing for new possible dev/test workflows
34
+
35
+ ## Install (currently only works on debian based systems)
36
+
37
+ Make sure you have a gpg key setup in ~/.gnupg
38
+
39
+ You can install frm with gem:
40
+
41
+ gem install frm
42
+
43
+ Running it:
44
+
45
+ frm -a AWS_ACCESS_KEY -s AWS_SECRET_KEY -b my_bucket -p some_path_inside_my_bucket package1 [package2] ...
46
+
47
+ ## Currently Working:
48
+
49
+ * S3 support
50
+ * signed gpg release file (need to have a key setup in ~/.gnupg)
51
+ * all necessary configuration for Ubuntu natty
52
+
53
+ ## Known Issues
54
+
55
+ Although FRM is great, it's not perfect. Here are some things that we already know about:
56
+
57
+ * can only create new repositories (merging into existing repos comming soon;)
58
+ * currently only works for natty (soon to be fixed)
59
+ * currently only works for debian packages (would be pretty easy to add support for rpm /me thinks. holler if u want)
60
+ * shells out to gpg (could not find a decent ruby solution to create detached signatures. plz holler if u know one!)
61
+ * shells out to 'dpkg' (may be fine)
62
+ * only works with Amazon S3 (could support another cloud if people want it)
63
+
64
+ ## Need Help or Want to Contribute?
65
+
66
+ All contributions are welcome, please contact me if you need anything;)
67
+
68
+ # Thanks!
69
+
70
+ Big thanks goes out to Jordan Sissel for creating FPM!
71
+
72
+ <https://github.com/jordansissel/fpm>
73
+ <https://github.com/jordansissel>
data/bin/frm CHANGED
@@ -45,6 +45,11 @@ Usage: frm [options] package1 [package2] ..."
45
45
  options[:prefix] = prefix
46
46
  end
47
47
 
48
+ options[:release] = `lsb_release -cs`.strip
49
+ opts.on('-r','--release RELEASE','release of deb packages') do |release|
50
+ options[:release] = release
51
+ end
52
+
48
53
 
49
54
  # This displays the help screen, all programs are
50
55
  # assumed to have this option.
@@ -86,7 +91,7 @@ Dir.chdir(File.dirname(File.dirname(__FILE__)))
86
91
  require File.join Dir.pwd, 'lib', 'frm'
87
92
 
88
93
  puts "creating release..."
89
- package_release = FRM::PackageRelease.new(packages)
94
+ package_release = FRM::PackageRelease.new(packages,options[:release])
90
95
 
91
96
  puts "pushing release..."
92
97
  release_pusher = FRM::ReleasePusher.new(package_release,options[:access_key],options[:secret_key],options[:bucket],options[:prefix])
data/lib/frm.rb CHANGED
@@ -1,3 +1,3 @@
1
- require File.join @frm_base, 'lib', 'frm', 'base'
2
- require File.join @frm_base, 'lib', 'frm', 's3'
3
- require File.join @frm_base, 'lib', 'frm', 'deb'
1
+ require 'frm/base'
2
+ require 'frm/s3'
3
+ require 'frm/deb'
@@ -5,11 +5,12 @@ module FRM
5
5
 
6
6
  class Package < Base
7
7
  attr_accessor :repo_filename
8
- attr_reader :path, :content, :md5, :sha1, :sha2 , :size
9
- def initialize(path)
8
+ attr_reader :path, :content, :md5, :sha1, :sha2 , :size, :release
9
+ def initialize(path,release='natty')
10
10
  raise "you need to specify a path!!!" if path.nil?
11
11
  @path = path
12
12
  raise "Can not find file '#{path}'" unless File.exists?(path)
13
+ @release = release
13
14
  begin
14
15
  @content = File.read(path)
15
16
  rescue Object => o
@@ -26,13 +27,14 @@ module FRM
26
27
  end
27
28
 
28
29
  class PackageRelease < Base
29
- attr_reader :packages, :standards_version, :priority, :package_file, :gzipped_package_file, :release_file, :short_release_file, :component
30
- def initialize(packages={},component='main/binary-amd64')
30
+ attr_reader :packages, :standards_version, :priority, :package_file, :gzipped_package_file, :release_file, :short_release_file, :component, :release
31
+ def initialize(packages={},release='natty',component='main/binary-amd64')
32
+ @release = release
31
33
  @component = component
32
34
  @standards_version = standards_version
33
35
  @priority = priority
34
36
  @packages = []
35
- packages.each { |package| @packages << Package.new(package) }
37
+ packages.each { |package| @packages << Package.new(package,@release) }
36
38
  @package_file = generate_package_file
37
39
  @gzipped_package_file = generate_gzip_pipe(@package_file).read
38
40
  @short_release_file = generate_short_release_file
@@ -43,8 +45,8 @@ module FRM
43
45
 
44
46
  def generate_release_file()
45
47
  partial_release_file = "Origin: apt.cloudscaling.com
46
- Label: apt repository natty
47
- Codename: natty
48
+ Label: apt repository #{@release}
49
+ Codename: #{@release}
48
50
  Date: Thu, 22 Dec 2011 00:29:55 UTC
49
51
  Architectures: amd64
50
52
  Components: main universe multiverse
@@ -68,7 +70,7 @@ SHA256:
68
70
  def generate_short_release_file
69
71
  "Component: main
70
72
  Origin: apt.cloudscaling.com
71
- Label: apt repository natty
73
+ Label: apt repository #{@release}
72
74
  Architecture: amd64
73
75
  Description: Cloudscaling APT repository
74
76
  "
@@ -103,6 +105,7 @@ Description: Cloudscaling APT repository
103
105
 
104
106
  class ReleasePusher < Base
105
107
  def initialize(package_release,access_key,secret_key,bucket,prefix,server='s3-us-west-1.amazonaws.com')
108
+ @release = package_release.release
106
109
  @bucket = bucket
107
110
  @prefix = prefix
108
111
  @s3 = FRM::S3.new(access_key,secret_key,server)
@@ -115,16 +118,16 @@ Description: Cloudscaling APT repository
115
118
 
116
119
  def push_release_files(package_release)
117
120
  # TODO: un-hardcode this
118
- release_path = @prefix + "/dists/natty/Release"
121
+ release_path = @prefix + "/dists/#{@release}/Release"
119
122
  @s3.put(release_path,package_release.release_file,@bucket)
120
123
 
121
- in_release_path = @prefix + "/dists/natty/InRelease"
124
+ in_release_path = @prefix + "/dists/#{@release}/InRelease"
122
125
  @s3.put(in_release_path,gpg_clearsign(package_release.release_file),@bucket)
123
126
 
124
- gpg_release_path = @prefix + "/dists/natty/Release.gpg"
127
+ gpg_release_path = @prefix + "/dists/#{@release}/Release.gpg"
125
128
  @s3.put(gpg_release_path,gpg_detached(package_release.release_file),@bucket)
126
129
 
127
- release_file_path = @prefix + "/dists/natty/" + package_release.component
130
+ release_file_path = @prefix + "/dists/#{@release}/" + package_release.component
128
131
  @s3.put(release_file_path + '/Release',package_release.short_release_file,@bucket)
129
132
  @s3.put(release_file_path + '/Packages',package_release.package_file,@bucket)
130
133
  @s3.put(release_file_path + '/Packages.gz',package_release.gzipped_package_file,@bucket)
@@ -1,3 +1,3 @@
1
1
  module Frm
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/test/s3.rb CHANGED
@@ -4,7 +4,7 @@ require 'minitest/autorun'
4
4
  require 'mock-aws-s3'
5
5
 
6
6
  # this is a stupid hack to get the @@bucket region set properly
7
- DEFAULT_HOST = 's3-us-west-1.amazonaws.com'
7
+ #DEFAULT_HOST = 's3-us-west-1.amazonaws.com'
8
8
 
9
9
  class TestFRM < MiniTest::Unit::TestCase
10
10
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 4
9
- version: 0.0.4
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Martin Rhoads
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-03-31 00:00:00 -07:00
17
+ date: 2012-05-23 00:00:00 -07:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -56,6 +56,7 @@ files:
56
56
  - .gitignore
57
57
  - Gemfile
58
58
  - LICENSE
59
+ - README.md
59
60
  - Rakefile
60
61
  - bin/frm
61
62
  - frm.gemspec
@@ -100,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  requirements: []
101
102
 
102
103
  rubyforge_project: frm
103
- rubygems_version: 1.3.7
104
+ rubygems_version: 1.3.7.1
104
105
  signing_key:
105
106
  specification_version: 3
106
107
  summary: Effin Repo Manager