Установка Ubuntu 22.04 на флешку как полноценную ОС
Как установить линукс на флешку. Создание загрузочной флешки Ubuntu.
Видеоинструкция
Предварительные настройки
1) Выполните инструкции по установке libvirt
2) Скачайте iso образ с сайта https://cdimage.ubuntu.com/lubuntu/releases/22.04/release/
Создайте диск
cd ~
mkdir Images
cd Images
Создайте диск
dd if=/dev/zero of=disk.img bs=1M count=12288 conv=fsync status=progress
Если в процессе установки выяснилось, что вам нехватает места на диске, то выполните инструкцию по увеличению размера img файла
Создайте виртуальную машину QEMU
Выберите метод установки Локальный ISO или CDROM
Выберите скачанный ISO образ
Установите количество ОЗУ минимум 2Гб и процессоры 2шт
Выберите диск созданный Image файл
Проверьте конфигураию перед запуском VM
Установка ОС
После загрузки, установите ОС через графический установщик и перезагрузитесь
Установка Google Chrome
Добавьте ключ
apt-key adv --keyserver keyserver.ubuntu.com --recv 4EB27DB2A3B88B8B
apt-key export 4EB27DB2A3B88B8B | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/google-chrome.gpg
Добавьте репозиторий Google Chrome
cat > /etc/apt/sources.list.d/google-chrome.list << EOF
deb [arch=amd64] https://dl.google.com/linux/chrome/deb/ stable main
EOF
Установите браузер
apt-get update
apt-get install -y google-chrome-stable
Установка Flatpak
Удалите программы установленные через snap
snap remove firefox
snap remove gtk-common-themes
snap remove gnome-3-38-2004
Удалите snap
apt-get purge snapd firefox
Установите flatpak
apt-get install flatpak
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
Установка Firefox
flatpak install flathub org.mozilla.firefox
Установка драйвера Nvidia
Установите nvidia detect
apt install -y ubuntu-drivers-common
Запустите тест и узнайте какой у вас драйвер
nvidia-detector
Установите последние драйвера nvidia
apt install -y nvidia-driver-525 linux-modules-nvidia-525-generic
Зайдите в /etc/modprobe.d/ проверьте есть ли там файл с содержимым "options nvidia-drm modeset=1". Если нет, то создайте его
echo 'options nvidia-drm modeset=1' > /etc/modprobe.d/nvidia-drm-nomodeset.conf
Обновите initramfs
update-initramfs -u
Перезагрузитесь и проверьте загружен ли модуль nvidia
lsmod |grep nvidia
Настройка приветствия
Установите локаль:
cat > /etc/profile.d/0.locale.sh << EOF
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
export LANG
export LANGUAGE
EOF
cat > /etc/profile.d/0.editor.sh << EOF
export EDITOR=nano
EOF
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
echo "ru_RU.UTF-8 UTF-8" >> /etc/locale.gen
Откройте файл
nano /etc/profile.d/0.welcome.sh
Вставьте текст
if [[ `whoami` = "root" ]]; then
HILIT="\e[0;91m"
else
HILIT="\e[0;94m"
fi
HOSTNAME=`hostname`
PS1="\[${HILIT}\][\u@${HOSTNAME} \W]\\$ \[\e[0m\]"
export PS1
Отключите автоматическую вставку скобок в консоли
Добавьте в файл /etc/inputrc строчку
set enable-bracketed-paste off
Установка ПО
Подключите зеркало
export DEBIAN_MIRROR="http://en.archive.ubuntu.com"
export DEBIAN_VERSION="jammy"
cat > /etc/apt/sources.list << EOF
deb $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION main universe restricted multiverse
deb-src $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION main universe restricted multiverse
deb $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION-updates main universe restricted multiverse
deb-src $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION-updates main universe restricted multiverse
deb $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION-security main universe restricted multiverse
deb-src $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION-security main universe restricted multiverse
deb $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION-backports main universe restricted multiverse
deb-src $DEBIAN_MIRROR/ubuntu/ $DEBIAN_VERSION-backports main universe restricted multiverse
EOF
Обновите ПО
apt-get update
aptitude upgrade -y
Установите LXQT
apt-get install -y bash-completion bsdmainutils psmisc uuid-runtime \
htop mc nano curl pv dnsutils sudo man-db anacron iotop preload \
git cmake g++ openssh-client wget unrar unar zip unzip p7zip-full \
rar inxi attr libnotify-bin traceroute bridge-utils mtools xfsprogs \
network-manager rsync dnsmasq python3-pynput network-manager-gnome \
iptables-persistent net-tools dnsutils linux-base dbus grub-efi \
grub-efi-amd64-bin grub-efi-ia32-bin grub-pc-bin openntpd python3-pip \
libnss-nis libnss-nisplus whois flatpak picom xorg xterm xxkb xkbind \
gxkb openbox sddm sddm-theme-maldives gnome-disk-utility smbclient \
compton breeze breeze-gtk-theme kde-cli-tools kde-spectacle obconf-qt \
scrot software-properties-gtk kcalc konsole dolphin dconf-editor \
gnome-screensaver fonts-noto-core fonts-dejavu fonts-freefont-ttf \
xdg-desktop-portal xdg-desktop-portal-gtk xdg-desktop-portal-kde \
font-manager kitty kcolorchooser vlc ark
Удалите лишние программы
apt-get purge apparmor ifupdown resolvconf connman cmst \
geoclue-2.0 modemmanager xfwm4 xfwm4-theme-breeze obconf \
xscreensaver gnome-keyring gnome-power-manager gnome-session-bin \
smplayer nm-tray
apt autoremove
Очистите кэш
apt-get clean all
Установите конфиги
Конфиг Kitty
mkdir ~/.config/kitty
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.config/kitty/kitty.conf > ~/.config/kitty/kitty.conf
Openbox
mkdir ~/.config/openbox
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.config/openbox/rc.xml > ~/.config/openbox/rc.xml
Featherpad
mkdir ~/.config/featherpad
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.config/featherpad/fp.conf > ~/.config/featherpad/fp.conf
Picom
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.config/picom.conf > ~/.config/picom.conf
Bash конфиг
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.bashrc > ~/.bashrc
sudo curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.bashrc > /root/.bashrc
Настройки панели
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.config/lxqt/panel.conf > ~/.config/lxqt/panel.conf
Настройки для скриншота
curl -L https://github.com/bayrell-os/lxqt_home/raw/main/src/.config/spectaclerc > ~/.config/spectaclerc
Установите скрипты
sudo mkdir /opt/desktop_scripts
sudo curl -L https://github.com/bayrell-os/desktop_scripts/raw/main/screenshot.sh > /opt/desktop_scripts/screenshot.sh
sudo curl -L https://github.com/bayrell-os/desktop_scripts/raw/main/brightness.sh > /opt/desktop_scripts/brightness.sh
Добавьте brightness.sh в sudo. Создайте файл
nano /etc/sudoers.d/brightness
С содержимым:
user ALL = NOPASSWD: /opt/desktop_scripts/brightness.sh
Настройка клавиатуры
Сконфигурируйте раскладку клавиатуры на переключение через Alt+Shift
nano /etc/default/keyboard
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us,ru"
XKBVARIANT=""
XKBOPTIONS="grp:alt_shift_toggle,grp_led:scroll"
BACKSPACE="guess"
Настройка NetworkManager
Измените настройки /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile
dns=none
[ifupdown]
managed=false
[device]
wifi.scan-rand-mac-address=no
[keyfile]
unmanaged-devices=*,except:type:ethernet,except:type:wifi,except:type:gsm,except:type:cdma,interface-name:lxc*,interface-name:docker*,interface-name:virtual*,interface-name:veth*
Отключите сервисы systemd и avahi
systemctl disable systemd-networkd.socket
systemctl disable systemd-networkd.service
systemctl disable systemd-resolved.service
systemctl disable avahi-daemon.service
systemctl disable avahi-daemon.socket
Поменяйте файл /etc/resolv.conf
rm -f /etc/resolv.conf
echo "nameserver 127.0.0.1" > /etc/resolv.conf
Создайте файл /etc/dnsmasq.conf
port=53
#listen-address=0.0.0.0
no-dhcp-interface=
bind-interfaces
expand-hosts
local-ttl=1
no-negcache
# Динамические настройки DNS
resolv-file=/run/NetworkManager/resolv.conf
# Настройки DNS по умолчанию
#resolv-file=/etc/resolv.dnsmasq
conf-dir=/etc/dnsmasq.d
cache-size=150
max-cache-ttl=600
min-cache-ttl=60
# Одновременный запрос ко всем DNS серверам
# all-servers
# Запрещаем резолвить домены без точки (нужно для Docker Swarm)
domain-needed
# Для отладки
#log-queries
Раскоментируйте строку в файле /etc/default/dnsmasq
IGNORE_RESOLVCONF=yes
Выключите резолвер из внешней сети интернет. Создайте файл /etc/dnsmasq.d/disable-external-network
bind-interfaces
except-interface=eth*
except-interface=enp*
except-interface=wlan*
except-interface=wlp*
Создайте файл /etc/NetworkManager/dispatcher.d/99-dnsmasq
#!/bin/bash
if [[ "$2" = "up" || "$2" = "down" ]]; then
kill -9 `cat /var/run/dnsmasq/dnsmasq.pid`
sleep 2
systemctl start dnsmasq
fi
Настройка времени
Синхронизация времени
cp /etc/openntpd/ntpd.conf /etc/openntpd/ntpd.orig.conf
echo "servers pool.ntp.org" > /etc/openntpd/ntpd.conf
Установите BFQ
BFQ это диспетчер I/O. Это улучшенная версия, которая позволяет ускорить работу с системой. Подробнее про BFQ
Откройте файл
nano /etc/default/grub
В параметр GRUB_CMDLINE_LINUX_DEFAULT нужно добавить строчку scsi_mod.use_blk_mq=1 а также убрать слово quiet
Пример:
GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=none scsi_mod.use_blk_mq=1"
acpi_backlight - это яркость экрана. Возможные значения:
- video
- vendor
- none
Если яркость экрана не будет меняться, то попробуйте изменить эти параметры, или убрать acpi_backlight=none
Добавить BFQ
echo 'bfq' >> /etc/initramfs-tools/modules
echo 'ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"' >> /etc/udev/rules.d/60-scheduler.rules
Настройка GRUB
Откройте файл с настройками grub
nano /etc/default/grub
Следует установить строки
GRUB_DEFAULT=0
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=5
GRUB_DISABLE_OS_PROBER=true
GRUB_DISTRIBUTOR="Live USB Debian"
#GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="acpi_backlight=none scsi_mod.use_blk_mq=1"
GRUB_CMDLINE_LINUX=""
Обновите grub
update-grub
Настройка iptables
Iptables нужно ставить всегда обязательно. Это фаерволл, который защищает систему он внешних атак. Откройте редактор файла /etc/iptables/rules.v4
nano /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
# Разрешаем входящие соединения ssh
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
# Разрешить http
#-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# Перейти к цепочке ALLOW-INPUT
-A INPUT -j ALLOW-INPUT
# Запрещаем остальные входящие соединения
-A INPUT -j REJECT
-A FORWARD -j REJECT
-A ALLOW-INPUT -j RETURN
COMMIT
Скопируйте rules.v4 в rules.v6
cp /etc/iptables/rules.v4 /etc/iptables/rules.v6
Настройка udisks2
udisks2 отвечает за подключение флешек и разных устройств. Рекомендуется добавить параметр sync для более корректной работы с USB устройствами
Откройте файл
nano /etc/udisks2/mount_options.conf
Вставьте содержимое
[defaults]
vfat_defaults=uid=$UID,gid=$GID,shortname=mixed,utf8=1,showexec,flush,sync
ntfs_defaults=uid=$UID,gid=$GID,windows_names,sync,relatime
ntfs:ntfs3_defaults=uid=$UID,gid=$GID,windows_names,sync,relatime
Установка libssl 1.1
cd /src
wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
Проверьте md5 сумму. Она должна быть равна 1cd1b6ba2a30a42580c01e92a6278281
$ md5sum -b *
1cd1b6ba2a30a42580c01e92a6278281 *libssl1.1_1.1.1f-1ubuntu2_amd64.deb
Установите libssl
dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
Установка gnome screensaver
Выполните команду
cat > /etc/xdg/autostart/lxqt-gnome-screensaver.desktop << EOF
[Desktop Entry]
Comment=Screensaver
Exec=gnome-screensaver
GenericName=GNOME Screensaver
Name=GNOME Screensaver
OnlyShowIn=LXQt;
TryExec=gnome-screensaver
Type=Application
EOF
Установка picom
Выполните команду
cat > /etc/xdg/autostart/lxqt-picom.desktop << EOF
[Desktop Entry]
Comment=A X compositor
Exec=picom --backend glx --vsync
GenericName=X compositor
Name=Picom (X Compositor)
OnlyShowIn=LXQt;
TryExec=compton
Type=Application
EOF
Настройка монитора
Выполните команду
cat > /etc/xdg/autostart/lxqt-monitor.desktop << EOF
[Desktop Entry]
Comment=Monitor Settings
Exec=sh -c 'sleep 60 && xset dpms 200 200 200 && xset -dpms && xset s off && xset dpms 600 600 600'
GenericName=Monitor Always ON
Name=Monitor Always ON
OnlyShowIn=LXQt;
Type=Application
EOF
В Exec должна быть одна кавычка, а не две
Настройка pulseaudio
Если у вас установлен pipewire то делать это не нужно
Создайте файл
nano /etc/pulse/default.pa.d/pulse-socket.pa
Пропишите строчку
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket
Отключение автообновлений
Откройте файл /etc/apt/apt.conf.d/20auto-upgrades и установите значение "0" для Unattended-Upgrade
APT::Periodic::Unattended-Upgrade "0";
Отключите автозапуск
systemctl stop unattended-upgrades
systemctl disable unattended-upgrades
Прочие настройки
Установите лимиты на размер journalctl и время ожидания запуска сервисов
echo "SystemMaxUse=128M" >> /etc/systemd/journald.conf
echo "DefaultTimeoutStartSec=60" >> /etc/systemd/system.conf
echo "DefaultTimeoutStopSec=30" >> /etc/systemd/system.conf
Настройка Flatpak
Чтобы курсор во Flatpak приложениях был одинаковым, выполните команды от пользователя:
flatpak override --user --filesystem=$HOME/.icons/:ro
flatpak override --user --filesystem=/usr/share/icons/:ro
flatpak override --user --filesystem=xdg-config/gtk-3.0:ro
flatpak override --user --env GTK_USE_PORTAL=1
Скопируйте kde портал
cp /usr/share/xdg-desktop-portal/portals/kde.portal /usr/share/xdg-desktop-portal/portals/lxqt.portal
Поменяйте в файле /usr/share/xdg-desktop-portal/portals/lxqt.portal последнюю строку
UseIn=LXQt
Создайте файл
nano /etc/xdg/autostart/lxqt-portals.desktop
с содержимым
[Desktop Entry]
Comment=XDG Portals
Exec=/usr/libexec/xdg-desktop-portal --replace
GenericName=XDG Portals
Name=XDG Portals
OnlyShowIn=LXQt;
Type=Application
Перезагрузите виртуальную машину и проверьте работу
Перенос образа img на флешку используя команду dd
После установки Fedora, выключите Qemu.
Подключите флешку. Узнайте на каком устройстве она смонтирована
fdisk -l
Предполагается что флешка смонтирована на устройство /dev/sdb. У вас может быть другое устройство.
Disk /dev/sdb: 29,7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 783A4E57-3B40-4317-8A8C-BD074FCB0F0E
Скопируйте img образ на флешку.
Обратите внимание на какое устройство вы копируете!
Вместо /dev/sdb у вас может быть другое устройство!
dd bs=1M if=ubuntu.img of=/dev/sdb conv=noerror,fsync status=progress
Выполните синхронизацию
sync -f && fstrim -av
Проверьте изменения
fdisk -l /dev/sdb
Должно вывести примерно следующее
GPT PMBR size mismatch (16777215 != 62333951) will be corrected by w(rite).
Disk /dev/sdb: 29,7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EDFCC007-0E71-47D3-B6D7-031EF67843E9
Device Start End Sectors Size Type
/dev/sdb1 2048 206847 204800 100M EFI System
/dev/sdb2 206848 16777182 16570335 7,9G Linux root (x86-64)
Исправление ошибки GPT PMBR size mismatch
Если у вас при вызове команды fdisk -l Выдает ошибку
GPT PMBR size mismatch (16777215 != 62333951) will be corrected by w(rite).
То нужно исправить флешку через gdisk
gdisk /dev/sdb
Выполните последовательно команды x, e, v, w
x - extra functionality (experts only)
e - relocate backup data structures to the end of the disk
v - verify disk
w - write table to disk and exit
Примерно должно получиться следующее:
$ gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): x
Expert command (? for help): e
Relocating backup data structures to the end of the disk
Expert command (? for help): v
No problems found. 45558750 free sectors (21.7 GiB) available in 2
segments, the largest of which is 45556736 (21.7 GiB) in size.
Expert command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
После выполнения этих команд таблица должна быт исправлена. Проверьте ее командой
fdisk -l /dev/sdb
ошибка исчезла:
Disk /dev/sdb: 29,7 GiB, 31914983424 bytes, 62333952 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: EDFCC007-0E71-47D3-B6D7-031EF67843E9
Device Start End Sectors Size Type
/dev/sdb1 2048 206847 204800 100M EFI System
/dev/sdb2 206848 16777182 16570335 7,9G Linux root (x86-64)
Так как img образ был значительно меньше размера флешки, то нужно увелить размер
cfdisk /dev/sdb
Выбирите пункт resize и установите новый размер. Запишите изменения на диск через пункт [Write]
Проверьте целостность файловой системы и увеличьте ее размер
e2fsck -y -f /dev/sdb2
resize2fs /dev/sdb2
Также можно проверить целостность boot раздела
fsck -fvy /dev/sdb1
fsck -fvy /dev/sdb2
Установка загрузчика GRUB
Оказывается Lubuntu установилась без загрузчика EFI. Нужно его установить.
Смонтируйте флешку
mount /dev/sdb2 /mnt
mkdir -p /mnt/boot/efi
mkdir -p /mnt/{proc,sys,dev,tmp}
mkdir -p /mnt/dev/pts
mount /dev/sdb1 /mnt/boot/efi
mount -t proc proc /mnt/proc
mount -t sysfs sys /mnt/sys
mount -o bind /dev /mnt/dev
mount -t devpts none /mnt/dev/pts
Сделайте chroot
chroot /mnt
Установите загрузчик
Обратите внимание, на какой диск устанавливаете загрузчик. Обычно это /dev/sdb, но может быть другой диск
grub-install --target=x86_64-efi --bootloader-id=liveusb \
--boot-directory=/boot --removable --recheck \
--no-floppy /dev/sdb
update-initramfs -u
update-grub
Выйдите из chroot
exit
Отмонтируйте папки
umount /mnt/proc
umount /mnt/sys
umount /mnt/dev/pts
umount /mnt/dev
Отмонтируйте boot папку
umount /mnt/boot/efi
Отмонтируйте флешку
umount /mnt
Загрузочная флешка готова!
Проверка флешки через QEMU
Запустите qemu
qemu-system-x86_64 -m 2G -cpu host -enable-kvm \
-bios /usr/share/ovmf/OVMF.fd \
-netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
-drive format=raw,media=disk,file=/dev/sdb
Проверка img файла через QEMU
Запустите qemu с параметрами
qemu-system-x86_64 -m 2G -cpu host -enable-kvm \
-bios /usr/share/ovmf/OVMF.fd \
-netdev user,id=net0 -device virtio-net-pci,netdev=net0 \
-drive format=raw,file=/media/debian/usb.img
Проверка img файла через VirtualBox
IMG Файл можно конвертировать в файл Virtualbox и обратно.
Конвертация в диск для VirtualBox
VBoxManage convertfromraw --format VDI usb.img usb.vdi
Поменяйте владельца файла
chown user:user usb.vdi
Создайте виртуальную машину и подключите этот vdi диск и запустите виртуальную машину
Чтобы сконвертировать обратно диск VirtualBox в img выполните команду
VBoxManage internalcommands converttoraw usb.vdi usb.img