takeover.sh

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *