Installez Ubuntu à partir d'un autre Linux / LiveCD

Cet article se concentrera sur l'installation d'Ubuntu à partir d'un autre Linux sans utiliser d'image ISO. Cela est nécessaire principalement pour créer des environnements de test personnalisés. Il y a suffisamment d'informations sur une telle procédure sur Internet, elles sont facilement recherchées sur Google, mais, comme il s'est avéré, à certains moments, les instructions existantes sont obsolètes, oui, et elles ont toutes un défaut fatal connu.





Donc, l'énoncé du problème: il y a une machine virtuelle nue avec un accès Internet et un BIOS EFI, il y a du Linux (dans notre cas, c'est SystemRescue LiveCD ), vous devez installer Ubuntu. Et toutes les actions doivent être facilement automatisées pour pouvoir être exécutées sous la forme d'un script.





Tout d'abord, nous démarrons dans notre SysRCD. Nous travaillerons via SSH, et pour que cela fonctionne, vous devez définir le mot de passe root et activer SSH dans iptables (initialement, toutes les connexions entrantes sont interdites dans SysRCD):





iptables -I INPUT -p tcp --dport 22 -j ACCEPT
passwd
      
      



Et nous nous connectons via SSH:





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



Vous devez maintenant préparer les partitions sur votre disque dur. Puisque notre système est EFI, la table de partition sera GPT, nous avons besoin d'une partition EFI FAT et le système lui-même sera sur une partition ext4. La partition EFI peut être très petite - littéralement 10 Mo, mais pour un fonctionnement stable des mises à jour du système, il est préférable de la faire au moins 32 Mo. Et une note importante! Toutes les instructions disent que la partition doit être au format FAT32, mais en pratique VirtualBox refuse de travailler avec une petite partition EFI dans ce format (enfin, ou mkfs.vfat ne formate pas correctement les petites partitions FAT32 - des expériences sont nécessaires ici)! De plus, il existe des nuances avec la taille du disque, la taille du cluster et la compatibilité du BIOS EFI. Par conséquent, nous le formaterons en FAT16. Nous allons diviser en utilisant parted.

Afin de marquer une partition comme un service EFI en parted, elle doit définir le drapeau "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
      
      



C'est tout. Ensuite, vous devez vous connecter via SSH et remplir les clés utilisateur SSH. Supprimez ensuite le paramètre « PermitRootLogin yes » de / etc / ssh / sshd_config .





Si quelqu'un est intéressé, cette image Ubuntu 20.04 occupe 2,2 Go d'espace disque.








All Articles