[Настройка Linux, *nix] Ставим Ubuntu из другого Linux/LiveCD
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Речь в статье пойдёт об установке Ubuntu из другого Linux без использования ISO-образа. Нужно это прежде всего для создания кастомизированных тестовых окружений. Информации о такой процедуре в интернете достаточно, она легко гуглится, но, как выяснилось, в некоторых моментах существующие инструкции устарели, да, и все они обладают известным фатальным недостатком.Итак, постановка задачи: есть голая виртуальная машина с выходом в интернет и EFI BIOS, есть некий линукс (в нашем случае это SystemRescue LiveCD), нужно получить установленную Ubuntu. И все действия должны быть легко автоматизированы, что их можно оформить в виде скрипта.Прежде всего загружаемся в наш SysRCD. Работать мы будем по SSH, и что он заработал, нужно установить пароль root и разрешить SSH в iptables (изначально запрещены любые входящие соединения):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
passwd
И подключаемся по 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".
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-раздел форматируем в FAT-16, иначе будут проблемы с VirtualBox.
mkfs.fat -F 16 -n EFI /dev/sda1
FAT32 не работает!
mkfs.ext4 -O ^64bit -L LINUX /dev/sda2
Разворачивать систему будем при помощи утилиты debootstrap. В нашем Linux её нет, поэтому просто скачаем deb-пакет и репозитория Debian и развернём содержимое прямо в наш LiveCD.
mkdir /tmp/1
cd /tmp/1
wget http://ftp.ru.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123_all.deb
ar -p *.deb data.tar.gz | tar -xz -C /
Ставить будем Ubuntu 20.04 "Focal" - имя релиза указывается при вызове deboostrap. там же указывается репозиторий, откуда будут скачаны файлы.
Для разворачивания системы, нам естественно, нужно сначала примонтировать её корень в какую-то папку. Не мудрствуя лукаво используем для этого папку "/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/ ${RELEASE} main restricted
# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates main restricted
# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates main restricted
deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} universe
# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} universe
deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates universe
# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates universe
deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} multiverse
deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates multiverse
# deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates multiverse
deb 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 multiverse
deb http://archive.canonical.com/ubuntu ${RELEASE} partner
# deb-src http://archive.canonical.com/ubuntu ${RELEASE} partner
deb http://security.ubuntu.com/ubuntu focal-security main restricted
# deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security main restricted
deb http://security.ubuntu.com/ubuntu ${RELEASE}-security universe
# deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security universe
deb 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/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 "
<file system> <mount point> <type> <options> <dump> <pass>
# / 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". Но нам же нужно, чтобы это можно было заскриптовать. Просмотреть спиcок часовых поясов можно вызовом "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/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
# Задаём пароль root
passwd
echo "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.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
Чистим кэш apt:
apt-get clean
Всё! Можно перегружаться и при загрузке с жёсткого диска загрузится уже наша свежеустановленная система.Если это виртуальная машина 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 ГБ дискового пространства.
===========
Источник:
habr.com
===========
Похожие новости:
- [Open source, *nix] FOSS News №62 – дайджест материалов о свободном и открытом ПО за 22-28 марта 2021 года
- Выпуск дистрибутива 4MLinux 36.0
- [Настройка Linux, Работа с видео, IPTV, Видеотехника, DIY или Сделай сам] KODI: собираем удобный и функциональный медиацентр для дома. Часть 4. Архив IPTV
- [Настройка Linux, Программирование, C, Rust, Разработка под Linux] Линус Торвальдс рассказал о том, где Rust впишется в Linux
- [] Создаём новые эмодзи (emoji): как предложить свой смайлик?
- [Программирование, C++, C, Разработка под Linux] Приёмы неблокирующего программирования: полные барьеры памяти (перевод)
- [Open source, Виртуализация, Разработка под Linux, Разработка на Raspberry Pi] Шпаргалка по Linux grep, домашний термостат на Raspberry Pi, эл. книга «Ansible for DevOps» и PostgreSQL на Linux
- [Open source, Системное программирование, История IT] Nokia Bell Labs передала сообществу все права на операционную систему Plan 9
- [Настройка Linux, Git] Как я домашний Git-сервер Gogs на Alpine linux устанавливал
- [Системное администрирование] Работаем с lightsquid или как сделать индивидуальную статистику для пользователей
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_*nix, #_ubuntu, #_linux, #_virtualbox, #_nastrojka (настройка), #_livecd, #_nastrojka_linux (
Настройка Linux
), #_*nix
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 09:23
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Речь в статье пойдёт об установке Ubuntu из другого Linux без использования ISO-образа. Нужно это прежде всего для создания кастомизированных тестовых окружений. Информации о такой процедуре в интернете достаточно, она легко гуглится, но, как выяснилось, в некоторых моментах существующие инструкции устарели, да, и все они обладают известным фатальным недостатком.Итак, постановка задачи: есть голая виртуальная машина с выходом в интернет и EFI BIOS, есть некий линукс (в нашем случае это SystemRescue LiveCD), нужно получить установленную Ubuntu. И все действия должны быть легко автоматизированы, что их можно оформить в виде скрипта.Прежде всего загружаемся в наш SysRCD. Работать мы будем по SSH, и что он заработал, нужно установить пароль root и разрешить SSH в iptables (изначально запрещены любые входящие соединения): iptables -I INPUT -p tcp --dport 22 -j ACCEPT
passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.56.110
Для того, чтобы пометить раздел как служебный 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 mkfs.fat -F 16 -n EFI /dev/sda1
FAT32 не работает! mkfs.ext4 -O ^64bit -L LINUX /dev/sda2 mkdir /tmp/1
cd /tmp/1 wget http://ftp.ru.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.123_all.deb ar -p *.deb data.tar.gz | tar -xz -C / Для разворачивания системы, нам естественно, нужно сначала примонтировать её корень в какую-то папку. Не мудрствуя лукаво используем для этого папку "/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/ ( RELEASE=focal ; echo "
deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} main restricted # deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} main restricted deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates main restricted # deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates main restricted deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} universe # deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} universe deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates universe # deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates universe deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} multiverse # deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE} multiverse deb http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates multiverse # deb-src http://ru.archive.ubuntu.com/ubuntu/ ${RELEASE}-updates multiverse deb 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 multiverse deb http://archive.canonical.com/ubuntu ${RELEASE} partner # deb-src http://archive.canonical.com/ubuntu ${RELEASE} partner deb http://security.ubuntu.com/ubuntu focal-security main restricted # deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security main restricted deb http://security.ubuntu.com/ubuntu ${RELEASE}-security universe # deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security universe deb http://security.ubuntu.com/ubuntu ${RELEASE}-security multiverse # deb-src http://security.ubuntu.com/ubuntu ${RELEASE}-security multiverse " >newroot/etc/apt/sources.list ) 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 Список поддерживаемых кодировок хранится в /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 apt-get update
apt-get upgrade apt-get install -y aptitude mc man # Ставим базовый языковой пакет. apt-get install -y language-pack-en echo "
<file system> <mount point> <type> <options> <dump> <pass> # / 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 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 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
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/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
update-grub2
update-initramfs -u
Для этого в файле настроек SSH-сервера /etc/ssh/sshd_config нужно добавить строку: PermitRootLogin yes # Задаём пароль root
passwd echo "PermitRootLogin" >>/etc/ssh/sshd_config echo "test1">/etc/hostname
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 apt-get clean
sudo mkdir /cdrom
sudo mount -o loop,ro /dev/cdrom /cdrom sudo /cdrom/VBoxLinuxAdditions.run sudo umount /cdrom =========== Источник: habr.com =========== Похожие новости:
Настройка Linux ), #_*nix |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 09:23
Часовой пояс: UTC + 5