takeover.sh — скрипт, с помощью оторого поверх основной ОС, мы можем запустить в памяти ещё одну операционную систему, которая будет доступна по SSH, и из которой мы сможем выполнить, например, переустановку текущей ОС на сервере.
Вряд ли вы балуетесь этим каждый день, но если Вы вдруг решите установить Gentoo по SSH на сервер, присмотритесь к данному скрипту. Смотреть на работу скрипта будем традиционно в CentOS 7.
Не экспериментируйте на проде, эксперименты могут привести к потере всех данных на сервере.
Установка и запуск окружения.
1. Ставим всё необходимое.
# yum install wget squashfs-tools git
2. Создаём директорию /takeover, и монтируем её в tmpfs.
# mkdir /takeover # mount -t tmpfs -o size=3G tmpfs /takeover
3. В памяти мы будем разворачивать systemrescuecd, так что забираем образ и монтируем его.
# wget https://kent.dl.sourceforge.net/project/systemrescuecd/sysresccd-x86/5.3.2/systemrescuecd-x86-5.3.2.iso # mount -o loop systemrescuecd-x86-5.3.2.iso /mnt
4. С помощью unsquashfs распаковываем содержимое диска и копируем его в /takeover директорию.
# unsquashfs /mnt/sysrcd.dat # cd /takeover/ # cp -arvp /mnt/* . # cp -arvp /root/squashfs-root/* .
5. В этом месте остановимся, и проверим, что мы можем сделать chroot в созданное окружение. Выглядеть будет примерно так:
# chroot /takeover /bin/bash takeme / # /bin/cat /etc/os-release NAME=Gentoo ID=gentoo PRETTY_NAME="Gentoo/Linux" ANSI_COLOR="1;32" HOME_URL="https://www.gentoo.org/" SUPPORT_URL="https://www.gentoo.org/support/" BUG_REPORT_URL="https://bugs.gentoo.org/" takeme / # exit exit
6. В директорию /takeover закидывам busybox и делаем его исполняемым.
# wget -O /takeover/busybox https://www.busybox.net/downloads/binaries/1.26.2-defconfig-multiarch/busybox-x86_64 # chmod +x /takeover/busybox
7. Забираем takeover.sh скрипт с Github’а, и добавляем скачанные файлы в /takeover директорию.
# cd /usr/local/src/ # git clone https://github.com/marcan/takeover.sh # cp -arvp /usr/local/src/takeover.sh/* /takeover/
8. Компилируем fakeinit.c, причём, делаем это через chroot.
# chroot /takeover gcc /fakeinit.c -o /fakeinit
9. Останавливаем те сервисы, которые можем остановить на сервере. Как минимум — освобождаем 80 порт (на него takeover повесит ssh), не лишним будет очистить правила фаервола, если они блокируют соединения.
# systemctl stop firewalld # iptables -F
10. Запускаем скрипт takeover.sh, который развернёт и запустить в памяти вторую операционную систему.
# sh /takeover/takeover.sh
Будучи запущенным, скрипт попросит установить пароль, для запускаемой из памяти ОС, и настроит необходимое окружение. Если всё будет сделано верно, то сперва на 80 порте, а потом и на 22 порте будет запущен SSH сервер уже из новой ОС. Открываем новый терминал, подключаемся к серверу по SSH, и видим что мы работаем из равзёрнутой в памяти ОС. Старый диск, при этом, смонтирован в /old_root/.
$ ssh root@116.202.18.99 root@116.202.18.99's password: root@takeme /root % cat /etc/os-release NAME=Gentoo ID=gentoo PRETTY_NAME="Gentoo/Linux" ANSI_COLOR="1;32" HOME_URL="https://www.gentoo.org/" SUPPORT_URL="https://www.gentoo.org/support/" BUG_REPORT_URL="https://bugs.gentoo.org/" root@takeme /root %
Теперь, пока сервер не будет перезагружен, мы можем работать из запущенной ОС, и делать любые, нужные нам манипуляции с диском (очистка, удаление, установка новой ОС и т. п.). После всех манипуляций, перезагрузить сервер можно командами:
# echo 1 > /proc/sys/kernel/sysrq # echo b > /proc/sysrq-trigger
Если не делается ничего, а сервер просто перезагружается, то он вновь запустится с установленной ранее ОС (CentOS 7 в нашем случае).
One thought on “takeover.sh”