-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patharchlinux_postinstall_script.sh
More file actions
executable file
·412 lines (361 loc) · 16 KB
/
Copy patharchlinux_postinstall_script.sh
File metadata and controls
executable file
·412 lines (361 loc) · 16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
#!/bin/bash
# post-install.sh — пост-инсталляционные настройки для Arch Linux и Arch-based distros
# Пользователь: als
# Для использования нужно сменить все вхождения als в скрипте на своего пользователя
# На основе Arch Wiki:
# https://wiki.archlinux.org/title/General_recommendations
# https://wiki.archlinux.org/title/System_maintenance
# https://wiki.archlinux.org/title/Arch_User_Repository
set -euo pipefail
USERNAME="als"
DISTRO_NAME=$(awk -F= '$1=="NAME"{print $2}' /etc/os-release 2>/dev/null || echo "Arch Linux")
echo "==============================================================================="
echo "Пост-инсталляционный скрипт для $DISTRO_NAME"
echo "Пользователь: $USERNAME"
echo "==============================================================================="
# ================================================================================
# СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ ЕСЛИ ЕГО НЕТ
# ================================================================================
echo ""
echo "================================================================================"
echo "Создание пользователя $USERNAME (если не существует)"
echo "================================================================================"
if id "$USERNAME" &>/dev/null; then
echo "Пользователь $USERNAME уже существует"
else
echo "Создание пользователя $USERNAME..."
sudo useradd -m -G wheel -s /bin/bash "$USERNAME"
echo "Установите пароль пользователя $USERNAME:"
sudo passwd "$USERNAME"
echo "Пользователь $USERNAME создан"
fi
echo "Настройка sudo для группы wheel..."
sudo sed -i 's/^# %wheel/%wheel/g' /etc/sudoers
# ================================================================================
# Настройка локали (/etc/vconsole.conf)
# ================================================================================
echo ""
echo "================================================================================"
echo "Настройка локали (/etc/vconsole.conf): KEYMAP=ru, FONT=cyr-sun16"
echo "================================================================================"
echo "Запись KEYMAP=ru в /etc/vconsole.conf..."
echo "KEYMAP=ru" | sudo tee /etc/vconsole.conf
echo "Запись FONT=cyr-sun16 в /etc/vconsole.conf..."
echo "FONT=cyr-sun16" | sudo tee -a /etc/vconsole.conf
echo "/etc/vconsole.conf обновлён"
cat /etc/vconsole.conf
# ================================================================================
# Настройка монтирования дисков в /etc/fstab - LABEL=Data и LABEL=Work
# Еслиу вас нет таких дисков, то система не загрузится
# ================================================================================
echo ""
echo "================================================================================"
echo "Добавление в /etc/fstab дисков с LABEL=Data и LABEL=Work"
echo "================================================================================"
HOME_DIR=$(getent passwd "$USERNAME" | cut -d: -f6)
sudo mkdir -p "/run/media/${USERNAME}/Data"
sudo mkdir -p "/run/media/${USERNAME}/Work"
echo "Созданы точки монтирования:"
echo "/run/media/${USERNAME}/Data"
echo "/run/media/${USERNAME}/Work"
FSTAB_LINE1="LABEL=Data /run/media/${USERNAME}/Data auto nosuid,nodev,nofail,x-gvfs-show 0 0"
FSTAB_LINE2="LABEL=Work /run/media/${USERNAME}/Work auto nosuid,nodev,nofail,x-gvfs-show 0 0"
if grep -q "LABEL=Data" /etc/fstab; then
echo "Строка LABEL=Data уже есть в /etc/fstab"
else
echo "" | sudo tee -a /etc/fstab
echo "$FSTAB_LINE1" | sudo tee -a /etc/fstab
echo "Добавлено в /etc/fstab: $FSTAB_LINE1"
fi
if grep -q "LABEL=Work" /etc/fstab; then
echo "Строка LABEL=Work уже есть в /etc/fstab"
else
echo "$FSTAB_LINE2" | sudo tee -a /etc/fstab
echo "Добавлено в /etc/fstab: $FSTAB_LINE2"
fi
echo ""
echo "Последние строки /etc/fstab:"
tail -5 /etc/fstab
# ================================================================================
# ПАРАЛЛЕЛЬНЫЕ ЗАГРУЗКИ В ПАКМАНЕ = 50
# ================================================================================
echo ""
echo "================================================================================"
echo "Установка ParallelDownloads = 50 в /etc/pacman.conf"
echo "================================================================================"
if grep -q "^ParallelDownloads" /etc/pacman.conf; then
echo "ParallelDownloads уже установлен, меняем значение на 50..."
sudo sed -i 's/^ParallelDownloads.*/ParallelDownloads = 50/' /etc/pacman.conf
else
echo "Добавление ParallelDownloads = 50 в /etc/pacman.conf..."
echo "ParallelDownloads = 50" | sudo tee -a /etc/pacman.conf
fi
echo "Текущее значение ParallelDownloads:"
grep "^ParallelDownloads" /etc/pacman.conf
echo "ParallelDownloads установлен на 50"
# ================================================================================
# Таймер PACCACHE (очистка кэша pacman по расписанию)
# ================================================================================
echo ""
echo "================================================================================"
echo "Настройка paccache.timer для автоматической очистки кэша pacman"
echo "================================================================================"
if ! sudo pacman -Q pacman-contrib &>/dev/null; then
echo "Установка pacman-contrib (содержит paccache)..."
sudo pacman -S --noconfirm pacman-contrib
fi
echo "Включение paccache.timer..."
sudo systemctl enable paccache.timer
echo "paccache.timer включён (очистка старых версий пакетов раз в 3 дня)"
# ================================================================================
# SSD TRIM (fstrim.timer)
# ================================================================================
echo ""
echo "================================================================================"
echo "Настройка TRIM для SSD (fstrim.timer)"
echo "================================================================================"
if [ -e /dev/nvme0n1 ] || [ -e /dev/sda ] || [ -e /dev/nvme0n1p1 ] || [ -e /dev/sda1 ]; then
echo "Обнаружен SSD, включение fstrim.timer..."
sudo systemctl enable fstrim.timer
echo "fstrim.timer включён (раз в неделю)"
else
echo "SSD не обнаружен, fstrim.timer пропущен"
fi
# ================================================================================
# ДОБАВЛЕНИЕ КИТАЙСКОЙ РЕПЫ [archlinuxcn]
# ================================================================================
echo ""
echo "================================================================================"
echo "Добавление репозитория archlinuxcn в /etc/pacman.conf"
echo "================================================================================"
if grep -q "\[archlinuxcn\]" /etc/pacman.conf; then
echo "Репозиторий [archlinuxcn] уже существует в /etc/pacman.conf"
else
echo "Добавление [archlinuxcn] в конец /etc/pacman.conf..."
echo "" | sudo tee -a /etc/pacman.conf
echo "[archlinuxcn]" | sudo tee -a /etc/pacman.conf
echo "Server = https://repo.archlinuxcn.org/\$arch" | sudo tee -a /etc/pacman.conf
echo "Репозиторий [archlinuxcn] добавлен"
fi
echo "Установка archlinuxcn-keyring для подписи пакетов из репозитория archlinuxcn"
sudo pacman -Sy archlinuxcn-keyring --noconfirm
# ================================================================================
# ВЫБОР БЫСТРЫХ ЗЕРКАЛ ЧЕРЕЗ REFLECTOR
# ================================================================================
echo ""
echo "================================================================================"
echo "Обновление mirrorlist через reflector (Россия, HTTPS, по скорости)"
echo "================================================================================"
if ! sudo pacman -Q reflector &>/dev/null; then
echo "Установка reflector..."
sudo pacman -S reflector --noconfirm
fi
echo "Запуск reflector для выбора быстрых зеркал (Россия, возраст 12 часов, HTTPS)..."
sudo reflector --country Russia --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist
echo "Mirrorlist обновлён: /etc/pacman.d/mirrorlist"
# Небольшое обновление после смены зеркал
echo "Краткое обновление базы пакетов после смены зеркал..."
sudo pacman -Sy --noconfirm
# ================================================================================
# СБОРКА AUR HELPER (yay) ЕСЛИ ЕГО НЕТ
# ================================================================================
echo ""
echo "================================================================================"
echo "Проверяем и устанавливаем AUR helper (yay) если отсутствует"
echo "================================================================================"
if sudo pacman -Q yay &>/dev/null; then
echo "yay уже установлен"
else
echo "Установка base-devel и git для сборки yay..."
sudo pacman -S --noconfirm git base-devel
echo "Клонирование репозитория yay из AUR..."
tmpdir=$(mktemp -d)
cd "$tmpdir"
git clone https://aur.archlinux.org/yay.git
cd yay
echo "Сборка и установка yay через makepkg..."
makepkg -si --noconfirm
cd ..
rm -rf "$tmpdir"
echo "yay установлен и готов к использованию"
fi
# ================================================================================
# УСТАНОВКА ОСНОВНЫХ ПАКЕТОВ
# ================================================================================
echo ""
echo "================================================================================"
echo "Установка основных пакетов через pacman -S"
echo "================================================================================"
PACKAGES=(
base-devel
hblock
papirus-icon-theme
obsidian-icon-theme
gnome-software
nftables
fish
xclip
btop
glances
whois
mtr
traceroute
reflector
hwinfo
hardinfo2
qmmp
smplayer
smplayer-skins
smplayer-themes
neovim
fastfetch
guake
vulkan-radeon
vulkan-intel
lib32-vulkan-radeon
vulkan-tools
mesa
lib32-mesa
libva-mesa-driver
lib32-libva-mesa-driver
micro
ranger
lf
mc
yazi
galculator
gnome-disk-utility
kdiskmark
baobab
qbittorrent
steam
avidemux-qt
handbrake
foliate
cron
flameshot
kdenlive
kate
konsole
kdeconnect
man-pages-ru
nmap
uv
wireshark-qt
filezilla
putty
xreader
fd
lsd
ripgrep
eza
fzf
zoxide
bat
thefuck
direnv
nikto
aircrack-ng
engrampa
7zip
github-cli
viewnior
rawtherapee
lazygit
lazydocker
ttf-jetbrains-mono-nerd
ttf-hack-nerd
ttf-dejavu-nerd
ttf-dejavu
terminus-font
noto-fonts
ffmpegthumbnailer
gvfs
network-manager-applet
xfce4-goodies
thunar-vcs-plugin
obsidian
obs-studio
flatpak
zenmap
aichat
wgetpaste
nvtop
ddgr
virtualbox
docker-buildx
docker
# aur пакеты
thorium-browser-bin
yandex-browser
pyradio
kora-icon-theme
radiotray-ng
anydesk-bin
assistant
rudesktop
rustdesk
qdiskinfo
appimagelauncher
localsend
)
echo "Установка ${#PACKAGES[@]} пакетов..."
yay -S --noconfirm "${PACKAGES[@]}"
echo "Все пакеты установлены"
# ================================================================================
# UACODE (процессорные микрокоды)
# ================================================================================
echo ""
echo "================================================================================"
echo "Установка микрокодов процессора Intel или AMD"
echo "================================================================================"
if grep -q "Intel" /proc/cpuinfo; then
echo "Обнаружен процессор Intel, установка intel-ucode..."
sudo pacman -S intel-ucode --noconfirm
echo "Intel microcode установлен"
elif grep -q "AMD" /proc/cpuinfo; then
echo "Обнаружен процессор AMD, установка amd-ucode..."
sudo pacman -S amd-ucode --noconfirm
echo "AMD microcode установлен"
else
echo "Не удалось определить производителя процессора"
fi
# ================================================================================
# СМЕНА ОБОЛОЧКИ НА FISH
# ================================================================================
echo ""
echo "================================================================================"
echo "Смена оболочки пользователя $USERNAME на fish (/bin/fish)"
echo "================================================================================"
echo "fish уже установлен в пакетах, меняем шелл через chsh..."
sudo chsh -s /bin/fish "$USERNAME"
echo "В качестве оболочки пользователя $USERNAME используется /bin/fish"
# ================================================================================
# ДОБАВЛЕНИЕ ПОЛЬЗОВАТЕЛЯ В ГРУППЫ
# ================================================================================
echo ""
echo "================================================================================"
echo "Добавление пользователя $USERNAME в дополнительные группы"
echo "================================================================================"
echo "Добавление в группу docker..."
sudo usermod -aG docker "$USERNAME"
echo "Добавление в группу vboxusers..."
sudo usermod -aG vboxusers "$USERNAME"
echo "Добавление в группу network..."
sudo usermod -aG network "$USERNAME"
echo "Добавление в группу wheel..."
sudo usermod -aG wheel "$USERNAME"
echo ""
echo "Группы пользователя $USERNAME:"
id "$USERNAME"
echo ""
echo "==============================================================================="
echo "ВСЕ НАСТРОЙКИ ЗАВЕРШЕНЫ!"
echo "==============================================================================="
echo ""
echo "Что было сделано:"
echo "Пользователь $USERNAME создан (если не существовал), добавлен в группы"
echo "Добавлена китайская репа archlinuxcn, установлена оболочка fish для юзера"
echo "Настроен firewall, установлен набор необходимых пакетов"
echo "Настроена локаль, установлены коды для микропроцессоров"
echo "Запущены кое-какие сомнительные службы для оптимизации ОС"