2021

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску

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

pve

LXC

Развёртывание контейнеров из образов

pct create 101 /path/to/template.tar.gz \
-arch amd64 \
-hostname container-1 \
-rootfs local-zfs:20 \
-memory 1024 \
-ostype ubuntu \
-cores 4 \
-ignore-unpack-errors 1 \
-unprivileged

NGINX

certbot

https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ru

server {
	listen 80;
	server_name some.domain.com www.some.domain.com;
	client_max_body_size 200M;

	location / {
		proxy_pass      http://localhost:3333;
	}

	location @fallback {
		proxy_pass      http://localhost:3333;
	}

	location ~* "/\.(htaccess|htpasswd)$" {
		deny    all;
		return  404;
	}
}

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