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