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

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

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

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

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

_x000D_mkdir -p /media/ubuntu/root

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

_x000D_apt install debootstrap -y_x000D__x000D_cd /media/ubuntu_x000D_debootstrap --arch amd64 focal root http://ru.archive.ubuntu.com/ubuntu

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

_x000D_yes | cp /etc/apt/sources.list /media/ubuntu/root/etc/apt/sources.list_x000D_yes | cp /etc/resolv.conf /media/ubuntu/root/etc/resolv.conf_x000D__x000D_mount -t proc proc /media/ubuntu/root/proc_x000D_mount -t sysfs sys /media/ubuntu/root/sys_x000D_mount -o bind /dev /media/ubuntu/root/dev_x000D_mount -t devpts none /media/ubuntu/root/dev/pts_x000D__x000D_echo "127.0.0.1 ubuntu" > /media/ubuntu/root/etc/hosts_x000D_echo "ubuntu" > /media/ubuntu/root/etc/hostname

4. Сделайте chroot

_x000D_chroot /media/ubuntu/root

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

_x000D_locale-gen en_US.UTF-8_x000D_locale-gen ru_RU.UTF-8_x000D_apt update_x000D_apt install aptitude -y_x000D_aptitude upgrade -y_x000D_aptitude install apt-utils -y_x000D_aptitude install libgcc1 libstdc++6 -y_x000D_aptitude install debconf-i18n -y

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

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

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

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

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

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

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

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

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

_x000D_aptitude install xserver-xorg-input-synaptics -y

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

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

nano /etc/default/keyboard

_x000D_# KEYBOARD CONFIGURATION FILE_x000D__x000D_# Consult the keyboard(5) manual page._x000D__x000D_XKBMODEL=""_x000D_XKBLAYOUT="us,ru"_x000D_XKBVARIANT=""_x000D_XKBOPTIONS="grp:ctrl_shift_toggle,grp_led:scroll"_x000D__x000D_BACKSPACE="guess"

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

_x000D_echo "/usr/bin/sddm" > /etc/X11/default-display-manager _x000D_sddm --example-config > /etc/sddm.conf_x000D_

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

_x000D_sed -i -- 's/Session=openbox.dektop/Session=plasma.dektop/g' /etc/sddm.conf_x000D_sed -i -- 's/Current=breeze/Current=maldives/g' /etc/sddm.conf_x000D_cp /usr/share/xsessions/openbox.desktop /usr/share/xsessions/plasma.desktop

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

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

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

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

_x000D_echo "%wheel  ALL=(ALL:ALL) NOPASSWD: ALL" >> /etc/sudoers_x000D_useradd -m --shell /bin/bash ubuntu_x000D_usermod -a -G sudo ubuntu_x000D_groupadd -r wheel_x000D_usermod -a -G wheel ubuntu_x000D_chmod 700 /home/ubuntu_x000D_chown -R ubuntu:ubuntu /home/ubuntu

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

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

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

_x000D_passwd ubuntu

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

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

_x000D_scsi_mod.use_blk_mq=1

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

_x000D_bfq

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

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

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

_x000D_aptitude install iptables-persistent

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

_x000D_*filter_x000D_:INPUT ACCEPT [19:913]_x000D_:FORWARD ACCEPT [0:0]_x000D_:OUTPUT ACCEPT [39:3584]_x000D_:ALLOW-INPUT - [0:0]_x000D_-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT_x000D_-A INPUT -p icmp -j ACCEPT_x000D_-A INPUT -i lo -j ACCEPT_x000D__x000D_# Перейти к цепочке ALLOW-INPUT_x000D_-A INPUT -j ALLOW-INPUT_x000D__x000D_# Запрещаем остальные входящие соединения_x000D_-A INPUT -j REJECT_x000D_-A FORWARD -j REJECT_x000D__x000D_-A ALLOW-INPUT -j RETURN_x000D__x000D_COMMIT

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

_x000D_cp /etc/iptables/rules.v4 /etc/iptables/rules.v6

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

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

_x000D_cd /tmp_x000D_wget /wp-content/uploads/blinux/openbox_18_04.config.zip_x000D_unzip /tmp/openbox_18_04.config.zip_x000D_cp -aT /tmp/.bak/ /home/ubuntu/_x000D_chown -R ubuntu:ubuntu /home/ubuntu_x000D_rm -rf /tmp/.bak/

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

_x000D_nano /etc/default/grub

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

_x000D_#GRUB_TIMEOUT_STYLE=hidden_x000D_GRUB_TIMEOUT=5_x000D_GRUB_CMDLINE_LINUX_DEFAULT="scsi_mod.use_blk_mq=1"_x000D_

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

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

_x000D_[main]_x000D_#auth-polkit=false_x000D_plugins=ifupdown,keyfile_x000D_systemd-resolved=false_x000D_rc-manager=resolvconf_x000D_dns=default_x000D__x000D_[ifupdown]_x000D_managed=false_x000D__x000D_[device]_x000D_wifi.scan-rand-mac-address=no

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

_x000D_[keyfile]_x000D_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

_x000D_systemctl disable systemd-networkd.socket_x000D_systemctl disable systemd-networkd.service_x000D_systemctl disable systemd-resolved_x000D_systemctl disable networkd-dispatcher_x000D_systemctl disable connman

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

_x000D_cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example_x000D_echo "" > /etc/dnsmasq.conf

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

_x000D_port=53_x000D_listen-address=127.0.0.1_x000D_no-dhcp-interface=_x000D_bind-interfaces_x000D_expand-hosts_x000D_local-ttl=1_x000D_conf-dir=/etc/dnsmasq.d

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

_x000D_server=8.8.8.8_x000D_server=8.8.4.4_x000D_server=1.1.1.1

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

_x000D_apt remove xorg_x000D_apt-get install --install-recommends linux-generic-hwe-18.04 xserver-xorg-hwe-18.04 

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

_x000D_aptitude purge connman

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

_x000D_exit

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

_x000D_umount /media/ubuntu/root/proc_x000D_umount /media/ubuntu/root/sys_x000D_umount /media/ubuntu/root/dev/pts_x000D_umount /media/ubuntu/root/dev

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

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

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

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

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

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

_x000D_fdisk -l

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

_x000D_gnome-disks

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

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

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

_x000D_parted /dev/sdb mklabel gpt

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

_x000D_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?_x000D_Yes/No?

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

_x000D_Yes

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

_x000D_parted /dev/sdb print

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

_x000D_Model: JetFlash Transcend 8GB (scsi)_x000D_Disk /dev/sdb: 8103MB_x000D_Sector size (logical/physical): 512B/512B_x000D_Partition Table: gpt_x000D_Disk Flags:_x000D__x000D_Number Start End Size File system Name Flags

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

_x000D_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

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

_x000D_blkid

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

_x000D_/dev/sdb1: SEC_TYPE="msdos" LABEL="efi" UUID="8F2E-54C2" TYPE="vfat" PARTUUID="09c37ee0-6005-4b9e-b953-02f7a4571e66"_x000D_/dev/sdb2: LABEL="swap" UUID="09431b9f-fa47-4aed-9699-824d7128bedd" TYPE="swap" PARTUUID="89eae7e6-7a0a-4b62-9e8f-f49b97d24562"_x000D_/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

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

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

_x000D_mkdir -p /media/ubuntu/usb_x000D_mount /dev/sdb3 /media/ubuntu/usb_x000D_

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

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

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

_x000D_sync -f

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

_x000D_mkdir -p /media/ubuntu/usb/proc_x000D_mkdir -p /media/ubuntu/usb/sys_x000D_mkdir -p /media/ubuntu/usb/dev_x000D__x000D_mount -t proc proc /media/ubuntu/usb/proc_x000D_mount -t sysfs sys /media/ubuntu/usb/sys_x000D_mount -o bind /dev /media/ubuntu/usb/dev_x000D_mount -t devpts none /media/ubuntu/usb/dev/pts_x000D__x000D_mkdir -p /media/ubuntu/usb/boot/efi_x000D_mount /dev/sdb1 /media/ubuntu/usb/boot/efi

6. Сделайте chroot

_x000D_chroot /media/ubuntu/usb

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

_x000D_grub-install /dev/sdb3_x000D_update-initramfs -u_x000D_update-grub

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

_x000D_exit

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

_x000D_umount /media/ubuntu/usb/proc_x000D_umount /media/ubuntu/usb/sys_x000D_umount /media/ubuntu/usb/dev/pts_x000D_umount /media/ubuntu/usb/dev_x000D_umount /media/ubuntu/usb/boot/efi_x000D_umount /media/ubuntu/usb_x000D_

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

_x000D_cfdisk /dev/sdb

Для:

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

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

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

Установите qemu

_x000D_aptitude update_x000D_aptitude install qemu-kvm -y

Сделайте

_x000D_lsusb

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

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

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

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

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

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