Русский
Русский
English
Статистика
Реклама

Ставим Ubuntu из другого LinuxLiveCD

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

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

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

iptables -I INPUT -p tcp --dport 22 -j ACCEPTpasswd

И подключаемся по SSH:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.56.110

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

partedunit KiBmktable gptmkpart fat16 1024KiB 32MiBname 1 EFI  set 1 esp onmkpart ext4 32MiB -1sПредложит выравнять - соглашаемся.name 2 LINUXquit

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

mkfs.fat -F 16 -n EFI /dev/sda1FAT32 не работает!mkfs.ext4 -O ^64bit -L LINUX /dev/sda2

Разворачивать систему будем при помощи утилиты debootstrap. В нашем Linux её нет, поэтому просто скачаем deb-пакет и репозитория Debian и развернём содержимое прямо в наш LiveCD.

mkdir /tmp/1cd /tmp/1wget http://ftp.ru.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123_all.debar -p *.deb data.tar.gz | tar -xz -C /

Ставить будем Ubuntu 20.04 "Focal" - имя релиза указывается при вызове deboostrap. там же указывается репозиторий, откуда будут скачаны файлы.
Для разворачивания системы, нам естественно, нужно сначала примонтировать её корень в какую-то папку. Не мудрствуя лукаво используем для этого папку "/tmp/".

mkdir /tmp/newrootcd /tmpmount -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/ ${RELEASE} main restricted# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} main restricteddeb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates main restricted# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates main restricteddeb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} universe# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} universedeb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates universe# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates universedeb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} multiverse# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} multiversedeb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates multiverse# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates multiversedeb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-backports main restricted universe multiverse# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-backports main restricted universe multiversedeb http://archive.canonical.com/ubuntu ${RELEASE} partner# deb-src http://archive.canonical.com/ubuntu ${RELEASE} partnerdeb http://security.ubuntu.com/ubuntu focal-security main restricted# deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security main restricteddeb http://security.ubuntu.com/ubuntu ${RELEASE}-security universe# deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security universedeb http://security.ubuntu.com/ubuntu ${RELEASE}-security multiverse# deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security multiverse" >newroot/etc/apt/sources.list )

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

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

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

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

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

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

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

echo " <file system>                           <mount point>          <type>  <options>                    <dump> <pass># / was on /dev/sda2 during installationUUID=`blkid -o value -s UUID /dev/sda2`   /                      ext4    errors=remount-ro,relatime      0     2# /boot/efi was on /dev/sda1 during installationUUID=`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". Но нам же нужно, чтобы это можно было заскриптовать. Просмотреть спиcок часовых поясов можно вызовом "timedatectl list-timezones".

ln -sf /usr/share/zoneinfo/Europe/Moscow /etc/localtimeecho "Europe/Moscow" >/etc/timezoneecho "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 sshapt-get install -y net-tools bind9utils build-essential pixz pigz pv htopapt-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/keyboardecho '# CONFIGURATION FILE FOR SETUPCON# Consult the console-setup(5) manual page.ACTIVE_CONSOLES="/dev/tty[1-6]"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 на EFI-раздел:

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

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

update-grub2

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

update-initramfs -u

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

# Задаём пароль rootpasswdecho "PermitRootLogin" >>/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.yamlecho "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 userusermod -G 'adm,dialout,sudo,cdrom,dip,plugdev,users' user

Чистим кэш apt:

apt-get clean

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

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

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

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

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

Источник: habr.com
К списку статей
Опубликовано: 29.03.2021 04:05:11
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Настройка linux

*nix

Ubuntu

Linux

Virtualbox

Настройка

Livecd

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru