pi_build_modifier 0.1.4.pre.alpha → 0.2.0.pre.alpha
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pi_build_modifier.rb +8 -2
- data/lib/pi_build_modifier/boot-files/boot.rb +64 -0
- data/lib/pi_build_modifier/boot-files/templates/07-resize-init.diff.erb +5 -0
- data/lib/pi_build_modifier/config/logex.rb +25 -0
- data/lib/pi_build_modifier/locale/locale_debconf.rb +9 -1
- data/lib/pi_build_modifier/modifier/mapper.rb +1 -1
- data/lib/pi_build_modifier/modifier/pi_modifier.rb +4 -4
- data/lib/pi_build_modifier/modifier_task.rb +22 -5
- data/lib/pi_build_modifier/net-tweaks/wifi_network.rb +49 -9
- data/lib/pi_build_modifier/sys_tweaks/run_modifier.rb +0 -3
- data/lib/pi_build_modifier/sys_tweaks/ssh.rb +2 -1
- data/lib/pi_build_modifier/version.rb +1 -1
- data/pi_build_modifier.gemspec +2 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2166dffe358e62ffec35a50e83528f06ac2c543b
|
4
|
+
data.tar.gz: 737ac930c588b69ab8baf430837022370274db13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 055c01e36cdb9ae6473cd5598567470d034541115f1a8ed8be207fa7ef284cfaabcefbeff7e2fd639adccf1af5a640a6cc45c802a4d57cd68d32fbecc4b2527d
|
7
|
+
data.tar.gz: 4705763b3e1c33c7b0397a088316c59f99e48933628b99f4bc18b354b9d342522da96e75beea63cae959bfbde93a78063579691d56429f106bd3e0b3d80b6163
|
data/lib/pi_build_modifier.rb
CHANGED
@@ -23,17 +23,23 @@ require 'pi_build_modifier/net-tweaks/wifi_network'
|
|
23
23
|
require 'pi_build_modifier/modifier/erb_mapper'
|
24
24
|
require 'pi_build_modifier/version'
|
25
25
|
require 'pi_build_modifier/modifier_task'
|
26
|
+
require 'pi_build_modifier/config/logex'
|
26
27
|
|
27
28
|
module PiBuildModifier
|
29
|
+
|
30
|
+
##
|
31
|
+
# PiBuildModifier implements all cli commands of pi_build_modifier.
|
32
|
+
|
28
33
|
class PiBuildModifier < Thor
|
29
34
|
|
30
|
-
desc 'modify CONFIG WORKSPACE', 'Modify the pi image sources at the specified WORKSPACE with the specified configuration file.'
|
35
|
+
desc 'modify CONFIG WORKSPACE', 'Modify the pi image sources at the specified WORKSPACE with the specified configuration file CONFIG.'
|
31
36
|
def modify(config, workspace)
|
37
|
+
$logger.debug "modify #{config} #{workspace}"
|
32
38
|
task = Task::Modifier.new(config, workspace)
|
33
39
|
task.execute
|
34
40
|
end
|
35
41
|
|
36
|
-
desc 'version', 'Show the version of the modifier.'
|
42
|
+
desc 'v, version', 'Show the version of the modifier.'
|
37
43
|
def version
|
38
44
|
puts VERSION
|
39
45
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Copyright (c) 2017 Beate Ottenwälder
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
require 'erb'
|
22
|
+
require 'json'
|
23
|
+
|
24
|
+
module PiBuildModifier
|
25
|
+
|
26
|
+
##
|
27
|
+
# The Locale class is used to customize the locales
|
28
|
+
|
29
|
+
class Boot
|
30
|
+
|
31
|
+
C_GROUPS = 'cgroups'
|
32
|
+
|
33
|
+
C_GROUP_MEMORY = 'memory'
|
34
|
+
|
35
|
+
attr_accessor :c_groups
|
36
|
+
|
37
|
+
attr_reader :template_path, :relative_output_path
|
38
|
+
|
39
|
+
def initialize(c_groups = [''])
|
40
|
+
@c_groups = c_groups
|
41
|
+
@template_path = File.join(File.dirname(__FILE__), '/templates/07-resize-init.diff.erb').to_s
|
42
|
+
@relative_output_path = 'stage2/01-sys-tweaks/00-patches/07-resize-init.diff'
|
43
|
+
end
|
44
|
+
|
45
|
+
def mapper(workspace)
|
46
|
+
ERBMapper.new(self,workspace)
|
47
|
+
end
|
48
|
+
|
49
|
+
def map(json_data)
|
50
|
+
unless json_data.nil? || !json_data.has_key?(C_GROUPS)
|
51
|
+
if json_data[C_GROUPS].has_key?(C_GROUP_MEMORY) && json_data[C_GROUPS][C_GROUP_MEMORY]
|
52
|
+
@c_groups << 'cgroup_memory=1'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_binding
|
58
|
+
binding
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,5 @@
|
|
1
|
+
--- a/rootfs/boot/cmdline.txt
|
2
|
+
+++ b/rootfs/boot/cmdline.txt
|
3
|
+
@@ -1 +1 @@
|
4
|
+
-dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
|
5
|
+
+dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=ROOTDEV rootfstype=ext4 <%= @c_groups.join(' ') %> elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (c) 2017 Beate Ottenwälder
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
# of this software and associated documentation files (the "Software"), to deal
|
5
|
+
# in the Software without restriction, including without limitation the rights
|
6
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
# copies of the Software, and to permit persons to whom the Software is
|
8
|
+
# furnished to do so, subject to the following conditions:
|
9
|
+
#
|
10
|
+
# The above copyright notice and this permission notice shall be included in all
|
11
|
+
# copies or substantial portions of the Software.
|
12
|
+
#
|
13
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
19
|
+
# SOFTWARE.
|
20
|
+
|
21
|
+
require 'logger'
|
22
|
+
|
23
|
+
module PiBuildModifier
|
24
|
+
$logger = Logger.new(STDOUT)
|
25
|
+
end
|
@@ -22,6 +22,10 @@ require 'erb'
|
|
22
22
|
require 'json'
|
23
23
|
|
24
24
|
module PiBuildModifier
|
25
|
+
|
26
|
+
##
|
27
|
+
# The Locale class is used to customize the locales
|
28
|
+
|
25
29
|
class Locale
|
26
30
|
|
27
31
|
LOCALE = 'locale'
|
@@ -41,9 +45,13 @@ module PiBuildModifier
|
|
41
45
|
@relative_output_path = 'stage0/01-locale/00-debconf'
|
42
46
|
end
|
43
47
|
|
48
|
+
def mapper(workspace)
|
49
|
+
ERBMapper.new(self,workspace)
|
50
|
+
end
|
51
|
+
|
44
52
|
def map(json_data)
|
45
53
|
unless json_data.nil?
|
46
|
-
@gen_locales = json_data[LOCALE][GEN].map {|
|
54
|
+
@gen_locales = json_data[LOCALE][GEN].map {|gen| gen} if json_data.has_key?(LOCALE) && json_data[LOCALE].has_key?(GEN)
|
47
55
|
@sys_locale = json_data[LOCALE][SYS] if json_data.has_key?(LOCALE) && json_data[LOCALE].has_key?(SYS)
|
48
56
|
end
|
49
57
|
end
|
@@ -45,8 +45,8 @@ module PiBuildModifier
|
|
45
45
|
|
46
46
|
def modify
|
47
47
|
load_config
|
48
|
-
|
49
|
-
|
48
|
+
map_all
|
49
|
+
modify_all
|
50
50
|
end
|
51
51
|
|
52
52
|
private def load_config
|
@@ -59,13 +59,13 @@ module PiBuildModifier
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
private def
|
62
|
+
private def map_all
|
63
63
|
@mappers.each do |c|
|
64
64
|
c.map(@json_data)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
private def
|
68
|
+
private def modify_all
|
69
69
|
@mappers.each do |c|
|
70
70
|
c.modify
|
71
71
|
end
|
@@ -24,6 +24,8 @@ require 'pi_build_modifier/net-tweaks/wifi_network'
|
|
24
24
|
require 'pi_build_modifier/system/system_type'
|
25
25
|
require 'pi_build_modifier/sys_tweaks/run_modifier'
|
26
26
|
require 'pi_build_modifier/sys_tweaks/ssh'
|
27
|
+
require 'pi_build_modifier/locale/locale_debconf'
|
28
|
+
require 'pi_build_modifier/boot-files/boot'
|
27
29
|
|
28
30
|
module PiBuildModifier
|
29
31
|
module Task
|
@@ -32,13 +34,28 @@ module PiBuildModifier
|
|
32
34
|
attr_reader :pi_modifier
|
33
35
|
|
34
36
|
def initialize(config, workspace, pi_modifier = PiModifier.new)
|
37
|
+
@mappers = create_mappers
|
38
|
+
@mappers[:run_modifier].append(@mappers[:ssh]) #TODO: This connection has to be established somewhere else
|
35
39
|
@pi_modifier = pi_modifier
|
36
|
-
|
40
|
+
configure_pi_modifier(config, workspace)
|
41
|
+
end
|
37
42
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
43
|
+
private def create_mappers
|
44
|
+
{
|
45
|
+
:wpa_supplicant => WPASupplicant.new,
|
46
|
+
:system => System.new,
|
47
|
+
:ssh => Ssh.new,
|
48
|
+
:run_modifier => RunModifier.new,
|
49
|
+
:locale => Locale.new,
|
50
|
+
:boot => Boot.new
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
private def configure_pi_modifier(config, workspace)
|
55
|
+
@pi_modifier.with_json_configuration(config)
|
56
|
+
@mappers.each do |*, mapper_data|
|
57
|
+
@pi_modifier.with_mapper(mapper_data.mapper(workspace))
|
58
|
+
end
|
42
59
|
end
|
43
60
|
|
44
61
|
def execute
|
@@ -20,15 +20,19 @@
|
|
20
20
|
|
21
21
|
require 'erb'
|
22
22
|
require 'json'
|
23
|
+
require 'openssl'
|
24
|
+
require 'pi_build_modifier/modifier/erb_mapper'
|
23
25
|
|
24
26
|
module PiBuildModifier
|
25
|
-
class WifiNetwork
|
26
27
|
|
27
|
-
|
28
|
+
##
|
29
|
+
# WifiNetwork represents a network in the wpa_supplicant configuration
|
30
|
+
|
31
|
+
class WifiNetwork
|
28
32
|
|
29
|
-
attr_reader :
|
33
|
+
attr_reader :ssid, :psk
|
30
34
|
|
31
|
-
def initialize(ssid
|
35
|
+
def initialize(ssid, psk)
|
32
36
|
@ssid = ssid
|
33
37
|
@psk = psk
|
34
38
|
end
|
@@ -36,29 +40,65 @@ module PiBuildModifier
|
|
36
40
|
def to_s
|
37
41
|
sprintf('{
|
38
42
|
ssid="%s"
|
39
|
-
psk
|
43
|
+
psk=%s
|
40
44
|
}', ssid, psk)
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
48
|
+
##
|
49
|
+
# WPASupplicant represents the wpa_supplicant's configuration
|
50
|
+
|
44
51
|
class WPASupplicant
|
45
52
|
|
53
|
+
PASSKEY = 'passphrase'
|
54
|
+
|
55
|
+
WPA_PASSKEY = 'wpa_passphrase'
|
56
|
+
|
57
|
+
SSID = 'ssid'
|
58
|
+
|
46
59
|
attr_reader :template_path, :relative_output_path
|
47
60
|
|
48
|
-
def initialize
|
49
|
-
@networks =
|
50
|
-
@wpa_country =
|
61
|
+
def initialize
|
62
|
+
@networks = map_network(nil)
|
63
|
+
@wpa_country = 'DE'
|
51
64
|
@template_path = File.join(File.dirname(__FILE__), '/templates/wpa_supplicant.conf.erb').to_s
|
52
65
|
@relative_output_path = 'stage2/02-net-tweaks/files/wpa_supplicant.conf'
|
53
66
|
end
|
54
67
|
|
68
|
+
def mapper(workspace)
|
69
|
+
ERBMapper.new(self, workspace)
|
70
|
+
end
|
71
|
+
|
55
72
|
def map(json_data)
|
56
73
|
unless json_data.nil?
|
57
|
-
@networks = json_data['wifi']
|
74
|
+
@networks = map_network(json_data['wifi']) if json_data.has_key?('wifi')
|
58
75
|
@wpa_country = json_data['wifi']['wpa_country'] if json_data.has_key?('wifi') && json_data['wifi'].has_key?('wpa_country')
|
59
76
|
end
|
60
77
|
end
|
61
78
|
|
79
|
+
private def map_network(json_data)
|
80
|
+
if json_data.nil?
|
81
|
+
networks = Array.new(0)
|
82
|
+
else
|
83
|
+
networks = json_data['networks'].map do |rd|
|
84
|
+
ssid = if rd.has_key?(SSID)
|
85
|
+
rd[SSID]
|
86
|
+
else
|
87
|
+
'no_ssid'
|
88
|
+
end
|
89
|
+
psk = if rd.has_key?(PASSKEY)
|
90
|
+
OpenSSL::PKCS5.pbkdf2_hmac_sha1(rd[PASSKEY], ssid, 4096, 32).unpack("H*").first
|
91
|
+
elsif rd.has_key?(WPA_PASSKEY)
|
92
|
+
rd[WPA_PASSKEY]
|
93
|
+
else
|
94
|
+
'no_psk'
|
95
|
+
end
|
96
|
+
WifiNetwork.new(ssid, psk)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
networks
|
100
|
+
end
|
101
|
+
|
62
102
|
def get_binding
|
63
103
|
binding
|
64
104
|
end
|
@@ -21,6 +21,7 @@
|
|
21
21
|
require 'fileutils'
|
22
22
|
require 'pi_build_modifier/modifier/mapper'
|
23
23
|
require 'pi_build_modifier/sys_tweaks/run_modifier'
|
24
|
+
require 'pi_build_modifier/config/logex'
|
24
25
|
|
25
26
|
module PiBuildModifier
|
26
27
|
|
@@ -48,7 +49,7 @@ module PiBuildModifier
|
|
48
49
|
unless json_data.nil?
|
49
50
|
@enable = 'disable' if json_data.has_key?('ssh') && json_data['ssh'].has_key?('enabled') && (not json_data['ssh']['enabled'])
|
50
51
|
else
|
51
|
-
|
52
|
+
$logger.error 'Invalid json data.'
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
data/pi_build_modifier.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
19
|
f.match(%r{^(test|spec|features)/})
|
20
20
|
end
|
21
|
-
spec.executables
|
21
|
+
spec.executables = spec.files.grep(%r{^bin/}) {|f| File.basename(f)}
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', '~> 1.15'
|
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'rdoc', '~> 5.1'
|
29
29
|
spec.add_runtime_dependency 'thor', '~> 0.20'
|
30
30
|
spec.add_runtime_dependency 'json', '~> 2.1'
|
31
|
+
spec.add_runtime_dependency 'openssl', '~> 2.0'
|
31
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pi_build_modifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.pre.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Beate Ottenwälder
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '2.1'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: openssl
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.0'
|
111
125
|
description: Modifies the build process of a Raspbian image.
|
112
126
|
email: ottenwbe.public@gmail.com
|
113
127
|
executables:
|
@@ -124,6 +138,9 @@ files:
|
|
124
138
|
- Rakefile
|
125
139
|
- bin/pi_build_modifier
|
126
140
|
- lib/pi_build_modifier.rb
|
141
|
+
- lib/pi_build_modifier/boot-files/boot.rb
|
142
|
+
- lib/pi_build_modifier/boot-files/templates/07-resize-init.diff.erb
|
143
|
+
- lib/pi_build_modifier/config/logex.rb
|
127
144
|
- lib/pi_build_modifier/locale/locale_debconf.rb
|
128
145
|
- lib/pi_build_modifier/locale/templates/00-debconf.erb
|
129
146
|
- lib/pi_build_modifier/modifier/erb_mapper.rb
|