Artikel ini akan fokus pada penginstalan Ubuntu dari Linux lain tanpa menggunakan image ISO. Ini diperlukan terutama untuk membuat lingkungan pengujian yang disesuaikan. Ada cukup informasi tentang prosedur semacam itu di Internet, itu mudah dicari di Google, tetapi, ternyata, pada beberapa titik, instruksi yang ada sudah ketinggalan zaman, ya, dan semuanya memiliki kesalahan fatal yang diketahui.
Jadi, pernyataan masalahnya: ada mesin virtual telanjang dengan akses Internet dan EFI BIOS, ada beberapa Linux (dalam kasus kami adalah SystemRescue LiveCD ), Anda perlu menginstal Ubuntu. Dan semua tindakan harus mudah diotomatiskan sehingga dapat dijalankan dalam bentuk skrip.
Pertama-tama, kami boot ke SysRCD kami. Kami akan bekerja melalui SSH, dan agar dapat berfungsi, Anda perlu mengatur kata sandi root dan mengaktifkan SSH di iptables (awalnya, koneksi masuk apa pun dilarang di SysRCD):
iptables -I INPUT -p tcp --dport 22 -j ACCEPT passwd
Dan kami terhubung melalui SSH:
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.56.110
Sekarang Anda perlu menyiapkan partisi di hard drive Anda. Karena sistem kami adalah EFI, tabel partisi akan menjadi GPT, kami memerlukan partisi EFI FAT, dan sistem itu sendiri akan berada di partisi ext4. Partisi EFI bisa sangat kecil - secara harfiah 10 MB, tetapi untuk operasi pembaruan sistem yang stabil, lebih baik membuatnya setidaknya 32 MB. Dan catatan penting! Semua instruksi mengatakan bahwa partisi harus dalam format FAT32, tetapi dalam praktiknya VirtualBox menolak untuk bekerja dengan partisi EFI kecil dalam format ini (baik, atau mkfs.vfat tidak memformat partisi FAT32 kecil dengan benar - percobaan diperlukan di sini)! Plus, ada perbedaan dengan ukuran disk, ukuran cluster, dan kompatibilitas EFI BIOS. Oleh karena itu, kami akan memformatnya dalam FAT16. Kami akan berpisah menggunakan parted.
Untuk menandai partisi sebagai layanan EFI di parted, ia perlu menyetel flag "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. , .
, , - . "/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". , . "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-.
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
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
Itu saja. Selanjutnya, Anda perlu terhubung melalui SSH dan mengisi kunci pengguna SSH. Kemudian hapus pengaturan " PermitRootLogin yes " dari / etc / ssh / sshd_config .
Jika ada yang tertarik, gambar Ubuntu 20.04 ini membutuhkan ruang disk 2,2 GB.