Как переустановить ubuntu через ssh
Перейти к содержимому

Как переустановить ubuntu через ssh

  • автор:

Переустановить Ubuntu Server. По SSH. На разделе ZFS.

Ссыкотно начинать без консультаций ЛОРа. Есть сервер на Ubuntu Server 17.10 с ФС ZFS, внезапно положил тунца на снапшоты около года не делая их. И в один прекрасный момент решил накатить iRedMail, который сломал к херам iptables, зависимости и сервер MySQL, который теперь не (пере)устанавливается. Ну и эпично обновился до 18.04, выдернув не тот шнур питания на половине процесса обновления ;_;.

После всё таки забэкапил данные и так как дома только сплю, то хотел бы восстановить сервер по SSH. Кстати разметка такая:

Как я вижу решение проблемы:

  1. Подключаемся к серверу по SSH и ставим debootstrap.
  2. Через него ставим в директорию

Прокатит ли так? Да и может есть какие-то более простые способы сбросить бубунту в нуль?

Installation / OverSSH

This is a work in progress, it is not mature yet and it may break your system!

Caveat

As you may already have guessed following this instruction may break your system and you are on your own to fix it again. apt-get install linux-image-686

Scenario

This instruction describes how to install Ubuntu on a dedicated server over ssh. I assume that your provider provides you with a rescue system from which you can boot and prepare your system. An Online replacement is possible, but it is some more work and a lot more risky if things go bad (the basic idea is to temporarily disable your swap and install a transitional system on it).

Preparing the Hard Disk

Partitioning

Use fdisk to partition your hard disk.

Remember to set the root partition bootable!

For the rest of this instruction we assume the following partition layout.

Creating File Systems

Below is how we get our / populated with ext3.

And the same for our swap partition.

The Base System

Mounting Root

Getting Debootstrap

Debootstrap is a collection of scripts that we will use in the next step to set up a base system. We need an appropriate version of debootstrap from http://archive.ubuntu.com/ubuntu/pool/main/d/debootstrap/ to make this work.

Make sure that binutils is installed on your system.

On an apt based system we can use dpkg to install it.

If your current system is rpm based, use alien to install it or find a rpm on the web (http://azhrarn.underhanded.org/debootstrap-0.2.23-1.i386.rpm).

If your system is neither, this might work.

Installing the Base System

(arch may be different for you, e.g. amd64, hppa, ia64, powerpc, or sparc)

Basic Configuration

Set the Hostname

Change HOSTNAME to whatever suits your environment.

fstab

Put the following in fstab:

Networking

Make sure to use your network details instead.

Make sure to use your hostname and domain.

You need a valid resolv.conf with at least one valid nameserver, e.g.:

Enter the new environment

Before we chroot into the new environment we need to mount /proc and /dev

Change the root password

It is just bad if you forget this, so just .

Create a user and switch shadow password on

Installing Packages

Installing OpenSSH Server

Install a Kernel

Choose the right kernel for your architecture. I go with:

Reboot

Finishing

After the reboot ssh in again.

Generate locales

Install some more packages

References

Installation/OverSSH (последним исправлял пользователь andrew-woodhead666 2011-05-31 16:43:31)

The material on this wiki is available under a free license, see Copyright / License for details
You can contribute to this wiki, see Wiki Guide for details

How to reinstall Ubuntu via SSH

I have a 32 bit version of Ubuntu 10.04.2 running on a server. I need to reinstall a 64 bit edition of Ubuntu. Is it possible to do this remotely via SSH? If yes, how so.

Mridang Agarwalla's user avatar

4 Answers 4

Is it possible? Yes

Is it anywhere near easy? No

It depends whatever you want (or need because of no space on LVM) to install it in-place or in parallel, whatever you have access to shell when you make a mistake and boot a 32bit kernel with 64bit userland, etc.

In short: I wouldn’t even try to do it with ubuntu and I already done something like that with Archlinux, doing it over SSH is really only for the gurus.

There is no automatic way to do it, it has to be manual install of whole new system.

Удаленная переустановка Linux по ssh без доступа к консоли

Понадобилось мне переустановить сервер, который как бы хостился у знакомых знакомых. Там был сильно устаревший Debian, а, самое главное, система стояла на обычных разделах без lvm и пространство было распределено очень не оптимально. Физический доступ получить к нему было практически нереально, местного админа попросить что-то сделать было можно, но занять это могло неделю. Виртуальный KVM у сервера был, но извне на него попасть было нельзя; у как бы хостера не было лишних IP-адресов, а внутрь его сети попасть было невозможно. Надо было переустановить сервер из-под работающей системы по ssh. Ага, давайте поменяем ротор у турбины не выключая, потом её перезапустим и будет она с новым ротором работать!

Первой идеей было создать chroot окружение на ram-диске и с него создать lvm и залить систему. Но не тут-то было, не дает система изменить таблицу разделов.

Второй идеей было взять исходники дистрибутива Debian, зашить в них IP-адрес сервера, пересобрать initrd с установщиком Debian, ssh сервером и моими IP, подставить этот initrd в конфиг grub блоком по умолчанию и перегрузиться. После этого я должен был получить ssh консоль с сетевым установщиком. На стенде у меня получилось! Но на бою все окончилось неудачей, сервер не поднялся. Хозяевам сервер оказался не очень нужен, и дело так и заглохло, но у меня осталось ощущение нерешенной задачи.

Как-то с коллегами обсуждали всякие деструктивные действия с системой (типа rm -rf /) и один из коллег сказал, что можно отключить scsi диск, на котором находится корневой раздел и система не пикнет. Это дало мне идею номер три, взять идею один, оторвать диск, вернуть диск и возвращенный диск будет уже другим, не тем который система не отдавала. Именно так и оказалось. А теперь по пунктам, как же все-таки переустановить систему без доступа к физической консоли.

Предупреждение! Надо понимать, что все, что мы будем делать — дорога в один конец, при ошибке мы теряем доступ к системе! Вполне возможно, что придется ехать 1500 километров и лезть в шахту, чтобы реанимировать сервер.

Будем считать, что IP нашей системы 192.168.56.102. Именно так было у меня на стенде. Плюс доступ к интернету через прокси:

Начинаем работу на исходной системе.

# System #0

Заходим по ssh на сервер:

Создаем каталог и файловую систему для «Системы убийцы», монтируем её:

Ставим отличную утилиту debootstrap, которая разворачивает минимальную установку Debian, при помощи неё мы создадим chroot окружение:

Существуют аналогичные утилиты для Федоры и Centos, соответственно febootstrap и yumbootstrap, но я с ними не работал.

Первый аргумент — версия, второй — каталог установки, третий — репозиторий.

Бекапим самое необходимое:

Самое важное — настройки сетевых интерфейсов, без них не получится попасть в переустановленную систему.

Даем имя chroot-окружению:

Слово «Killer_system» будет показываться в приглашении bash. Это важная штука, без неё будет не понятно, где мы в данный момент находимся.

Переходим в новое окружение.

# System #1

Монтируем полезные fs:

Еще раз ставим debootstrap:

Дальше мои заморочки: у дебиановского пакета openssh-server в рекомендованных пакетах есть пакет xauth, а у него в зависимостях всякие иксовые библиотеки. Я, как сторонник минимализма, не хочу, чтобы на сервере, где не было и не будет графики, ставились огрызки иксов. Поэтому ставим с ключиком —no-install-recommends:

Правим конфиги. Ставим альтернативный порт для ssh демона, чтобы мы могли зайти на chroot систему по ssh:

И разрешаем доступ для root:

Можно не давать доступ root, а создать пользователя и дать ему sudo права, но тут я сознательно упрощаю.

Дальше надо задать пароль root, так как по умолчанию debootstrap не устанавливает никакие пароли:

Заходим в chroot окружение по ssh:

Это мы делаем для того, чтобы полностью отвязаться от старой системы, у которой мы оторвем диски. А так у нас будет полностью автономная система в оперативной памяти, никак не связанная со старой.

Такой трюк очень хорошо подходит, если мы уходим от хостера, а оставлять ему наши файлы очень не хочется (я знаю, паранойя). На этом этапе просто забиваем диски нулями, если хотим быстро:

Или случайными данными в несколько проходов, если хотим хорошо. Достоинство метода в том, что мы можем дождаться окончания работы dd и, при необходимости, повторить. Если же затирать диски непосредственно из боевой системы, то посмотреть на результаты работы dd мы уже не сможем.

Попробуем простой путь, удалим тома и разделы:

Но неудача. При этом раздел удалится, и система сломается, но воспользоваться простым путем без перезагрузки не получится. А перегружаться будет некуда.

Мы пойдем другим путем. Проверяем, где у нас что находится:

Будем считать, что корневой раздел у нас на диске sda.

Затираем диск, чтобы ни в коем случае его не подцепил lvm.

Предупреждение! После этого момента возврата нет, даже следующий шаг не такой вредоносный. Задумаемся на минуту, проверим консоль, за которой сидим и оправдаем имя нашего chroot’а:

Проверяем, диск оторвался:

Подключаем диск обратно:

Проверяем, что вернулось:

Был sda, стал sdb, отлично.

Важный момент: на згрузочном диске необходимо создать один первичный раздел размером на весь диск и этот раздел отдать lvm’у для того чтобы на него смог встать grub. Все остальные диски можно отдавать lvm’у целиком не создавая систему разделов (pvcreate /dev/sdc). Создаем таблицу разделов и один первичный раздел типа 8e, Linux LVM:

В первоначальной версии скрипта было создание одного логического тома под всю систему, но когда мой коллега переустанавливал Linux по этому скрипту, оказалось, что создание нескольких разделов представляет некоторую трудность, особенно отдельный раздел под логи. Внимание надо обратить на порядок создания точек монтирования и собственно монтирования разделов.

Разворачиваем уже боевую систему на новое место на жестком диске:

Возвращаем на место резервные копии конфигов:

Теперь нас ждет новая система:

# System #2

Обратите внимание, в приглашении командной строки теперь имя нового chroot окружения.

Монтируем файловые системы:

Ещё можно примонтровать эти файловые системы из родительского chroot’а:

Устанавливаем и конфигурируем openssh:

Устанавливаем пакеты, без которых не обойтись:

Да, я не могу жить без vim и ненавижу nano:

В принципе grub прописывается куда надо ещё при установке, но, всё же, для поддержки штанов и морального духа повторим:

Теперь правим конфиги, вначале самый важный, без которого система не поднимется:

В файле interfaces все должно быть в порядке, ведь как-то сеть у нас работала?

В конфиг apt’а добавляем информацию о прокси:

Добавляем строчку в /etc/hosts:

Размонтируем файловые системы:

И выходим из chroot’а:

Размонтируем файловые системы:

Если размонтировать /dev не удалось, то не удастся размонтировать и /target, но это не страшно.

Если удалось, то делаем так:

Если нет, то так:

Эти команды сбросят дисковые кеши и перемонтируют корневую файловую систему в read only. После этого можно перегружаться.

Тут-то нас ждет сюрприз от всеми любимого systemd! Он знает, что мы в chroot и не дает перегрузиться! Google дает советы выйти из chroot, но нам-то выходить некуда. Но на помощь приходит Magic SysRq!

Активируем SysRq (он, скорее всего, активирован, но нам же надо убедиться?).

Барабанная дробь, тревожное ожидание, неужели мы что-то забыли, и сервер не поднялся?

Ура! Мы в новой системе!

Пересоздадим initrd. Это не обязательно, но в дальнейшем избавит от некоторых ошибок при перезагрузке:

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

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