Удаление
Удалять можно двумя способами — и важно не перепутать, где выполняется команда.
На самом сервере, из распакованной поставки:
bash era/scripts/uninstall.sh
Со своей машины по ssh — тогда поставка сначала копируется на сервер, а вопросы задаёт он:
bash uninstall_ssh.sh --host=192.168.0.10 --user=user
Разница видна сразу: обёртка начинает с вопросов о подключении — адрес, порт, пользователь, ключ.
Если вы этих вопросов не ждали, значит запущена обёртка вместо era/scripts/uninstall.sh; и наоборот, era/scripts/uninstall.sh про ssh не спрашивает никогда.
Удаление устроено так же, как установка: сначала опрос, потом показ того, что будет удалено, и только потом само удаление.
План удаления показывает, что найдено
Экран называется «Проверьте параметры удаления», и вопросы на нём — об уже установленном, а не о том, что ставить.
Про базу спрашивается «Как установлен PostgreSQL?»: от ответа зависит, что удалять — контейнер postgres<постфикс> или кластер systemd с каталогом данных.
Если не уверены, docker ps покажет контейнер, а systemctl list-units postgresql* — кластер.
Отличие от установки: в плане у каждого пункта отмечено, существует ли объект на самом деле, а у каталогов — сколько они занимают.
Будет выполнено на 192.168.0.10:
1. Остановить и удалить контейнер era_11 [найден]
2. Удалить контейнер postgres_11 [не найден]
3. Размонтировать 3 точки внутри /opt/era_11
4. Удалить каталог /opt/era_11 [найден, 4.2G]
Это единственная защита от опечатки в имени: контейнер, помеченный «не найден», скорее всего назван не так, как вы думаете.
Что удаляется
| Что | Когда |
|---|---|
Контейнер платформы |
Всегда, если найден. |
Контейнер PostgreSQL |
При |
Юнит systemd кластера |
При |
Каталог кластера |
При |
Каталог инстанса |
Всегда. |
Пакеты PostgreSQL |
Только при |
Не удаляются никогда: docker, образы, параметры ядра, правила firewalld и записи в /etc/exports.d.
Это общие для сервера настройки, и снимать их за вас установщик не берётся.
Монтирования
Перед удалением каталога инстанса установщик размонтирует всё, что внутри него смонтировано.
Порядок важен: rm -rf по смонтированному каталогу NFS удалял бы данные на сервере, а не локальные.
Если размонтировать не удалось, удаление каталога не выполняется, и об этом сообщается явно.
Что осталось на сервере
В конце удаления печатается форма — та же, что после установки, но отвечает она на вопрос «что осталось»:
== Что осталось на сервере ==
[ ok ] Контейнер платформы удалён: era<постфикс>
[ ok ] PostgreSQL удалён
[warn] Монтирования осталось: /opt/era<постфикс>/era_recpath
[ ok ] Каталог инстанса удалён: /opt/era<постфикс>
Проверяется состояние системы, а не код возврата команд: контейнера нет, служба снята вместе с юнитом, каталог кластера и каталог инстанса исчезли, монтирований не осталось. Оставшаяся точка монтирования — предупреждение, а не отказ: занятую точку удаление снимает лениво, и ядро отпустит её, когда последний процесс закроет файлы. Оставшийся контейнер или каталог — отказ, и установщик завершается с кодом 5.
При --dry-run формы нет: сервер не менялся.
Защита от опасного пути
Каждое удаление каталога проходит общую проверку:
-
путь должен быть абсолютным;
-
длина — не меньше восьми символов;
-
пустое значение не удаляет ничего, а выводит предупреждение.
Так --erainstancedatapath= с потерянным значением не превращается в rm -rf /.
Примеры
Спросить, что удалять:
bash era/scripts/uninstall.sh
Удалить платформу вместе с базой в контейнере:
bash era/scripts/uninstall.sh --non-interactive \
--datapath=/opt --eracontainername=era_11 \
--douninstallpg=y --pgcontainername=postgres_11 --pgmode=d
Посмотреть, что будет удалено, и выйти (на самом сервере, из каталога поставки):
cd /tmp/era_installer
bash era/scripts/uninstall.sh --dry-run --eracontainername=era_11
То же со своей машины:
bash uninstall_ssh.sh --dry-run --host=192.168.0.10 --user=user --eracontainername=era_11
--dry-run относится к целевому хосту, а не к обёртке: план — что именно будет удалено, с отметками найдено/не найдено — строит сам сервер, и показать его может только он.
Поэтому обёртка свою работу делает по-настоящему: копирует поставку в /tmp/era_installer и запускает там удаление с тем же ключом.
Сервер при этом не изменяется; поставка остаётся в /tmp и исчезает при перезагрузке.
Команда удаления именно этого сервера печатается в конце успешной установки — её удобно сохранить сразу.