Дата и время публикации :
Проблема и решение
1. Cуть проблема
Как говорится — "Не все то золото, что блестит?!" Поэтому с недавнего времени, будучи пользователем тестовой/нестабильной версии Debian, стал предпочитать устанавливать собственноручно этот популярный дистрибутив.
Преимущество такого способа заключается в пошаговой настройке с достаточно высокой оптимизацией системы, особенно, если речь идет на недавно вышедшем в Свет "железе", зачастую не распознаваемого D-I, например, управление подсветкой клавиатуры ASUS или установка необкатанного толком ещё адаптера WiFi. Последний на момент первой публикации данной статьи вместе с пакетом firmware-nonfree не накатывался.
Недостатки состоят в том, что требуется изготавливать загрузочную флешку, производить разметку, форматирование носителей, настраивать языковую локаль, поднимать менеджер графических окон Wayland и т.д., что с одной стороны кажется излишнем, но с другой стороны дает шанс узнать физику процесса, чтобы понимать где копать в случае сбоев и ошибок в установленном программном обеспечении.
2. Решение
2.1. Монтируем накопитель на который будем устанавливать Debian, как показано в дампе 2.1
Дамп 2.1
$ sudo mount /dev/nvme0n1p3 /mnt
2.2. Устанавливаем минимальный набор пакетов с расширением их набора через опцию "--include", как показано в дампе 2.2
Дамп 2.1
$ sudo debootstrap \ --arch=amd64 \ --variant=minbase \ --include=linux-base,locales,nano,dosfstools,network-manager,net-tools,wireless-tools,wpagui,usbutils,pciutils,iw,iproute2,iputils-ping,gdisk \ bullseye \ /mnt
2.3. Копируем необходимые файлы настроек, как показано в дампе 2.3
Дамп 2.3
install -m 0644 -o root -g root /etc/resolv.conf /mnt/etc/ && \ install -m 0644 -o root -g root /etc/locale.gen /mnt/etc/ && \ install -m 0644 -o root -g root /etc/locale.alias /mnt/etc/ && \ install -m 0644 -o root -g root /etc/default/locale /mnt/etc/default
2.4. Для облегчения монтирования/размонтирования точек монтирования /sys, /dev, /proc создаем скрипт /mnt/usr/sbin/bindmount.sh, как показано в листинге 2.4
Дамп 2.4
#!/bin/dash CHROOTDIR="/mnt" do_bind() { mount --bind --make-rslave /sys $CHROOTDIR/sys [ $? -ne 0 ] && return 1; [ -d $CHROOTDIR ] || { mkdir -p $CHROOTDIR/dev; [ $? -ne 0 ] && return 1;} mount --bind --make-rslave /dev $CHROOTDIR/dev [ $? -ne 0 ] && return 1; mount --bind --make-rslave /dev/pts $CHROOTDIR/dev/pts [ $? -ne 0 ] && return 1; mount --bind --make-rslave /proc $CHROOTDIR/proc return 0; } do_dismount() { umount $CHROOTDIR/sys umount $CHROOTDIR/dev/pts umount $CHROOTDIR/dev umount $CHROOTDIR/proc return 0; } bindmountsh() { case "$1" in bind) echo -n "Binding host mounts to build rootfs "; do_bind if [ $? -ne 0 ]; then echo "failure." exit 1 fi echo "done." ;; dismount) echo -n "Dismounting host mounts from build rootfs "; do_dismount; if [ $? -ne 0 ]; then echo "failure." exit 1 fi echo "done." ;; show) echo "Mounts points of build rootfs are " mount | grep $CHROOTDIR if [ $? -ne 0 ]; then echo "not found." fi ;; *) echo "Usage: mount.sh {bind|dismount|show}" esac } bindmountsh "$@" #eof
2.5. Открываем новую сессию с правами суперпользователя и корневой директории /mnt, как показано в дампе 2.5
Дамп 2.5
$ sudo chroot /mnt /bin/bash
2.6.Настраиваем шрифты языковой локали, консоли и клавиатуры, как показано в дампе 2.6
Дамп 2.6
$ sudo apt install --reinstall locales && apt --reinstall install dialog console-setup keyboard-configuration
Производим настройку источников репозитариев APT , в т.ч. и для нестабильного SID, который нам понадобится в будущем. Открываем в текстовом редакторе файл /etc/apt/sources.list и приводим в соответсвие, как показано в дамп 2.7
Дамп 2.7
root@home:/# nano /etc/apt/sources.list ... deb [arch=i386,amd64] http://deb.debian.org/debian/ bullseye main contrib non-free deb [arch=i386,amd64] http://deb.debian.org/debian/ sid main contrib non-free ...
root@home:/# apt -t unstable install linux-image-*-amd64
2.8.Обновляем локальные списки пакетов APT, как показано дамп 2.8
Дамп 2.8
root@home:/# apt update
и по желанию, как показано в дампе 2.9
Дамп 2.9
root@home:/# apt list --upgradable
устанавливаем обновления, как показано в 2.10
Дамп 2.10
root@home:/# apt upgrade
2.9. Доустанавливаем недостающие пакеты, как показано в дампе 2.11
Дамп 2.11
root@home:/# apt install \ linux-image-amd64 \ systemd-sysv \ firmware-realtek \ firmware-linux \ firmware-linux-free \ firmware-linux-nonfree \ firmware-amd-graphics \ grub-pc \ grub-efi-amd64-bin
2.10. Настраиваем точки монтирования /home и swap в файле /etc/fstab согласно следующей структуре распределения разделов в системе, как показано в дампе 2.12
Дамп 2.12
Device Start End Sectors Size Type /dev/nvme0n1: /dev/nvme0n1p1 2048 1048576 1046529 511M EFI System /dev/nvme0n1p2 67108864 134217727 67108864 32G Linux swap /dev/nvme0n1p3 134217728 500118158 365900431 174,5G Linux filesystem /dev/sda: /dev/sda1 2048 1050623 1048576 512M EFI System /dev/sda2 1050624 1953525134 1952474511 931G Linux filesystem
Где точки монтирования(директории) распределены следующим образом, как показано в схеме 2.13
Дамп 2.13
/dev/nvme0n1 │ ├──/dev/nvme0n1p1/──/boot/efi/--\ │ | ├──/dev/nvme0n1p2/swap | │ | ├──/dev/nvme0n1p3/──rootfs/<----/ /dev/sda │ ├──/dev/sda2──home/
С помощью утилиты blkid получаем записи точки монтирования в файле /etc/fstab, как показано в дампе 2.14
Дамп 2.14
# blkid /dev/nvme0n1p2 /dev/nvme0n1p2: UUID="335bf017-cc6a-42a4-b670-2340f9c87b2b" TYPE="swap" PARTLABEL="Linux swap" PARTUUID="f257c2de-4737-4720-86ba-87712108904c" # blkid /dev/nvme0n1p3 /dev/nvme0n1p3: UUID="58726747-0009-4e5e-a09d-76a799171ca0" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="4b4705a5-2b58-4adb-9f05-036d9c95dcf5" # blkid /dev/nvme0n1p1 /dev/nvme0n1p1: UUID="63D7-C62C" TYPE="vfat" PARTLABEL="EFI System" PARTUUID="be28a5b2-09fb-4bb3-92e5-d5c78f7a2598" # blkid /dev/sda2 /dev/sda2: PARTLABEL="Linux filesystem" PARTUUID="9a763ee2-c48a-48ba-8e20-068c3858f7d8"
Присваиваем их значения UUID точкам монтирования в файле /etc/fstab, как показано в дампе 2.15
Дамп 2.15
. . . # swap on /dev/nvme0n1p2 UUID=335bf017-cc6a-42a4-b670-2340f9c87b2b none swap sw 0 0 # rootfs on /dev/nvme0n1p3 UUID=58726747-0009-4e5e-a09d-76a799171ca0 / ext4 errors=remount-ro 1 1 # /home on /dev/sda1 UUID=9a763ee2-c48a-48ba-8e20-068c3858f7d8 /home ext4 defaults 1 2 # System ESP on /dev/nvme0n1p1 UUID=63D7-C62C /boot/efi vfat defaults 0 0 . . .
После назначения точек монтирования рекомендую проверить их в жизнеспособности, как показано в дампе 2.16
Дамп 2.16
# mount -a root@alivecd-deb:/# df Файловая система 1K-блоков Использовано Доступно Использовано% Cмонтировано в /dev/nvme0n1p3 179030080 2034304 167831884 2% / udev 7125520 0 7125520 0% /dev /dev/sda2 959864564 77852 910958468 1% /home /dev/nvme0n1p1 522224 4 522220 1% /boot/efi
2.11. Редактируем файл /etc/default/grub, как показано в дампе 2.17 .
Дамп 2.16
... GRUB_CMDLINE_LINUX_DEFAULT="quiet idle=nomwait processor.max_cstate=5" ... GRUB_GFXMODE=1920x1080x32 GRUB_GFXPAYLOAD_LINUX=1024x768 ...
Запускаем update-grub, который на выходе дает файл /boot/grub/grub.cfg, как показано в дампе 2.18
Дамп 2.18
# update-grub Generating grub configuration file ... Found linux image: /boot/vmlinuz-5.2.0-3-amd64 Found initrd image: /boot/initrd.img-5.2.0-3-amd64 done
После чего остается создать загрузучную запись в /dev/nvme0n1, как показано в дампе 2.19
Дамп 2.19
# grub-install --recheck /dev/nvme0n1
2.12. Затем перезагружаем систему и доустанавливаем недостающие пакеты программное обеспечение:
- Например, как в моем случае, драйвер подсветки клавиатуры ASUS и необкатанный толком ещё адаптер WiFi;
- функция прямого доступа VM к графического процессору (англ. GPU passthrough) или проброс GPU;
- Установку менеджера графических окон Wayland и его окружение Gnome.
До устанавливаем пакеты программного обеспечения необходимые для использования среды разработки (собственного) дистрибутива Yocto Poky на базе ядра ОС GNU/Linux и его окружения, как показано в дампе 2.20
Дамп 2.20
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat libsdl1.2-dev xterm build-dep qemu
3. Библиография
3.1 Unix & Linux. In Debian, which package is responsible for creation of /etc/default/grub?
3.2 Grub Manual. 6.1 Simple configuration handling
3.3 TechPatterns.com . Setting grub 2 and console gfx mode