warding 0.2.4 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9c6e2a5ecc183e76cc17c2a4c16379223a2196b8ac65058318d8807629d0596f
4
- data.tar.gz: d76f2e4d69c808200b9381b77ebe3e4d3f55c50952d3eb717085af8d916b0e5c
3
+ metadata.gz: e9267b5fc3eab4a6be04294384487902a8b912985c00b23719b35214fffce068
4
+ data.tar.gz: c79a3897ce992395a0ac0004c18055999c56041e5d5628278027ee691a02ff2d
5
5
  SHA512:
6
- metadata.gz: 7b60126b88ec985713877eea1403449cce055c54ee958daf2a38b1a7a9bf77b4453373267262e2e41fc2b923d362a7e6a846181c8b53d2c7ece343b4566dd369
7
- data.tar.gz: 16f7123ff0d1dec8da58a4e7b6cff307d5a25185fa677493f1721647cf0ff370f8e6fec33cd8c1f8c5ce0707a2bceac018ad3c66696418d2e08eed34fa81838d
6
+ metadata.gz: 51122dcad475aeefbf92ebe49c8c85a6290d94aa1bf3fd64f2fa5c11d9d3b8d2507b6b6546669c5a10abcea34aef341ff7e9e0f196545114214226db566545e7
7
+ data.tar.gz: f8d20c1bba7b6feb04fdc66436c30e5584ed0e03b46014962580a0eabb5edda00ea8d10cdfd2cc594e9d3a8fdb15f41c1405551dbde1619160ba690f9d7911b6
@@ -0,0 +1,35 @@
1
+ name: Ruby Gem
2
+ on:
3
+ release:
4
+ types: [created]
5
+ jobs:
6
+ build:
7
+ name: Build/Publish
8
+ runs-on: ubuntu-latest
9
+ steps:
10
+ - uses: actions/checkout@v2
11
+ - name: Set up Ruby 2.6
12
+ uses: actions/setup-ruby@v1
13
+ with:
14
+ ruby-version: 2.6.x
15
+ - name: Publish to GPR
16
+ run: |
17
+ mkdir -p $HOME/.gem
18
+ touch $HOME/.gem/credentials
19
+ chmod 0600 $HOME/.gem/credentials
20
+ printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
21
+ gem build *.gemspec
22
+ gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
23
+ env:
24
+ GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}"
25
+ OWNER: ${{ github.repository_owner }}
26
+ - name: Publish to RubyGems
27
+ run: |
28
+ mkdir -p $HOME/.gem
29
+ touch $HOME/.gem/credentials
30
+ chmod 0600 $HOME/.gem/credentials
31
+ printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
32
+ gem build *.gemspec
33
+ gem push *.gem
34
+ env:
35
+ GEM_HOST_API_KEY: "Bearer ${{secrets.RUBYGEMS_AUTH_TOKEN}}"
data/.gitignore CHANGED
@@ -1,8 +1,8 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
@@ -1,155 +1,155 @@
1
- AllCops:
2
- TargetRubyVersion: 2.4
3
- # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
- # to ignore them, so only the ones explicitly set in this file are enabled.
5
- DisabledByDefault: true
6
-
7
- # Prefer &&/|| over and/or.
8
- Style/AndOr:
9
- Enabled: true
10
-
11
- # Align `when` with `case`.
12
- Layout/CaseIndentation:
13
- Enabled: true
14
-
15
- # Align comments with method definitions.
16
- Layout/CommentIndentation:
17
- Enabled: true
18
-
19
- Layout/ElseAlignment:
20
- Enabled: true
21
-
22
- # Align `end` with the matching keyword or starting expression except for
23
- # assignments, where it should be aligned with the LHS.
24
- Layout/EndAlignment:
25
- Enabled: true
26
- EnforcedStyleAlignWith: variable
27
- AutoCorrect: true
28
-
29
- Layout/EmptyLineAfterMagicComment:
30
- Enabled: true
31
-
32
- Layout/EmptyLinesAroundBlockBody:
33
- Enabled: true
34
-
35
- # In a regular class definition, no empty lines around the body.
36
- Layout/EmptyLinesAroundClassBody:
37
- Enabled: true
38
-
39
- # In a regular method definition, no empty lines around the body.
40
- Layout/EmptyLinesAroundMethodBody:
41
- Enabled: true
42
-
43
- # In a regular module definition, no empty lines around the body.
44
- Layout/EmptyLinesAroundModuleBody:
45
- Enabled: true
46
-
47
- Layout/FirstArgumentIndentation:
48
- Enabled: true
49
-
50
- # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
51
- Style/HashSyntax:
52
- Enabled: true
53
-
54
- # Two spaces, no tabs (for indentation).
55
- Layout/IndentationWidth:
56
- Enabled: true
57
-
58
- Layout/LeadingCommentSpace:
59
- Enabled: true
60
-
61
- Layout/SpaceAfterColon:
62
- Enabled: true
63
-
64
- Layout/SpaceAfterComma:
65
- Enabled: true
66
-
67
- Layout/SpaceAroundEqualsInParameterDefault:
68
- Enabled: true
69
-
70
- Layout/SpaceAroundKeyword:
71
- Enabled: true
72
-
73
- Layout/SpaceAroundOperators:
74
- Enabled: true
75
-
76
- Layout/SpaceBeforeComma:
77
- Enabled: true
78
-
79
- Layout/SpaceBeforeFirstArg:
80
- Enabled: true
81
-
82
- Style/DefWithParentheses:
83
- Enabled: true
84
-
85
- # Defining a method with parameters needs parentheses.
86
- Style/MethodDefParentheses:
87
- Enabled: true
88
-
89
- Style/FrozenStringLiteralComment:
90
- Enabled: true
91
- EnforcedStyle: always
92
-
93
- # Use `foo {}` not `foo{}`.
94
- Layout/SpaceBeforeBlockBraces:
95
- Enabled: true
96
-
97
- # Use `foo { bar }` not `foo {bar}`.
98
- Layout/SpaceInsideBlockBraces:
99
- Enabled: true
100
-
101
- # Use `{ a: 1 }` not `{a:1}`.
102
- Layout/SpaceInsideHashLiteralBraces:
103
- Enabled: true
104
-
105
- Layout/SpaceInsideParens:
106
- Enabled: true
107
-
108
- # Check quotes usage according to lint rule below.
109
- Style/StringLiterals:
110
- Enabled: true
111
- EnforcedStyle: double_quotes
112
-
113
- # Detect hard tabs, no hard tabs.
114
- Layout/IndentationStyle:
115
- Enabled: true
116
-
117
- # Blank lines should not have any spaces.
118
- Layout/TrailingEmptyLines:
119
- Enabled: true
120
-
121
- # No trailing whitespace.
122
- Layout/TrailingWhitespace:
123
- Enabled: true
124
-
125
- # Use quotes for string literals when they are enough.
126
- Style/RedundantPercentQ:
127
- Enabled: true
128
-
129
- # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
130
- Lint/RequireParentheses:
131
- Enabled: true
132
-
133
- Lint/RedundantStringCoercion:
134
- Enabled: true
135
-
136
- Lint/UriEscapeUnescape:
137
- Enabled: true
138
-
139
- Style/ParenthesesAroundCondition:
140
- Enabled: true
141
-
142
- Style/RedundantReturn:
143
- Enabled: true
144
- AllowMultipleReturnValues: true
145
-
146
- Style/Semicolon:
147
- Enabled: true
148
- AllowAsExpressionSeparator: true
149
-
150
- # Prefer Foo.method over Foo::method
151
- Style/ColonMethodCall:
152
- Enabled: true
153
-
154
- Style/TrivialAccessors:
155
- Enabled: true
1
+ AllCops:
2
+ TargetRubyVersion: 2.4
3
+ # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
+ # to ignore them, so only the ones explicitly set in this file are enabled.
5
+ DisabledByDefault: true
6
+
7
+ # Prefer &&/|| over and/or.
8
+ Style/AndOr:
9
+ Enabled: true
10
+
11
+ # Align `when` with `case`.
12
+ Layout/CaseIndentation:
13
+ Enabled: true
14
+
15
+ # Align comments with method definitions.
16
+ Layout/CommentIndentation:
17
+ Enabled: true
18
+
19
+ Layout/ElseAlignment:
20
+ Enabled: true
21
+
22
+ # Align `end` with the matching keyword or starting expression except for
23
+ # assignments, where it should be aligned with the LHS.
24
+ Layout/EndAlignment:
25
+ Enabled: true
26
+ EnforcedStyleAlignWith: variable
27
+ AutoCorrect: true
28
+
29
+ Layout/EmptyLineAfterMagicComment:
30
+ Enabled: true
31
+
32
+ Layout/EmptyLinesAroundBlockBody:
33
+ Enabled: true
34
+
35
+ # In a regular class definition, no empty lines around the body.
36
+ Layout/EmptyLinesAroundClassBody:
37
+ Enabled: true
38
+
39
+ # In a regular method definition, no empty lines around the body.
40
+ Layout/EmptyLinesAroundMethodBody:
41
+ Enabled: true
42
+
43
+ # In a regular module definition, no empty lines around the body.
44
+ Layout/EmptyLinesAroundModuleBody:
45
+ Enabled: true
46
+
47
+ Layout/FirstArgumentIndentation:
48
+ Enabled: true
49
+
50
+ # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
51
+ Style/HashSyntax:
52
+ Enabled: true
53
+
54
+ # Two spaces, no tabs (for indentation).
55
+ Layout/IndentationWidth:
56
+ Enabled: true
57
+
58
+ Layout/LeadingCommentSpace:
59
+ Enabled: true
60
+
61
+ Layout/SpaceAfterColon:
62
+ Enabled: true
63
+
64
+ Layout/SpaceAfterComma:
65
+ Enabled: true
66
+
67
+ Layout/SpaceAroundEqualsInParameterDefault:
68
+ Enabled: true
69
+
70
+ Layout/SpaceAroundKeyword:
71
+ Enabled: true
72
+
73
+ Layout/SpaceAroundOperators:
74
+ Enabled: true
75
+
76
+ Layout/SpaceBeforeComma:
77
+ Enabled: true
78
+
79
+ Layout/SpaceBeforeFirstArg:
80
+ Enabled: true
81
+
82
+ Style/DefWithParentheses:
83
+ Enabled: true
84
+
85
+ # Defining a method with parameters needs parentheses.
86
+ Style/MethodDefParentheses:
87
+ Enabled: true
88
+
89
+ Style/FrozenStringLiteralComment:
90
+ Enabled: true
91
+ EnforcedStyle: always
92
+
93
+ # Use `foo {}` not `foo{}`.
94
+ Layout/SpaceBeforeBlockBraces:
95
+ Enabled: true
96
+
97
+ # Use `foo { bar }` not `foo {bar}`.
98
+ Layout/SpaceInsideBlockBraces:
99
+ Enabled: true
100
+
101
+ # Use `{ a: 1 }` not `{a:1}`.
102
+ Layout/SpaceInsideHashLiteralBraces:
103
+ Enabled: true
104
+
105
+ Layout/SpaceInsideParens:
106
+ Enabled: true
107
+
108
+ # Check quotes usage according to lint rule below.
109
+ Style/StringLiterals:
110
+ Enabled: true
111
+ EnforcedStyle: double_quotes
112
+
113
+ # Detect hard tabs, no hard tabs.
114
+ Layout/IndentationStyle:
115
+ Enabled: true
116
+
117
+ # Blank lines should not have any spaces.
118
+ Layout/TrailingEmptyLines:
119
+ Enabled: true
120
+
121
+ # No trailing whitespace.
122
+ Layout/TrailingWhitespace:
123
+ Enabled: true
124
+
125
+ # Use quotes for string literals when they are enough.
126
+ Style/RedundantPercentQ:
127
+ Enabled: true
128
+
129
+ # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
130
+ Lint/RequireParentheses:
131
+ Enabled: true
132
+
133
+ Lint/RedundantStringCoercion:
134
+ Enabled: true
135
+
136
+ Lint/UriEscapeUnescape:
137
+ Enabled: true
138
+
139
+ Style/ParenthesesAroundCondition:
140
+ Enabled: true
141
+
142
+ Style/RedundantReturn:
143
+ Enabled: true
144
+ AllowMultipleReturnValues: true
145
+
146
+ Style/Semicolon:
147
+ Enabled: true
148
+ AllowAsExpressionSeparator: true
149
+
150
+ # Prefer Foo.method over Foo::method
151
+ Style/ColonMethodCall:
152
+ Enabled: true
153
+
154
+ Style/TrivialAccessors:
155
+ Enabled: true
data/Gemfile CHANGED
File without changes
@@ -1,33 +1,33 @@
1
- PATH
2
- remote: .
3
- specs:
4
- warding (0.1.0)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- pastel (0.8.0)
10
- tty-color (~> 0.5)
11
- rake (12.3.3)
12
- tty-color (0.5.1)
13
- tty-cursor (0.7.1)
14
- tty-prompt (0.22.0)
15
- pastel (~> 0.8)
16
- tty-reader (~> 0.8)
17
- tty-reader (0.8.0)
18
- tty-cursor (~> 0.7)
19
- tty-screen (~> 0.8)
20
- wisper (~> 2.0)
21
- tty-screen (0.8.1)
22
- wisper (2.0.1)
23
-
24
- PLATFORMS
25
- ruby
26
-
27
- DEPENDENCIES
28
- rake (~> 12.0)
29
- tty-prompt
30
- warding!
31
-
32
- BUNDLED WITH
33
- 2.1.4
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ warding (0.1.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ pastel (0.8.0)
10
+ tty-color (~> 0.5)
11
+ rake (12.3.3)
12
+ tty-color (0.5.1)
13
+ tty-cursor (0.7.1)
14
+ tty-prompt (0.22.0)
15
+ pastel (~> 0.8)
16
+ tty-reader (~> 0.8)
17
+ tty-reader (0.8.0)
18
+ tty-cursor (~> 0.7)
19
+ tty-screen (~> 0.8)
20
+ wisper (~> 2.0)
21
+ tty-screen (0.8.1)
22
+ wisper (2.0.1)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ rake (~> 12.0)
29
+ tty-prompt
30
+ warding!
31
+
32
+ BUNDLED WITH
33
+ 2.1.4
data/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2020 Marlos Pomin
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Marlos Pomin
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md CHANGED
@@ -10,26 +10,27 @@ Install warding by using the `gem install` command.
10
10
  gem install warding
11
11
  ```
12
12
 
13
+ Or use the quick install method:
14
+
15
+ ```bash
16
+ wget -qO- https://raw.githubusercontent/marlospomin/warding/master/debug/quick-install.sh
17
+ export PATH="`ruby -e 'puts Gem.user_dir'`/bin:$PATH"
18
+ warding
19
+ ```
20
+
13
21
  ## Usage
14
22
 
15
23
  1. Download Arch Linux.
16
- 2. Boot from the live ISO.
17
- 3. Install warding (Ruby may also be required).
24
+ 2. Boot the live ISO.
25
+ 3. Install warding either from source or with the gem command.
18
26
  4. Run the binary executable `warding` and fill in the prompts.
19
27
  5. Enjoy.
20
28
 
21
29
  ## Tasklist
22
30
 
23
- * Move base packages to `pacstrap`.
24
- * Fix steps that contain pipes.
25
- * Add `EDITOR` setting.
26
- * Add AUR support.
27
- * Add `NetworkManager` support.
28
- * Code missing features.
31
+ * Refactor.
32
+ * Suppress outputs.
29
33
  * Add extra checks.
30
- * Test installation.
31
- * Add GitHub actions.
32
- * Publish gem/package on GitHub.
33
34
 
34
35
  ## Contributing
35
36
 
data/Rakefile CHANGED
File without changes
@@ -12,4 +12,8 @@ warding.check
12
12
  # gather inputs from the user
13
13
  user_input = warding.gather
14
14
  # install warding
15
- warding.install(user_input)
15
+ if user_input[:system_settings][:encrypted]
16
+ warding.install(user_input, true)
17
+ else
18
+ warding.install(user_input)
19
+ end
@@ -0,0 +1,9 @@
1
+ #!/bin/bash
2
+
3
+ pacman -R man-pages --noconfirm
4
+ pacman -S ruby glibc libxcrypt --noconfirm
5
+ gem install bundle rake
6
+ export PATH="`ruby -e 'puts Gem.user_dir'`/bin:$PATH"
7
+ bundle
8
+ rake install
9
+ warding
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ pacman -R man-pages --noconfirm
4
+ pacman -Syy ruby glibc libxcrypt --noconfirm
5
+ gem install warding
@@ -1,249 +1,283 @@
1
- # frozen_string_literal: true
2
-
3
- require "warding/version"
4
- require "tty-prompt"
5
-
6
- module Warding
7
- class Error < StandardError; end
8
-
9
- class Installer
10
- @@prompt = TTY::Prompt.new
11
-
12
- def banner
13
- puts <<~'EOF'
14
-
15
- ( ( (
16
- )\))( ' ) ( )\ ) ( ( (
17
- ((_)()\ ) ( /( )( (()/( )\ ( )\))(
18
- _(())\_)() )(_)) (()\ ((_)) ((_) )\ ) ((_))\
19
- \ \((_)/ /((_)_ ((_) _| | (_) _(_/( (()(_)
20
- \ \/\/ / / _` | | '_| / _` | | | | ' \)) / _` |
21
- \_/\_/ \__,_| |_| \__,_| |_| |_||_| \__, |
22
- |___/
23
-
24
- EOF
25
- end
26
-
27
- def check
28
- unless `uname -a`.include?("archiso")
29
- @@prompt.error("Exiting...")
30
- @@prompt.warn("Warding can only be installed from within the live ISO context!")
31
- exit!
32
- end
33
-
34
- unless `[ -d /sys/firmware/efi ] && echo true`.include?("true")
35
- @@prompt.error("UEFI/EFI must be enabled to install warding")
36
- exit!
37
- end
38
- end
39
-
40
- def gather
41
- locales_list = %w[en-US es-ES pt-BR ru-RU fr-FR it-IT de-DE ja-JP ko-KR zh-CN]
42
- keymaps_list = %w[us uk br en fr de zh ru it es]
43
-
44
- parsed_input = @@prompt.collect do
45
- key(:update_mirrors).yes?("Update mirrorlist?")
46
- key(:system_language).select("Pick the desired system language:", locales_list)
47
- key(:keyboard_keymap).select("Pick your keyboard layout:", keymaps_list)
48
-
49
- unless @@prompt.yes?("Set timezone automatically?", default: true)
50
- key(:update_timezone).ask("Enter timezone:", required: true)
51
- end
52
-
53
- key(:root_password).mask("Insert new root password:", required: true)
54
-
55
- key(:system_settings) do
56
- bootloader = key(:bootloader).select("Which bootloader to use?", %w[systemd-boot grub])
57
- partitions = key(:partitions).select(
58
- "Select partition scheme to use:", ["/boot and /root", "/boot, /root and /home"]
59
- )
60
-
61
- key(:boot_size).slider("Boot drive partition size (MiB):", min: 512, max: 4096, default: 1024, step: 128)
62
-
63
- if partitions == "/boot, /root and /home"
64
- key(:home_size).slider("Home partition size (MiB):", min: 2048, max: 8192, default: 4096, step: 256)
65
- end
66
-
67
- key(:swap_size).slider("Swap partition size (MiB):", min: 1024, max: 8192, default: 2048, step: 256)
68
-
69
- if @@prompt.yes?("Enable encryption?", default: false)
70
- key(:encryption_settings) do
71
- key(:encryption_mode).expand("Which cryptic setup to use?") do |q|
72
- if partitions == "/boot, /root and /home"
73
- q.choice key: "m", name: "minimal (/home only)" do :minimal end
74
- q.choice key: "s", name: "safe (/home, /var, /tmp and swap)", value: :safe
75
- end
76
- q.choice key: "p", name: "paranoid (full disk encryption, except /boot)", value: :paranoid
77
- q.choice key: "i", name: "insane (full disk encryption)", value: :insane if bootloader == "grub"
78
- end
79
- key(:encryption_key).mask("Insert the encryption key:", required: true)
80
- end
81
- end
82
- end
83
-
84
- key(:extra_settings).multi_select("Select extra options:", %w[tools themes cron])
85
- end
86
-
87
- parsed_input
88
- end
89
-
90
- def install(data)
91
- if @@prompt.yes?("Confirm settings and continue?")
92
-
93
- @@prompt.say("Installing, please wait...")
94
-
95
- def setup_mirrors
96
- `reflector --latest 25 --sort rate --save /etc/pacman.d/mirrorlist`
97
- end
98
-
99
- setup_mirrors if data[:update_mirrors]
100
-
101
- def setup_timezone(timezone = false)
102
- `timedatectl set-ntp true`
103
- if timezone
104
- `timedatectl set-timezone #{timezone}`
105
- else
106
- `timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)"`
107
- end
108
- end
109
-
110
- data[:update_timezone] ? setup_timezone(data[:update_timezone]) : setup_timezone
111
-
112
- def setup_partitions(boot_size)
113
- `parted -s -a optimal /dev/sda \
114
- mklabel gpt \
115
- mkpart primary fat32 0% #{boot_size}Mib \
116
- set 1 esp on \
117
- mkpart primary ext4 #{boot_size}Mib 100% \
118
- set 2 lvm on
119
- `
120
- end
121
-
122
- setup_partitions(data[:system_settings][:boot_size])
123
-
124
- def setup_lvm(scheme, swap_size, home_size = false)
125
- `pvcreate /dev/sda2`
126
- `vgcreate vg0 /dev/sda2`
127
- `lvcreate -L #{swap_size}Mib vg0 -n swap`
128
- if scheme == "/boot, /root and /home"
129
- `lvcreate -L #{home_size}Mib vg0 -n home`
130
- end
131
- `lvcreate -l 100%FREE vg0 -n root`
132
-
133
- `mkfs.ext4 /dev/vg0/root`
134
- `mount /dev/vg0/root /mnt`
135
-
136
- if scheme == "/boot, /root and /home"
137
- `mkfs.ext4 /dev/vg0/home`
138
- `mount /dev/vg0/home /mnt/home`
139
- end
140
-
141
- `mkfs.fat -F32 /dev/sda1`
142
- `mkdir /mnt/boot`
143
- `mount /dev/sda1 /mnt/boot`
144
-
145
- `mkswap /dev/vg0/swap`
146
- `swapon /dev/vg0/swap`
147
- end
148
-
149
- if data[:system_settings][:partition] == "/boot, /root and /home"
150
- setup_lvm(data[:system_settings][:partition], data[:system_settings][:swap_size], data[:system_settings[:home_size]])
151
- else
152
- setup_lvm(data[:system_settings][:partition], data[:system_settings][:swap_size])
153
- end
154
-
155
- # setup encryption
156
-
157
- def setup_packages
158
- `pacman -Sy`
159
- `pacstrap /mnt base base-devel linux linux-firmware lvm2 mkinitcpio man-db nano fuse wget openbsd-netcat dhcpcd samba openssh openvpn unzip vim git zsh`
160
- `genfstab -U /mnt >> /mnt/etc/fstab`
161
- end
162
-
163
- setup_packages
164
-
165
- def setup_chroot(lang, keymap, password)
166
- `arch-chroot /mnt ln -sf /usr/share/zoneinfo/"$(curl --fail https://ipapi.co/timezone)" /etc/localtime`
167
- `arch-chroot /mnt hwclock --systohc`
168
-
169
- `echo "#{lang}.UTF-8" > /mnt/etc/locale.gen`
170
- `arch-chroot /mnt locale-gen`
171
- `echo "LANG=#{lang}.UTF-8" > /mnt/etc/locale.conf`
172
- `echo KEYMAP=#{keymap} > /mnt/etc/vconsole.conf`
173
- `echo "warding" > /mnt/etc/hostname`
174
- `echo "127.0.0.1 localhost\n::1 localhost\n127.0.1.1 warding.localdomain warding" > /mnt/etc/hosts`
175
-
176
- `arch-chroot /mnt echo -e "#{password}\n#{password}" | passwd`
177
-
178
- `sed -i "/^HOOK/s/filesystems/lvm2 filesystems/" /mnt/etc/mkinitcpio.conf`
179
- `arch-chroot /mnt mkinitcpio -p linux`
180
- `arch-chroot /mnt pacman -S intel-ucode --noconfirm`
181
- end
182
-
183
- setup_chroot(data[:system_language], data[:keyboard_keymap], data[:root_password])
184
-
185
- def setup_bootloader(loader)
186
- if loader == "systemd-boot"
187
- `arch-chroot /mnt bootctl install`
188
- `echo "title Warding Linux
189
- linux /vmlinuz-linux
190
- initrd /intel-ucode.img
191
- initrd /initramfs-linux.img
192
- options root=/dev/vg0/root rw" > /mnt/boot/loader/entries/warding.conf`
193
- else
194
- # TODO: grub
195
- end
196
- end
197
-
198
- setup_bootloader(data[:system_settings][:bootloader])
199
-
200
- def setup_usability
201
- # TODO: include gnome desktop
202
- `arch-chroot /mnt pacman -S xorg-server xf86-video-intel plasma konsole dolphin kmix sddm kvantum-qt5 --noconfirm`
203
- `mkdir /mnt/etc/sddm.conf.d`
204
- `echo "[Theme]\nCurrent=breeze" > /mnt/etc/sddm.conf.d/theme.conf`
205
- `echo "[Autologin]\nUser=root" > /mnt/etc/sddm.conf.d/login.conf`
206
- `arch-chroot /mnt systemctl enable dhcpcd`
207
- `arch-chroot /mnt systemctl enable sddm`
208
- `arch-chroot /mnt wget -q https://blackarch.org/strap.sh -O /tmp/strap.sh; bash /tmp/strap.sh`
209
- `arch-chroot /mnt wget -q https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O /tmp/zsh.sh; bash /tmp/zsh.sh`
210
- end
211
-
212
- setup_usability
213
-
214
- def setup_visuals
215
- `arch-chroot /mnt wget -q https://raw.githubusercontent.com/PapirusDevelopmentTeam/arc-kde/master/install.sh -O /tmp/theme.sh; bash /tmp/theme.sh`
216
- `arch-chroot /mnt wget -q https://git.io/papirus-icon-theme-install -O /tmp/papirus.sh; bash /tmp/papirus.sh`
217
- end
218
-
219
- setup_visuals if data[:extra_settings].include?("themes")
220
-
221
- def setup_extras
222
- `arch-chroot /mnt pacman -S nmap impacket go ruby php firefox atom hashcat john jre-openjdk proxychains-ng exploitdb httpie metasploit bind-tools radare2 sqlmap wpscan xclip --noconfirm`
223
- `arch-chroot /mnt mkdir -p /usr/share/wordlists`
224
- `arch-chroot /mnt wget -q https://github.com/danielmiessler/SecLists/raw/master/Passwords/Leaked-Databases/rockyou.txt.tar.gz -O /usr/share/wordlists/rockyou.txt.tar.gz`
225
- `arch-chroot /mnt wget -q https://github.com/danielmiessler/SecLists/raw/master/Discovery/Web-Content/common.txt -O /usr/share/wordlists/common.txt`
226
- end
227
-
228
- setup_extras if data[:extra_settings].include?("tools")
229
-
230
- def setup_cron
231
- `arch-chroot /mnt pacman -S cronie --noconfirm`
232
- `systemctl enable cronie`
233
- `#!/bin/bash\nreflector --latest 25 --sort rate --save /etc/pacman.d/mirrorlist > /etc/cron.hourly/mirrorlist`
234
- `#!/bin/bash\npacman -Sy > /etc/cron.weekly/pacmansync`
235
- `#!/bin/bash\npacman -Syu --noconfirm > /etc/cron.monthly/systemupgrade`
236
- end
237
-
238
- setup_cron if data[:extra_settings].include?("cron")
239
-
240
- def finish
241
- `umount -R /mnt`
242
- `reboot`
243
- end
244
-
245
- finish
246
- end
247
- end
248
- end
249
- end
1
+ # frozen_string_literal: true
2
+
3
+ require "warding/version"
4
+ require "tty-prompt"
5
+
6
+ module Warding
7
+ class Error < StandardError; end
8
+
9
+ class Installer
10
+ @@prompt = TTY::Prompt.new
11
+
12
+ def banner
13
+ puts <<~'EOF'
14
+
15
+ ( ( (
16
+ )\))( ' ) ( )\ ) ( ( (
17
+ ((_)()\ ) ( /( )( (()/( )\ ( )\))(
18
+ _(())\_)() )(_)) (()\ ((_)) ((_) )\ ) ((_))\
19
+ \ \((_)/ /((_)_ ((_) _| | (_) _(_/( (()(_)
20
+ \ \/\/ / / _` | | '_| / _` | | | | ' \)) / _` |
21
+ \_/\_/ \__,_| |_| \__,_| |_| |_||_| \__, |
22
+ |___/
23
+
24
+ EOF
25
+ end
26
+
27
+ def check
28
+ unless `uname -a`.include?("archiso")
29
+ @@prompt.error("Exiting...")
30
+ @@prompt.warn("Warding can only be installed from within the live ISO context!")
31
+ exit!
32
+ end
33
+
34
+ unless `[ -d /sys/firmware/efi ] && echo true`.include?("true")
35
+ @@prompt.error("UEFI/EFI must be enabled to install warding")
36
+ exit!
37
+ end
38
+ end
39
+
40
+ def gather
41
+ locales_list = %w[en_US es_ES pt_BR ru_RU fr_FR it_IT de_DE ja_JP ko_KR zh_CN]
42
+ keymaps_list = %w[us uk br en fr de zh ru it es]
43
+
44
+ parsed_input = @@prompt.collect do
45
+ key(:update_mirrors).yes?("Update mirrorlist?")
46
+ key(:system_language).select("Pick the desired system language:", locales_list)
47
+ key(:keyboard_keymap).select("Pick your keyboard layout:", keymaps_list)
48
+
49
+ unless @@prompt.yes?("Set timezone automatically?", default: true)
50
+ key(:update_timezone).ask("Enter timezone:", required: true)
51
+ end
52
+
53
+ key(:root_password).mask("Insert new root password:", required: true)
54
+
55
+ key(:system_settings) do
56
+ key(:boot_size).slider("Boot drive partition size (MiB):", min: 512, max: 4096, default: 1024, step: 128)
57
+ key(:swap_size).slider("Swap partition size (MiB):", min: 1024, max: 8192, default: 2048, step: 256)
58
+
59
+ if key(:encrypted).yes?("Enable encryption?", default: false)
60
+ key(:encryption_settings) do
61
+ key(:encryption_key).mask("Insert the encryption key:", required: true)
62
+ end
63
+ end
64
+ end
65
+
66
+ key(:desktop_environment).select("Select your desktop environment:", %w[plasma gnome none])
67
+ end
68
+
69
+ parsed_input
70
+ end
71
+
72
+ def install(data, encrypted=false)
73
+ if @@prompt.yes?("Confirm settings and continue?")
74
+
75
+ @@prompt.say("Installing, please wait...")
76
+
77
+ def setup_mirrors
78
+ # update mirrorlist
79
+ `reflector --latest 25 --sort rate --save /etc/pacman.d/mirrorlist`
80
+ end
81
+
82
+ setup_mirrors if data[:update_mirrors]
83
+
84
+ def setup_timezone(timezone = false)
85
+ # set clock
86
+ `timedatectl set-ntp true`
87
+ # set timezone
88
+ if timezone
89
+ `timedatectl set-timezone #{timezone}`
90
+ else
91
+ `timedatectl set-timezone "$(curl -s https://ipapi.co/timezone)"`
92
+ end
93
+ end
94
+
95
+ data[:update_timezone] ? setup_timezone(data[:update_timezone]) : setup_timezone
96
+
97
+ def setup_partitions(boot_size)
98
+ # create partitions
99
+ `parted -s -a optimal /dev/sda \
100
+ mklabel gpt \
101
+ mkpart primary fat32 0% #{boot_size}Mib \
102
+ set 1 esp on \
103
+ mkpart primary ext4 #{boot_size}Mib 100% \
104
+ set 2 lvm on
105
+ `
106
+ end
107
+
108
+ setup_partitions(data[:system_settings][:boot_size])
109
+
110
+ def setup_lvm(swap_size, key=false)
111
+ # setup encryption
112
+ if key
113
+ # create an encrypted volume
114
+ `echo "#{key}" | cryptsetup -q luksFormat --type luks2 --cipher aes-xts-plain64 --key-size 512 /dev/sda2`
115
+ # open the volume
116
+ `echo "#{key}" | cryptsetup open /dev/sda2 cryptlvm -`
117
+ # setup lvm
118
+ `pvcreate /dev/mapper/cryptlvm`
119
+ # create virtual group
120
+ `vgcreate vg0 /dev/mapper/cryptlvm`
121
+ else
122
+ # create physical volume
123
+ `pvcreate /dev/sda2`
124
+ # create virtual group
125
+ `vgcreate vg0 /dev/sda2`
126
+ end
127
+ # create logical volumes
128
+ `lvcreate -L #{swap_size}Mib vg0 -n swap`
129
+ `lvcreate -l 100%FREE vg0 -n root`
130
+ # make and mount rootfs
131
+ `mkfs.ext4 /dev/vg0/root`
132
+ `mount /dev/vg0/root /mnt`
133
+ # make and mount boot partition
134
+ `mkfs.fat -F32 /dev/sda1`
135
+ `mkdir /mnt/boot`
136
+ `mount /dev/sda1 /mnt/boot`
137
+ # setup swap
138
+ `mkswap /dev/vg0/swap`
139
+ `swapon /dev/vg0/swap`
140
+ end
141
+
142
+ if encrypted
143
+ setup_lvm(data[:system_settings][:swap_size], data[:system_settings][:encryption_settings][:encryption_key])
144
+ else
145
+ setup_lvm(data[:system_settings][:swap_size])
146
+ end
147
+
148
+ def setup_packages
149
+ # update packages list
150
+ `pacman -Syy`
151
+ # install base system
152
+ `pacstrap /mnt base base-devel linux linux-firmware linux-headers lvm2 mkinitcpio dmidecode reflector networkmanager cronie man-db nano vi fuse wget openbsd-netcat dhcpcd samba openssh openvpn unzip vim git zsh`
153
+ # generate fstab
154
+ `genfstab -U /mnt >> /mnt/etc/fstab`
155
+ end
156
+
157
+ setup_packages
158
+
159
+ def setup_chroot(lang, keymap, password, encrypted=false)
160
+ # set timezone
161
+ `arch-chroot /mnt ln -sf /usr/share/zoneinfo/"$(curl -s https://ipapi.co/timezone)" /etc/localtime`
162
+ # update clock
163
+ `arch-chroot /mnt hwclock --systohc`
164
+ # set locale
165
+ `echo "#{lang}.UTF-8 UTF-8" > /mnt/etc/locale.gen`
166
+ `arch-chroot /mnt locale-gen`
167
+ `echo "LANG=#{lang}.UTF-8" > /mnt/etc/locale.conf`
168
+ # set keymap
169
+ `echo "KEYMAP=#{keymap}" > /mnt/etc/vconsole.conf`
170
+ # update hostname
171
+ `echo "warding" > /mnt/etc/hostname`
172
+ # update hosts
173
+ `echo "127.0.0.1 localhost\n::1 localhost\n127.0.1.1 warding.localdomain warding" > /mnt/etc/hosts`
174
+ # update root password
175
+ `echo -e "#{password}\n#{password}" | arch-chroot /mnt passwd`
176
+ # update hooks
177
+ if encrypted
178
+ `sed -i "/^HOOK/s/modconf/keyboard keymap modconf/" /mnt/etc/mkinitcpio.conf`
179
+ `sed -i "/^HOOK/s/filesystems/encrypt lvm2 filesystems/" /mnt/etc/mkinitcpio.conf`
180
+ else
181
+ `sed -i "/^HOOK/s/filesystems/lvm2 filesystems/" /mnt/etc/mkinitcpio.conf`
182
+ end
183
+ # recompile initramfs
184
+ `arch-chroot /mnt mkinitcpio -P`
185
+ # add intel microcode
186
+ `arch-chroot /mnt pacman -S intel-ucode --noconfirm`
187
+ end
188
+
189
+ if encrypted
190
+ setup_chroot(data[:system_language], data[:keyboard_keymap], data[:root_password], true)
191
+ else
192
+ setup_chroot(data[:system_language], data[:keyboard_keymap], data[:root_password])
193
+ end
194
+
195
+ def setup_bootloader(encrypted=false)
196
+ # setup systemd-boot
197
+ `arch-chroot /mnt bootctl install`
198
+ `echo "title Warding Linux
199
+ linux /vmlinuz-linux
200
+ initrd /intel-ucode.img
201
+ initrd /initramfs-linux.img" > /mnt/boot/loader/entries/warding.conf`
202
+ if encrypted
203
+ `echo "options cryptdevice=UUID=$(blkid -s UUID -o value /dev/sda2):cryptlvm:allow-discards root=/dev/vg0/root quiet rw" >> /mnt/boot/loader/entries/warding.conf`
204
+ else
205
+ `echo "options root=/dev/vg0/root rw" >> /mnt/boot/loader/entries/warding.conf`
206
+ end
207
+ end
208
+
209
+ if encrypted
210
+ setup_bootloader(true)
211
+ else
212
+ setup_bootloader
213
+ end
214
+
215
+ def setup_usability
216
+ # enable internet
217
+ `arch-chroot /mnt systemctl enable NetworkManager`
218
+ # add cron jobs
219
+ `echo "#!/bin/bash\nreflector --latest 25 --sort rate --save /etc/pacman.d/mirrorlist" > /mnt/etc/cron.hourly/mirrorlist; chmod +x /mnt/etc/cron.hourly/mirrorlist`
220
+ `echo "#!/bin/bash\npacman -Sy" > /mnt/etc/cron.weekly/pacman-sync; chmod +x /mnt/etc/cron.weekly/pacman-sync`
221
+ `echo "#!/bin/bash\npacman -Syu --noconfirm" > /mnt/etc/cron.monthly/system-upgrade; chmod +x /mnt/etc/cron.monthly/system-upgrade`
222
+ # enable cron jobs
223
+ `arch-chroot /mnt systemctl enable cronie`
224
+ # change default shell
225
+ `arch-chroot /mnt chsh -s /usr/bin/zsh`
226
+ # setup blackarch's keyring
227
+ `arch-chroot /mnt curl -s -O https://blackarch.org/keyring/blackarch-keyring.pkg.tar.xz{,.sig}`
228
+ `arch-chroot /mnt gpg --keyserver hkp://pgp.mit.edu --recv-keys 4345771566D76038C7FEB43863EC0ADBEA87E4E3`
229
+ `arch-chroot /mnt gpg --keyserver-options no-auto-key-retrieve --with-fingerprint blackarch-keyring.pkg.tar.xz.sig`
230
+ `arch-chroot /mnt pacman-key --init`
231
+ `arch-chroot /mnt rm blackarch-keyring.pkg.tar.xz.sig`
232
+ `arch-chroot /mnt pacman --noconfirm -U blackarch-keyring.pkg.tar.xz`
233
+ `arch-chroot /mnt pacman-key --populate`
234
+ `arch-chroot /mnt rm blackarch-keyring.pkg.tar.xz`
235
+ `arch-chroot /mnt curl -s https://blackarch.org/blackarch-mirrorlist -o /etc/pacman.d/blackarch-mirrorlist`
236
+ `echo "[blackarch]\nInclude = /etc/pacman.d/blackarch-mirrorlist" >> /mnt/etc/pacman.conf`
237
+ # update package list
238
+ `arch-chroot /mnt pacman -Syy`
239
+ # check if on VM
240
+ if `arch-chroot /mnt dmidecode -s system-manufacturer`.include?("VMware, Inc.")
241
+ # install and enable VMware utils
242
+ `arch-chroot /mnt pacman -S open-vm-tools --noconfirm`
243
+ `arch-chroot /mnt systemctl enable vmtoolsd`
244
+ end
245
+ end
246
+
247
+ setup_usability
248
+
249
+ def setup_visuals(theme = "none")
250
+ if theme == "none"
251
+ nil
252
+ elsif theme == "plasma"
253
+ # install packages
254
+ `arch-chroot /mnt pacman -S xorg-server xf86-video-intel plasma konsole dolphin kmix sddm kvantum-qt5`
255
+ # create conf dir
256
+ `mkdir -p /mnt/etc/sddm.conf.d`
257
+ # fix theme
258
+ `echo "[Theme]\nCurrent=breeze" > /mnt/etc/sddm.conf.d/theme.conf`
259
+ # enable autologin
260
+ `echo "[Autologin]\nUser=root" > /mnt/etc/sddm.conf.d/login.conf`
261
+ # enable sddm
262
+ `arch-chroot /mnt systemctl enable sddm`
263
+ else
264
+ # install packages
265
+ `arch-chroot /mnt pacman -S xf86-video-intel gnome`
266
+ # enable gdm
267
+ `arch-chroot /mnt systemctl enable gdm`
268
+ end
269
+ end
270
+
271
+ setup_visuals(data[:desktop_environment])
272
+
273
+ def finish
274
+ # end
275
+ `umount -R /mnt`
276
+ `reboot`
277
+ end
278
+
279
+ finish
280
+ end
281
+ end
282
+ end
283
+ end
@@ -1,5 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
- module Warding
4
- VERSION = "0.2.4"
5
- end
1
+ # frozen_string_literal: true
2
+
3
+ module Warding
4
+ VERSION = "1.0.1"
5
+ end
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: warding
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marlos Pomin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-17 00:00:00.000000000 Z
11
+ date: 2020-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-prompt
@@ -32,6 +32,7 @@ executables:
32
32
  extensions: []
33
33
  extra_rdoc_files: []
34
34
  files:
35
+ - ".github/workflows/default.yml"
35
36
  - ".gitignore"
36
37
  - ".rubocop.yml"
37
38
  - Gemfile
@@ -40,6 +41,8 @@ files:
40
41
  - README.md
41
42
  - Rakefile
42
43
  - bin/warding
44
+ - debug/install.sh
45
+ - debug/quick-install.sh
43
46
  - lib/warding.rb
44
47
  - lib/warding/version.rb
45
48
  - warding.gemspec
@@ -65,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
65
68
  - !ruby/object:Gem::Version
66
69
  version: '0'
67
70
  requirements: []
68
- rubygems_version: 3.1.2
71
+ rubygems_version: 3.0.3
69
72
  signing_key:
70
73
  specification_version: 4
71
74
  summary: Warding Linux installer.