× К оглавлению На главную Об авторе

   Дата и время публикации   :

Проблема и решение


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
... 
        
Примечание. 1. После указания ключевого типа deb, в квадратных скобках через запятую перечисляются поддерживаемые архитектуры amd64 и i386, последняя необходима для установки 32-х разрядных пакетов (i386), которые ещё указаны в зависимостях для 64-х разрядной архитектуры amd64. 2. В дальнейшем пакеты для нестабильного sid будут устанавливаться с использованием следующей команды, как показано ниже.
        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
Примечание. При установки пакета grub-pc, красивую картинку с установкой MBR в первый сектор носителя пропускаем...

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
Примечания. 1. Перед этим не забудьте создать директорию /boot/efi для точки монтирования /dev/nvme0n1p1 2.После каждого изменения файловой системой, будь то разметка разделов и/или их форматирование, необходимо проверять значения UUID с использованием утилиты blkid(8).

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. Затем перезагружаем систему и доустанавливаем недостающие пакеты программное обеспечение:

До устанавливаем пакеты программного обеспечения необходимые для использования среды разработки (собственного) дистрибутива 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

3.4 How to sysadmin use gpt in debian

3.5 WiKi.ArchLinux. GRUB

3.6 WiKi.Debian . GrubEFIReinstall