2021: различия между версиями
Перейти к навигации
Перейти к поиску
Vovan (обсуждение | вклад) (→Manage) |
Vovan (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
=Installer NNTC= | =Installer NNTC= | ||
moved to gitlab https://gitlab.nntc.nnov.ru/vslugin/nntc-installer | moved to gitlab https://gitlab.nntc.nnov.ru/vslugin/nntc-installer | ||
| + | |||
| + | <pre> | ||
| + | #!/bin/bash | ||
| + | SCRIPT=$0 | ||
| + | |||
| + | SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс smb/cifs | ||
| + | DEPLOY_DIR='NONAME' # каталог с tar-архивами на ресурсе SHARE_RESOURCE | ||
| + | SHARE_LOGIN='userftp' # логин | ||
| + | SHARE_PASS='' # пароль | ||
| + | HDD1='/dev/sda' # ex: /dev/nvme0n1 or /dev/sda | ||
| + | HDD1_SUFFIX_TEST_NVME=${HDD1:5:4} | ||
| + | HDD1_SUFFIX='' | ||
| + | if [ "${HDD1_SUFFIX_TEST_NVME}" == "nvme" ]; then | ||
| + | HDD1_SUFFIX='p' | ||
| + | fi | ||
| + | HDD1_PREFIX="${HDD1}${HDD1_SUFFIX}" | ||
| + | HDD1_VG_NAME="system" | ||
| + | SYSVOL_ROOT_NAME="root" | ||
| + | SYSVOL_ROOT_SIZE_G="1" | ||
| + | |||
| + | SAVE_UBUNTU_IN_BASE_INSTALLATION="No" | ||
| + | |||
| + | # разметка жёстких дисков, включая lvm, создание файловых систем | ||
| + | function deploy_prepare_fs() { | ||
| + | echo "Подготовка файловых систем..." | ||
| + | echo "Разметка диска \"${HDD1}\"..." | ||
| + | fdisk ${HDD1} <<EOF | ||
| + | g | ||
| + | n | ||
| + | |||
| + | |||
| + | +512M | ||
| + | t | ||
| + | 1 | ||
| + | 1 | ||
| + | n | ||
| + | |||
| + | |||
| + | +1G | ||
| + | t | ||
| + | 2 | ||
| + | 20 | ||
| + | n | ||
| + | |||
| + | |||
| + | |||
| + | t | ||
| + | 3 | ||
| + | 31 | ||
| + | w | ||
| + | EOF | ||
| + | |||
| + | echo "Форматирование efi" | ||
| + | mkfs.vfat "${HDD1_PREFIX}1" | ||
| + | |||
| + | echo "Форматирование boot" | ||
| + | mkfs.ext4 -F "${HDD1_PREFIX}2" | ||
| + | |||
| + | echo "Создание pv для vg \"${HDD1_VG_NAME}\"" | ||
| + | pvcreate "${HDD1_PREFIX}3" | ||
| + | |||
| + | echo "Создание vg \"${HDD1_VG_NAME}\" на базе pv \"${HDD1_PREFIX}3\"" | ||
| + | vgcreate ${HDD1_VG_NAME} "${HDD1_PREFIX}3" | ||
| + | |||
| + | echo "Создание lv \"${SYSVOL_ROOT_NAME}\" в vg \"${HDD1_VG_NAME}\"" | ||
| + | lvcreate -y ${HDD1_VG_NAME} --name ${SYSVOL_ROOT_NAME} --size ${SYSVOL_ROOT_SIZE_G}g | ||
| + | lvextend -l +100%FREE "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}" | ||
| + | echo "Форматирование /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME}" | ||
| + | mkfs.ext4 -F "/dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME}" | ||
| + | |||
| + | echo "Подготовка файловых систем -- завершено." | ||
| + | } | ||
| + | |||
| + | # монтирование | ||
| + | function deploy_mount() { | ||
| + | echo "Монтирование файловых систем..." | ||
| + | mkdir /mnt/sysboot /mnt/sysefi /mnt/sysroot | ||
| + | mount "${HDD1_PREFIX}2" /mnt/sysboot/ | ||
| + | mount "${HDD1_PREFIX}1" /mnt/sysefi/ | ||
| + | mount /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME} /mnt/sysroot/ | ||
| + | #mount "${HDD1_PREFIX}3" /mnt/sysroot/ | ||
| + | echo "Монтирование файловых систем -- завершено." | ||
| + | } | ||
| + | |||
| + | # монтирование | ||
| + | function deploy_mount_default_ubuntu() { | ||
| + | echo "Монтирование файловых систем (стандартная установка ubuntu)..." | ||
| + | mkdir /mnt/sysboot /mnt/sysefi /mnt/sysroot | ||
| + | mount "${HDD1_PREFIX}2" /mnt/sysroot/ | ||
| + | mount "${HDD1_PREFIX}1" /mnt/sysefi/ | ||
| + | mount --bind /mnt/sysroot/boot /mnt/sysboot/ | ||
| + | echo "Монтирование файловых систем -- завершено." | ||
| + | } | ||
| + | |||
| + | # размонтирование | ||
| + | function deploy_umount() { | ||
| + | echo "Размонтирование файловых систем..." | ||
| + | cd /mnt | ||
| + | umount sys* SAMBA | ||
| + | rmdir sys* /mnt/SAMBA | ||
| + | echo "Размонтирование файловых систем -- завершено." | ||
| + | } | ||
| + | |||
| + | # удаление lv-томов | ||
| + | function deploy_delete_lv() { | ||
| + | echo "Удаление томов lvm..." | ||
| + | lvremove -y "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}" | ||
| + | echo "Удаление томов lvm -- завершено." | ||
| + | } | ||
| + | |||
| + | # удаление vg | ||
| + | function deploy_delete_vg() { | ||
| + | echo "Удаление vg..." | ||
| + | vgremove -y ${HDD1_VG_NAME} | ||
| + | echo "Удаление vg -- завершено." | ||
| + | } | ||
| + | |||
| + | # удаление pv | ||
| + | function deploy_delete_pv() { | ||
| + | echo "Удаление pv..." | ||
| + | pvremove -y "${HDD1_PREFIX}3" | ||
| + | echo "Удаление pv -- завершено." | ||
| + | } | ||
| + | |||
| + | # очистка дисков | ||
| + | function deploy_clear_hdds() { | ||
| + | echo "Очистка разметки на дисках..." | ||
| + | wipefs --all --force ${HDD1} | ||
| + | echo "Очистка разметки на дисках -- завершено." | ||
| + | } | ||
| + | |||
| + | # распаковка раздела efi | ||
| + | function deploy_efi() { | ||
| + | echo "распаковка efi ..." | ||
| + | cd /mnt/sysefi | ||
| + | tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysefi.tar | ||
| + | echo "распаковка efi -- завершено." | ||
| + | } | ||
| + | |||
| + | # распаковка раздела boot | ||
| + | function deploy_boot() { | ||
| + | echo "распаковка boot ..." | ||
| + | cd /mnt/sysboot | ||
| + | tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysboot.tar | ||
| + | echo "распаковка boot -- завершено." | ||
| + | } | ||
| + | |||
| + | # распаковка корня системы | ||
| + | function deploy_root() { | ||
| + | echo "распаковка root ..." | ||
| + | cd /mnt/sysroot | ||
| + | tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysroot.tar | ||
| + | echo "распаковка root -- завершено." | ||
| + | } | ||
| + | |||
| + | # запаковка раздела efi | ||
| + | function deploy_backup_efi() { | ||
| + | echo "запаковка efi ..." | ||
| + | cd /mnt/sysefi | ||
| + | tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysefi.tar . | ||
| + | echo "запаковка efi -- завершено." | ||
| + | } | ||
| + | |||
| + | # запаковка раздела boot | ||
| + | function deploy_backup_boot() { | ||
| + | echo "запаковка boot ..." | ||
| + | cd /mnt/sysboot | ||
| + | tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysboot.tar . | ||
| + | echo "запаковка boot -- завершено." | ||
| + | } | ||
| + | |||
| + | # запаковка корня системы | ||
| + | function deploy_backup_root() { | ||
| + | echo "запаковка root ..." | ||
| + | cd /mnt/sysroot | ||
| + | tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysroot.tar . | ||
| + | echo "запаковка root -- завершено." | ||
| + | } | ||
| + | |||
| + | # получение UUID устройства по его имени | ||
| + | function deploy_get_uuid() { | ||
| + | DEVICE="$1" | ||
| + | UUID=$(blkid | grep ${DEVICE} | awk -F "UUID" {'print $2'} | awk -F '"' {'print $2'}) | ||
| + | echo ${UUID} | ||
| + | } | ||
| + | |||
| + | # обновление /etc/fstab внутри будущей системы | ||
| + | function deploy_update_fstab() { | ||
| + | echo "обновление /etc/fstab ..." | ||
| + | UUID_sysboot=$(deploy_get_uuid "${HDD1_PREFIX}2") | ||
| + | UUID_sysefi=$(deploy_get_uuid "${HDD1_PREFIX}1") | ||
| + | UUID_sysroot=$(deploy_get_uuid "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}") | ||
| + | |||
| + | echo "UUID_sysboot ${UUID_sysboot}" | ||
| + | echo "UUID_sysefi ${UUID_sysefi}" | ||
| + | echo "UUID_sysroot ${UUID_sysroot}" | ||
| + | |||
| + | cp /mnt/sysroot/etc/fstab /mnt/sysroot/etc/fstab_original | ||
| + | |||
| + | cat <<EOF >/mnt/sysroot/etc/fstab | ||
| + | #sysroot | ||
| + | UUID=${UUID_sysroot} / ext4 defaults 0 0 | ||
| + | |||
| + | #sysboot | ||
| + | UUID=${UUID_sysboot} /boot ext4 defaults 0 0 | ||
| + | |||
| + | #sysefi | ||
| + | UUID=${UUID_sysefi} /boot/efi vfat defaults 0 0 | ||
| + | |||
| + | #swap | ||
| + | #/swapfile none swap sw 0 0 | ||
| + | |||
| + | EOF | ||
| + | |||
| + | echo "обновление /etc/fstab ... -- завершено." | ||
| + | } | ||
| + | |||
| + | # установка загрузчика | ||
| + | function deploy_update_grub() { | ||
| + | echo "установка загрузчика ..." | ||
| + | mount --bind /mnt/sysboot /mnt/sysroot/boot | ||
| + | mkdir /mnt/sysroot/{proc,sys,dev} | ||
| + | mkdir /mnt/sysroot/boot/efi | ||
| + | mount --bind /mnt/sysefi /mnt/sysroot/boot/efi | ||
| + | mount -t proc /proc /mnt/sysroot/proc | ||
| + | mount -t sysfs /sys /mnt/sysroot/sys | ||
| + | mount --bind /dev/ /mnt/sysroot/dev | ||
| + | chroot /mnt/sysroot/ <<EOF | ||
| + | grub-install ${HDD1} | ||
| + | update-grub | ||
| + | update-grub2 | ||
| + | EOF | ||
| + | cd /mnt | ||
| + | umount /mnt/sysroot/dev | ||
| + | umount /mnt/sysroot/sys | ||
| + | umount /mnt/sysroot/proc | ||
| + | umount /mnt/sysroot/boot/efi | ||
| + | umount /mnt/sysroot/boot | ||
| + | echo "установка загрузчика -- завершено." | ||
| + | } | ||
| + | |||
| + | # функция развёртывания | ||
| + | deploy_install_go() { | ||
| + | STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S') | ||
| + | deploy_prepare_fs | ||
| + | deploy_mount | ||
| + | deploy_efi | ||
| + | deploy_boot | ||
| + | deploy_root | ||
| + | deploy_update_fstab | ||
| + | deploy_update_grub | ||
| + | deploy_umount | ||
| + | FINISHED_DATE=$(date '+%Y-%m-%d %H:%M:%S') | ||
| + | echo "" | ||
| + | echo "#################################################" | ||
| + | echo "# #" | ||
| + | echo "# Установка завершена #" | ||
| + | echo "# #" | ||
| + | echo "# начало установки: ${STARTED_DATE} #" | ||
| + | echo "# завершение установки: ${FINISHED_DATE} #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "#################################################" | ||
| + | echo "" | ||
| + | read | ||
| + | } | ||
| + | |||
| + | function deploy_start() { | ||
| + | echo "" | ||
| + | echo "Параметры ниже рекомендуется оставить по умолчанию:" | ||
| + | read -e -p "Системный диск (блочное устройство): " -i "${HDD1}" HDD1 | ||
| + | read -e -p "Системная группа томов (VG): " -i "${HDD1_VG_NAME}" HDD1_VG_NAME | ||
| + | read -e -p "Имя корневого логического тома (LV): " -i "${SYSVOL_ROOT_NAME}" SYSVOL_ROOT_NAME | ||
| + | read -e -p "Размер корневого логического тома, GB: " -i "${SYSVOL_ROOT_SIZE_G}" SYSVOL_ROOT_SIZE_G | ||
| + | echo "" | ||
| + | read -e -p "Начинаем установку?! Введите \"Yes\" для продолжения:" -i "" READY | ||
| + | if [ "Yes" == "$READY" ]; then | ||
| + | deploy_install_go | ||
| + | else | ||
| + | echo "" | ||
| + | echo "############################################" | ||
| + | echo "# #" | ||
| + | echo "# ! Установка отменена #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "############################################" | ||
| + | read | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | function deploy_install() { | ||
| + | [ -d /mnt/SAMBA ] || mkdir /mnt/SAMBA | ||
| + | IS_MOUNT=$(mount | grep /mnt/SAMBA | wc -l) | ||
| + | |||
| + | if [ "${IS_MOUNT}" == "0" ]; then | ||
| + | |||
| + | echo "" | ||
| + | echo "Для развёртывания системы из хранилища используйте параметры по умолчанию (Enter) или измените текущие значения." | ||
| + | echo "" | ||
| + | read -e -p "Адрес ресурса smb/cifs: " -i "${SHARE_RESOURCE}" SHARE_RESOURCE | ||
| + | read -e -p "Логин smb/cifs: " -i "${SHARE_LOGIN}" SHARE_LOGIN | ||
| + | read -s -e -p "Пароль smb/cifs (ввод пароля не отображается): " -i "${SHARE_PASS}" SHARE_PASS | ||
| + | read -e -p "Каталог с архивами системы: " -i "${DEPLOY_DIR}" DEPLOY_DIR | ||
| + | echo "" | ||
| + | echo "" | ||
| + | |||
| + | mount.cifs ${SHARE_RESOURCE} /mnt/SAMBA -o username=${SHARE_LOGIN},pass=${SHARE_PASS},iocharset=utf8 | ||
| + | MOUNT_STATUS=$? | ||
| + | if [ ${MOUNT_STATUS} -ne 0 ]; then | ||
| + | echo "" | ||
| + | echo "##############################################" | ||
| + | echo "# #" | ||
| + | echo "# ! Ошибка при монтировании хранилища #" | ||
| + | echo "# #" | ||
| + | echo "# Проверьте данные для подключения #" | ||
| + | echo "# и доступность хранилища по ним! #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "##############################################" | ||
| + | echo "" | ||
| + | read | ||
| + | else | ||
| + | deploy_start | ||
| + | fi | ||
| + | else | ||
| + | deploy_start | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # функция очистки | ||
| + | function deploy_uninstall_go() { | ||
| + | STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S') | ||
| + | deploy_umount | ||
| + | deploy_delete_lv | ||
| + | deploy_delete_vg | ||
| + | deploy_delete_pv | ||
| + | deploy_clear_hdds | ||
| + | FINISHED_DATE=$(date '+%Y-%m-%d %H:%M:%S') | ||
| + | echo "" | ||
| + | echo "###############################################" | ||
| + | echo "# #" | ||
| + | echo "# Очистка завершена #" | ||
| + | echo "# #" | ||
| + | echo "# начало очистки: ${STARTED_DATE} #" | ||
| + | echo "# завершение очистки: ${FINISHED_DATE} #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "###############################################" | ||
| + | echo "" | ||
| + | read | ||
| + | } | ||
| + | |||
| + | function deploy_uninstall() { | ||
| + | echo "" | ||
| + | echo "Удаление полностью очистит жёсткий диск. Эта операция -- Н Е О Б Р А Т И М А!" | ||
| + | echo "" | ||
| + | echo "Эта операция -- НЕОБРАТИМА!" | ||
| + | echo " Эта операция -- Н Е О Б Р А Т И М А !" | ||
| + | echo " Эта операция -- Н Е О Б Р А Т И М А!" | ||
| + | echo "" | ||
| + | echo "" | ||
| + | read -e -p "Начинаем удаление?! Для продолжения наберите текст \"yes, I really want to brick this device!\":" -i "" CONFIRM_CLEAR | ||
| + | if [ "yes, I really want to brick this device!" == "${CONFIRM_CLEAR}" ]; then | ||
| + | deploy_uninstall_go | ||
| + | else | ||
| + | echo "" | ||
| + | echo "############################################" | ||
| + | echo "# #" | ||
| + | echo "# ! Очистка отменена #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "############################################" | ||
| + | echo "" | ||
| + | read | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # функция развёртывания | ||
| + | deploy_backup_go() { | ||
| + | STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S') | ||
| + | #SAVE_UBUNTU_IN_BASE_INSTALLATION | ||
| + | |||
| + | if [ "Yes" == "$SAVE_UBUNTU_IN_BASE_INSTALLATION" ]; then | ||
| + | deploy_mount_default_ubuntu | ||
| + | else | ||
| + | deploy_mount | ||
| + | fi | ||
| + | |||
| + | [ -d /mnt/SAMBA/${DEPLOY_DIR} ] || mkdir /mnt/SAMBA/${DEPLOY_DIR} | ||
| + | deploy_backup_efi | ||
| + | deploy_backup_boot | ||
| + | deploy_backup_root | ||
| + | deploy_umount | ||
| + | FINISHED_DATE=$(date '+%Y-%m-%d %H:%M:%S') | ||
| + | echo "" | ||
| + | echo "##############################################" | ||
| + | echo "# #" | ||
| + | echo "# Сохранение завершено #" | ||
| + | echo "# #" | ||
| + | echo "# начало сохранения: ${STARTED_DATE} #" | ||
| + | echo "# завершение сохранения: ${FINISHED_DATE} #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "##############################################" | ||
| + | echo "" | ||
| + | read | ||
| + | } | ||
| + | |||
| + | function deploy_backup_start() { | ||
| + | echo "" | ||
| + | echo "ВНИМАНИЕ! Параметры ниже должны соответствовать параметрам инсталляции системы:" | ||
| + | read -e -p "Системный диск (блочное устройство): " -i "${HDD1}" HDD1 | ||
| + | read -e -p "Системная группа томов (VG): " -i "${HDD1_VG_NAME}" HDD1_VG_NAME | ||
| + | read -e -p "Имя корневого логического тома (LV): " -i "${SYSVOL_ROOT_NAME}" SYSVOL_ROOT_NAME | ||
| + | read -e -p "Размер корневого логического тома, GB: " -i "${SYSVOL_ROOT_SIZE_G}" SYSVOL_ROOT_SIZE_G | ||
| + | read -e -p "Сохраняем систему после базовой установки ubuntu (Yes/No)?: " -i "${SAVE_UBUNTU_IN_BASE_INSTALLATION}" SAVE_UBUNTU_IN_BASE_INSTALLATION | ||
| + | echo "" | ||
| + | read -e -p "Начинаем сохранение?! Введите \"Yes\" для продолжения:" -i "" READY | ||
| + | |||
| + | if [ "Yes" == "$READY" ]; then | ||
| + | deploy_backup_go | ||
| + | else | ||
| + | echo "" | ||
| + | echo "#############################################" | ||
| + | echo "# #" | ||
| + | echo "# ! Сохранение отменено #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "#############################################" | ||
| + | echo "" | ||
| + | read | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | function deploy_backup() { | ||
| + | [ -d /mnt/SAMBA ] || mkdir /mnt/SAMBA | ||
| + | IS_MOUNT=$(mount | grep /mnt/SAMBA | wc -l) | ||
| + | |||
| + | if [ "${IS_MOUNT}" == "0" ]; then | ||
| + | echo "" | ||
| + | echo "Для сохранения системы в хранилище используйте параметры по умолчанию (Enter) или измените текущие значения." | ||
| + | echo "" | ||
| + | echo "ВНИМАНИЕ! Все существующие архивы в заданном каталоге с архивами будут перезаписаны, если они существуют!" | ||
| + | echo "" | ||
| + | echo "ВНИМАНИЕ! Во избежании перезаписи существующих каталогов имя каталога с архивами создано автоматически согласно текущей дате" | ||
| + | echo "" | ||
| + | echo "" | ||
| + | read -e -p "Адрес ресурса smb/cifs: " -i "${SHARE_RESOURCE}" SHARE_RESOURCE | ||
| + | read -e -p "Логин smb/cifs: " -i "${SHARE_LOGIN}" SHARE_LOGIN | ||
| + | read -e -p "Пароль smb/cifs: " -i "${SHARE_PASS}" SHARE_PASS | ||
| + | read -e -p "Каталог с архивами системы: " -i "$(date '+%Y-%m-%d_%H-%M-%S')__SAVE__UNNAMED" DEPLOY_DIR | ||
| + | echo "" | ||
| + | echo "" | ||
| + | |||
| + | mount.cifs ${SHARE_RESOURCE} /mnt/SAMBA -o username=${SHARE_LOGIN},pass=${SHARE_PASS},iocharset=utf8 | ||
| + | MOUNT_STATUS=$? | ||
| + | if [ ${MOUNT_STATUS} -ne 0 ]; then | ||
| + | echo "" | ||
| + | echo "##############################################" | ||
| + | echo "# #" | ||
| + | echo "# ! Ошибка при монтировании хранилища #" | ||
| + | echo "# #" | ||
| + | echo "# Проверьте данные для подключения #" | ||
| + | echo "# и доступность хранилища по ним! #" | ||
| + | echo "# #" | ||
| + | echo "# нажмите любую клавишу для продолжения... #" | ||
| + | echo "# #" | ||
| + | echo "##############################################" | ||
| + | echo "" | ||
| + | read | ||
| + | else | ||
| + | deploy_backup_start | ||
| + | fi | ||
| + | else | ||
| + | deploy_backup_start | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | while true; do | ||
| + | clear | ||
| + | echo "" | ||
| + | echo "#############################################" | ||
| + | echo "# NNTC Installer (COVID Version 2021-01-12) #" | ||
| + | echo "#############################################" | ||
| + | echo "" | ||
| + | echo "Вручную мастер можно запустить командой: /bin/installer.sh" | ||
| + | echo "" | ||
| + | read -n 1 -e -p "Введите 'x' для закрытия этого диалога или нажмите 'Enter' для продолжения: " -i "" is_exit | ||
| + | if [ "x" == "$is_exit" ]; then | ||
| + | exit 0 | ||
| + | fi | ||
| + | echo "" | ||
| + | echo "Меню:" | ||
| + | echo "" | ||
| + | echo "1 - выполнить установку" | ||
| + | echo "0 - выполнить удаление" | ||
| + | echo "2 - выполнить сохранение" | ||
| + | echo "" | ||
| + | read -n 1 -e -p "Выберите операцию: " -i "" OPERATION | ||
| + | |||
| + | case "${OPERATION}" in | ||
| + | "1") deploy_install ;; | ||
| + | "0") deploy_uninstall ;; | ||
| + | "2") deploy_backup ;; | ||
| + | esac | ||
| + | done | ||
| + | </pre> | ||
=MOODLE Update= | =MOODLE Update= | ||
Версия 14:53, 3 марта 2021
Содержание
Installer NNTC
moved to gitlab https://gitlab.nntc.nnov.ru/vslugin/nntc-installer
#!/bin/bash
SCRIPT=$0
SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс smb/cifs
DEPLOY_DIR='NONAME' # каталог с tar-архивами на ресурсе SHARE_RESOURCE
SHARE_LOGIN='userftp' # логин
SHARE_PASS='' # пароль
HDD1='/dev/sda' # ex: /dev/nvme0n1 or /dev/sda
HDD1_SUFFIX_TEST_NVME=${HDD1:5:4}
HDD1_SUFFIX=''
if [ "${HDD1_SUFFIX_TEST_NVME}" == "nvme" ]; then
HDD1_SUFFIX='p'
fi
HDD1_PREFIX="${HDD1}${HDD1_SUFFIX}"
HDD1_VG_NAME="system"
SYSVOL_ROOT_NAME="root"
SYSVOL_ROOT_SIZE_G="1"
SAVE_UBUNTU_IN_BASE_INSTALLATION="No"
# разметка жёстких дисков, включая lvm, создание файловых систем
function deploy_prepare_fs() {
echo "Подготовка файловых систем..."
echo "Разметка диска \"${HDD1}\"..."
fdisk ${HDD1} <<EOF
g
n
+512M
t
1
1
n
+1G
t
2
20
n
t
3
31
w
EOF
echo "Форматирование efi"
mkfs.vfat "${HDD1_PREFIX}1"
echo "Форматирование boot"
mkfs.ext4 -F "${HDD1_PREFIX}2"
echo "Создание pv для vg \"${HDD1_VG_NAME}\""
pvcreate "${HDD1_PREFIX}3"
echo "Создание vg \"${HDD1_VG_NAME}\" на базе pv \"${HDD1_PREFIX}3\""
vgcreate ${HDD1_VG_NAME} "${HDD1_PREFIX}3"
echo "Создание lv \"${SYSVOL_ROOT_NAME}\" в vg \"${HDD1_VG_NAME}\""
lvcreate -y ${HDD1_VG_NAME} --name ${SYSVOL_ROOT_NAME} --size ${SYSVOL_ROOT_SIZE_G}g
lvextend -l +100%FREE "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}"
echo "Форматирование /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME}"
mkfs.ext4 -F "/dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME}"
echo "Подготовка файловых систем -- завершено."
}
# монтирование
function deploy_mount() {
echo "Монтирование файловых систем..."
mkdir /mnt/sysboot /mnt/sysefi /mnt/sysroot
mount "${HDD1_PREFIX}2" /mnt/sysboot/
mount "${HDD1_PREFIX}1" /mnt/sysefi/
mount /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME} /mnt/sysroot/
#mount "${HDD1_PREFIX}3" /mnt/sysroot/
echo "Монтирование файловых систем -- завершено."
}
# монтирование
function deploy_mount_default_ubuntu() {
echo "Монтирование файловых систем (стандартная установка ubuntu)..."
mkdir /mnt/sysboot /mnt/sysefi /mnt/sysroot
mount "${HDD1_PREFIX}2" /mnt/sysroot/
mount "${HDD1_PREFIX}1" /mnt/sysefi/
mount --bind /mnt/sysroot/boot /mnt/sysboot/
echo "Монтирование файловых систем -- завершено."
}
# размонтирование
function deploy_umount() {
echo "Размонтирование файловых систем..."
cd /mnt
umount sys* SAMBA
rmdir sys* /mnt/SAMBA
echo "Размонтирование файловых систем -- завершено."
}
# удаление lv-томов
function deploy_delete_lv() {
echo "Удаление томов lvm..."
lvremove -y "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}"
echo "Удаление томов lvm -- завершено."
}
# удаление vg
function deploy_delete_vg() {
echo "Удаление vg..."
vgremove -y ${HDD1_VG_NAME}
echo "Удаление vg -- завершено."
}
# удаление pv
function deploy_delete_pv() {
echo "Удаление pv..."
pvremove -y "${HDD1_PREFIX}3"
echo "Удаление pv -- завершено."
}
# очистка дисков
function deploy_clear_hdds() {
echo "Очистка разметки на дисках..."
wipefs --all --force ${HDD1}
echo "Очистка разметки на дисках -- завершено."
}
# распаковка раздела efi
function deploy_efi() {
echo "распаковка efi ..."
cd /mnt/sysefi
tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysefi.tar
echo "распаковка efi -- завершено."
}
# распаковка раздела boot
function deploy_boot() {
echo "распаковка boot ..."
cd /mnt/sysboot
tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysboot.tar
echo "распаковка boot -- завершено."
}
# распаковка корня системы
function deploy_root() {
echo "распаковка root ..."
cd /mnt/sysroot
tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysroot.tar
echo "распаковка root -- завершено."
}
# запаковка раздела efi
function deploy_backup_efi() {
echo "запаковка efi ..."
cd /mnt/sysefi
tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysefi.tar .
echo "запаковка efi -- завершено."
}
# запаковка раздела boot
function deploy_backup_boot() {
echo "запаковка boot ..."
cd /mnt/sysboot
tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysboot.tar .
echo "запаковка boot -- завершено."
}
# запаковка корня системы
function deploy_backup_root() {
echo "запаковка root ..."
cd /mnt/sysroot
tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysroot.tar .
echo "запаковка root -- завершено."
}
# получение UUID устройства по его имени
function deploy_get_uuid() {
DEVICE="$1"
UUID=$(blkid | grep ${DEVICE} | awk -F "UUID" {'print $2'} | awk -F '"' {'print $2'})
echo ${UUID}
}
# обновление /etc/fstab внутри будущей системы
function deploy_update_fstab() {
echo "обновление /etc/fstab ..."
UUID_sysboot=$(deploy_get_uuid "${HDD1_PREFIX}2")
UUID_sysefi=$(deploy_get_uuid "${HDD1_PREFIX}1")
UUID_sysroot=$(deploy_get_uuid "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}")
echo "UUID_sysboot ${UUID_sysboot}"
echo "UUID_sysefi ${UUID_sysefi}"
echo "UUID_sysroot ${UUID_sysroot}"
cp /mnt/sysroot/etc/fstab /mnt/sysroot/etc/fstab_original
cat <<EOF >/mnt/sysroot/etc/fstab
#sysroot
UUID=${UUID_sysroot} / ext4 defaults 0 0
#sysboot
UUID=${UUID_sysboot} /boot ext4 defaults 0 0
#sysefi
UUID=${UUID_sysefi} /boot/efi vfat defaults 0 0
#swap
#/swapfile none swap sw 0 0
EOF
echo "обновление /etc/fstab ... -- завершено."
}
# установка загрузчика
function deploy_update_grub() {
echo "установка загрузчика ..."
mount --bind /mnt/sysboot /mnt/sysroot/boot
mkdir /mnt/sysroot/{proc,sys,dev}
mkdir /mnt/sysroot/boot/efi
mount --bind /mnt/sysefi /mnt/sysroot/boot/efi
mount -t proc /proc /mnt/sysroot/proc
mount -t sysfs /sys /mnt/sysroot/sys
mount --bind /dev/ /mnt/sysroot/dev
chroot /mnt/sysroot/ <<EOF
grub-install ${HDD1}
update-grub
update-grub2
EOF
cd /mnt
umount /mnt/sysroot/dev
umount /mnt/sysroot/sys
umount /mnt/sysroot/proc
umount /mnt/sysroot/boot/efi
umount /mnt/sysroot/boot
echo "установка загрузчика -- завершено."
}
# функция развёртывания
deploy_install_go() {
STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
deploy_prepare_fs
deploy_mount
deploy_efi
deploy_boot
deploy_root
deploy_update_fstab
deploy_update_grub
deploy_umount
FINISHED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo ""
echo "#################################################"
echo "# #"
echo "# Установка завершена #"
echo "# #"
echo "# начало установки: ${STARTED_DATE} #"
echo "# завершение установки: ${FINISHED_DATE} #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "#################################################"
echo ""
read
}
function deploy_start() {
echo ""
echo "Параметры ниже рекомендуется оставить по умолчанию:"
read -e -p "Системный диск (блочное устройство): " -i "${HDD1}" HDD1
read -e -p "Системная группа томов (VG): " -i "${HDD1_VG_NAME}" HDD1_VG_NAME
read -e -p "Имя корневого логического тома (LV): " -i "${SYSVOL_ROOT_NAME}" SYSVOL_ROOT_NAME
read -e -p "Размер корневого логического тома, GB: " -i "${SYSVOL_ROOT_SIZE_G}" SYSVOL_ROOT_SIZE_G
echo ""
read -e -p "Начинаем установку?! Введите \"Yes\" для продолжения:" -i "" READY
if [ "Yes" == "$READY" ]; then
deploy_install_go
else
echo ""
echo "############################################"
echo "# #"
echo "# ! Установка отменена #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "############################################"
read
fi
}
function deploy_install() {
[ -d /mnt/SAMBA ] || mkdir /mnt/SAMBA
IS_MOUNT=$(mount | grep /mnt/SAMBA | wc -l)
if [ "${IS_MOUNT}" == "0" ]; then
echo ""
echo "Для развёртывания системы из хранилища используйте параметры по умолчанию (Enter) или измените текущие значения."
echo ""
read -e -p "Адрес ресурса smb/cifs: " -i "${SHARE_RESOURCE}" SHARE_RESOURCE
read -e -p "Логин smb/cifs: " -i "${SHARE_LOGIN}" SHARE_LOGIN
read -s -e -p "Пароль smb/cifs (ввод пароля не отображается): " -i "${SHARE_PASS}" SHARE_PASS
read -e -p "Каталог с архивами системы: " -i "${DEPLOY_DIR}" DEPLOY_DIR
echo ""
echo ""
mount.cifs ${SHARE_RESOURCE} /mnt/SAMBA -o username=${SHARE_LOGIN},pass=${SHARE_PASS},iocharset=utf8
MOUNT_STATUS=$?
if [ ${MOUNT_STATUS} -ne 0 ]; then
echo ""
echo "##############################################"
echo "# #"
echo "# ! Ошибка при монтировании хранилища #"
echo "# #"
echo "# Проверьте данные для подключения #"
echo "# и доступность хранилища по ним! #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "##############################################"
echo ""
read
else
deploy_start
fi
else
deploy_start
fi
}
# функция очистки
function deploy_uninstall_go() {
STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
deploy_umount
deploy_delete_lv
deploy_delete_vg
deploy_delete_pv
deploy_clear_hdds
FINISHED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo ""
echo "###############################################"
echo "# #"
echo "# Очистка завершена #"
echo "# #"
echo "# начало очистки: ${STARTED_DATE} #"
echo "# завершение очистки: ${FINISHED_DATE} #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "###############################################"
echo ""
read
}
function deploy_uninstall() {
echo ""
echo "Удаление полностью очистит жёсткий диск. Эта операция -- Н Е О Б Р А Т И М А!"
echo ""
echo "Эта операция -- НЕОБРАТИМА!"
echo " Эта операция -- Н Е О Б Р А Т И М А !"
echo " Эта операция -- Н Е О Б Р А Т И М А!"
echo ""
echo ""
read -e -p "Начинаем удаление?! Для продолжения наберите текст \"yes, I really want to brick this device!\":" -i "" CONFIRM_CLEAR
if [ "yes, I really want to brick this device!" == "${CONFIRM_CLEAR}" ]; then
deploy_uninstall_go
else
echo ""
echo "############################################"
echo "# #"
echo "# ! Очистка отменена #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "############################################"
echo ""
read
fi
}
# функция развёртывания
deploy_backup_go() {
STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
#SAVE_UBUNTU_IN_BASE_INSTALLATION
if [ "Yes" == "$SAVE_UBUNTU_IN_BASE_INSTALLATION" ]; then
deploy_mount_default_ubuntu
else
deploy_mount
fi
[ -d /mnt/SAMBA/${DEPLOY_DIR} ] || mkdir /mnt/SAMBA/${DEPLOY_DIR}
deploy_backup_efi
deploy_backup_boot
deploy_backup_root
deploy_umount
FINISHED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo ""
echo "##############################################"
echo "# #"
echo "# Сохранение завершено #"
echo "# #"
echo "# начало сохранения: ${STARTED_DATE} #"
echo "# завершение сохранения: ${FINISHED_DATE} #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "##############################################"
echo ""
read
}
function deploy_backup_start() {
echo ""
echo "ВНИМАНИЕ! Параметры ниже должны соответствовать параметрам инсталляции системы:"
read -e -p "Системный диск (блочное устройство): " -i "${HDD1}" HDD1
read -e -p "Системная группа томов (VG): " -i "${HDD1_VG_NAME}" HDD1_VG_NAME
read -e -p "Имя корневого логического тома (LV): " -i "${SYSVOL_ROOT_NAME}" SYSVOL_ROOT_NAME
read -e -p "Размер корневого логического тома, GB: " -i "${SYSVOL_ROOT_SIZE_G}" SYSVOL_ROOT_SIZE_G
read -e -p "Сохраняем систему после базовой установки ubuntu (Yes/No)?: " -i "${SAVE_UBUNTU_IN_BASE_INSTALLATION}" SAVE_UBUNTU_IN_BASE_INSTALLATION
echo ""
read -e -p "Начинаем сохранение?! Введите \"Yes\" для продолжения:" -i "" READY
if [ "Yes" == "$READY" ]; then
deploy_backup_go
else
echo ""
echo "#############################################"
echo "# #"
echo "# ! Сохранение отменено #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "#############################################"
echo ""
read
fi
}
function deploy_backup() {
[ -d /mnt/SAMBA ] || mkdir /mnt/SAMBA
IS_MOUNT=$(mount | grep /mnt/SAMBA | wc -l)
if [ "${IS_MOUNT}" == "0" ]; then
echo ""
echo "Для сохранения системы в хранилище используйте параметры по умолчанию (Enter) или измените текущие значения."
echo ""
echo "ВНИМАНИЕ! Все существующие архивы в заданном каталоге с архивами будут перезаписаны, если они существуют!"
echo ""
echo "ВНИМАНИЕ! Во избежании перезаписи существующих каталогов имя каталога с архивами создано автоматически согласно текущей дате"
echo ""
echo ""
read -e -p "Адрес ресурса smb/cifs: " -i "${SHARE_RESOURCE}" SHARE_RESOURCE
read -e -p "Логин smb/cifs: " -i "${SHARE_LOGIN}" SHARE_LOGIN
read -e -p "Пароль smb/cifs: " -i "${SHARE_PASS}" SHARE_PASS
read -e -p "Каталог с архивами системы: " -i "$(date '+%Y-%m-%d_%H-%M-%S')__SAVE__UNNAMED" DEPLOY_DIR
echo ""
echo ""
mount.cifs ${SHARE_RESOURCE} /mnt/SAMBA -o username=${SHARE_LOGIN},pass=${SHARE_PASS},iocharset=utf8
MOUNT_STATUS=$?
if [ ${MOUNT_STATUS} -ne 0 ]; then
echo ""
echo "##############################################"
echo "# #"
echo "# ! Ошибка при монтировании хранилища #"
echo "# #"
echo "# Проверьте данные для подключения #"
echo "# и доступность хранилища по ним! #"
echo "# #"
echo "# нажмите любую клавишу для продолжения... #"
echo "# #"
echo "##############################################"
echo ""
read
else
deploy_backup_start
fi
else
deploy_backup_start
fi
}
while true; do
clear
echo ""
echo "#############################################"
echo "# NNTC Installer (COVID Version 2021-01-12) #"
echo "#############################################"
echo ""
echo "Вручную мастер можно запустить командой: /bin/installer.sh"
echo ""
read -n 1 -e -p "Введите 'x' для закрытия этого диалога или нажмите 'Enter' для продолжения: " -i "" is_exit
if [ "x" == "$is_exit" ]; then
exit 0
fi
echo ""
echo "Меню:"
echo ""
echo "1 - выполнить установку"
echo "0 - выполнить удаление"
echo "2 - выполнить сохранение"
echo ""
read -n 1 -e -p "Выберите операцию: " -i "" OPERATION
case "${OPERATION}" in
"1") deploy_install ;;
"0") deploy_uninstall ;;
"2") deploy_backup ;;
esac
done
MOODLE Update
Patches
JS Errors in file lib/form/filemanager.js
File
lib/form/filemanager.js
Patch
425a426
> if(buttonDeleteFile){
461a463
> }
632c634,637
< this.filemanager.one('.fp-btn-delete').addClass('d-none');
---
> const fm = this.filemanager.one('.fp-btn-delete');
> if(fm){
> fm.addClass('d-none');
> }
634c639,642
< this.filemanager.one('.fp-btn-delete').removeClass('d-none');
---
> const fm = this.filemanager.one('.fp-btn-delete');
> if(fm){
> fm.removeClass('d-none');
> }
Mariadb in Docker (for emsh)
Deploy
run
docker run --name mariadb-emsh \ -p 3306:3306 \ -d \ -e MYSQL_ROOT_PASSWORD=<YOU_PASSWORD_HERE> \ -e MYSQL_DATABASE=db \ -e MYSQL_USER=student \ -e MYSQL_PASSWORD=student \ mariadb
start
docker start mariadb-emsh
stop
docker stop mariadb-emsh
Manage
Обычная бд под названием db на полный доступ пользователю student с паролем student
mysql -ustudent -pstudent -h 172.16.254.140 db
Ридонли бд под названием rodb н ридонли доступ пользователю student с паролем student
mysql -ustudent -pstudent -h 172.16.254.140 db
База данных под названием rodb на полный доступ пользоваелю root с паролем emsh123321
mysql -uroot -pemsh123321 -h 172.16.254.140 rodb
Залить дамп в базу от рута
mysql -uroot -pemsh123321 -h 172.16.254.140 rodb < file_with_dump.sql
Выгрузить дамп базы
mysqldump -uroot -p<YOU_PASSWORD_HERE> -h 172.16.254.140 rodb > file_with_dump.sql