Дата и время публикации :
Проблема и решение
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