docker-template 0.8.0 → 0.10.0

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.
@@ -1,11 +1,9 @@
1
- # ----------------------------------------------------------------------------
2
1
  # Frozen-string-literal: true
3
2
  # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
4
3
  # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
4
 
7
5
  module Docker
8
6
  module Template
9
- VERSION = "0.8.0"
7
+ VERSION = "0.10.0"
10
8
  end
11
9
  end
data/lib/erb/context.rb CHANGED
@@ -1,27 +1,24 @@
1
- # ----------------------------------------------------------------------------
2
1
  # Frozen-string-literal: true
3
2
  # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
4
3
  # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
4
 
7
5
  require "erb"
8
6
  class ERB
9
7
  class Context
10
8
 
11
- # ------------------------------------------------------------------------
9
+ # --
12
10
  # Wraps any data you wish to send to ERB limiting it's context access.
13
- # ------------------------------------------------------------------------
14
-
11
+ # @param [Hash] vars the variables you wish to set
12
+ # --
15
13
  def initialize(vars)
16
14
  vars.each do |key, val|
17
15
  instance_variable_set("@#{key}", val)
18
16
  end
19
17
  end
20
18
 
21
- # ------------------------------------------------------------------------
19
+ # --
22
20
  # Returns the binding so that we can ship it off and give it to ERB.
23
- # ------------------------------------------------------------------------
24
-
21
+ # --
25
22
  def _binding
26
23
  return binding
27
24
  end
@@ -2,69 +2,68 @@
2
2
  [ "$DEBUG" ] && set -x
3
3
  set -e
4
4
 
5
- arch=$(uname -i)
6
- rootfs=$(mktemp -d)
7
- tmp=$(mktemp -d)
8
-
9
- mirrors="\nhttp://dl-2.alpinelinux.org/alpine/v<%= @metadata.release %>/main"
10
- mirrors=$mirrors"\n@testing http://dl-3.alpinelinux.org/alpine/edge/testing"
11
- mirrors=$mirrors"\n@testing http://dl-4.alpinelinux.org/alpine/edge/testing"
12
- release_url="http://nl.alpinelinux.org/alpine/v<%= @metadata.release %>/main"
13
- testing_url="http://nl.alpinelinux.org/alpine/edge/testing"
14
-
15
- tar_ignore() {
16
- sed -r "/tar: Ignoring unknown extended header/d"
17
- }
18
-
19
- apt-get update && apt-get install --no-install-recommends -y wget
20
- <% sha1 = @metadata._shas[:alpine][:apk_keys ][@metadata.tag].sha %>
21
- <% pkg1 = @metadata._shas[:alpine][:apk_keys ][@metadata.tag].package %>
22
- <% pkg2 = @metadata._shas[:alpine][:apk_tools][@metadata.tag].package %>
23
- <% sha2 = @metadata._shas[:alpine][:apk_tools][@metadata.tag].sha %>
24
- for v in <%= sha1 %>:<%= pkg1 %> <%= sha2 %>:<%= pkg2 %>; do
25
- sha=$(echo $v | awk -F: '{ print $1 }')
26
- pkg=$(echo $v | awk -F: '{ print $2 }')
27
- wget -nv -O $tmp/$pkg $release_url/$arch/$pkg
28
- if [ "$(sha256sum $tmp/$pkg)" != "$sha $tmp/$pkg" ]; then
29
- >&2 printf "%s sha error: %s" $pkg \
30
- "$(sha256sum $tmp/$pkg)"
31
- exit 1
32
- fi
33
- done
34
-
35
- tar xzf $tmp/alpine-keys-*.apk -C $tmp etc/ 2>&1 | tar_ignore
36
- tar xzf $tmp/apk-tools-static-*.apk -C $tmp sbin/apk.static 2>&1 | tar_ignore
37
- $tmp/sbin/apk.static --keys-dir=$tmp/etc/apk/keys --initdb --root=$rootfs \
38
- --repository=$release_url --update-cache add apk-tools busybox \
39
- libc-utils alpine-baselayout alpine-keys musl
40
-
41
- cd $tmp
42
- $tmp/sbin/apk.static --keys-dir=$tmp/etc/apk/keys --root=$rootfs --repository=$release_url --update fetch alpine-base
43
- tar xzf $tmp/alpine-base-*.apk -C $rootfs etc/ 2>&1 | tar_ignore
44
- cd -> /dev/null
45
-
46
- cp -R $COPY_DIR/* $rootfs 2> /dev/null || true
47
- mkdir -p $rootfs/etc/startup1.d
48
- mkdir -p $rootfs/etc/startup2.d
49
- mkdir -p $rootfs/etc/startup3.d
50
- mkdir -p $rootfs/etc/shutdown.d
51
-
52
- cp /etc/hosts $rootfs/etc/hosts
53
- cp /etc/resolv.conf $rootfs/etc/resolv.conf
54
- printf "$mirrors" > $rootfs/etc/apk/repositories
55
- <% if @metadata.pkgs? %>chroot $rootfs sh -ec "apk --update add <%= @metadata.pkgs %>"<% end %>
56
- <% if @metadata.packages? %>chroot $rootfs sh -ec "apk --update add <%= @metadata.packages %>"<% end %>
57
- <% if @metadata.package_cleanup? %>chroot $rootfs sh -ec "apk del <%= @metadata.package_cleanup %>"<% end %>
58
- <% if @metadata.pkg_cleanup? %>chroot $rootfs sh -ec "apk del <%= @metadata.pkg_cleanup %>"<% end %>
59
- chroot $rootfs sh -ec '{
60
- mv /var/run/* /run 2> /dev/null || true
61
- mv /var/lock /run 2> /dev/null || true
62
- rm -rf /var/run /var/lock
63
- ln -s /run/lock /var/lock
64
- ln -s /run /var/run
65
- }'
66
-
67
- rm -rf $rootfs/etc/hosts
68
- rm -rf $rootfs/etc/resolv.conf
69
- docker-helper cleanup $rootfs
70
- tar -zf $TAR_GZ --numeric-owner -C $rootfs -c .
5
+ ROOTFS=$(mktemp -d)
6
+ TMPDIR=$(mktemp -d)
7
+
8
+ MIRROR_HOST="<%= @meta.mirror_host %>"
9
+ [ "$MIRROR_HOST" ] || MIRROR_HOST="mirror.envygeeks.io"
10
+ MIRRORS="\nhttp://$MIRROR_HOST/alpine/<%= @meta.release =~ /^[\d,\.]+$/ ? "v" : "" %><%= @meta.release %>/main"
11
+ MIRRORS=$MIRRORS"\n@community http://$MIRROR_HOST/alpine/edge/community"
12
+ MIRRORS=$MIRRORS"\n@testing http://$MIRROR_HOST/alpine/edge/testing"
13
+ RELEASE_URL="http://$MIRROR_HOST/alpine/<%= @meta.release \
14
+ =~ /^[\d,\.]+$/ ? "v" : "" %><%= @meta.release %>/main"
15
+
16
+ cd $TMPDIR
17
+ mkdir -p $ROOTFS/etc
18
+ apk update --repository=$RELEASE_URL
19
+ apk fetch --stdout --repository=$RELEASE_URL alpine-keys | \
20
+ tar -xvzC $ROOTFS etc/
21
+
22
+ # --
23
+
24
+ apk --initdb --root=$ROOTFS --repository=$RELEASE_URL --update-cache add \
25
+ apk-tools libc-utils alpine-baselayout alpine-keys busybox musl \
26
+ busybox-suid alpine-conf
27
+
28
+ # --
29
+
30
+ apk --keys-dir=$ROOTFS/etc/apk/keys --root=$ROOTFS --repository=$RELEASE_URL \
31
+ fetch --stdout alpine-base | \
32
+ tar -xvz -C "$ROOTFS" etc/
33
+
34
+ # --
35
+
36
+ cd ~> /dev/null
37
+ cp -R $COPY_DIR/* $ROOTFS 2> /dev/null || true
38
+
39
+ # --
40
+
41
+ cp /etc/hosts $ROOTFS/etc/hosts
42
+ cp /etc/resolv.conf $ROOTFS/etc/resolv.conf
43
+ printf "$MIRRORS" > $ROOTFS/etc/apk/repositories
44
+ apk --update --root=$ROOTFS add <%= @meta.packages %>
45
+ apk del --root=$ROOTFS <%= @meta.package_cleanup %>
46
+ apk del --root=$ROOTFS <%= @meta.package_deep_cleanup %>
47
+ mv $ROOTFS/var/run/* $ROOTFS/run 2> /dev/null || true
48
+ mv $ROOTFS/var/lock $ROOTFS/run 2> /dev/null || true
49
+ rm -rf $ROOTFS/var/run $ROOTFS/var/lock
50
+ ln -s $ROOTFS/run/lock $ROOTFS/var/lock
51
+ ln -s $ROOTFS/run $ROOTFS/var/run
52
+
53
+ # --
54
+
55
+ <% if @meta.helpers? %>
56
+ mkdir -p /usr/src
57
+ cd /usr/src
58
+
59
+ apk --update add ca-certificates git
60
+ git clone --verbose https://github.com/envygeeks/docker-helper.git
61
+ cp -R docker-helper/src/* $ROOTFS/
62
+ <% end %>
63
+
64
+ # --
65
+
66
+ cleanup $ROOTFS
67
+ rm -rf $ROOTFS/etc/hosts
68
+ rm -rf $ROOTFS/etc/resolv.conf
69
+ tar -zf $TAR_GZ --numeric-owner -C $ROOTFS -c .
@@ -2,75 +2,104 @@
2
2
  [ "$DEBUG" ] && set -x
3
3
  set -e
4
4
 
5
- arch=$(uname -i)
6
- rootfs=$(mktemp -d)
7
- partner_url="https://partner-images.canonical.com/core"
8
- dpkg_arch=$(dpkg --print-architecture)
9
- tmp=$(mktemp -d)
10
-
11
- cd $tmp
12
- gpg --keyserver keyserver.ubuntu.com --recv-keys 7db87c81
13
- sudo apt-get update && sudo apt-get install --no-install-recommends -y wget
14
- wget -nv $partner_url/<%= @metadata.release %>/current/SHA256SUMS.gpg
15
- wget -nv $partner_url/<%= @metadata.release %>/current/SHA256SUMS
5
+ ROOTFS=$(mktemp -d)
6
+ PARTNER_URL="https://partner-images.canonical.com/core"
7
+ TMP=$(mktemp -d)
8
+
9
+ # --
10
+
11
+ cd $TMP
12
+ apk --update add wget gnupg ca-certificates \
13
+ gawk sed
14
+
15
+ # --
16
+
17
+ gpg --keyserver keyserver.ubuntu.com --recv-keys 1A5D6C4C7DB87C81
18
+ wget $PARTNER_URL/<%= @meta.release %>/current/SHA256SUMS.gpg
19
+ wget $PARTNER_URL/<%= @meta.release %>/current/SHA256SUMS
16
20
  gpg --verify SHA256SUMS.gpg SHA256SUMS
17
21
 
18
- img=$(cat SHA256SUMS | grep "$dpkg_arch" | awk -F' *' '{ print $2 }' | sed -r 's/^\*//')
19
- sha=$(cat SHA256SUMS | grep "$dpkg_arch" | awk -F' *' '{ print $1 }')
22
+ cat SHA256SUMS
23
+ sha=$(cat SHA256SUMS | grep "amd64" | awk -F' *' '{ print $1 }')
24
+ img=$(cat SHA256SUMS | grep "amd64" | awk -F' *' '{ print $2 }' \
25
+ | sed -r 's/^\*//')
20
26
 
21
- wget -nv "$partner_url/<%= @metadata.release %>/current/$img"
27
+ wget --progress=bar "$PARTNER_URL/<%= @meta.release %>/current/$img"
22
28
  if [ "$(sha256sum $img | awk '{ print $1 }')" != "$sha" ]; then
23
29
  echo "Bailing, the SHA256sum did not match."
24
30
  fi
25
31
 
26
- tar xzf $img -C $rootfs
32
+ # --
33
+
34
+ tar xzf $img -C $ROOTFS
27
35
  cd -> /dev/null
28
36
 
29
- rm -rf $rootfs/etc/hosts
30
- rm -rf $rootfs/etc/resolv.conf
31
- cp /etc/resolv.conf $rootfs/etc/resolv.conf
32
- cp /etc/hosts $rootfs/etc/hosts
37
+ # --
38
+
39
+ rm -rf $ROOTFS/etc/hosts
40
+ rm -rf $ROOTFS/etc/resolv.conf
41
+ cp /etc/resolv.conf $ROOTFS/etc/resolv.conf
42
+ cp /etc/hosts $ROOTFS/etc/hosts
43
+
44
+ # --
33
45
 
34
- chroot "$rootfs" sh -ec "{
46
+ chroot "$ROOTFS" sh -ec "{
35
47
  dpkg-divert --local --rename --add /sbin/initctl
36
48
  dpkg-divert --local --rename --add /usr/sbin/update-rc.d
37
49
  ln -s /bin/true /usr/sbin/update-rc.d
38
50
  ln -s /bin/true /sbin/initctl
39
51
  }"
40
52
 
41
- chroot "$rootfs" sh -ec "{
53
+ # --
54
+
55
+ chroot "$ROOTFS" sh -ec "{
42
56
  sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list
43
57
  echo \"debconf debconf/frontend select Noninteractive\" | debconf-set-selections
44
- echo 'Dpkg::Options { \"--force-confdef\"; \"--force-confold\"; }' > /etc/apt/apt.conf.d/local
58
+ echo 'Dpkg::Options { \"--force-confdef\"; \"--force-confold\"; }' > /etc/apt/apt.conf.d/03confdef
59
+ echo 'APT::Get::Install-Recommends \"false\"; APT::Get::Install-Suggests \"false\";' > /etc/apt/apt.conf.d/00norecommends
60
+ echo 'APT::Get::Assume-Yes \"true\"; APT::Get::force-yes \"true\";' > /etc/apt/apt.conf.d/01yes
61
+ echo 'Apt::Get::Purge \"true\";' > /etc/apt/apt.conf.d/02purge
45
62
  echo \"exit 101\" > /usr/sbin/policy-rc.d policy-rc.d
46
63
  sed -ri '/^(deb-src\s+|$|#)/d' /etc/apt/sources.list
47
64
  chmod uog+x /usr/sbin/policy-rc.d
48
65
 
49
66
  apt-get update
50
- apt-get dist-upgrade -yf
51
- apt-get install --no-install-recommends -yf \
52
- locales deborphan
53
-
54
- apt-get autoremove --purge $REMOVE -yf
55
- apt-get autoremove --purge \$(deborphan --guess-all) deborphan -yf
56
- <% if @metadata.pkgs? %>apt-get install --no-install-recommends -y <%= @metadata.pkgs %><% end %>
57
- <% if @metadata.packages? %>apt-get install --no-install-recommends -y <%= @metadata.packages %><% end %>
58
- <% if @metadata.package_cleanup? %>apt-get autoremove --purge -y <%= @metadata.package_cleanup %><% end %>
59
- <% if @metadata.pkg_cleanup? %>apt-get autoremove --purge -y <%= @metadata.pkg_cleanup %><% end %>
60
- apt-get autoremove --purge
67
+ apt-get install locales deborphan <%= @meta.packages %>
68
+ echo 'Yes, do as I say!' | SUDO_FORCE_REMOVE=yes apt-get autoremove -f <%= @meta.package_cleanup %>
69
+ echo 'Yes, do as I say!' | SUDO_FORCE_REMOVE=yes apt-get autoremove -f <%= @meta.package_deep_cleanup %>
70
+ apt-get autoremove \$(deborphan --guess-all) deborphan
71
+ apt-get autoremove
61
72
  apt-get autoclean
62
73
  apt-get clean
63
74
 
64
75
  rm -rf /tmp/remove
65
76
  }"
66
77
 
67
- cp -R $COPY_DIR/* $rootfs
68
- mkdir -p $rootfs/etc/startup1.d
69
- mkdir -p $rootfs/etc/startup2.d
70
- mkdir -p $rootfs/etc/startup3.d
71
- mkdir -p $rootfs/etc/shutdown.d
78
+ # --
79
+
80
+ <% if @meta.helpers? %>
81
+ chroot $ROOTFS sh -ec '{
82
+ mkdir -p /usr/src
83
+ cd /usr/src
84
+
85
+ apt-get update
86
+ apt-get install --no-install-recommends -yf git ca-certificates
87
+ git clone https://github.com/envygeeks/docker-helper.git
88
+ cp -R docker-helper/src/* /
89
+ rm -rf /usr/src/*
90
+
91
+ apt-get autoremove --purge \
92
+ git ca-certificates -yf
93
+ }'
94
+ <% end %>
95
+
96
+ # --
97
+
98
+ cp -R $COPY_DIR/* $ROOTFS
99
+ cleanup $ROOTFS
100
+
101
+ # --
72
102
 
73
- rm -rf $rootfs/etc/hosts
74
- rm -rf $rootfs/etc/resolv.conf
75
- docker-helper cleanup $rootfs
76
- tar -zf $TAR_GZ --numeric-owner -C $rootfs -c .
103
+ rm -rf $ROOTFS/etc/hosts
104
+ rm -rf $ROOTFS/etc/resolv.conf
105
+ tar -zf $TAR_GZ --numeric-owner -C $ROOTFS -c .
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker-template
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordon Bedwell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-19 00:00:00.000000000 Z
11
+ date: 2017-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -42,16 +42,22 @@ dependencies:
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '4.2'
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '5.1'
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - "~>"
55
+ - - ">="
53
56
  - !ruby/object:Gem::Version
54
57
  version: '4.2'
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '5.1'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: simple-ansi
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -98,16 +104,30 @@ dependencies:
98
104
  name: json
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - "~>"
107
+ - - ">="
102
108
  - !ruby/object:Gem::Version
103
109
  version: '1.8'
104
110
  type: :runtime
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - "~>"
114
+ - - ">="
109
115
  - !ruby/object:Gem::Version
110
116
  version: '1.8'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rugged
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.25.1
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 0.25.1
111
131
  description: Build and template awesome Docker images a variety of ways.
112
132
  email:
113
133
  - jordon@envygeeks.io
@@ -125,23 +145,23 @@ files:
125
145
  - comp/list
126
146
  - comp/list.pak
127
147
  - lib/docker/template.rb
148
+ - lib/docker/template/auth.rb
128
149
  - lib/docker/template/builder.rb
150
+ - lib/docker/template/builder/normal.rb
151
+ - lib/docker/template/builder/rootfs.rb
152
+ - lib/docker/template/builder/scratch.rb
129
153
  - lib/docker/template/cache.rb
130
154
  - lib/docker/template/cli.rb
131
155
  - lib/docker/template/cli/build.rb
132
156
  - lib/docker/template/cli/list.rb
133
157
  - lib/docker/template/error.rb
134
158
  - lib/docker/template/logger.rb
135
- - lib/docker/template/metadata.rb
136
- - lib/docker/template/normal.rb
159
+ - lib/docker/template/meta.rb
137
160
  - lib/docker/template/notify.rb
138
161
  - lib/docker/template/parser.rb
139
162
  - lib/docker/template/repo.rb
140
- - lib/docker/template/rootfs.rb
141
- - lib/docker/template/scratch.rb
142
163
  - lib/docker/template/version.rb
143
164
  - lib/erb/context.rb
144
- - shas.yml
145
165
  - templates/rootfs.erb
146
166
  - templates/rootfs/alpine.erb
147
167
  - templates/rootfs/ubuntu.erb
@@ -166,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
186
  version: '0'
167
187
  requirements: []
168
188
  rubyforge_project:
169
- rubygems_version: 2.6.3
189
+ rubygems_version: 2.5.1
170
190
  signing_key:
171
191
  specification_version: 4
172
192
  summary: Build and template Docker images a variety of ways.
@@ -1,46 +0,0 @@
1
- # ----------------------------------------------------------------------------
2
- # Frozen-string-literal: true
3
- # Copyright: 2015 - 2016 Jordon Bedwell - Apache v2.0 License
4
- # Encoding: utf-8
5
- # ----------------------------------------------------------------------------
6
-
7
- module Docker
8
- module Template
9
- class Normal < Builder
10
- def teardown(img: false)
11
- @img.delete "force" => true if @img && img
12
- @context.rmtree if @context && \
13
- @context.directory?
14
- end
15
-
16
- # ----------------------------------------------------------------------
17
-
18
- def setup_context
19
- @context = @repo.tmpdir
20
- @copy = @context.join("copy")
21
- copy_dockerfile
22
- @copy.mkdir
23
- end
24
-
25
- # ----------------------------------------------------------------------
26
-
27
- private
28
- def copy_dockerfile
29
- dockerfile = @repo.root.join("Dockerfile").read
30
- data = ERB::Context.new(:metadata => @repo.metadata)
31
- data = ERB.new(dockerfile).result(data._binding)
32
- context = @context.join("Dockerfile")
33
- context.write(data)
34
- end
35
-
36
- # ----------------------------------------------------------------------
37
-
38
- private
39
- def cache_context
40
- return unless @repo.cacheable?
41
- return Cache.aliased_context(self) if alias?
42
- Cache.context(self, @context)
43
- end
44
- end
45
- end
46
- end