Install ubuntu on existing linux

Ставим Ubuntu из другого Linux/LiveCD

Речь в статье пойдёт об установке Ubuntu из другого Linux без использования ISO-образа. Нужно это прежде всего для создания кастомизированных тестовых окружений. Информации о такой процедуре в интернете достаточно, она легко гуглится, но, как выяснилось, в некоторых моментах существующие инструкции устарели, да, и все они обладают известным фатальным недостатком.

Итак, постановка задачи: есть голая виртуальная машина с выходом в интернет и EFI BIOS, есть некий линукс (в нашем случае это SystemRescue LiveCD), нужно получить установленную Ubuntu. И все действия должны быть легко автоматизированы, что их можно оформить в виде скрипта.

Прежде всего загружаемся в наш SysRCD. Работать мы будем по SSH, и чтобы он заработал, нужно установить пароль root и разрешить SSH в iptables (изначально в SysRCD запрещены любые входящие соединения):

iptables -I INPUT -p tcp --dport 22 -j ACCEPT passwd
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.56.110

Теперь нужно подготовить разделы на жёстком диске. Так как система у нас EFI, то таблица разделов будет GPT, нужен EFI FAT-раздел, а сама система будет находится на ext4-разделе. EFI-раздел может очень небольшим — буквально 10 МБ, но для стабильной работы обновлений системы лучше делать его хотя бы 32 МБ. И важное замечание! Во всех инструкциях написано, что раздел должен быть в формате FAT32, но на практике VirtualBox отказывается работать с маленьким EFI-разделом в таком формате (ну, или mkfs.vfat неправильно форматирует маленькие FAT32 разделы — тут нужны эксперименты)! Плюс, есть нюансы с размером диска, размером кластера и совместимостью с EFI биосами. Поэтому форматировать будем в FAT16. Разбивать будем при помощи parted.
Для того, чтобы пометить раздел как служебный EFI в parted ему нужно выставить флаг «esp».

parted unit KiB mktable gpt mkpart fat16 1024KiB 32MiB name 1 EFI set 1 esp on mkpart ext4 32MiB -1s Предложит выравнять - соглашаемся. name 2 LINUX quit

Теперь форматируем вновь созданные разделы. Ещё раз обращаю внимание, что EFI-раздел форматируем в FAT16, иначе могут проблемы с VirtualBox.

# VirtualBox EFI не увидел маленький раздел в FAT32! Используем FAT16. mkfs.fat -F 16 -n EFI /dev/sda1 mkfs.ext4 -O ^64bit -L LINUX /dev/sda2

Разворачивать базовую систему будет при помощи debootstrap. Но у нас не DEB-система и эта утилита отсутствует. Скачаем её из репозитория Debian и распакуем содержимое DEB-файла прямо в корень нашей системы. У нас LiveCD и такой грязный хак вполне приемлем. DEB-файлы это архивы типа AR, содержащие архивы типа «tar.gz».

mkdir /tmp/1 cd /tmp/1 wget http://ftp.ru.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123_all.deb # Немного магии - распаковываем данные из deb-файла прямов корень нашей системы. ar -p *.deb data.tar.gz | tar -xz -C /

Ставить будем Ubuntu 20.04 «Focal» — имя релиза указывается при вызове deboostrap. там же указывается репозиторий, откуда будут скачаны файлы.

Читайте также:  Rdp сервер на linux remmina

Для разворачивания системы, нам естественно, нужно сначала примонтировать её корень в какую-то папку. Не мудрствуя лукаво используем для этого папку «/tmp/».

mkdir /tmp/newroot cd /tmp mount -o relatime /dev/sda2 newroot /usr/sbin/debootstrap --arch=amd64 --include=wget,nano focal /tmp/newroot https://mirror.linux-ia64.org/ubuntu/

Теперь нам нужно настроить список репозиториев, откуда будут браться устанавливаемые и обновляемые пакеты. Список находится в файле /etc/apt/sources.list

( RELEASE=focal ; echo " deb http://ru.archive.ubuntu.com/ubuntu/ $ main restricted # deb-src http://ru.archive.ubuntu.com/ubuntu/ $ main restricted deb http://ru.archive.ubuntu.com/ubuntu/ $-updates main restricted # deb-src http://ru.archive.ubuntu.com/ubuntu/ $-updates main restricted deb http://ru.archive.ubuntu.com/ubuntu/ $ universe # deb-src http://ru.archive.ubuntu.com/ubuntu/ $ universe deb http://ru.archive.ubuntu.com/ubuntu/ $-updates universe # deb-src http://ru.archive.ubuntu.com/ubuntu/ $-updates universe deb http://ru.archive.ubuntu.com/ubuntu/ $ multiverse # deb-src http://ru.archive.ubuntu.com/ubuntu/ $ multiverse deb http://ru.archive.ubuntu.com/ubuntu/ $-updates multiverse # deb-src http://ru.archive.ubuntu.com/ubuntu/ $-updates multiverse deb http://ru.archive.ubuntu.com/ubuntu/ $-backports main restricted universe multiverse # deb-src http://ru.archive.ubuntu.com/ubuntu/ $-backports main restricted universe multiverse deb http://archive.canonical.com/ubuntu $ partner # deb-src http://archive.canonical.com/ubuntu $ partner deb http://security.ubuntu.com/ubuntu focal-security main restricted # deb-src http://security.ubuntu.com/ubuntu $-security main restricted deb http://security.ubuntu.com/ubuntu $-security universe # deb-src http://security.ubuntu.com/ubuntu $-security universe deb http://security.ubuntu.com/ubuntu $-security multiverse # deb-src http://security.ubuntu.com/ubuntu $-security multiverse " >newroot/etc/apt/sources.list )

Теперь настраиваем chroot-окружение и входим в нашу новую систему:

mount --bind /dev newroot/dev mount --bind /dev/pts newroot/dev/pts mount -t sysfs sys newroot/sys mount -t proc proc newroot/proc LANG=C.UTF-8 chroot newroot

Первым делом настраиваем поддерживаемые локали. Обратите внимание, что добавляется CP866 (на самом деле она «IBM866»), которая до сих пор бывает актуальной при работе со windows-legacy данными.

Список поддерживаемых кодировок хранится в /etc/locale.gen Ещё раз обращаю внимание, что CP866/IBM866 по умолчанию там по какой-то причине нет, хотя в системе она есть.

locale-gen en_US.UTF-8 echo " en_GB ISO-8859-1 en_GB.UTF-8 UTF-8 en_US ISO-8859-1 en_US.UTF-8 UTF-8 ru_RU.CP1251 CP1251 ru_RU.IBM866 IBM866 ru_RU.KOI8-R KOI8-R ru_RU.UTF-8 UTF-8 " >/etc/locale.gen # Генерируем файлы выбранных кодировок и локалей. locale-gen

Обновляем список пакетов и сразу ставим mc, aptitude, чтобы жить стало легче.

apt-get update apt-get upgrade apt-get install -y aptitude mc man # Ставим базовый языковой пакет. apt-get install -y language-pack-en

EFI раздел будет примонтирован в /boot/efi. Монтируем и настраиваем /etc/fstab.

echo "      # / was on /dev/sda2 during installation UUID=`blkid -o value -s UUID /dev/sda2` / ext4 errors=remount-ro,relatime 0 2 # /boot/efi was on /dev/sda1 during installation UUID=`blkid -o value -s UUID /dev/sda1` /boot/efi vfat umask=0033 0 1 " >/etc/fstab # Монтируем EFI-раздел. mount /boot/efi
echo ' LANG="C" LANGUAGE="en_US:C:ru_RU" LC_CTYPE="ru_RU.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_NUMERIC="C.UTF-8" LC_TIME="C.UTF-8" LC_MONETARY="en_US.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" ' >/etc/default/locale

Настраиваем часовой пояс. То же самое можно выполнить вызовом «dpkg-reconfigure tzdata«. Но нам же нужно, чтобы это можно было заскриптовать. Просмотреть список часовых поясов можно вызовом «timedatectl list-timezones».

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtime echo "Europe/Moscow" >/etc/timezone echo "test" >etc/hostname # Но сейчас принято делать так: timedatectl set-timezone "Europe/Moscow" # Просмотреть варианты можно вызовом timedatectl list-timezones

Указываем, что аппаратные часы у нас хранят время в UTC. Обратите внимание, что «0» означает время в UTC.

timedatectl set-local-rtc 0

Ставим ядро, дополнительные модули и заголовки ядра. Ядро ставим самое свежее из доступных и заточенное под виртуализацию:

apt-get install -y linux-image-virtual-hwe-20.04-edge linux-image-extra-virtual-hwe-20.04-edge linux-headers-virtual-hwe-20.04-edge

Ставим поддержку консоли, сети, GRUB, SSH и всякие мелкие утилиты:

apt-get install -y console-setup console-common ssh apt-get install -y net-tools bind9utils build-essential pixz pigz pv htop apt-get install -y grub-efi-amd64
# Consult the keyboard(5) manual page. XKBMODEL="pc105" XKBLAYOUT="us,ru" XKBVARIANT="," XKBOPTIONS="grp:rctrl_toggle,lv3:ralt_switch,grp_led:scroll" BACKSPACE="guess" ' >/etc/default/keyboard echo ' # CONFIGURATION FILE FOR SETUPCON # Consult the console-setup(5) manual page. ACTIVE_CONSOLES="/dev/tty4" CHARMAP="UTF-8" CODESET="guess" FONTFACE="Terminus" FONTSIZE="8x16" VIDEOMODE= " >/etc/default/console-setup

Это так же можно сделать в интерактивном режиме выполнив:
dpkg-reconfigure console-common
dpkg-reconfigure console-data
dpkg-reconfigure keyboard-configuration

grub-install --target=x86_64-efi --recheck --efi-directory=/boot/efi /dev/sda

Если нужно, то правим настройки GRUB в файле /etc/default/grub и обновляем конфигурацию GRUB вызовом:

Читайте также:  Astra linux повысить мандатный уровень

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

Задаём пароль root и разрешаем авторизацию root в SSH по паролю. Это нужно для того, чтобы можно было подключиться первый раз и залить SSH-ключи.
Для этого в файле настроек SSH-сервера /etc/ssh/sshd_config нужно добавить строку:
PermitRootLogin yes
Позже авторизацию root по паролю нужно не забыть запретить.

# Задаём пароль root passwd echo "PermitRootLogin yes" >>/etc/ssh/sshd_config
# Задаём имя системы echo "test1">/etc/hostname

Задаём настройки сетевых подключений. У нас netplan и networkd. Не забываем прописывать актуальные значения MAC-адресов адаптеров. На первом адаптере ставим статический адрес, а на второй работает DHCP (это NET-подключение к интернет). Обратите внимание, что IPv6 отключается указанием «link-local: [ ]» в настройках подключения.

echo " network: version: 2 renderer: networkd ethernets: eth0: match: macaddress: 08:00:27:2e:69:24 addresses: - 192.168.56.10/24 gateway4: 192.168.56.1 " >/etc/netplan/eth0.yaml echo " network: version: 2 renderer: networkd ethernets: eth1: match: macaddress: 08:00:27:e4:46:31 # Let's disable IPV6 for this interface. link-local: [ ] dhcp4: yes " >/etc/netplan/eth1.yaml

Создаём пользователя и добавляем его в административные группы:

adduser user usermod -G 'adm,dialout,sudo,cdrom,dip,plugdev,users' user

Всё! Можно перегружаться и при загрузке с жёсткого диска загрузится уже наша свежеустановленная система.

Если это виртуальная машина VirtualBox, то после перезагрузки нужно ещё желательно поставить дополнения, подключаем «Guest Additions CD Image» и выполняем из-под нашей новой системы:

sudo mkdir /cdrom sudo mount -o loop,ro /dev/cdrom /cdrom sudo /cdrom/VBoxLinuxAdditions.run sudo umount /cdrom

На этом всё. Дальше нужно подключиться по SSH и залить SSH ключи пользователей. После чего удалить настройку «PermitRootLogin yes» из /etc/ssh/sshd_config.

Если кому-то интересно, то вот такой образ Ubuntu 20.04 занимает 2.2 ГБ дискового пространства.

Источник

Is there a program to install Ubuntu from a Linux system?

I need to upgrade my very old SUSE Linux and I want to switch from SUSE to Ubuntu. I was in the process of finding out how to create a bootable USB stick, when I realized that the oldest and smallest of my spare sticks has an .exe (wubi) which, if its readme is true, would allow me to install Ubuntu starting from a Windows machine. Now I wonder if such installers exist that run on Linux too. This would be far easier than burning an ISO image, taking the risk that the target box can’t boot from USB, etc. Edit 1: Meanwhile I found a small ISO image for Ubuntu 7 (yes, 7, not 17, no typo) that fits on my 1GB stick. I managed to burn it on the stick, using my other computer (System->Administration->USB startup disc creation) and succeeded to start the box, using this image. It leads me to some kind of shell that has BusyBox v1.1.3 with (initramfs) as prompt. I can do pwd and even apt-get , but apt-get tells me that libapt-pkg-libc6.6-. is missing. I don’t think this is supposed to happen. The next part of the adventure is that I’m downloading an iso image of ubuntu16.04.3 (1.5GB), find the next bigger stick and try it again. Edit 2: Now I have downloaded what I hope is an up-to-date iso-image, cksum gives me

1089871577 1587609600 ubuntu-16.04.3-desktop-amd64.iso 

After some skirmishing with the old Acer BIOS, the box tries to boot from the USB, but gives Warnings:

Missing parameter in configuration file. Unknown keyword in configuration file. 

Upon that, I see what looks like a prompt boot: that reacts to nothing but a hard reset via the power switch, except that after what seems about half an hour, the box loses patience and boots anew, with the same result. Edit 3: The ISO image of Ubuntu 16 can now be booted. The trick was simply to type «help» into the prompt and wait for things to happen. One last problem remains: it only boots Ubuntu, but does not install it. What is missing?

Читайте также:  Astra linux установка виндовс

Источник

Оцените статью
Adblock
detector