Загрузка данных
1. russification.sh
Это главный файл.
#!/bin/bash
# Цвета
# ==========================================
YW='\033[1;33m'
GN='\033[1;32m'
RD='\033[1;31m'
CL='\033[0m'
# ==========================================
# Сообщения
# ==========================================
msg_error() {
echo -e "${RD}[✗]${CL} $1"
}
msg_info() {
echo -e "${YW}[!]${CL} $1"
}
msg_ok() {
echo -e "${GN}[✓]${CL} $1"
}
# ==========================================
# Подключение библиотек
# ==========================================
source "$SCRIPT_DIR/lib/check-root.sh"
source "$SCRIPT_DIR/lib/ensure-executable.sh"
source "$SCRIPT_DIR/lib/set-locale.sh"
# ==========================================
# Проверка root
# ==========================================
check_root
# ==========================================
# Проверка прав запуска
# ==========================================
ensure_executable "$SCRIPT_DIR/russification.sh"
ensure_executable "$SCRIPT_DIR/lib/check-root.sh"
ensure_executable "$SCRIPT_DIR/lib/ensure-executable.sh"
ensure_executable "$SCRIPT_DIR/lib/set-locale.sh"
# ==========================================
# Запуск русификации
# ==========================================
echo
echo "=========================================="
echo " Русификация Kali Linux"
echo "=========================================="
echo
set_locale
# ==========================================
# Завершение
# ==========================================
echo
echo "=========================================="
echo " Русификация завершена!"
echo "=========================================="
echo
msg_info "Для применения изменений рекомендуется перезагрузить систему."
echo
read -rp "Перезагрузить сейчас? [y/N]: " answer
if [[ "$answer" =~ ^[YyДд]$ ]]; then
msg_info "Перезагрузка..."
reboot
else
msg_ok "Перезагрузка отменена."
echo
echo "Выполните позже:"
echo " reboot"
fi
2. lib/check-root.sh
Это первый модуль, который вызывается главным скриптом.
Он только проверяет, что скрипт запущен от root.
# ==========================================
# Проверка прав root
# ==========================================
#
# Функция проверяет, запущен ли скрипт
# с правами суперпользователя root.
#
# UID 0 = root.
# ==========================================
check_root() {
# Проверяем эффективный UID пользователя.
#
# Если UID не равен 0,
# значит скрипт запущен не от root.
if [[ $EUID -ne 0 ]]; then
# Выводим сообщение об ошибке.
msg_error "Скрипт требует прав root!"
# Показываем пользователю,
# как перейти в root.
echo -e " ${YW}Запустите от root:${CL} su -"
# Завершаем выполнение.
exit 1
fi
}
3. lib/ensure-executable.sh
Этот модуль проверяет права +x.
Если файл не исполняемый — добавляет +x.
# ==========================================
local target="${1:-}"
# ==========================================
# Проверка аргумента
# ==========================================
# Если путь не указан —
# возвращаем ошибку.
if [ -z "$target" ]; then
echo "ensure_executable: не указан файл" >&2
return 1
fi
# ==========================================
# Проверка существования файла
# ==========================================
if [ ! -e "$target" ]; then
echo "ensure_executable: файл не найден: $target" >&2
return 1
fi
# ==========================================
# Проверка права +x
# ==========================================
# Если файл уже исполняемый,
# ничего делать не нужно.
if [ -x "$target" ]; then
return 0
fi
# ==========================================
# Проверка root
# ==========================================
# Для chmod нужны соответствующие права.
if [ "$(id -u)" -ne 0 ]; then
echo "ensure_executable: нужны права root (chmod +x)" >&2
echo " Запустите: su - или sudo $0 $target" >&2
return 1
fi
# ==========================================
# Добавление права +x
# ==========================================
if declare -F msg_info >/dev/null 2>&1; then
msg_info "Файл не исполняемый, добавляем права (+x)"
else
echo " - Файл не исполняемый, добавляем права (+x)..."
fi
# Добавляем право на выполнение.
chmod +x "$target"
# ==========================================
# Сообщение об успехе
# ==========================================
if declare -F msg_ok >/dev/null 2>&1; then
msg_ok "Права добавлены"
else
echo " ✓ Права добавлены: $target"
fi
}
4. lib/set-locale.sh
Это сам модуль русификации.
Обрати внимание: здесь используется функция set_locale(). Она не выполняется сама, пока главный скрипт не вызовет:
set_locale
# ==========================================
msg_info "Проверяем пакет locales..."
# Проверяем, установлен ли пакет locales.
if ! dpkg -s locales >/dev/null 2>&1; then
msg_info "Пакет locales не установлен."
msg_info "Устанавливаем locales..."
apt update
apt install -y locales
msg_ok "Пакет locales установлен."
else
msg_ok "Пакет locales уже установлен."
fi
# ==========================================
# Настройка ru_RU.UTF-8
# ==========================================
msg_info "Настраиваем ru_RU.UTF-8..."
# Если русская локаль закомментирована —
# раскомментируем её.
if grep -q '^# *ru_RU.UTF-8 UTF-8' /etc/locale.gen; then
sed -i \
's/^# *ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' \
/etc/locale.gen
# Если строки нет вообще —
# добавляем её в конец файла.
elif ! grep -q '^ru_RU.UTF-8 UTF-8' /etc/locale.gen; then
echo 'ru_RU.UTF-8 UTF-8' >> /etc/locale.gen
fi
# ==========================================
# Генерация локали
# ==========================================
msg_info "Генерируем ru_RU.UTF-8..."
locale-gen ru_RU.UTF-8
msg_ok "ru_RU.UTF-8 сгенерирована."
# ==========================================
# Установка локали по умолчанию
# ==========================================
msg_info "Устанавливаем русскую локаль по умолчанию..."
update-locale \
LANG=ru_RU.UTF-8 \
LANGUAGE=ru_RU:ru
msg_ok "Русская локаль установлена."
# ==========================================
# Информация
# ==========================================
echo
echo "Текущие настройки:"
echo
grep -E '^(LANG|LANGUAGE)=' /etc/default/locale || true
}