warding 1.0.1 → 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: e9267b5fc3eab4a6be04294384487902a8b912985c00b23719b35214fffce068
4
- data.tar.gz: c79a3897ce992395a0ac0004c18055999c56041e5d5628278027ee691a02ff2d
3
+ metadata.gz: b01d39b579dc6b923df3efb9e24b577cfa395a5b0c8af10132a6ef57f4f36316
4
+ data.tar.gz: 874ad35327459572601cfab840a1c56697ae800288752764fa031ea4bf916136
5
5
  SHA512:
6
- metadata.gz: 51122dcad475aeefbf92ebe49c8c85a6290d94aa1bf3fd64f2fa5c11d9d3b8d2507b6b6546669c5a10abcea34aef341ff7e9e0f196545114214226db566545e7
7
- data.tar.gz: f8d20c1bba7b6feb04fdc66436c30e5584ed0e03b46014962580a0eabb5edda00ea8d10cdfd2cc594e9d3a8fdb15f41c1405551dbde1619160ba690f9d7911b6
6
+ metadata.gz: 02b9d08406cc56ebf1c7475bfe7a99bc1957d07344c7881f194fb77fa3e83d15bd36b1e6af481c0277fe8b9cabab0ee9b140930f9ea4b554c19c923ef3693918
7
+ data.tar.gz: f0f3b24627977fa16f82f3e0b6773e4062e755f1f13eee13f9a44f5e9451574a0955e899de682a64b66f6f56bf744dd3411ab02dadd9b53af585f25afa175c2c
data/README.md CHANGED
@@ -13,9 +13,7 @@ gem install warding
13
13
  Or use the quick install method:
14
14
 
15
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
16
+ wget -qO- https://raw.githubusercontent.com/marlospomin/warding/master/debug/quick-install.sh | sh
19
17
  ```
20
18
 
21
19
  ## Usage
@@ -26,11 +24,13 @@ warding
26
24
  4. Run the binary executable `warding` and fill in the prompts.
27
25
  5. Enjoy.
28
26
 
29
- ## Tasklist
27
+ ## Debug
30
28
 
31
- * Refactor.
32
- * Suppress outputs.
33
- * Add extra checks.
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
34
 
35
35
  ## Contributing
36
36
 
@@ -1,9 +1,11 @@
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
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
@@ -1,5 +1,7 @@
1
- #!/bin/bash
2
-
3
- pacman -R man-pages --noconfirm
4
- pacman -Syy ruby glibc libxcrypt --noconfirm
5
- gem install warding
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,283 +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
- 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
+ # 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 = "1.0.1"
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: 1.0.1
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-09-09 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
@@ -41,7 +41,7 @@ files:
41
41
  - README.md
42
42
  - Rakefile
43
43
  - bin/warding
44
- - debug/install.sh
44
+ - debug/debug.sh
45
45
  - debug/quick-install.sh
46
46
  - lib/warding.rb
47
47
  - lib/warding/version.rb
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  requirements: []
71
- rubygems_version: 3.0.3
71
+ rubygems_version: 3.1.2
72
72
  signing_key:
73
73
  specification_version: 4
74
74
  summary: Warding Linux installer.