2021: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(FOR /dev/nvmeX)
 
(не показано 18 промежуточных версий 1 участника)
Строка 1: Строка 1:
 
=Installer NNTC=
 
=Installer NNTC=
==FOR /dev/sdX==
+
moved to gitlab https://gitlab.nntc.nnov.ru/vslugin/nntc-installer
 +
 
 
<pre>
 
<pre>
 
#!/bin/bash
 
#!/bin/bash
 
SCRIPT=$0
 
SCRIPT=$0
  
SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс по протоколу smb/cifs
+
SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс smb/cifs
DEPLOY_DIR='SRV_DEFAULT'             # откуда брать tar-архивы на ресурсе SHARE_RESOURCE
+
DEPLOY_DIR='NONAME'                           # каталог с tar-архивами на ресурсе SHARE_RESOURCE
SHARE_LOGIN='userftp'                     # логин
+
SHARE_LOGIN='userftp'                         # логин
SHARE_PASS=''                       # пароль
+
SHARE_PASS=''                         # пароль
HDD1='/dev/sda'
+
HDD1='/dev/sda'                           # ex: /dev/nvme0n1 or /dev/sda
HDD1_PREFIX="${HDD1}"
+
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"
 
HDD1_VG_NAME="system"
 
SYSVOL_ROOT_NAME="root"
 
SYSVOL_ROOT_NAME="root"
 
SYSVOL_ROOT_SIZE_G="1"
 
SYSVOL_ROOT_SIZE_G="1"
 +
 +
SAVE_UBUNTU_IN_BASE_INSTALLATION="No"
  
 
# разметка жёстких дисков, включая lvm, создание файловых систем
 
# разметка жёстких дисков, включая lvm, создание файловых систем
Строка 19: Строка 27:
 
   echo "Подготовка файловых систем..."
 
   echo "Подготовка файловых систем..."
 
   echo "Разметка диска \"${HDD1}\"..."
 
   echo "Разметка диска \"${HDD1}\"..."
   fdisk ${HDD1_PREFIX} <<EOF
+
   fdisk ${HDD1} <<EOF
 
g
 
g
 
n
 
n
Строка 46: Строка 54:
  
 
   echo "Форматирование efi"
 
   echo "Форматирование efi"
   mkfs -t vfat -F "${HDD1_PREFIX}1"
+
   mkfs.vfat "${HDD1_PREFIX}1"
  
 
   echo "Форматирование boot"
 
   echo "Форматирование boot"
Строка 74: Строка 82:
 
   mount /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME} /mnt/sysroot/
 
   mount /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME} /mnt/sysroot/
 
   #mount "${HDD1_PREFIX}3" /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 "Монтирование файловых систем -- завершено."
 
   echo "Монтирование файловых систем -- завершено."
 
}
 
}
Строка 103: Строка 121:
 
function deploy_delete_pv() {
 
function deploy_delete_pv() {
 
   echo "Удаление pv..."
 
   echo "Удаление pv..."
   pvremove -y ${HDD1_PREFIX}
+
   pvremove -y "${HDD1_PREFIX}3"
 
   echo "Удаление pv -- завершено."
 
   echo "Удаление pv -- завершено."
 
}
 
}
Строка 110: Строка 128:
 
function deploy_clear_hdds() {
 
function deploy_clear_hdds() {
 
   echo "Очистка разметки на дисках..."
 
   echo "Очистка разметки на дисках..."
   fdisk ${HDD1_PREFIX} <<EOF
+
   wipefs --all --force ${HDD1}
g
 
w
 
EOF
 
 
   echo "Очистка разметки на дисках -- завершено."
 
   echo "Очистка разметки на дисках -- завершено."
 
}
 
}
Строка 242: Строка 257:
 
   echo "#################################################"
 
   echo "#################################################"
 
   echo "#                                              #"
 
   echo "#                                              #"
   echo "#         Установка сервера завершена         #"
+
   echo "#             Установка завершена             #"
 
   echo "#                                              #"
 
   echo "#                                              #"
 
   echo "# начало установки:    ${STARTED_DATE}    #"
 
   echo "# начало установки:    ${STARTED_DATE}    #"
Строка 289: Строка 304:
 
     read -e -p "Адрес ресурса smb/cifs: " -i "${SHARE_RESOURCE}" SHARE_RESOURCE
 
     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_LOGIN}" SHARE_LOGIN
     read -e -p "Пароль smb/cifs: " -i "${SHARE_PASS}" SHARE_PASS
+
     read -s -e -p "Пароль smb/cifs (ввод пароля не отображается): " -i "${SHARE_PASS}" SHARE_PASS
 
     read -e -p "Каталог с архивами системы: " -i "${DEPLOY_DIR}" DEPLOY_DIR
 
     read -e -p "Каталог с архивами системы: " -i "${DEPLOY_DIR}" DEPLOY_DIR
 
     echo ""
 
     echo ""
Строка 330: Строка 345:
 
   echo "###############################################"
 
   echo "###############################################"
 
   echo "#                                            #"
 
   echo "#                                            #"
   echo "#         Очистка сервера завершена         #"
+
   echo "#             Очистка завершена             #"
 
   echo "#                                            #"
 
   echo "#                                            #"
 
   echo "# начало очистки:    ${STARTED_DATE}    #"
 
   echo "# начало очистки:    ${STARTED_DATE}    #"
Строка 344: Строка 359:
 
function deploy_uninstall() {
 
function deploy_uninstall() {
 
   echo ""
 
   echo ""
   echo "Удаление полностью очистит данный сервер. Эта операция -- НЕОБРАТИМА!"
+
   echo "Удаление полностью очистит жёсткий диск. Эта операция -- Н Е О Б Р А Т И М А!"
 
   echo ""
 
   echo ""
 
   echo "Эта операция -- НЕОБРАТИМА!"
 
   echo "Эта операция -- НЕОБРАТИМА!"
   echo "  Эта операция -- НЕОБРАТИМА!"
+
   echo "  Эта операция -- Н Е О Б Р А Т И М А !"
   echo "      Эта операция -- НЕОБРАТИМА!"
+
   echo "      Эта операция -- Н  Е  О  Б  Р  А  Т  И  М  А!"
 
   echo ""
 
   echo ""
 
   echo ""
 
   echo ""
   read -e -p "Начинаем удаление?! Для продолжения наберите текст \"yes, I understand the risk!\":" -i "" CONFIRM_CLEAR
+
   read -e -p "Начинаем удаление?! Для продолжения наберите текст \"yes, I really want to brick this device!\":" -i "" CONFIRM_CLEAR
   if [ "yes, I understand the risk!" == "${CONFIRM_CLEAR}" ]; then
+
   if [ "yes, I really want to brick this device!" == "${CONFIRM_CLEAR}" ]; then
 
     deploy_uninstall_go
 
     deploy_uninstall_go
 
   else
 
   else
Строка 358: Строка 373:
 
     echo "############################################"
 
     echo "############################################"
 
     echo "#                                          #"
 
     echo "#                                          #"
     echo "#         ! Очистка сервера отменена       #"
+
     echo "#             ! Очистка отменена           #"
 
     echo "#                                          #"
 
     echo "#                                          #"
 
     echo "# нажмите любую клавишу для продолжения... #"
 
     echo "# нажмите любую клавишу для продолжения... #"
Строка 371: Строка 386:
 
deploy_backup_go() {
 
deploy_backup_go() {
 
   STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
 
   STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
   deploy_mount
+
   #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}
 
   [ -d /mnt/SAMBA/${DEPLOY_DIR} ] || mkdir /mnt/SAMBA/${DEPLOY_DIR}
 
   deploy_backup_efi
 
   deploy_backup_efi
Строка 400: Строка 422:
 
   read -e -p "Имя корневого логического тома (LV): " -i "${SYSVOL_ROOT_NAME}" SYSVOL_ROOT_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 "Размер корневого логического тома, 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 ""
 
   echo ""
 
   read -e -p "Начинаем сохранение?! Введите \"Yes\" для продолжения:" -i "" READY
 
   read -e -p "Начинаем сохранение?! Введите \"Yes\" для продолжения:" -i "" READY
Строка 466: Строка 489:
 
   clear
 
   clear
 
   echo ""
 
   echo ""
   echo "##################"
+
   echo "#############################################"
   echo "# NNTC Installer #"
+
   echo "# NNTC Installer (COVID Version 2021-01-12) #"
   echo "##################"
+
   echo "#############################################"
 
   echo ""
 
   echo ""
 
   echo "Вручную мастер можно запустить командой: /bin/installer.sh"
 
   echo "Вручную мастер можно запустить командой: /bin/installer.sh"
Строка 491: Строка 514:
 
   esac
 
   esac
 
done
 
done
 
 
</pre>
 
</pre>
  
==FOR /dev/nvmeX==
+
=pve=
<pre>
 
#!/bin/bash
 
SCRIPT=$0
 
  
SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс по протоколу smb/cifs
+
==LXC==
DEPLOY_DIR='SRV_DEFAULT'              # откуда брать tar-архивы на ресурсе SHARE_RESOURCE
 
SHARE_LOGIN='userftp'                      # логин
 
SHARE_PASS=''                      # пароль
 
HDD1='/dev/nvme0n1'
 
HDD1_PREFIX="${HDD1}p"
 
HDD1_VG_NAME="system"
 
SYSVOL_ROOT_NAME="root"
 
SYSVOL_ROOT_SIZE_G="1"
 
  
# разметка жёстких дисков, включая lvm, создание файловых систем
+
===Развёртывание контейнеров из образов===
function deploy_prepare_fs() {
 
  echo "Подготовка файловых систем..."
 
  echo "Разметка диска \"${HDD1}\"..."
 
  fdisk ${HDD1} <<EOF
 
g
 
n
 
 
 
 
 
+512M
 
t
 
1
 
1
 
n
 
 
 
 
 
+1G
 
t
 
2
 
20
 
n
 
  
 +
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=
  
t
+
==certbot==
3
 
31
 
w
 
EOF
 
  
  echo "Форматирование efi"
+
https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04-ru
  mkfs.vfat "${HDD1_PREFIX}1"
 
  
  echo "Форматирование boot"
+
<pre>
  mkfs.ext4 -F "${HDD1_PREFIX}2"
+
server {
 +
listen 80;
 +
server_name some.domain.com www.some.domain.com;
 +
client_max_body_size 200M;
  
  echo "Создание pv для vg \"${HDD1_VG_NAME}\""
+
location / {
  pvcreate "${HDD1_PREFIX}3"
+
proxy_pass      http://localhost:3333;
 +
}
  
  echo "Создание vg \"${HDD1_VG_NAME}\" на базе pv \"${HDD1_PREFIX}3\""
+
location @fallback {
  vgcreate ${HDD1_VG_NAME} "${HDD1_PREFIX}3"
+
proxy_pass      http://localhost:3333;
 +
}
  
  echo "Создание lv \"${SYSVOL_ROOT_NAME}\" в vg \"${HDD1_VG_NAME}\""
+
location ~* "/\.(htaccess|htpasswd)$" {
  lvcreate -y ${HDD1_VG_NAME} --name ${SYSVOL_ROOT_NAME} --size ${SYSVOL_ROOT_SIZE_G}g
+
deny    all;
  lvextend -l +100%FREE "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}"
+
return  404;
  echo "Форматирование /dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME}"
+
}
  mkfs.ext4 -F "/dev/${HDD1_VG_NAME}/${SYSVOL_ROOT_NAME}"
 
 
 
  echo "Подготовка файловых систем -- завершено."
 
 
}
 
}
 +
</pre>
  
# монтирование
+
=googlechrome=
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 "Монтирование файловых систем -- завершено."
 
}
 
  
# размонтирование
+
==kiosk mode with basic auth==
function deploy_umount() {
 
  echo "Размонтирование файловых систем..."
 
  cd /mnt
 
  umount sys* SAMBA
 
  rmdir sys* /mnt/SAMBA
 
  echo "Размонтирование файловых систем -- завершено."
 
}
 
  
# удаление lv-томов
+
cat ./run-app-with-basic-auth-in-chrome-kiosk-mode-on-ubuntu-x11.sh
function deploy_delete_lv() {
 
  echo "Удаление томов lvm..."
 
  lvremove -y "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}"
 
  echo "Удаление томов lvm -- завершено."
 
}
 
  
# удаление vg
+
<pre>
function deploy_delete_vg() {
+
#!/bin/bash
  echo "Удаление vg..."
+
export DISPLAY=:0
  vgremove -y ${HDD1_VG_NAME}
+
google-chrome-stable \
  echo "Удаление vg -- завершено."
+
--autoplay-policy=no-user-gesture-required \
}
+
--disable-pinch \
 +
--overscroll-history-navigation=0 \
 +
--kiosk \
 +
--app=http://my.kiosk.app.with.basic.auth/&
  
# удаление pv
+
sleep 5s
function deploy_delete_pv() {
+
xte 'key u'
  echo "Удаление pv..."
+
xte 'key s'
  pvremove -y ${HDD1_PREFIX}
+
xte 'key e'
  echo "Удаление pv -- завершено."
+
xte 'key r'
}
+
xte 'key Tab'
 
+
xte 'key p'
# очистка дисков
+
xte 'key a'
function deploy_clear_hdds() {
+
xte 'key s'
  echo "Очистка разметки на дисках..."
+
xte 'key s'
  fdisk ${HDD1_PREFIX} <<EOF
+
xte 'key w'
g
+
xte 'key d'
w
+
xte 'key Tab'
EOF
+
xte 'key Tab'
  echo "Очистка разметки на дисках -- завершено."
+
xte 'key Return'
}
+
</pre>
  
# распаковка раздела efi
 
function deploy_efi() {
 
  echo "распаковка efi ..."
 
  cd /mnt/sysefi
 
  tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysefi.tar
 
  echo "распаковка efi -- завершено."
 
}
 
  
# распаковка раздела boot
+
=MOODLE Update=
function deploy_boot() {
 
  echo "распаковка boot ..."
 
  cd /mnt/sysboot
 
  tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysboot.tar
 
  echo "распаковка boot -- завершено."
 
}
 
  
# распаковка корня системы
+
==Patches==
function deploy_root() {
 
  echo "распаковка root ..."
 
  cd /mnt/sysroot
 
  tar -xpf /mnt/SAMBA/${DEPLOY_DIR}/sysroot.tar
 
  echo "распаковка root -- завершено."
 
}
 
  
# запаковка раздела efi
+
===JS Errors in file lib/form/filemanager.js===
function deploy_backup_efi() {
 
  echo "запаковка efi ..."
 
  cd /mnt/sysefi
 
  tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysefi.tar .
 
  echo "запаковка efi -- завершено."
 
}
 
  
# запаковка раздела boot
+
File
function deploy_backup_boot() {
 
  echo "запаковка boot ..."
 
  cd /mnt/sysboot
 
  tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysboot.tar .
 
  echo "запаковка boot -- завершено."
 
}
 
  
# запаковка корня системы
+
lib/form/filemanager.js
function deploy_backup_root() {
 
  echo "запаковка root ..."
 
  cd /mnt/sysroot
 
  tar -cpf /mnt/SAMBA/${DEPLOY_DIR}/sysroot.tar .
 
  echo "запаковка root -- завершено."
 
}
 
  
# получение UUID устройства по его имени
+
Patch
function deploy_get_uuid() {
 
  DEVICE="$1"
 
  UUID=$(blkid | grep ${DEVICE} | awk -F "UUID" {'print $2'} | awk -F '"' {'print $2'})
 
  echo ${UUID}
 
}
 
  
# обновление /etc/fstab внутри будущей системы
+
<pre>
function deploy_update_fstab() {
+
425a426
  echo "обновление /etc/fstab ..."
+
> if(buttonDeleteFile){
  UUID_sysboot=$(deploy_get_uuid "${HDD1_PREFIX}2")
+
461a463
  UUID_sysefi=$(deploy_get_uuid "${HDD1_PREFIX}1")
+
> }
  UUID_sysroot=$(deploy_get_uuid "/dev/mapper/${HDD1_VG_NAME}-${SYSVOL_ROOT_NAME}")
+
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');
 +
> }
 +
</pre>
  
  echo "UUID_sysboot  ${UUID_sysboot}"
+
=Mariadb in Docker (for emsh)=
  echo "UUID_sysefi ${UUID_sysefi}"
 
  echo "UUID_sysroot  ${UUID_sysroot}"
 
  
  cp /mnt/sysroot/etc/fstab /mnt/sysroot/etc/fstab_original
+
==Deploy==
  
  cat <<EOF >/mnt/sysroot/etc/fstab
+
run
#sysroot
 
UUID=${UUID_sysroot} / ext4 defaults 0 0
 
  
#sysboot
+
<pre>
UUID=${UUID_sysboot} /boot ext4 defaults 0 0
+
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
 +
</pre>
  
#sysefi
+
start
UUID=${UUID_sysefi} /boot/efi vfat defaults 0 0
 
  
#swap
+
docker start mariadb-emsh
#/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() {
+
stop
  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() {
+
docker stop mariadb-emsh
  [ -d /mnt/SAMBA ] || mkdir /mnt/SAMBA
 
  IS_MOUNT=$(mount | grep /mnt/SAMBA | wc -l)
 
  
  if [ "${IS_MOUNT}" == "0" ]; then
 
  
    echo ""
+
==Manage==
    echo "Для развёртывания системы из хранилища используйте параметры по умолчанию (Enter) или измените текущие значения."
 
    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 "${DEPLOY_DIR}" DEPLOY_DIR
 
    echo ""
 
    echo ""
 
  
    mount.cifs ${SHARE_RESOURCE} /mnt/SAMBA -o username=${SHARE_LOGIN},pass=${SHARE_PASS},iocharset=utf8
+
Обычная бд под названием db на полный доступ пользователю student с паролем student
    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
 
}
 
  
# функция очистки
+
mysql -ustudent -pstudent -h 172.16.254.140 db
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() {
+
Ридонли бд под названием rodb н ридонли доступ пользователю student с паролем student
  echo ""
 
  echo "Удаление полностью очистит данный сервер. Эта операция -- НЕОБРАТИМА!"
 
  echo ""
 
  echo "Эта операция -- НЕОБРАТИМА!"
 
  echo "  Эта операция -- НЕОБРАТИМА!"
 
  echo "      Эта операция -- НЕОБРАТИМА!"
 
  echo ""
 
  echo ""
 
  read -e -p "Начинаем удаление?! Для продолжения наберите текст \"yes, I understand the risk!\":" -i "" CONFIRM_CLEAR
 
  if [ "yes, I understand the risk!" == "${CONFIRM_CLEAR}" ]; then
 
    deploy_uninstall_go
 
  else
 
    echo ""
 
    echo "############################################"
 
    echo "#                                          #"
 
    echo "#        ! Очистка сервера отменена      #"
 
    echo "#                                          #"
 
    echo "# нажмите любую клавишу для продолжения... #"
 
    echo "#                                          #"
 
    echo "############################################"
 
    echo ""
 
    read
 
  fi
 
}
 
  
# функция развёртывания
+
mysql -ustudent -pstudent -h 172.16.254.140 db
deploy_backup_go() {
 
  STARTED_DATE=$(date '+%Y-%m-%d %H:%M:%S')
 
  deploy_mount
 
  [ -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
 
  echo ""
 
  read -e -p "Начинаем сохранение?! Введите \"Yes\" для продолжения:" -i "" READY
 
  
  if [ "Yes" == "$READY" ]; then
+
База данных под названием rodb на полный доступ пользоваелю root с паролем emsh123321
    deploy_backup_go
 
  else
 
    echo ""
 
    echo "#############################################"
 
    echo "#                                          #"
 
    echo "#          ! Сохранение отменено          #"
 
    echo "#                                          #"
 
    echo "# нажмите любую клавишу для продолжения...  #"
 
    echo "#                                          #"
 
    echo "#############################################"
 
    echo ""
 
    read
 
  fi
 
}
 
  
function deploy_backup() {
+
mysql -uroot -pemsh123321 -h 172.16.254.140 rodb
  [ -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
+
mysql -uroot -pemsh123321 -h 172.16.254.140 rodb < file_with_dump.sql
    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 ""
+
mysqldump -uroot -p<YOU_PASSWORD_HERE> -h 172.16.254.140 rodb > file_with_dump.sql
  echo "##################"
 
  echo "# NNTC Installer #"
 
  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>
 

Текущая версия на 10:02, 28 июля 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

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