最後活躍 1 week ago

修訂 b20341366dce167ce74291600565be5caaf83a4b

install.sh 原始檔案
1#!/bin/bash
2
3set -e
4
5# Цвета для вывода
6ANSI_RED=$(tput -Txterm setaf 1)
7ANSI_GREEN=$(tput -Txterm setaf 2)
8ANSI_YELLOW=$(tput -Txterm setaf 3)
9ANSI_RESET=$(tput -Txterm sgr0)
10
11# ==================== ФУНКЦИИ ====================
12
13# Проверка прав root
14check_root() {
15 if [ "$EUID" -ne 0 ]; then
16 echo -e "${ANSI_RED}Ошибка: скрипт должен запускаться от root${ANSI_RESET}"
17 exit 1
18 fi
19}
20
21# Запрос имени хоста
22ask_hostname() {
23 local current_hostname=$(hostname)
24 read -e -p "${ANSI_YELLOW}Введите имя хоста: (текущее: $current_hostname) ${ANSI_RESET}" -i "${current_hostname}" NEW_HOSTNAME
25 echo "$NEW_HOSTNAME"
26}
27
28# Запрос - создавать ли пользователя
29ask_create_user() {
30 local choice
31 echo -e "${ANSI_YELLOW}Создать нового пользователя? (y/n):${ANSI_RESET}"
32 read -p "Create user [Y/N]? " choice
33 if [[ "$choice" =~ ^[Yy]$ ]]; then
34 CREATE_USER="yes"
35 else
36 CREATE_USER="no"
37 fi
38}
39
40# Запрос имени пользователя
41ask_username() {
42 local username
43 echo -e "${ANSI_YELLOW}Введите имя нового пользователя:${ANSI_RESET}" >&2
44 read -p "Username: " username
45 if [ -z "$username" ]; then
46 echo -e "${ANSI_RED}Имя пользователя не может быть пустым.${ANSI_RESET}" >&2
47 exit 1
48 fi
49 echo "$username"
50}
51
52# Запрос пароля
53ask_password() {
54 local username=$1
55 local user_pass
56 echo -e "${ANSI_YELLOW}Введите пароль для пользователя $username:${ANSI_RESET}" >&2
57 read -s -p "Password: " user_pass
58 echo >&2
59 if [ -z "$user_pass" ]; then
60 echo -e "${ANSI_RED}Пароль не может быть пустым.${ANSI_RESET}" >&2
61 exit 1
62 fi
63 echo "$user_pass"
64}
65
66# Запрос настройки прокси
67ask_proxy() {
68 echo -e "\n${ANSI_YELLOW}Использовать прокси-сервер apt-cacher-ng? (y/n):${ANSI_RESET}"
69 read -p "Use proxy? " USE_PROXY
70 if [[ "$USE_PROXY" =~ ^[Yy]$ ]]; then
71 echo -e "${ANSI_YELLOW}Введите URL прокси-сервера (например: http://192.168.111.87:3142):${ANSI_RESET}"
72 read -e -p "Proxy URL: " -i "http://192.168.111.87:3142" PROXY_URL
73 if [ -n "$PROXY_URL" ]; then
74 configure_proxy "$PROXY_URL"
75 fi
76 fi
77}
78
79# Настройка прокси для apt
80configure_proxy() {
81 local proxy_url=$1
82 echo -e "${ANSI_GREEN}Настройка прокси для apt...${ANSI_RESET}"
83 cat > /etc/apt/apt.conf.d/02aptproxy << EOF
84Acquire::http::proxy "$proxy_url";
85Acquire::ftp::proxy "$proxy_url";
86EOF
87 echo -e "${ANSI_GREEN}Прокси настроен в /etc/apt/apt.conf.d/02aptproxy${ANSI_RESET}"
88}
89
90# Установка имени хоста
91set_hostname() {
92 local hostname=$1
93 echo -e "\n${ANSI_GREEN}=== Установка имени хоста: $hostname ===${ANSI_RESET}"
94 hostnamectl set-hostname "$hostname"
95 if grep -q "^127.0.1.1" /etc/hosts; then
96 sed -i "s/^127.0.1.1.*/127.0.1.1\t$hostname/" /etc/hosts
97 else
98 echo "127.0.1.1\t$hostname" >> /etc/hosts
99 fi
100 echo -e "${ANSI_GREEN}Имя хоста установлено.${ANSI_RESET}"
101}
102
103# Добавление репозитория MEPHI
104add_mephi_repository() {
105 . /etc/os-release 2>/dev/null || { echo "Failed to determine release"; exit 1; }
106 [ -z "$VERSION_CODENAME" ] && echo "VERSION_CODENAME not found" && exit 1
107
108 local conf_file="/etc/apt/sources.list.d/debian_mephi.list"
109 local components
110
111 # Определяем компоненты в зависимости от версии
112 case "$VERSION_CODENAME" in
113 bookworm)
114 components="main non-free-firmware"
115 ;;
116 bullseye)
117 components="main non-free"
118 ;;
119 *)
120 echo "Warning: Unknown codename '$VERSION_CODENAME', using 'main non-free'"
121 components="main non-free"
122 ;;
123 esac
124
125 if grep -qs "mirror.mephi.ru.*$VERSION_CODENAME" "$conf_file" 2>/dev/null; then
126 echo -e "Repository for $VERSION_CODENAME already exists in $conf_file"
127 else
128 echo -e "Adding repository for Debian $VERSION_CODENAME with components: $components"
129 cat >> "$conf_file" << EOF
130
131# Added $(date '+%Y-%m-%d')
132deb http://mirror.mephi.ru/debian/ $VERSION_CODENAME $components
133deb-src http://mirror.mephi.ru/debian/ $VERSION_CODENAME $components
134
135deb http://mirror.mephi.ru/debian/ $VERSION_CODENAME-updates $components
136deb-src http://mirror.mephi.ru/debian/ $VERSION_CODENAME-updates $components
137
138EOF
139 echo "Repository added, updating package list..."
140 apt update
141 fi
142}
143
144# Обновление системы
145update_system() {
146 echo -e "${ANSI_GREEN}=== Обновление системы ===${ANSI_RESET}"
147 apt update
148 apt -y upgrade
149}
150
151# Установка пакетов
152install_packages() {
153 local packages=(
154 pv nano curl wget sudo lsb-release iptables
155 unzip pigz zstd
156 ncdu gdu
157 screen tmux lynx
158 htop btop iftop mtr ioping
159 git jq yq pwgen
160 bind9-dnsutils net-tools ssh-audit
161 qemu-guest-agent
162 console-setup
163 cloud-guest-utils gnupg
164 )
165
166 echo -e "${ANSI_GREEN}Installing packages...${ANSI_RESET}"
167 apt-get update
168 apt-get install -y --ignore-missing "${packages[@]}"
169}
170
171install_qemu_geest_agent() {
172 apt-get install -y qemu-guest-agent
173 sudo systemctl start qemu-guest-agent
174 sudo systemctl status qemu-guest-agent
175}
176
177# Настройка SSH
178configure_ssh() {
179 echo -e "${ANSI_GREEN}Allowing SSH root login${ANSI_RESET}"
180 sed -i 's/^.*PermitRootLogin.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
181 systemctl restart sshd
182 echo -e "${ANSI_GREEN}Ok.${ANSI_RESET}"
183}
184
185# Настройка таймзоны и локали
186configure_locale() {
187 echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
188 echo "tzdata tzdata/Zones/Europe select Moscow" | debconf-set-selections
189 DEBIAN_FRONTEND=noninteractive dpkg-reconfigure tzdata
190
191 cat > /etc/locale.gen << EOF
192ru_RU.UTF-8 UTF-8
193en_US.UTF-8 UTF-8
194EOF
195
196 locale-gen
197 update-locale LANG=en_US.UTF-8
198 locale -a | grep -E "en_US|ru_RU"
199 source /etc/default/locale
200
201 dpkg-reconfigure console-setup
202 dpkg-reconfigure keyboard-configuration
203}
204
205# Настройка journald
206configure_journald() {
207 mkdir -p /etc/systemd/journald.conf.d
208 cat > /etc/systemd/journald.conf.d/size.conf << EOF
209[Journal]
210SystemMaxUse=1G
211SystemMaxFileSize=50M
212MaxLevelStore=warning
213EOF
214
215 systemctl restart systemd-journald
216}
217
218# Создание пользователя
219create_user() {
220 local username=$1
221 local password=$2
222
223 # Создание с явным указанием оболочки и копированием скелета
224 useradd -m -s /bin/bash -k /etc/skel "$username" || {
225 echo -e "${ANSI_RED}Ошибка создания пользователя${ANSI_RESET}"
226 return 1
227 }
228
229 # Установка пароля
230 echo "$username:$password" | chpasswd
231
232 # Добавление в sudo (явно проверяем)
233 usermod -aG sudo "$username" || true
234
235 # Убеждаемся, что группа sudo имеет права
236 if ! grep -q "^%sudo" /etc/sudoers; then
237 echo "%sudo ALL=(ALL:ALL) ALL" >> /etc/sudoers
238 fi
239
240 # Копируем базовые файлы, если скелет не сработал
241 if [ ! -f "/home/$username/.bashrc" ]; then
242 cp /etc/skel/.bashrc "/home/$username/.bashrc" 2>/dev/null || true
243 cp /etc/skel/.profile "/home/$username/.profile" 2>/dev/null || true
244 cp /etc/skel/.bash_logout "/home/$username/.bash_logout" 2>/dev/null || true
245 fi
246
247 # Устанавливаем правильные права
248 chown -R "$username:$username" "/home/$username"
249 chmod 755 "/home/$username"
250
251 echo -e "${ANSI_GREEN}Пользователь $username создан${ANSI_RESET}"
252}
253
254# Настройка истории для пользователя
255configure_user_history() {
256 local username=$1
257 cat >> "/home/$username/.bashrc" << 'EOF'
258export HISTSIZE=10000
259export HISTFILESIZE=50000
260export HISTTIMEFORMAT="%F %T "
261export HISTCONTROL=ignoredups:ignorespace
262shopt -s histappend
263export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
264export TERM=xterm-256color
265EOF
266 chown "$username:$username" "/home/$username/.bashrc"
267}
268
269# Настройка истории для root
270configure_root_history() {
271 cat >> /root/.bashrc << 'EOF'
272export HISTSIZE=10000
273export HISTFILESIZE=50000
274export HISTTIMEFORMAT="%F %T "
275export HISTCONTROL=ignoredups:ignorespace
276shopt -s histappend
277export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
278export TERM=xterm-256color
279EOF
280 source /root/.bashrc
281}
282
283# Очистка документации git
284clean_git_docs() {
285 rm -rf /usr/share/doc/git/RelNotes
286}
287
288# Финальное сообщение
289finish_setup() {
290 echo -e "${ANSI_GREEN}=== Настройка завершена ===${ANSI_RESET}"
291}
292
293# Запись конфигурационного файла
294write_config_file() {
295 local file_path=$1
296 local create_backup=${2:-true} # создать резервную копию? (по умолчанию true)
297
298 echo -e "${ANSI_GREEN}=== Запись конфигурации в $file_path ===${ANSI_RESET}"
299
300 # Создание резервной копии
301 if [ "$create_backup" = true ] && [ -f "$file_path" ]; then
302 local backup_path="${file_path}.backup.$(date +%Y%m%d_%H%M%S)"
303 cp "$file_path" "$backup_path"
304 echo -e "${ANSI_YELLOW}Создана резервная копия: $backup_path${ANSI_RESET}"
305 fi
306
307 # Создание директории, если её нет
308 local dir_path=$(dirname "$file_path")
309 if [ ! -d "$dir_path" ]; then
310 mkdir -p "$dir_path"
311 echo -e "${ANSI_YELLOW}Создана директория: $dir_path${ANSI_RESET}"
312 fi
313
314 # Чтение содержимого из heredoc
315 cat > "$file_path"
316
317 # Установка правильных прав (опционально)
318 chmod 644 "$file_path"
319
320 echo -e "${ANSI_GREEN}Файл успешно записан: $file_path${ANSI_RESET}"
321}
322
323make_motd_generator() {
324 write_config_file "/etc/update-motd.d/99-mymotd-generator" false << 'EOF'
325 #!/bin/bash
326
327 # Text Color Variables http://misc.flogisoft.com/bash/tip_colors_and_formatting
328 tcLtG="\033[00;37m" # LIGHT GRAY
329 tcDkG="\033[01;30m" # DARK GRAY
330 tcLtR="\033[01;31m" # LIGHT RED
331 tcLtGRN="\033[01;32m" # LIGHT GREEN
332 tcLtBL="\033[01;34m" # LIGHT BLUE
333 tcLtP="\033[01;35m" # LIGHT PURPLE
334 tcLtC="\033[01;36m" # LIGHT CYAN
335 tcW="\033[01;37m" # WHITE
336 tcRESET="\033[0m"
337 tcORANGE="\033[38;5;209m"
338
339 # Time of day
340 HOUR=$(date +"%H")
341 if [ $HOUR -lt 12 -a $HOUR -ge 0 ]; then TIME="morning"
342 elif [ $HOUR -lt 17 -a $HOUR -ge 12 ]; then TIME="afternoon"
343 else TIME="evening"
344 fi
345
346 # System uptime
347 uptime=`cat /proc/uptime | cut -f1 -d.`
348 upDays=$((uptime/60/60/24))
349 upHours=$((uptime/60/60%24))
350 upMins=$((uptime/60%60))
351
352 # System + Memory
353 MEMORY_USED=`free -b | grep Mem | awk '{print $3/$2 * 100.0}'`
354 SWAP_USED=`free -b | grep Swap | awk '{print $3/$2 * 100.0}'`
355 NUM_PROCS=`ps aux | wc -l`
356
357 # IP первого сетевого интерфейса
358 LOCAL_IP=$(ip -4 addr show | grep -oP '(?<=inet\s)\d+\.\d+\.\d+\.\d+' | grep -v '^127\.' | head -n 1)
359
360 # Имя сервера
361 HOSTNAME=$(hostname)
362
363 # ОS
364 OS=$(grep PRETTY_NAME /etc/os-release | cut -d= -f2 | tr -d '"')
365
366 # Пользователь
367 USER_NAME=$(whoami)
368 [ "$USER_NAME" = "root" ] && USER_NAME="${tcLtR}${USER_NAME}${tcRESET}"
369
370 # Load average
371 LOADAVG=$(awk '{print $1" "$2" "$3}' /proc/loadavg)
372 SYS_LOADS=`cat /proc/loadavg | awk '{print $1}'`
373
374 # RAM: всего и свободно (в мегабайтах)
375 RAM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
376 RAM_FREE=$(free -m | awk '/Mem:/ {print $7}')
377 RAM_FREE_PCT=$(( RAM_FREE * 100 / RAM_TOTAL ))
378
379 # Количество CPU
380 CPU_COUNT=$(nproc)
381
382 # Uptime
383 UPTIME=$(uptime -p)
384
385 # HDD: для корневого раздела /
386 DISK_TOTAL_HUMAN=$(df -h / | awk 'NR==2 {print $2}')
387 DISK_FREE_HUMAN=$(df -h / | awk 'NR==2 {print $4}')
388
389 # Используем df без форматирования для процентов
390 DISK_TOTAL=$(df -k / | awk 'NR==2 {print $2}')
391 DISK_FREE=$(df -k / | awk 'NR==2 {print $4}')
392 DISK_FREE_PCT=$(( DISK_FREE * 100 / DISK_TOTAL ))
393
394 echo -e "$tcDkG ==============================================================="
395 echo -e $tcLtG " Good $TIME! $tcORANGE $LOCAL_IP"
396 echo -e $tcDkG "==============================================================="
397 echo -e $tcLtG " - Hostname :$tcW ${HOSTNAME}"
398 echo -e $tcLtG " - IP Address :$tcW ${LOCAL_IP:-N/A}"
399 echo -e $tcLtG " - User :$tcW ${USER_NAME}"
400 echo -e $tcLtG "==============================================================="
401 echo -e $tcLtG " - OS Release :$tcW ${OS}"
402 echo -e $tcLtG " - Kernel : `uname -a | awk '{print $1" "$3" "$12}'`"
403 echo -e $tcLtG " - Users : Currently `users | wc -w` user(s) logged on"
404 echo -e $tcLtG "==============================================================="
405 echo -e $tcLtG " - Server Time : `date`"
406 echo -e $tcLtG " - System load : ${SYS_LOADS} / ${NUM_PROCS} processes running"
407 echo -e $tcLtG " - Load average : ${LOADAVG}"
408 echo -e $tcLtG " - System uptime : ${upDays} days ${upHours} hours ${upMins} minutes"
409 echo -e $tcLtG "==============================================================="
410 echo -e $tcLtG " - CPU : ${CPU_COUNT} CPU"
411 echo -e $tcLtG " - RAM : ${RAM_TOTAL} MB, ${RAM_FREE} MB (${RAM_FREE_PCT}%) free"
412 echo -e $tcLtG " - HDD : ${DISK_TOTAL_HUMAN}, ${DISK_FREE_HUMAN} (${DISK_FREE_PCT}%) free"
413 echo -e $tcLtG " - Swap used % : ${SWAP_USED}"
414 echo -e $tcDkG "==============================================================="
415 echo -e $tcRESET ""
416EOF
417
418 write_config_file "/etc/issue" false << 'EOF'
419 Debian GNU/Linux 12 \n \l
420
421 Local IP: не доступен
422EOF
423}
424
425install_midnight_commanger() {
426 apt-get -y install mc
427
428 write_config_file "/root/.config/mc/ini" false << 'EOF'
429[Midnight-Commander]
430verbose=true
431shell_patterns=true
432auto_save_setup=true
433preallocate_space=false
434auto_menu=false
435use_internal_view=true
436use_internal_edit=false
437clear_before_exec=true
438confirm_delete=true
439confirm_overwrite=true
440confirm_execute=false
441confirm_history_cleanup=true
442confirm_exit=false
443confirm_directory_hotlist_delete=false
444confirm_view_dir=false
445safe_delete=false
446safe_overwrite=false
447use_8th_bit_as_meta=false
448mouse_move_pages_viewer=true
449mouse_close_dialog=false
450fast_refresh=false
451drop_menus=false
452wrap_mode=true
453old_esc_mode=true
454cd_symlinks=true
455show_all_if_ambiguous=false
456use_file_to_guess_type=true
457alternate_plus_minus=false
458only_leading_plus_minus=true
459show_output_starts_shell=false
460xtree_mode=false
461file_op_compute_totals=true
462classic_progressbar=true
463use_netrc=true
464ftpfs_always_use_proxy=false
465ftpfs_use_passive_connections=true
466ftpfs_use_passive_connections_over_proxy=false
467ftpfs_use_unix_list_options=true
468ftpfs_first_cd_then_ls=true
469ignore_ftp_chattr_errors=true
470editor_fill_tabs_with_spaces=false
471editor_return_does_auto_indent=false
472editor_backspace_through_tabs=false
473editor_fake_half_tabs=true
474editor_option_save_position=true
475editor_option_auto_para_formatting=false
476editor_option_typewriter_wrap=false
477editor_edit_confirm_save=true
478editor_syntax_highlighting=true
479editor_persistent_selections=true
480editor_drop_selection_on_copy=true
481editor_cursor_beyond_eol=false
482editor_cursor_after_inserted_block=false
483editor_visible_tabs=true
484editor_visible_spaces=true
485editor_line_state=false
486editor_simple_statusbar=false
487editor_check_new_line=false
488editor_show_right_margin=false
489editor_group_undo=true
490editor_state_full_filename=true
491editor_ask_filename_before_edit=false
492nice_rotating_dash=true
493shadows=true
494mcview_remember_file_position=false
495auto_fill_mkdir_name=true
496copymove_persistent_attr=true
497pause_after_run=1
498mouse_repeat_rate=100
499double_click_speed=250
500old_esc_mode_timeout=1000000
501max_dirt_limit=10
502num_history_items_recorded=60
503vfs_timeout=60
504ftpfs_directory_timeout=900
505ftpfs_retry_seconds=30
506fish_directory_timeout=900
507editor_tab_spacing=8
508editor_word_wrap_line_length=72
509editor_option_save_mode=0
510editor_backup_extension=~
511editor_filesize_threshold=64M
512editor_stop_format_chars=-+*\\,.;:&>
513mcview_eof=
514skin=modarcon16
515
516filepos_max_saved_entries=1024
517
518[Layout]
519output_lines=0
520left_panel_size=86
521top_panel_size=0
522message_visible=false
523keybar_visible=true
524xterm_title=true
525command_prompt=true
526menubar_visible=true
527free_space=true
528horizontal_split=false
529vertical_equal=true
530horizontal_equal=true
531
532[Misc]
533timeformat_recent=%b %e %H:%M
534timeformat_old=%b %e %Y
535ftp_proxy_host=gate
536ftpfs_password=anonymous@
537display_codepage=UTF-8
538source_codepage=Other_8_bit
539autodetect_codeset=
540spell_language=en
541clipboard_store=
542clipboard_paste=
543
544[Colors]
545base_color=
546linux=
547color_terminals=
548
549xterm-256color=
550
551[Panels]
552show_mini_info=true
553kilobyte_si=false
554mix_all_files=false
555show_backups=true
556show_dot_files=true
557fast_reload=false
558fast_reload_msg_shown=false
559mark_moves_down=true
560reverse_files_only=true
561auto_save_setup_panels=false
562navigate_with_arrows=false
563panel_scroll_pages=true
564panel_scroll_center=false
565mouse_move_pages=true
566filetype_mode=true
567permission_mode=false
568torben_fj_mode=false
569quick_search_mode=2
570select_flags=6
571
572[Panelize]
573Find *.orig after patching=find . -name \\*.orig -print
574Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print
575Find rejects after patching=find . -name \\*.rej -print
576Modified git files=git ls-files --modified
577
578EOF
579
580 write_config_file "/root/.config/mc/panels.ini" false << 'EOF'
581[New Left Panel]
582display=listing
583reverse=false
584case_sensitive=true
585exec_first=false
586sort_order=name
587list_mode=full
588brief_cols=2
589user_format=half type name | size | owner
590user_status0=half type name | size | perm
591user_status1=half type name | size | perm
592user_status2=half type name | size | perm
593user_status3=half type name | size | perm
594user_mini_status=false
595filter_flags=7
596list_format=user
597
598[New Right Panel]
599display=listing
600reverse=false
601case_sensitive=true
602exec_first=false
603sort_order=name
604list_mode=full
605brief_cols=2
606user_format=half type name | size | owner
607user_status0=half type name | size | perm
608user_status1=half type name | size | perm
609user_status2=half type name | size | perm
610user_status3=half type name | size | perm
611user_mini_status=false
612filter_flags=7
613list_format=user
614
615[Dirs]
616current_is_left=false
617other_dir=/root
618EOF
619}
620
621# Обновление GPG ключей Debian
622fix_debian_keys() {
623 echo -e "${ANSI_GREEN}=== Исправление GPG-ключей Debian ===${ANSI_RESET}"
624
625 # 1. Полностью удаляем кэш списков пакетов
626 rm -rf /var/lib/apt/lists/*
627
628 # 2. Удаляем старые проблемные ключи из trusted.gpg.d и связки apt-key
629 rm -f /etc/apt/trusted.gpg.d/*54404762BBB6E853* \
630 /etc/apt/trusted.gpg.d/*6ED0E7B82643E131* 2>/dev/null || true
631 apt-key del 54404762BBB6E853 2>/dev/null || true
632 apt-key del 6ED0E7B82643E131 2>/dev/null || true
633
634 # 3. Очищаем кэш apt
635 apt-get clean
636
637 # 4. Принудительно переустанавливаем пакет с ключами (без проверки подписи)
638 apt-get install --reinstall -y --allow-unauthenticated debian-archive-keyring
639
640 # 5. Если прокси-сервер используется, настраиваем переменные окружения для gpg
641 if [ -n "$PROXY_URL" ]; then
642 export http_proxy="$PROXY_URL"
643 export https_proxy="$PROXY_URL"
644 fi
645
646 # 6. Пытаемся получить ключи напрямую с keyserver (альтернативный источник)
647 echo "Получение свежих ключей с keyserver..."
648 gpg --keyserver keyserver.ubuntu.com --recv-keys 54404762BBB6E853 6ED0E7B82643E131 2>/dev/null || \
649 gpg --keyserver pgp.mit.edu --recv-keys 54404762BBB6E853 6ED0E7B82643E131 2>/dev/null || \
650 gpg --keyserver keys.openpgp.org --recv-keys 54404762BBB6E853 6ED0E7B82643E131 2>/dev/null || true
651
652 # 7. Экспортируем ключи в директорию apt (если были получены)
653 gpg --export 54404762BBB6E853 > /etc/apt/trusted.gpg.d/debian-security-automatic.gpg 2>/dev/null || true
654 gpg --export 6ED0E7B82643E131 > /etc/apt/trusted.gpg.d/debian-archive-automatic.gpg 2>/dev/null || true
655
656 # 8. Снова очищаем списки и обновляем
657 rm -rf /var/lib/apt/lists/*
658 apt-get update --allow-insecure-repositories || true
659
660 echo -e "${ANSI_GREEN}Ключи обновлены.${ANSI_RESET}"
661}
662
663# ==================== ОСНОВНАЯ ЛОГИКА ====================
664
665main() {
666 # check_root
667
668 echo -e "${ANSI_GREEN}=== Настройка системы ===${ANSI_RESET}"
669
670 NEW_HOSTNAME=$(ask_hostname)
671
672 ask_create_user
673
674 echo $CREATE_USER
675
676 if [ "$CREATE_USER" = "yes" ]; then
677 NEW_USER=$(ask_username)
678 USER_PASS=$(ask_password "$NEW_USER")
679 create_user "$NEW_USER" "$USER_PASS"
680 configure_user_history "$NEW_USER"
681 fi
682
683 ask_proxy
684 fix_debian_keys
685
686 # Выполнение настроек
687 configure_root_history
688
689 set_hostname "$NEW_HOSTNAME"
690 add_mephi_repository
691 update_system
692 install_packages
693 install_qemu_geest_agent
694 configure_ssh
695 configure_locale
696 configure_journald
697 clean_git_docs
698
699 make_motd_generator
700
701 install_midnight_commanger
702
703 finish_setup
704}
705
706# Запуск главной функции
707main "$@"