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;
	}
}

googlechrome

kiosk mode with basic auth

cat ./run-app-with-basic-auth-in-chrome-kiosk-mode-on-ubuntu-x11.sh 
#!/bin/bash
export DISPLAY=:0
google-chrome-stable \
--autoplay-policy=no-user-gesture-required \
--disable-pinch \
--overscroll-history-navigation=0 \
--kiosk \
--app=http://my.kiosk.app.with.basic.auth/&

sleep 5s
xte 'key u'
xte 'key s'
xte 'key e'
xte 'key r'
xte 'key Tab'
xte 'key p'
xte 'key a'
xte 'key s'
xte 'key s'
xte 'key w'
xte 'key d'
xte 'key Tab'
xte 'key Tab'
xte 'key Return'


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