install.sh
· 5.4 KiB · Bash
Surowy
#!/bin/bash
set -e
# Цвета для вывода
ANSI_RED='\033[0;31m'
ANSI_GREEN='\033[0;32m'
ANSI_YELLOW='\033[1;33m'
ANSI_RESET='\033[0m'
# Проверка, что скрипт запущен от root
if [ "$EUID" -ne 0 ]; then
echo -e "${ANSI_RED}Ошибка: скрипт должен запускаться от root${ANSI_RESET}"
exit 1
fi
echo -e "${ANSI_GREEN}=== Настройка системы ===${ANSI_RESET}"
# Запрос имени хоста
echo -e "${ANSI_YELLOW}Введите новое имя хоста:${ANSI_RESET}"
read -p "Hostname: " NEW_HOSTNAME
if [ -z "$NEW_HOSTNAME" ]; then
echo -e "${ANSI_RED}Имя хоста не может быть пустым.${ANSI_RESET}"
exit 1
fi
# Запрос имени пользователя
echo -e "${ANSI_YELLOW}Введите имя нового пользователя:${ANSI_RESET}"
read -p "Username: " NEW_USER
if [ -z "$NEW_USER" ]; then
echo -e "${ANSI_RED}Имя пользователя не может быть пустым.${ANSI_RESET}"
exit 1
fi
# Запрос пароля для нового пользователя
echo -e "${ANSI_YELLOW}Введите пароль для пользователя $NEW_USER:${ANSI_RESET}"
read -s -p "Password: " USER_PASS
echo
if [ -z "$USER_PASS" ]; then
echo -e "${ANSI_RED}Пароль не может быть пустым.${ANSI_RESET}"
exit 1
fi
echo -e "\n${ANSI_GREEN}=== Установка имени хоста: $NEW_HOSTNAME ===${ANSI_RESET}"
hostnamectl set-hostname "$NEW_HOSTNAME"
# Обновление /etc/hosts
sed -i "s/^127.0.1.1.*/127.0.1.1\t$NEW_HOSTNAME/" /etc/hosts
echo -e "${ANSI_GREEN}Имя хоста установлено.${ANSI_RESET}"
# Функция добавления репозитория MEPHI
add_mephi_repository() {
# Определение версии Debian
. /etc/os-release 2>/dev/null || { echo "Failed to determine release"; exit 1; }
[ -z "$VERSION_CODENAME" ] && echo "VERSION_CODENAME not found" && exit 1
local conf_file="/etc/apt/sources.list.d/debian_mephi.list"
if grep -qs "mirror.mephi.ru.*$VERSION_CODENAME" "$conf_file" 2>/dev/null; then
echo -e "Repository for $VERSION_CODENAME already exists in $conf_file"
else
echo -e "Adding repository for Debian $VERSION_CODENAME"
cat >> "$conf_file" << EOF
# Added $(date '+%Y-%m-%d')
deb http://mirror.mephi.ru/debian/ $VERSION_CODENAME main non-free-firmware
deb-src http://mirror.mephi.ru/debian/ $VERSION_CODENAME main non-free-firmware
EOF
echo "Repository added, updating package list..."
apt update
fi
}
# Добавляем репозиторий MEPHI
add_mephi_repository
# Обновление и апгрейд
apt -y upgrade
# Установка пакетов (включая sudo)
PACKAGES=(
pv nano curl wget sudo lsb-release iptables
unzip pigz zstd
ncdu gdu
screen tmux lynx
htop btop iftop mtr ioping
git jq yq pwgen
bind9-dnsutils net-tools ssh-audit
cloud-guest-utils qemu-guest-agent
console-setup
)
echo -e "${ANSI_GREEN}Installing packages...${ANSI_RESET}"
apt-get update
apt-get install -y "${PACKAGES[@]}"
# Настройка SSH
echo -e "${ANSI_GREEN}Allowing SSH root login${ANSI_RESET}"
sed -i 's/^.*PermitRootLogin.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshd
echo -e "${ANSI_GREEN}Ok.${ANSI_RESET}"
# Midnight Commander
apt-get -y install mc
# Настройка таймзоны и локали
echo "tzdata tzdata/Areas select Europe" | debconf-set-selections
echo "tzdata tzdata/Zones/Europe select Moscow" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive dpkg-reconfigure tzdata
cat > /etc/locale.gen << EOF
ru_RU.UTF-8 UTF-8
en_US.UTF-8 UTF-8
EOF
locale-gen
update-locale LANG=en_US.UTF-8
locale -a | grep -E "en_US|ru_RU"
source /etc/default/locale
dpkg-reconfigure console-setup
dpkg-reconfigure keyboard-configuration
# Настройка journald
mkdir -p /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/size.conf << EOF
[Journal]
SystemMaxUse=1G
SystemMaxFileSize=50M
MaxLevelStore=warning
EOF
systemctl restart systemd-journald
# Создание пользователя
useradd -m "$NEW_USER" && echo "$NEW_USER:$USER_PASS" | chpasswd && passwd -e "$NEW_USER"
usermod -aG sudo "$NEW_USER"
# Настройка .Xauthority
touch "/home/$NEW_USER/.Xauthority"
chown "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.Xauthority"
echo -e "${ANSI_GREEN}Пользователь $NEW_USER с паролем '${ANSI_YELLOW}$USER_PASS${ANSI_GREEN}' создан${ANSI_RESET}"
# Настройка истории для пользователя
cat >> "/home/$NEW_USER/.bashrc" << 'EOF'
export HISTSIZE=10000
export HISTFILESIZE=50000
export HISTTIMEFORMAT="%F %T "
export HISTCONTROL=ignoredups:ignorespace
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
EOF
chown "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.bashrc"
# Удаление документации git
rm -rf /usr/share/doc/git/RelNotes
# Настройка истории для root
cat >> /root/.bashrc << 'EOF'
export HISTSIZE=10000
export HISTFILESIZE=50000
export HISTTIMEFORMAT="%F %T "
export HISTCONTROL=ignoredups:ignorespace
shopt -s histappend
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
EOF
source /root/.bashrc
echo -e "${ANSI_GREEN}=== Настройка завершена успешно ===${ANSI_RESET}"
| 1 | #!/bin/bash |
| 2 | |
| 3 | set -e |
| 4 | |
| 5 | # Цвета для вывода |
| 6 | ANSI_RED='\033[0;31m' |
| 7 | ANSI_GREEN='\033[0;32m' |
| 8 | ANSI_YELLOW='\033[1;33m' |
| 9 | ANSI_RESET='\033[0m' |
| 10 | |
| 11 | # Проверка, что скрипт запущен от root |
| 12 | if [ "$EUID" -ne 0 ]; then |
| 13 | echo -e "${ANSI_RED}Ошибка: скрипт должен запускаться от root${ANSI_RESET}" |
| 14 | exit 1 |
| 15 | fi |
| 16 | |
| 17 | echo -e "${ANSI_GREEN}=== Настройка системы ===${ANSI_RESET}" |
| 18 | |
| 19 | # Запрос имени хоста |
| 20 | echo -e "${ANSI_YELLOW}Введите новое имя хоста:${ANSI_RESET}" |
| 21 | read -p "Hostname: " NEW_HOSTNAME |
| 22 | if [ -z "$NEW_HOSTNAME" ]; then |
| 23 | echo -e "${ANSI_RED}Имя хоста не может быть пустым.${ANSI_RESET}" |
| 24 | exit 1 |
| 25 | fi |
| 26 | |
| 27 | # Запрос имени пользователя |
| 28 | echo -e "${ANSI_YELLOW}Введите имя нового пользователя:${ANSI_RESET}" |
| 29 | read -p "Username: " NEW_USER |
| 30 | if [ -z "$NEW_USER" ]; then |
| 31 | echo -e "${ANSI_RED}Имя пользователя не может быть пустым.${ANSI_RESET}" |
| 32 | exit 1 |
| 33 | fi |
| 34 | |
| 35 | # Запрос пароля для нового пользователя |
| 36 | echo -e "${ANSI_YELLOW}Введите пароль для пользователя $NEW_USER:${ANSI_RESET}" |
| 37 | read -s -p "Password: " USER_PASS |
| 38 | echo |
| 39 | if [ -z "$USER_PASS" ]; then |
| 40 | echo -e "${ANSI_RED}Пароль не может быть пустым.${ANSI_RESET}" |
| 41 | exit 1 |
| 42 | fi |
| 43 | |
| 44 | echo -e "\n${ANSI_GREEN}=== Установка имени хоста: $NEW_HOSTNAME ===${ANSI_RESET}" |
| 45 | hostnamectl set-hostname "$NEW_HOSTNAME" |
| 46 | # Обновление /etc/hosts |
| 47 | sed -i "s/^127.0.1.1.*/127.0.1.1\t$NEW_HOSTNAME/" /etc/hosts |
| 48 | echo -e "${ANSI_GREEN}Имя хоста установлено.${ANSI_RESET}" |
| 49 | |
| 50 | # Функция добавления репозитория MEPHI |
| 51 | add_mephi_repository() { |
| 52 | # Определение версии Debian |
| 53 | . /etc/os-release 2>/dev/null || { echo "Failed to determine release"; exit 1; } |
| 54 | [ -z "$VERSION_CODENAME" ] && echo "VERSION_CODENAME not found" && exit 1 |
| 55 | |
| 56 | local conf_file="/etc/apt/sources.list.d/debian_mephi.list" |
| 57 | |
| 58 | if grep -qs "mirror.mephi.ru.*$VERSION_CODENAME" "$conf_file" 2>/dev/null; then |
| 59 | echo -e "Repository for $VERSION_CODENAME already exists in $conf_file" |
| 60 | else |
| 61 | echo -e "Adding repository for Debian $VERSION_CODENAME" |
| 62 | cat >> "$conf_file" << EOF |
| 63 | |
| 64 | # Added $(date '+%Y-%m-%d') |
| 65 | deb http://mirror.mephi.ru/debian/ $VERSION_CODENAME main non-free-firmware |
| 66 | deb-src http://mirror.mephi.ru/debian/ $VERSION_CODENAME main non-free-firmware |
| 67 | EOF |
| 68 | echo "Repository added, updating package list..." |
| 69 | apt update |
| 70 | fi |
| 71 | } |
| 72 | |
| 73 | # Добавляем репозиторий MEPHI |
| 74 | add_mephi_repository |
| 75 | |
| 76 | # Обновление и апгрейд |
| 77 | apt -y upgrade |
| 78 | |
| 79 | # Установка пакетов (включая sudo) |
| 80 | PACKAGES=( |
| 81 | pv nano curl wget sudo lsb-release iptables |
| 82 | unzip pigz zstd |
| 83 | ncdu gdu |
| 84 | screen tmux lynx |
| 85 | htop btop iftop mtr ioping |
| 86 | git jq yq pwgen |
| 87 | bind9-dnsutils net-tools ssh-audit |
| 88 | cloud-guest-utils qemu-guest-agent |
| 89 | console-setup |
| 90 | ) |
| 91 | |
| 92 | echo -e "${ANSI_GREEN}Installing packages...${ANSI_RESET}" |
| 93 | apt-get update |
| 94 | apt-get install -y "${PACKAGES[@]}" |
| 95 | |
| 96 | # Настройка SSH |
| 97 | echo -e "${ANSI_GREEN}Allowing SSH root login${ANSI_RESET}" |
| 98 | sed -i 's/^.*PermitRootLogin.*$/PermitRootLogin yes/' /etc/ssh/sshd_config |
| 99 | systemctl restart sshd |
| 100 | echo -e "${ANSI_GREEN}Ok.${ANSI_RESET}" |
| 101 | |
| 102 | # Midnight Commander |
| 103 | apt-get -y install mc |
| 104 | |
| 105 | # Настройка таймзоны и локали |
| 106 | echo "tzdata tzdata/Areas select Europe" | debconf-set-selections |
| 107 | echo "tzdata tzdata/Zones/Europe select Moscow" | debconf-set-selections |
| 108 | DEBIAN_FRONTEND=noninteractive dpkg-reconfigure tzdata |
| 109 | |
| 110 | cat > /etc/locale.gen << EOF |
| 111 | ru_RU.UTF-8 UTF-8 |
| 112 | en_US.UTF-8 UTF-8 |
| 113 | EOF |
| 114 | |
| 115 | locale-gen |
| 116 | update-locale LANG=en_US.UTF-8 |
| 117 | locale -a | grep -E "en_US|ru_RU" |
| 118 | source /etc/default/locale |
| 119 | |
| 120 | dpkg-reconfigure console-setup |
| 121 | dpkg-reconfigure keyboard-configuration |
| 122 | |
| 123 | # Настройка journald |
| 124 | mkdir -p /etc/systemd/journald.conf.d |
| 125 | cat > /etc/systemd/journald.conf.d/size.conf << EOF |
| 126 | [Journal] |
| 127 | SystemMaxUse=1G |
| 128 | SystemMaxFileSize=50M |
| 129 | MaxLevelStore=warning |
| 130 | EOF |
| 131 | |
| 132 | systemctl restart systemd-journald |
| 133 | |
| 134 | # Создание пользователя |
| 135 | useradd -m "$NEW_USER" && echo "$NEW_USER:$USER_PASS" | chpasswd && passwd -e "$NEW_USER" |
| 136 | usermod -aG sudo "$NEW_USER" |
| 137 | |
| 138 | # Настройка .Xauthority |
| 139 | touch "/home/$NEW_USER/.Xauthority" |
| 140 | chown "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.Xauthority" |
| 141 | |
| 142 | echo -e "${ANSI_GREEN}Пользователь $NEW_USER с паролем '${ANSI_YELLOW}$USER_PASS${ANSI_GREEN}' создан${ANSI_RESET}" |
| 143 | |
| 144 | # Настройка истории для пользователя |
| 145 | cat >> "/home/$NEW_USER/.bashrc" << 'EOF' |
| 146 | export HISTSIZE=10000 |
| 147 | export HISTFILESIZE=50000 |
| 148 | export HISTTIMEFORMAT="%F %T " |
| 149 | export HISTCONTROL=ignoredups:ignorespace |
| 150 | shopt -s histappend |
| 151 | export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" |
| 152 | EOF |
| 153 | |
| 154 | chown "$NEW_USER:$NEW_USER" "/home/$NEW_USER/.bashrc" |
| 155 | |
| 156 | # Удаление документации git |
| 157 | rm -rf /usr/share/doc/git/RelNotes |
| 158 | |
| 159 | # Настройка истории для root |
| 160 | cat >> /root/.bashrc << 'EOF' |
| 161 | export HISTSIZE=10000 |
| 162 | export HISTFILESIZE=50000 |
| 163 | export HISTTIMEFORMAT="%F %T " |
| 164 | export HISTCONTROL=ignoredups:ignorespace |
| 165 | shopt -s histappend |
| 166 | export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND" |
| 167 | EOF |
| 168 | |
| 169 | source /root/.bashrc |
| 170 | |
| 171 | echo -e "${ANSI_GREEN}=== Настройка завершена успешно ===${ANSI_RESET}" |