Instale o Ubuntu de outro Linux / LiveCD

Este artigo se concentrará na instalação do Ubuntu de outro Linux sem usar uma imagem ISO. Isso é necessário principalmente para criar ambientes de teste customizados. Há informações suficientes sobre esse procedimento na Internet, é fácil pesquisar no Google, mas, como se viu, em alguns pontos as instruções existentes estão desatualizadas, sim, e todas têm uma falha fatal conhecida.





Então, a declaração do problema: há uma máquina virtual nua com acesso à Internet e um BIOS EFI, há algum Linux (no nosso caso é SystemRescue LiveCD ), você precisa instalar o Ubuntu. E todas as ações devem ser facilmente automatizadas para que possam ser executadas na forma de um script.





Em primeiro lugar, inicializamos em nosso SysRCD. Vamos trabalhar via SSH, e para que funcione, você precisa definir a senha de root e habilitar o SSH no iptables (inicialmente, todas as conexões de entrada são proibidas no SysRCD):





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



E nos conectamos via SSH:





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



Agora você precisa preparar partições em seu disco rígido. Como nosso sistema é EFI, a tabela de partição será GPT, precisamos de uma partição EFI FAT e o próprio sistema estará em uma partição ext4. A partição EFI pode ser muito pequena - literalmente 10 MB, mas para a operação estável das atualizações do sistema é melhor torná-la pelo menos 32 MB. E uma nota importante! Todas as instruções dizem que a partição deve estar no formato FAT32, mas na prática o VirtualBox se recusa a trabalhar com uma partição EFI pequena neste formato (bem, ou mkfs.vfat não formata partições FAT32 pequenas corretamente - experimentos são necessários aqui)! Além disso, existem nuances com o tamanho do disco, tamanho do cluster e compatibilidade do BIOS EFI. Portanto, iremos formatá-lo em FAT16. Vamos nos dividir usando parted.

Para marcar uma partição como um serviço EFI no parted, é necessário definir o sinalizador "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
      
      



Isso é tudo. Em seguida, você precisa se conectar via SSH e preencher as chaves de usuário SSH. Em seguida, remova a configuração " PermitRootLogin yes " de / etc / ssh / sshd_config .





Se alguém estiver interessado, esta imagem do Ubuntu 20.04 ocupa 2,2 GB de espaço em disco.








All Articles