warding 0.2.6 → 1.0.2

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: 6c34288feb935d5458a0a3edad7b09638861d8122d0d6675c45eff07e3e6c283
4
- data.tar.gz: 50f8b7a2c1a5e04d50c9841427445e2c9bc0c1197fa7e4127fa241776e600cf1
3
+ metadata.gz: b01d39b579dc6b923df3efb9e24b577cfa395a5b0c8af10132a6ef57f4f36316
4
+ data.tar.gz: 874ad35327459572601cfab840a1c56697ae800288752764fa031ea4bf916136
5
5
  SHA512:
6
- metadata.gz: 4e48333eae63a98dc386e9d9160d7647121c9272be000e8a1c7fbe1c62f15fedf789e5dd4e395e55c681678edeba01c22edadd89a69410816622c6906c691fcf
7
- data.tar.gz: 8657a758c6a956cfca4e4b13732215ea3460e2d6dd0c4528f5502f01652c3c460c65e544805f2a5e5ea43a1d7ca6340776bec6b4659a7f33ef47c22b68534a27
6
+ metadata.gz: 02b9d08406cc56ebf1c7475bfe7a99bc1957d07344c7881f194fb77fa3e83d15bd36b1e6af481c0277fe8b9cabab0ee9b140930f9ea4b554c19c923ef3693918
7
+ data.tar.gz: f0f3b24627977fa16f82f3e0b6773e4062e755f1f13eee13f9a44f5e9451574a0955e899de682a64b66f6f56bf744dd3411ab02dadd9b53af585f25afa175c2c
@@ -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/README.md CHANGED
@@ -1,38 +1,41 @@
1
- # Warding [![Gem Version](https://badge.fury.io/rb/warding.svg)](https://badge.fury.io/rb/warding)
2
-
3
- > Custom Arch Linux installer designed for security assessments and pentesting.
4
-
5
- ## Installation
6
-
7
- Install warding by using the `gem install` command.
8
-
9
- ```bash
10
- gem install warding
11
- ```
12
-
13
- ## Usage
14
-
15
- 1. Download Arch Linux.
16
- 2. Boot from the live ISO.
17
- 3. Install warding (Ruby may also be required).
18
- 4. Run the binary executable `warding` and fill in the prompts.
19
- 5. Enjoy.
20
-
21
- ## Tasklist
22
-
23
- * Fix steps that contain pipes.
24
- * Add default smb conf.
25
- * Add AUR support.
26
- * Add `NetworkManager` support.
27
- * Code missing features.
28
- * Add extra checks.
29
- * Add GitHub actions.
30
- * Publish gem/package on GitHub.
31
-
32
- ## Contributing
33
-
34
- Bug reports and pull requests are welcome on GitHub at https://github.com/marlospomin/warding.
35
-
36
- ## License
37
-
38
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
1
+ # Warding [![Gem Version](https://badge.fury.io/rb/warding.svg)](https://badge.fury.io/rb/warding)
2
+
3
+ > Custom Arch Linux installer designed for security assessments and pentesting.
4
+
5
+ ## Installation
6
+
7
+ Install warding by using the `gem install` command.
8
+
9
+ ```bash
10
+ gem install warding
11
+ ```
12
+
13
+ Or use the quick install method:
14
+
15
+ ```bash
16
+ wget -qO- https://raw.githubusercontent.com/marlospomin/warding/master/debug/quick-install.sh | sh
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ 1. Download Arch Linux.
22
+ 2. Boot the live ISO.
23
+ 3. Install warding either from source or with the gem command.
24
+ 4. Run the binary executable `warding` and fill in the prompts.
25
+ 5. Enjoy.
26
+
27
+ ## Debug
28
+
29
+ To install the latest version (debug) of warding follow the steps below:
30
+
31
+ ```bash
32
+ wget -qO- https://raw.githubusercontent.com/marlospomin/warding/master/debug/debug.sh | sh
33
+ ```
34
+
35
+ ## Contributing
36
+
37
+ Bug reports and pull requests are welcome on GitHub at https://github.com/marlospomin/warding.
38
+
39
+ ## License
40
+
41
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/bin/warding CHANGED
@@ -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
data/debug/debug.sh ADDED
@@ -0,0 +1,11 @@
1
+ #!/bin/bash
2
+
3
+ pacman -S git ruby glibc libxcrypt --noconfirm
4
+ git clone https://github.com/marlospomin/warding
5
+ cd warding
6
+ pacman -R man-pages --noconfirm
7
+ gem install bundle rake
8
+ export PATH="`ruby -e 'puts Gem.user_dir'`/bin:$PATH"
9
+ bundle
10
+ rake install
11
+ warding
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ pacman -R man-pages --noconfirm
4
+ pacman -Syy ruby glibc libxcrypt --noconfirm
5
+ gem install warding
6
+ export PATH="`ruby -e 'puts Gem.user_dir'`/bin:$PATH"
7
+ warding
data/lib/warding.rb CHANGED
@@ -1,257 +1,268 @@
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[desktop-environment hacking-tools crons])
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 -s 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 -Syy`
159
- `pacstrap /mnt base base-devel linux linux-firmware lvm2 mkinitcpio reflector man-db nano vi 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 -s 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
- `echo -e "#{password}\n#{password}" | arch-chroot /mnt passwd`
177
-
178
- `sed -i "/^HOOK/s/filesystems/lvm2 filesystems/" /mnt/etc/mkinitcpio.conf`
179
- `arch-chroot /mnt mkinitcpio -p linux 2>/dev/null`
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 2>/dev/null`
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
- `arch-chroot /mnt systemctl enable dhcpcd`
202
-
203
- `arch-chroot /mnt sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"`
204
-
205
- `wget -q https://blackarch.org/keyring/blackarch-keyring.pkg.tar.xz{,.sig}`
206
- `gpg --keyserver hkp://pgp.mit.edu --recv-keys 4345771566D76038C7FEB43863EC0ADBEA87E4E3 > /dev/null 2>&1`
207
- `gpg --keyserver-options no-auto-key-retrieve --with-fingerprint blackarch-keyring.pkg.tar.xz.sig > /dev/null 2>&1`
208
- `rm blackarch-keyring.pkg.tar.xz.sig`
209
- `pacman-key --init`
210
- `pacman --config /dev/null --noconfirm -U blackarch-keyring.pkg.tar.xz`
211
- `pacman-key --populate`
212
- `pacman -Syy`
213
- end
214
-
215
- setup_usability
216
-
217
- def setup_visuals
218
- `arch-chroot /mnt pacman -S xorg-server xf86-video-intel plasma konsole dolphin kmix sddm kvantum-qt5`
219
- `mkdir -p /mnt/etc/sddm.conf.d`
220
- `echo "[Theme]\nCurrent=breeze" > /mnt/etc/sddm.conf.d/theme.conf`
221
- `echo "[Autologin]\nUser=root" > /mnt/etc/sddm.conf.d/login.conf`
222
- `arch-chroot /mnt systemctl enable sddm`
223
- `arch-chroot /mnt wget -qO- https://raw.githubusercontent.com/PapirusDevelopmentTeam/arc-kde/master/install.sh | sh`
224
- `arch-chroot /mnt wget -qO- https://git.io/papirus-icon-theme-install | sh`
225
- end
226
-
227
- setup_visuals if data[:extra_settings].include?("desktop-emvironment")
228
-
229
- def setup_tools
230
- `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`
231
- `arch-chroot /mnt mkdir -p /usr/share/wordlists`
232
- `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`
233
- `arch-chroot /mnt wget -q https://github.com/danielmiessler/SecLists/raw/master/Discovery/Web-Content/common.txt -O /usr/share/wordlists/common.txt`
234
- end
235
-
236
- setup_tools if data[:extra_settings].include?("hacking-tools")
237
-
238
- def setup_cron
239
- `arch-chroot /mnt pacman -S cronie --noconfirm`
240
- `arch-chroot /mnt systemctl enable cronie`
241
- `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`
242
- `echo "#!/bin/bash\npacman -Sy" > /mnt/etc/cron.weekly/pacman-sync; chmod +x /mnt/etc/cron.weekly/pacman-sync`
243
- `echo "#!/bin/bash\npacman -Syu --noconfirm" > /mnt/etc/cron.monthly/system-upgrade; chmod +x /mnt/etc/cron.monthly/system-upgrade`
244
- end
245
-
246
- setup_cron if data[:extra_settings].include?("crons")
247
-
248
- def finish
249
- `umount -R /mnt`
250
- `reboot`
251
- end
252
-
253
- finish
254
- end
255
- end
256
- end
257
- 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:", default: "warding")
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 i3 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 100 --sort rate --save /etc/pacman.d/mirrorlist`
80
+ end
81
+
82
+ def setup_timezone(timezone = false)
83
+ # set clock
84
+ `timedatectl set-ntp true`
85
+ # set timezone
86
+ if timezone
87
+ `timedatectl set-timezone #{timezone}`
88
+ else
89
+ `timedatectl set-timezone "$(curl -s https://ipapi.co/timezone)"`
90
+ end
91
+ end
92
+
93
+ def setup_partitions(boot_size)
94
+ # create partitions
95
+ `parted -s -a optimal /dev/sda \
96
+ mklabel gpt \
97
+ mkpart primary fat32 0% #{boot_size}Mib \
98
+ set 1 esp on \
99
+ mkpart primary ext4 #{boot_size}Mib 100% \
100
+ set 2 lvm on
101
+ `
102
+ end
103
+
104
+ def setup_lvm(swap_size, key = false)
105
+ # setup encryption
106
+ if key
107
+ # create an encrypted volume
108
+ `echo "#{key}" | cryptsetup -q luksFormat --type luks2 --cipher aes-xts-plain64 --key-size 512 /dev/sda2`
109
+ # open the volume
110
+ `echo "#{key}" | cryptsetup open /dev/sda2 cryptlvm -`
111
+ # setup lvm
112
+ `pvcreate /dev/mapper/cryptlvm`
113
+ # create virtual group
114
+ `vgcreate vg0 /dev/mapper/cryptlvm`
115
+ else
116
+ # create physical volume
117
+ `pvcreate /dev/sda2`
118
+ # create virtual group
119
+ `vgcreate vg0 /dev/sda2`
120
+ end
121
+ # create logical volumes
122
+ `lvcreate -L #{swap_size}Mib vg0 -n swap`
123
+ `lvcreate -l 100%FREE vg0 -n root`
124
+ # make and mount rootfs
125
+ `mkfs.ext4 -q /dev/vg0/root`
126
+ `mount /dev/vg0/root /mnt`
127
+ # make and mount boot partition
128
+ `mkfs.fat -F32 /dev/sda1`
129
+ `mkdir /mnt/boot`
130
+ `mount /dev/sda1 /mnt/boot`
131
+ # setup swap
132
+ `mkswap /dev/vg0/swap`
133
+ `swapon /dev/vg0/swap`
134
+ end
135
+
136
+ def setup_packages
137
+ # update packages list
138
+ `pacman -Syy`
139
+ # install base system
140
+ `pacstrap /mnt base base-devel linux linux-firmware linux-headers lvm2 mkinitcpio dmidecode smbclient reflector networkmanager go cronie man-db nano vi fuse wget openbsd-netcat dhcpcd samba openssh openvpn unzip vim git zsh`
141
+ # generate fstab
142
+ `genfstab -U /mnt >> /mnt/etc/fstab`
143
+ end
144
+
145
+ def setup_chroot(lang, keymap, password = "warding", encrypted = false)
146
+ # set timezone
147
+ `arch-chroot /mnt ln -sf /usr/share/zoneinfo/"$(curl -s https://ipapi.co/timezone)" /etc/localtime`
148
+ # update clock
149
+ `arch-chroot /mnt hwclock --systohc`
150
+ # set locale
151
+ `echo "#{lang}.UTF-8 UTF-8" > /mnt/etc/locale.gen`
152
+ `arch-chroot /mnt locale-gen`
153
+ `echo "LANG=#{lang}.UTF-8" > /mnt/etc/locale.conf`
154
+ # set keymap
155
+ `echo "KEYMAP=#{keymap}" > /mnt/etc/vconsole.conf`
156
+ # update hostname
157
+ `echo "warding" > /mnt/etc/hostname`
158
+ # update hosts
159
+ `echo "127.0.0.1 localhost\n::1 localhost\n127.0.1.1 warding.localdomain warding" > /mnt/etc/hosts`
160
+ # update root password
161
+ `echo -e "#{password}\n#{password}" | arch-chroot /mnt passwd`
162
+ # update hooks
163
+ if encrypted
164
+ `sed -i "/^HOOK/s/modconf/keyboard keymap modconf/" /mnt/etc/mkinitcpio.conf`
165
+ `sed -i "/^HOOK/s/filesystems/encrypt lvm2 filesystems/" /mnt/etc/mkinitcpio.conf`
166
+ else
167
+ `sed -i "/^HOOK/s/filesystems/lvm2 filesystems/" /mnt/etc/mkinitcpio.conf`
168
+ end
169
+ # recompile initramfs
170
+ `arch-chroot /mnt mkinitcpio -P`
171
+ # add intel microcode
172
+ `arch-chroot /mnt pacman -S amd-ucode --noconfirm`
173
+ end
174
+
175
+ def setup_bootloader(encrypted = false)
176
+ # setup systemd-boot
177
+ `arch-chroot /mnt bootctl install`
178
+ `echo "title Warding Linux
179
+ linux /vmlinuz-linux
180
+ initrd /amd-ucode.img
181
+ initrd /initramfs-linux.img" > /mnt/boot/loader/entries/warding.conf`
182
+ if encrypted
183
+ `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`
184
+ else
185
+ `echo "options root=/dev/vg0/root rw" >> /mnt/boot/loader/entries/warding.conf`
186
+ end
187
+ end
188
+
189
+ def setup_usability
190
+ # enable internet
191
+ `arch-chroot /mnt systemctl -q enable NetworkManager`
192
+ # add cron jobs
193
+ `echo "#!/bin/bash\nreflector --latest 100 --sort rate --save /etc/pacman.d/mirrorlist" > /mnt/etc/cron.weekly/mirrorlist; chmod +x /mnt/etc/cron.weekly/mirrorlist`
194
+ `echo "#!/bin/bash\npacman -Sy" > /mnt/etc/cron.weekly/pacman-sync; chmod +x /mnt/etc/cron.weekly/pacman-sync`
195
+ `echo "#!/bin/bash\npacman -Syu --noconfirm" > /mnt/etc/cron.monthly/system-upgrade; chmod +x /mnt/etc/cron.monthly/system-upgrade`
196
+ # enable cron jobs
197
+ `arch-chroot /mnt systemctl -q enable cronie`
198
+ # change default shell
199
+ `arch-chroot /mnt chsh -s /usr/bin/zsh`
200
+ # setup wordlists
201
+ `arch-chroot /mnt mkdir -p /usr/share/wordlists`
202
+ `arch-chroot /mnt curl -s https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/raft-large-directories-lowercase.txt -O --output-dir /usr/share/wordlists`
203
+ `arch-chroot /mnt curl -s https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/common.txt -O --output-dir /usr/share/wordlists`
204
+ `arch-chroot /mnt curl -s https://github.com/danielmiessler/SecLists/raw/master/Passwords/Leaked-Databases/rockyou.txt.tar.gz -O --output-dir /usr/share/wordlists`
205
+ # setup drivers
206
+ `arch-chroot /mnt pacman -S alsa-utils alsa-plugins alsa-lib --noc`
207
+ # update package list
208
+ `arch-chroot /mnt pacman -Syy`
209
+ # user creation --fix
210
+ `arch-chroot /mnt useradd -m -g wheel -s /bin/zsh ward`
211
+ `sed -i '85 s/# %wheel ALL=(ALL) NOPASSWD: ALL/%wheel ALL=(ALL) NOPASSWD: ALL/g' /mnt/etc/sudoers`
212
+ `arch-chroot /mnt sudo -u ward sh -c "cd /home/ward; git clone https://aur.archlinux.org/yay.git; cd yay; makepkg -si --noconfirm"`
213
+ `arch-chroot /mnt sudo -u ward sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended`
214
+ # check if on VM
215
+ if `arch-chroot /mnt dmidecode -s system-manufacturer`.include?("VMware, Inc.")
216
+ # install and enable VMware utils
217
+ `arch-chroot /mnt pacman -S open-vm-tools --noconfirm`
218
+ `arch-chroot /mnt systemctl -q enable vmtoolsd`
219
+ end
220
+ end
221
+
222
+ def setup_visuals(theme)
223
+ case theme
224
+ when "plasma"
225
+ # install packages
226
+ `arch-chroot /mnt pacman -S xorg-server plasma-meta gtkmm konsole sddm kvantum-qt5 --noc -q`
227
+ # create conf dir
228
+ `mkdir -p /mnt/etc/sddm.conf.d`
229
+ # fix theme
230
+ `echo "[Theme]\nCurrent=breeze" > /mnt/etc/sddm.conf.d/theme.conf`
231
+ # enable autologin
232
+ `echo "[Autologin]\nUser=ward\nSession=plasma" > /mnt/etc/sddm.conf.d/autologin.conf`
233
+ # enable sddm
234
+ `arch-chroot /mnt systemctl -q enable sddm`
235
+ when "gnome"
236
+ # install packages
237
+ `arch-chroot /mnt pacman -S xf86-video-intel gtkmm gnome --noc`
238
+ # enable gdm
239
+ `arch-chroot /mnt systemctl -q enable gdm`
240
+ when "i3"
241
+ # install packages
242
+ `arch-chroot /mnt pacman -S lightdm lightdm-gtk-greeter xorg-server xorg-apps xorg-xinit i3-wm --noc`
243
+ # enable lightdm
244
+ `arch-chroot /mnt systemctl -q enable lightdm`
245
+ else
246
+ nil
247
+ end
248
+ end
249
+
250
+ def finish
251
+ `umount -R /mnt`
252
+ `reboot`
253
+ end
254
+
255
+ setup_mirrors if data[:update_mirrors]
256
+ data[:update_timezone] ? setup_timezone(data[:update_timezone]) : setup_timezone
257
+ setup_partitions(data[:system_settings][:boot_size])
258
+ data[:system_settings][:encrypted] ? setup_lvm(data[:system_settings][:swap_size], data[:system_settings][:encryption_settings][:encryption_key]) : setup_lvm(data[:system_settings][:swap_size])
259
+ setup_packages
260
+ data[:system_settings][:encrypted] ? setup_chroot(data[:system_language], data[:keyboard_keymap], data[:root_password], true) : setup_chroot(data[:system_language], data[:keyboard_keymap], data[:root_password])
261
+ data[:system_settings][:encrypted] ? setup_bootloader(true) : setup_bootloader
262
+ setup_usability
263
+ setup_visuals(data[:desktop_environment])
264
+ finish
265
+ end
266
+ end
267
+ end
268
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Warding
4
- VERSION = "0.2.6"
4
+ VERSION = "1.0.2"
5
5
  end
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.6
4
+ version: 1.0.2
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-22 00:00:00.000000000 Z
11
+ date: 2021-08-01 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/debug.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.0.3
71
+ rubygems_version: 3.1.2
69
72
  signing_key:
70
73
  specification_version: 4
71
74
  summary: Warding Linux installer.