Создание Live USB Ubuntu 18.04

Данная инструкция описывает как создать загрузочную флешку с разделами GPT и загрузочником UEFI.

Создание загрузочной флешки состоит из двух этапов. Сначала нужно создать папку, и подготовить сборку. Затем подготовить флешку, и перенести файлы на эту флешку.

Выберите флешку, у которой большая скорость чтения и записи.

Подготовка файлов

1. Создайте папку 

mkdir -p /media/ubuntu/root

2. Подготовьте среду

apt install debootstrap -y

cd /media/ubuntu
debootstrap --arch amd64 focal root http://ru.archive.ubuntu.com/ubuntu

3. Смонтируйте папки

yes | cp /etc/apt/sources.list /media/ubuntu/root/etc/apt/sources.list
yes | cp /etc/resolv.conf /media/ubuntu/root/etc/resolv.conf

mount -t proc proc /media/ubuntu/root/proc
mount -t sysfs sys /media/ubuntu/root/sys
mount -o bind /dev /media/ubuntu/root/dev
mount -t devpts none /media/ubuntu/root/dev/pts

echo "127.0.0.1 ubuntu" > /media/ubuntu/root/etc/hosts
echo "ubuntu" > /media/ubuntu/root/etc/hostname

4. Сделайте chroot

chroot /media/ubuntu/root

5. Установите базовое ПО

locale-gen en_US.UTF-8
locale-gen ru_RU.UTF-8
apt update
apt install aptitude -y
aptitude upgrade -y
aptitude install apt-utils -y
aptitude install libgcc1 libstdc++6 -y
aptitude install debconf-i18n -y

Установите системные пакеты:

aptitude install bash-completion bsdmainutils psmisc update-motd uuid-runtime \
  ubuntu-standard linux-base linux-generic dbus bridge-utils \
  cron htop mc nano curl dnsutils sudo grep man anacron iotop preload \
  g++ gcc cpp openssh-client unrar unar bzip2 zip unzip p7zip-full \
  python2.7 python3 tar mtools grub-efi grub-efi-amd64 attr inxi \
  traceroute xfsprogs network-manager dnsmasq resolvconf -y

Установите Openbox и LXQT

aptitude install xorg openbox sddm sddm-theme-maldives gmrun xterm update-manager \
  nitrogen compton lxappearance lxappearance-obconf xxkb xkbind gxkb \
  obconf obconf-qt alsa alsaplayer alsa-base alsa-tools alsa-utils alsamixergui \
  lxqt lxqt-about lxqt-core lxqt-config lxqt-sudo lxqt-qtplugin lxqt-panel \
  kde-spectacle scrot gnome-disk-utility pulseaudio dconf-editor gnome-screensaver \
  pavumeter pavucontrol pavucontrol-qt smbclient gvfs-bin libnotify-bin -y

Установите темы

aptitude install adwaita-icon-theme-full adwaita-qt breeze-icon-theme gtk3-engines-breeze \
  breeze breeze-cursor-theme breeze-gtk-theme breeze-icon-theme \
  qt5-style-plugins ubuntu-gnome-wallpapers ubuntu-wallpapers-bionic \
  ubuntu-gnome-wallpapers kubuntu-wallpapers-bionic gnome-backgrounds -y

Установите приложения:

aptitude install gedit audacious baobab firefox konsole chromium-browser ffmpeg \
  vlc geany geany-plugins libreoffice okular gwenview pinta ark \
  filezilla gnome-terminal systemsettings florence abiword \
  dolphin plasma-framework plasma-workspace plasma-sdk -y

Установите драйвера:

aptitude install xserver-xorg-input-synaptics -y

6. Настройте среду

Сконфигурируйте раскладку клавиатуры на переключение через Ctrl+Shift:

nano /etc/default/keyboard

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL=""
XKBLAYOUT="us,ru"
XKBVARIANT=""
XKBOPTIONS="grp:ctrl_shift_toggle,grp_led:scroll"

BACKSPACE="guess"

Настройте sddm в качестве display manager по умолчанию:

echo "/usr/bin/sddm" > /etc/X11/default-display-manager 
sddm --example-config > /etc/sddm.conf

Укажите в /etc/sddm.conf тему maldives:

sed -i -- 's/Session=openbox.dektop/Session=plasma.dektop/g' /etc/sddm.conf
sed -i -- 's/Current=breeze/Current=maldives/g' /etc/sddm.conf
cp /usr/share/xsessions/openbox.desktop /usr/share/xsessions/plasma.desktop

Копирование openbox в plasma нужно, потому что sddm при автоматическом входе без авторизации пытается найти plasma.desktop и игнорирует параметр Session.

Укажите иконки по умолчанию:

update-alternatives --set x-cursor-theme /etc/X11/cursors/breeze_cursors.theme

7. Создайте пользователя ubuntu

echo "%wheel  ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers
useradd -m --shell /bin/bash ubuntu
usermod -a -G sudo ubuntu
groupadd -r wheel
usermod -a -G wheel ubuntu
chmod 700 /home/ubuntu
chown -R ubuntu:ubuntu /home/ubuntu

Укажите sddm, чтобы он грузился без пароля:

sed -i -- 's/User=/User=ubuntu/g' /etc/sddm.conf
sed -i -- 's/Session=/Session=openbox.desktop/g' /etc/sddm.conf

Установите пароль для пользователя ubuntu (Пароль ubuntu):

passwd ubuntu

8. Установите BFQ

В файл /etc/default/grub добавить в параметр GRUB_CMDLINE_LINUX_DEFAULT строчку

scsi_mod.use_blk_mq=1

Добавить в файл /etc/initramfs-tools/modules строчку

bfq

Создать файл /etc/udev/rules.d/60-scheduler.rules и добавить

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"

9. Установите iptables

aptitude install iptables-persistent

Пропишите в /etc/iptables/rules.v4 следующее содержимое:

*filter
:INPUT ACCEPT [19:913]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [39:3584]
:ALLOW-INPUT - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

# Перейти к цепочке ALLOW-INPUT
-A INPUT -j ALLOW-INPUT

# Запрещаем остальные входящие соединения
-A INPUT -j REJECT
-A FORWARD -j REJECT

-A ALLOW-INPUT -j RETURN

COMMIT

Обязателен ENTER в конце (перевод на новую строку). Скопируйте rules.v4 в rules.v6

cp /etc/iptables/rules.v4 /etc/iptables/rules.v6

10. Установите конфиги домашней папки от openbox

Это уже настроенная конфигурация рабочего стола Openbox с темой Breeze.

cd /tmp
wget https://blog.bayrell.org/media/files/archives/openbox_18_04.config.zip
unzip /tmp/openbox_18_04.config.zip
cp -aT /tmp/.bak/ /home/ubuntu/
chown -R ubuntu:ubuntu /home/ubuntu
rm -rf /tmp/.bak/

11. Отредактируйте файл grub

nano /etc/default/grub

Установите строки:

#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="scsi_mod.use_blk_mq=1"

12. Настройте Network Manager

Измените файл /etc/NetworkManager/NetworkManager.conf

[main]
#auth-polkit=false
plugins=ifupdown,keyfile
systemd-resolved=false
rc-manager=resolvconf
dns=default

[ifupdown]
managed=false

[device]
wifi.scan-rand-mac-address=no

В файле /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf пропишите строчку:

[keyfile]
unmanaged-devices=*,except:type:wifi,except:type:gsm,except:type:cdma,except:type:ethernet,interface-name:lxc*,interface-name:docker*,interface-name:virtual*,interface-name:veth*

Отключите управление сетью через systemd

systemctl disable systemd-networkd.socket
systemctl disable systemd-networkd.service
systemctl disable systemd-resolved
systemctl disable networkd-dispatcher
systemctl disable connman

Скопируйте конфиг:

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example
echo "" > /etc/dnsmasq.conf

В /etc/dnsmasq.conf пропишите:

port=53
listen-address=127.0.0.1
no-dhcp-interface=
bind-interfaces
expand-hosts
local-ttl=1
conf-dir=/etc/dnsmasq.d

Создайте файл /etc/dnsmasq.d/dns

server=8.8.8.8
server=8.8.4.4
server=1.1.1.1

13. Установите Ядро 5.3

apt remove xorg
apt-get install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04 

15. Удалите лишние приложения

aptitude purge connman

16. Выйдите из chroot

exit

Отмонтируйте папки

umount /media/ubuntu/root/proc
umount /media/ubuntu/root/sys
umount /media/ubuntu/root/dev/pts
umount /media/ubuntu/root/dev

Удалите содержимое папки dev

rm -rf /media/ubuntu/root/dev/*

Перезагрузитесь

Перенос файлов на флешку

1. Подключите флешку. И узнайте на каком устройстве она подключена.

Это можно сделать через команду

fdisk -l

либо запустить программу

gnome-disks

У меня флешка значится под устройством /dev/sdb

2. Создание разделов на флешке

Выполните команду создания GPT разметки. Убедитесь, что указан верный диск. В моем случае это /dev/sdb.

parted /dev/sdb mklabel gpt

Данная команда выдаст предупреждение, что все данные на выбранном диске будут уничтожены. Еще раз убедитесь в правильности устройства.

Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No?

Если все верно, введите Yes.

Yes

Выведите на экран результат

parted /dev/sdb print

У меня выдало следующее

Model: JetFlash Transcend 8GB (scsi)
Disk /dev/sdb: 8103MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags

Теперь нужно создать разделы на флешке. Запустите программу

gnome-disks

У этой программы удобный интерфейс для создания разделов.

Создайте разделы:
1 - efi [FAT 150М]
2 - swap [2Gb]
3 - root [ext4]

Укажите тип раздела. У каждого раздела, есть пункт меню Edit Partition. Root partition должен быть в конце, чтобы если переносить на флешку с большим объемом через dd можно было увеличить root раздел.

Нужно выбрать:

/dev/sdb1 - Системный EFI
/dev/sdb2 - Раздел подкачки Linux
/dev/sdb3 - Корневой раздел Linux (x86_64)

2. Cконфигурируйте fstab

Выполните команду

blkid

Она выдаст UUID дисков. Примерно следующее:

/dev/sdb1: SEC_TYPE="msdos" LABEL="efi" UUID="8F2E-54C2" TYPE="vfat" PARTUUID="09c37ee0-6005-4b9e-b953-02f7a4571e66"
/dev/sdb2: LABEL="swap" UUID="09431b9f-fa47-4aed-9699-824d7128bedd" TYPE="swap" PARTUUID="89eae7e6-7a0a-4b62-9e8f-f49b97d24562"
/dev/sdb3: LABEL="root" UUID="cecd3222-1c6c-4eee-af58-786fa8c27656" TYPE="ext4" PARTUUID="71cdc983-2312-47d0-9421-5e8b0d343da9"

ID дисков sdb1, sdb2 и sdb3 нужно прописать в /etc/fstab.

nano /media/ubuntu/root/etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=cecd3222-1c6c-4eee-af58-786fa8c27656   /               ext4    errors=remount-ro  0  1
UUID=8F2E-54C2                              /boot/efi       vfat    umask=0077         0  1

# swap was on /dev/sda4 during installation
UUID=09431b9f-fa47-4aed-9699-824d7128bedd   none            swap    sw                 0  0

3. Смонтируйте флешку в /media/ubuntu/usb

mkdir -p /media/ubuntu/usb
mount /dev/sdb3 /media/ubuntu/usb

4. Скопируйте содержимое /media/ubuntu/root в /media/ubuntu/usb

rsync -aSsuh --info=progress2 --numeric-ids --bwlimit=10240 --delete --exclude 'proc' --exclude 'sys' --exclude 'dev' /media/ubuntu/root/ /media/ubuntu/usb/

Сбросьте кэш на диск:

sync -f

5. Смонтируйте остальные папки:

mkdir -p /media/ubuntu/usb/proc
mkdir -p /media/ubuntu/usb/sys
mkdir -p /media/ubuntu/usb/dev

mount -t proc proc /media/ubuntu/usb/proc
mount -t sysfs sys /media/ubuntu/usb/sys
mount -o bind /dev /media/ubuntu/usb/dev
mount -t devpts none /media/ubuntu/usb/dev/pts

mkdir -p /media/ubuntu/usb/boot/efi
mount /dev/sdb1 /media/ubuntu/usb/boot/efi

6. Сделайте chroot

chroot /media/ubuntu/usb

7. Выполнить команды

grub-install /dev/sdb3
update-initramfs -u
update-grub

8. Выйдите из chroot

exit

9. Отмонтируйте папки

umount /media/ubuntu/usb/proc
umount /media/ubuntu/usb/sys
umount /media/ubuntu/usb/dev/pts
umount /media/ubuntu/usb/dev
umount /media/ubuntu/usb/boot/efi
umount /media/ubuntu/usb

10. Запустите cfdisk и проверьте тип разделов

cfdisk /dev/sdb

Для:

/dev/sdb1 - EFI System
/dev/sdb2 - Linux swap
/dev/sdb3 - Должно стоять Linux root x86-64

Если так не написано, то нужно поменять на соотвествующие значения, и после измененений, выбрать пункт Write и написать yes. Затем сделать quit.

Проверка флешки через QEMU

Установите qemu

aptitude update
aptitude install qemu-kvm -y

Сделайте 

lsusb

Найдите строчку с USB флешки. У меня она выглядит следующим образом.

Bus 002 Device 005: ID 8564:1000 Transcend Information, Inc. JetFlash

Запустите qemu с параметрами bus, device для флешки:

qemu-system-x86_64 -m 1G -cpu host -enable-kvm -usb -device usb-host,vendorid=0x8564,productid=0x1000

либо, если ID такиж несколько, то указать bus и addr:

qemu-system-x86_64 -m 1G -cpu host -enable-kvm -usb -device usb-host,hostbus=2,hostaddr=5