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

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(FOR /dev/sdX)
(Installer NNTC)
(Метка: замена)
Строка 1: Строка 1:
 
=Installer NNTC=
 
=Installer NNTC=
==FOR /dev/sdX==
+
moved to gitlab...
<pre>
 
#!/bin/bash
 
SCRIPT=$0
 
 
 
SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс по протоколу smb/cifs
 
DEPLOY_DIR='SRV_DEFAULT'              # откуда брать tar-архивы на ресурсе SHARE_RESOURCE
 
SHARE_LOGIN='userftp'                      # логин
 
SHARE_PASS=''                      # пароль
 
HDD1='/dev/sda'
 
HDD1_PREFIX="${HDD1}"
 
HDD1_VG_NAME="system"
 
SYSVOL_ROOT_NAME="root"
 
SYSVOL_ROOT_SIZE_G="1"
 
 
 
# разметка жёстких дисков, включая lvm, создание файловых систем
 
function deploy_prepare_fs() {
 
  echo "Подготовка файловых систем..."
 
  echo "Разметка диска \"${HDD1}\"..."
 
  fdisk ${HDD1_PREFIX} <<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_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}
 
  echo "Удаление pv -- завершено."
 
}
 
 
 
# очистка дисков
 
function deploy_clear_hdds() {
 
  echo "Очистка разметки на дисках..."
 
  fdisk ${HDD1_PREFIX} <<EOF
 
g
 
w
 
EOF
 
  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 -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 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
 
}
 
 
 
# функция развёртывания
 
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
 
    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 #"
 
  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>
 
 
 
==FOR /dev/nvmeX==
 
<pre>
 
#!/bin/bash
 
SCRIPT=$0
 
 
 
SHARE_RESOURCE='//172.16.254.123/data/fdisk1' # ресурс по протоколу smb/cifs
 
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
 
 
 
 
 
 
 
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_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}
 
  echo "Удаление pv -- завершено."
 
}
 
 
 
# очистка дисков
 
function deploy_clear_hdds() {
 
  echo "Очистка разметки на дисках..."
 
  fdisk ${HDD1_PREFIX} <<EOF
 
g
 
w
 
EOF
 
  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 -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 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
 
}
 
 
 
# функция развёртывания
 
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
 
    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 #"
 
  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>
 

Версия 22:08, 12 января 2021

Installer NNTC

moved to gitlab...