LINUX.ORG.RU

3
Всего сообщений: 51

Как лучше сжимать initramfs. Серия тестов.

Пока идут обсуждения о включении zstd в ядро, можно потестить размер получаемых образов и сделать некоторые выводы. Просто оставлю это здесь, возможно кому-то окажется полезным, когда встанет вопрос о создании загрузочного дистрибутива.

В качестве «эталона» возьмём Gentoo. Скачиваем stage3 amd64, распаковываем, размер дистрибутива:

# du -sh gentoo/
1.1G	gentoo/
# du -s gentoo/
1104960	gentoo/

plain = 1.1G

Простейший initramfs, используя саму директорию Gentoo для создания образа.

Для работоспособности нужно только сделать симлинк ln -s sbin/init init.

Это просто cpio без всякого сжатия.

# mkinitramfs gentoo/ > initrd 
1938832 blocks
# du -sh initrd
947M	initrd
# du -s initrd
969420	initrd

cpio = 947M

В том же режиме «standalone» директории упакуем в gzip.

# mkinitramfs gentoo/ | gzip -c -9 -v > initrd.gz
1938832 blocks
 67.1%
# du -sh initrd.gz 
312M	initrd.gz
# du -s initrd.gz 
318628	initrd.gz

gzip = 312M

xz, самый распространённый из самых «сильных» форматов сжатия на данный момент.

# mkinitramfs gentoo/ | xz -c -C "crc32" -T 0 -9 -e -v > initrd.xz
1938832 blocks
  100 %       167.3 MiB / 946.7 MiB = 0.177   8.6 MiB/s       1:49             
# du -hs initrd.xz
168M	initrd.xz
# du -s initrd.xz
171308	initrd.xz

xz = 168M

Теперь взглянем на современный, инновационный, сногшибательный, духозахватывающий, неповторимый zstd!

# mkinitramfs gentoo/ | zstd -T0 --ultra -100500 -v - > initrd.zst
Note: 8 physical core(s) detected
Warning : compression level higher than max, reduced to 22 
(L22) Buffered : 932 MB - Consumed :   2 MB - Compressed :   0 MB => 33.15%   
# du -sh initrd.zst 
173M	initrd.zst
# du -s initrd.zst 
176432	initrd.zst

zstd = 173M

А разговоров то было.... Ну, справедливости ради стоит отметить, сильная его сторона вовсе не в возможностях сжатия, а в скорости распаковки. Условную планку «xz» по уровню сжатия пока ещё не преодолели.

Теперь давайте взглянем на альтернативный метод предоставления системы из initramfs, как «слой» с использованием SquashFS с сохранием данных в tmpfs.

# mkinitramfs `mktemp -d` --overlay gentoo --squashfs-xz --output $PWD/initrd.squashfs.xz
Parallel mksquashfs: Using 16 processors
Creating 4.0 filesystem on /tmp/tmp.scQzUt6MLO/overlays/10-gentoo, block size 1048576.
[============================================================] 53192/53192 100%
# du -sh initrd.squashfs.xz 
217M	initrd.squashfs.xz
# du -s initrd.squashfs.xz 
221292	initrd.squashfs.xz

squashfs.xz = 217M

Вот это да, initramfs с системой упакованной в squashfs + xz получился немногим больше чем просто initramfs + xz.

Какие из этого можно сделать выводы?

  • Если вы ограничены в объёме RAM, но хотите работать в tmpfs, тогда используйте squashfs + xz или squashfs + zstd.

# mkinitramfs `mktemp -d` --overlay chroot --output $PWD/initrd --squashfs-xz

  • Если выделить пару-тройку GB под систему не проблема, тогда используйте overlay без squashfs, и будет вам уютный tmpfs без глюков самого overlayfs.

# mkinitramfs `mktemp -d` --overlay chroot --output $PWD/initrd

Специальный приглашённый гость: mkinitramfs из пакета ( https://github.com/sp00f1ng/boobstrap ).

А всё это, как водится, реклама. А на сегодня всё. До новых встреч. :-) :-|

 , ,

Spoofing ()

К вопросу об initrd/initramfs

Пишу это сообщение, теряя остатки разума.. Вначале был консольный buster-дебиан со стандартным ядром 4.19.0-8 и при установке initrd был выбран под текущую систему (его размер 7.3M). Скачено было только то, что нужно для сборки ядра и питон для работы diffconfig. Затем было собрано ядро 5.4.25 с кастомным конфигом (НЮАНС: алгоритмы сжатия ядра и инитрама - lzma). Далее установил его совместно с initrd без лишних фантазий через

make install
(разумеется с предварительным modules_install). На текущем этапе initrd.img-5.4.25 весил около 12M. Но по дефолту было сжато gzip'ом. Поэтому было перепаковано lzma -> объём 9M. Данное ядро было протестировано-все было ажурно.

Затем хаос и магия поглотили маленький цифровой мирок

  • 1. Установил gdm3 и gnome-terminal
  • 2. Перезапустил и словил ошибку, что initramfs ВНЕЗАПНО не lzma! «Подозрительно», - подумал я, поскреб бороду и перезапустил систему.
  • 3. Загрузился под «дефолтным» ядром, посмотрел на initrd... что-то сломалось внутри меня-размер вырос до 60M!!! Ожидаемо файл был в формате gzip (все указывает на то, что отработал update-initramfs/mkinitramfs).
  • 4. Уже, практически машинально, перепаковал его в lzma -9 (объём уменьшился до 56M)
  • 5. Загрузился под 5ым ядром-все работает, только с какого так раскукожило initrd??

Руководствуясь статьёй https://www.ylsoftware.com/news/469 заменил MODULES=most на MODULES=list.

( Отступление )

Также туда было добавлено COMPRESS=lzma

( чтобы не делать этого вручную )

В том числе, был подправлен mkinitramfs (установлена степень сжатия -9) Короче объём закономерно снизился на копейки (до 53M) Что я там только не вырезал из modules-размер менялся по мелочи.

Описал все действия для протокола (даже те, которые, уверен, абсолютно незначительны). Просто gdm сильный и независимый - захотел и что-то своё впендюрил в initrd. Природная брезгливость останавливает меня от ковыряния в этой наваленной куче, но... но что произошло? и как вернуть все взад назад? и есть ли в принципе рабочее руководство по уменьшению initrd (которое, возможно, пропустил)?

 ,

Half-Lambda ()

Запуск Linux на ext4 с одного файла \vhd.img на ntfs разделе.

Долго рылся в Интернете - но везде или Linux в VM, или Linux в *.vhd - инструмент Windows и нет причины его тащить в Linux - хотя тут это обсуждают- но все ссылки как делать - битые.

И Grub2 не понимает *.vhd c Windows - хотя в Windows - *.vhd очень эффективны

Linux с многослойными sfs http://puppyrus.org тоже не плохи - но все же - ext4 побыстрее, надежнее и доступнее.

Идея - где не пахнет Linux и проблема резать диск - например у пенсионера трясущего за свой старый комп - на котором без SSE2 в Windows уже отрезали Skype, youtube, заход в банк. Там запуск Linux Live c iso или с раздела ntfs - хоть многослойные хоть с \filesystem.squashfs и создаем \vhd.img на ntfs разделе

sudo dd if=/dev/zero of=/mnt/sdb3/vhd.img bs=1M count=5000
и в нем Linux на ext4.

Проблема - как запускать Linux с такого \vhd.img

Grub2 монтирует с ntfs раздела образ \vhd.img и с него в памяти запускает /initrd.gz

menuentry " Boot /vhd.img root=(lp) " {
loopback lp (hd1,3)/vhd.img
set root=(lp)
echo '===ls / '
ls /   #  видно содержание образа \vhd.img
linux  /vmlinuz fullinstall root=/  vhdimg
initrd /initrd.gz
}

Но при передаче управления initrd - монтирование \vhd.img образа слетает.

В принципе - развернутые на ext Linux запускаются и без /initrd - так при запуске с \vhd.img - но с

linux  /vmlinuz  root=/dev/sdb1
# откуда установленный там Linux был скопирован в \vhd.img - то Linux запускается с этого ext4 sdb1 раздела и без /initrd

А с \vhd.img - наверное проще сделать и запустить свой /init-vhd в котором - пока /initrd.gz в памяти - снова монтировать Linux в \vhd.img с ntfs - чтобы успеть его сделать / перед

mount -t rootfs -o remount,rw rootfs /
И передать управление в Linux /sbin/init

Сделать это с ядра - у меня не сработало

linux  /vmlinuz  root=/dev/sdb3/vhd.img

Сам вернулся к Linux после долгой разлуки == моя инструкцию по первому Live-CD_Linux-Knoppix и приходится многое вспоминать, да и новое осваивать. Поэтому вопросы:

1). Или все же можно как-то смонтировать \vhd.img образ с ядра (или оставить монтированным после Grub2) и запускать без initrd ?

2). Можно ли чтоб после loopback lp (hd1,3)/vhd.img - (lp) - представлялось типа /dev/(lp) - которое можно представить типа root=/dev/(lp)

3). Если нет - то как и где лучше вставить используя флаг в ядро vhdimg - монтирование \vhd.img

for i in $(cat /proc/cmdline) ; do
  [ "$i" = "vhdimg" ] && exec mount /dev/sdb3/vhd.img  /
done
3.1). Править существующие в начале /init

( читать дальше... )

или /sbin/usablefs

#!/bin/sh

mount -t proc none /proc
mount -t sysfs none /sys
mount -t rootfs -o remount,rw rootfs /

mount -t devtmpfs devtmpfs /dev 2>/dev/null

# got a kernel panic in dpup stretch with debian kernel 4.9
# this solved the issue
sleep 0.5

# this is not required for huge kernels and actually fails
# but it's needed by other type of kernels for the usb stuff to work
mkdir -p /proc/bus/usb 2>/dev/null
mount -t usbfs none /proc/bus/usb 2>/dev/null

ln -s /proc/mounts /etc/mtab 2>/dev/null

# loop1-15
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
    [ -e /dev/loop${i} ] && continue
    mknod /dev/loop${i} b 7 $i
done

# busybox 1.25 losetup somehow requires /dev/loop/X in the initrd to work..
# edit: only if CONFIG_FEATURE_DEVFS is enabled

### END ###
3.2). Или делать новый /init-vhd - и как его сделать правильно?

========== Это в рамках Linux на слабых компах для нищих пенсионеров Файна-Юкраин.

P.S. Первый пост на этом форуме.

1). Не уверен что разместил пост в правильном месте. Может мой уровень низкий и вопрос простой для этой ветки.

2). Не получилось спрятать под спойер ' cut code ..... /code /cut ' 2 длинных последних сода. Если без code то текст рвется внутри кода.

 , , , ,

alex52mail ()

selinux && (initramfs || initrd) && dracut

Краткая суть, потихоньку хочу внедрять систему selinux на тестовой машинке.
Поскольку используется программный raid5, то вынужден использовать initramfs.
В процессе выяснил, что есть глюки(запреты). И решить сложно, поскольку в initramfs используется cpio(а он пока что не поддерживает атрибуты xattr, т.е. права selinux не проставишь).
Текущая мысль воспользоваться классическим initrd+ext4.
Но вот беда, обычно использую dracut для создания образа, а он похоже только cpio может.
Может кто встречал патчи для адаптации под initrd ?

P.S. Тем кто предложит отключить подсистему selinux - просто проходите мимо.

 , ,

Atlant ()

Что такое initramfs и как создать файл initrd?

Насколько оно нужно, можно ли обойтись бещ и поделитесь хорошими гайдами по сборке.

 ,

burato ()

ubuntu, grub2 и кастомное ядро: отдельные пункты меню

Я хочу собрать своё ядро и хочу чтобы при его установке груб сгенерировал не стандартные пункты меню, а дополнительные (для отладки ядра).

Не могу найти, как это сделать. Это вообще предусматривалось его монструозными скриптами?

Во-вторых, хочется понять, есть ли штатный способ не указывать initrd, потому что я вкомпилил то, что мне нужно, в ядро.

 , ,

max_lapshin ()

использование linux на LUKS

Здравствуйте, форумчане.
Прошу помочь в следующем вопросе.
На флешке с не зашифрованным разделом расположен boot с ядром, initrd и ключом или паролем к шифрованному разделу, на диске в компьютере или ноутбуке корень файловой системы, но он зашифрован - LUKS. Грузим ядро с флешки, а оно уже монтирует корень, после загрузки флешку вынимаем.
Как создать зашифрованный раздел LUKS, его отформатировать, примонтировать, распаковать туда систему, я знаю. Вопрос вот в чём.
Как создать initrd, что бы он понимал LUKS? Chroot-нуться в корень и в корне командой mkinitramfs создать initrd?
Как заставить ядро понимать LUKS? Где должен находиться /etc/fstab на зашифрованном разделе или на не шифрованной флешке?
Как проинсталировать grub2 и создать для него конфиг? Просто chroot-нуться в примонтированный зашифрованный раздел и выполнить команды: grub-install с указанием диска и grub-mkconfig с указанием файла?
Хотелось бы сделать так, что бы пароль или ключ во время загрузки подкидывались автоматом, что бы не приходилось их вводить вручную.
LUKS подходит для работы, или только для хранения данных, а для работы нужно что нибудь более быстрое?
Детально как сделать то что мне нужно не нашёл, может кто подскажет где почитать. Или может кто уже делал такое, тогда пожалуйста поделитесь информацией.

 , ,

v4567 ()

Установка linux в файл-контейнер

ТАкое вообще возможно? как провернуть? :))) сейчас завис на стадии «как это все примонтировать». Нужно как то обучить инитрд смонтировать раздел на котором лежит файл, прибиндить файл к /dev/loop1, найти там LVM и смотировать его как корень. Смотрю на лайф сд и вижу что примерно такой же фокус тут провернули со сквошфс. Есть какой то простой способ надресировать инитрд? может какую магию нужно прописать в мкинитрамфс?

 , , , ,

antech ()

cryptsetup: lvm is not available

Ubuntu 18.04.

Обновился раз в месяц, и вот нате вам - система не грузится.

lvm томов у меня нет, просто LUKS раздел. Прошлый initrd за февраль грузится без проблем, а новый пароля не спрашивает, пишет бестолковую хрень.

Может кто знает чего там поломали?

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

 ,

sr11 ()

Как монтировать initrd.img ?

Вот такая проблема:

# mount -o loop initrd.img-4.18.0-16-generic /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/loop0, missing codepage or helper program, or other error.
#

 , , , ,

superuser ()

init RAM disk, как добавить необходимый софт.

Здравствуйте, уважаемые форумчане. Хочу научиться конфигурировать загрузчик.

В результате необходимо, что-бы выбранная программа запускалась автоматически, ну, например, openssh сервер или же hostapd, или openvpn. Стоит учесть, что основной том зашифрован при помощи LUKS.

Хочу отметить, что мне не обязательно нужны примеры с программами, указанными выше, полностью подойдет гайд по установке любого другого программного обеспечения.

Сама сложность для меня состоит в том, чтобы:

1)Добавить зависимости программы.

2)Написать скрипт для ее работы, ну и остальные аспекты, связанные с ее запуском.

Буду рад любым идеям и любой помощи.

 , , ,

Marex ()

Сборка initrd при живом kernel

Коллеги, прошу пнуть в нужном направлении:

имею 2.6.28 сборку (x86)

root (hd0,1) kernel /kernel.bin root=/dev/ram0 console=ttyS0,115200 ramdisk_size=131072 fw=1 root (hd0,1) initrd /bootimage.bin boot

ядро kernel.bin стандартное:

Direct booting from floppy is no longer supported.

внутри kernel.bin в gzip лежит сам ELF. Задача - поместить в kernel другой ELF, он в сжатом виде немного меньше по размеру.

Судя по офсетам в kernel.bin хранится длина gzипленного ELF и контрольная сумма и т.п. просто замена DWORD размера и самого GZIPленного ELF не помогает, имею ошибку CRC error, если проверку убрать- lenght error.

Есть ли где-то внятный скрипт или сырец как собирается пресловутый kernel.bin?

И можно ли под конкретное ядро kernel.bin собирать чем-то отдельно bootimage.bin ?

Спасибо.

 , ,

town ()

Настройка initrd

Доброго времени суток.

Имеется raid1 массив, состоящий из 3-х дисков. Массив создан средствами btrfs, на нем установлена ОС. Проверка отказоустойчивости данной конфигурации показала что загрузка ОС проходит успешно только при условии что все диски в корзине подключены.

Если отключить физически один из 3-х дисков и попытаться загрузить систему в деградированном состоянии, то в initramfs происходит ошибка загрузки с отвалом в BusyBox с диагностикой:

...
BTRFS: failed to read the system array: -5
BTRFS: open_ctree failed
mount: mounting /dev/sda2 on /root failes: Invalid argument
...
Если я правильно понимаю, то это связано с неправильно сформированным образом initrd, в котором не указана опция монтирования degraded для массива. А как это указать правильно я не знаю. Нужен коллективный разум.

З.Ы. Данная тема является продолжением этой.

 , , , ,

torm7 ()

Загрузка без initrd: VFS: cannot open root device

Пытаюсь загрузиться без initrd, а точнее, с initrd, сгенерированным dracut'ом с опцией --kernel-only. И получаю VFS: cannot open root device - фотография.
Корневая ФС на btrfs, в аргументах ядра rootfstype=btrfs указано, раздел sda2 определен верно, пробовал также с root=PARTUUID=.. - результат тот же.
Что я делаю не так?

 , , ,

gasinvein ()

Правка initrd файла

Необходимо изменить initrd файл так, чтобы в конечном итоге иное блочное устройство использовалось в качестве корневого. При этом используются системы с версиями ядра 2.4 и 2.6 :(

В системе с ядром 2.4 заключительная часть init-файла (linuxrc) образа initrd выглядит следующим образом:

...
mkrootdev /dev/root
echo 0x0100 > /proc/sys/kernel/real-root-dev
mount -o acl,nosecdel,secrm --ro -t ext3 /dev/root /sysroot
pivot_root /sysroot /sysroot/initrd
umount /initrd/proc

В системе с ядром 2.6 иначе:

...
mkrootdev -t ext4 -o defaults,ro /devv/sda3
mount /sysroot
setuproot
switchroot

На данном этапе у меня возникает путаница, что именно делает каждая строка в обоих приведённых фрагментах. Подробному разъяснению этого момента я буду очень рад.

Кроме того, мне надо изменить файлы так, чтобы в качестве корневого монтировалось другое устройство, создаваемое в момент загрузки. А создаётся это устройство с помощью device-mapper-а. Не так важно, что именно делает получаемое устройство, но важно, что оно приводит реальное устройство в состояние «занято».

Так как иное устройство монтируется в качестве корневого, то я меняю (а в идеале удаляю) параметр root из конфигов загрузчиков (для LILO, например, вариант только удалить этот параметр, ибо LILO отказывается конфигурироваться, если устройство не существует).

Виртуальное устройство создаю так:

ld-linux.so.2 /bin/dmsetup create root_part /opt/bin/table

Устройство создаётся успешно по пути /dev/mapper/root_part

Подскажите, как изменить приведённые выше фрагменты. Спасибо!

 ,

AccumPlus ()

Kernel panic после перезагрузки

Здравствуйте и процветайте.

Возникла следующая проблема:оказалось, что ядро обновляли, но перезагрузку не производили.

Система Oracle Linux 6.7.

Есть два ядра - 2.6.32-504(текущее) и 2.6.32-573.22.1(обновленнное)

[root@cf ~]# uname -a
Linux cf.office.dc 2.6.32-504.el6.x86_64 #1 SMP Tue Oct 14 01:47:47 PDT 2014 x86_64 x86_64 x86_64 GNU/Linux
[root@cf ~]# yum list kernel
Installed Packages
kernel.x86_64 2.6.32-504.el6 @local_ol6_latest
kernel.x86_64 2.6.32-573.22.1.el6 installed

при перезагрузке работающей машины выдалось

Kernel panic - not syncing: VFS: unable to mount root fs on unknown-block(0,0)
Pid: 1, comm: swapper Not tainted 2.6.32-573.22.1.el6.x86_64

Загрузившись с другого ядра(более старого), выяснил. что отсутствует запись об initrd. Создал initramfs dracut'ом, добавил запись в grub:

[root@cf ~]# dracut /boot/initramfs-2.6.32-573.22.1.el6.x86_64.img 2.6.32-573.22.1.el6.x86_64

Запись появилась и распознается, однако при загрузке появляется следующее:

modprobe: FATAL: Could not load /lib/modules/2.6.32-573.22.1.el6.x86_64/modules.dep, no such file or directory. 

и последующий kernel panic.

Судя по гуглу - проблема просто в отсутствии перезагрузки - что к моей ситуации не подходит - ибо я в конечном итоге перезагрузился. Что можете подсказать? Удалить обновленное ядро и заново обновить? Есть ли гарантия, что это не повторится?

 , ,

n1cew0lf ()

Initrd навыворот

С технической точки зрения есть ли разница между использованием initrd и такой схемой: в корень помещается иерархия с минимумом файлов (bash, mount, кое-какие утилиты) и образ системы, ядро передаёт загрузку фейковому иниту в виде баш-скрипта, который монтирует образ системы и делает chroot blablabla /sbin/init?

 ,

Deleted ()

Не удается восстановить систему из бекапа

Сабж. Есть завод по производству некоего продукта. На заводе функционирует сервер; на нем хранятся все данные о технологическом процессе (в основном значения физических величин: температуры, давления, скорости и т.п.). Недавно этот сервер крякнулся (отказал raid-контроллер) и теперь мне остается надеяться только на бэкап системы, который у меня есть. У меня есть новый сервер, с рабочим raid-контроллером, пытаюсь развернуть бэкап на нем. Также дома пытаюсь развернуть на виртуальной машине. Основная проблема заключается в том, что я никогда не восстанавливал систему из бэкапа.

Исходные данные Сервер: DELL PowerEdge 2650, RAID 5 (scsi диски) ОС: RedHat linux 7.2 Бекап: представляет собой tar-архивы основных папок системы (/, /boot, /usr, /var, /home). Делал бэкап я спомощью утилиты dvdbackup. Cодержимое архивов можно посмотреть по ссылке: http://rgho.st/7l6gTGZTr Также у меня есть инструкция по восстановлению похожей системы, следуя которой я попытался восстановить систему http://rgho.st/8VgQX4T4W В итоге при загрузке системы, возникает kernel panic. Ниже то, что выдается при загрузке: RAMDISK: Compressed image found at block 0

Freeing initrd memory: 415k freed

EXT2-fs warning: checktime reached, running e2fsck is recommended

VFS: Mounted root (ext2 filesystem).

Red Hat nash version 3.2.6 starting

loading scsi_mod module

SCSI subsystem driver Revision: 1.00

loading sd_mod module

loading aacraid module

acraid raid driver version, Sep 6 2001

/lib/aacraid.o: init_module: No such device

Hint: insmod errors can be caused by incorrect module parameters, including

invalid ID or IRQ parameters

ERROR: /bin/insmod exited abnormally!

loading jbd module

Journalled Block Device driver loaded

loading ext3 module

Mounting /proc filesystem

Creating root device

Mounting root filesystem

mount: error 19 mounting ext3

pivotroot: pivot_root(isysroot,/sysroot/initrd) failed: 2

Freeing unused kernel memory: 220k freed

Kernel panic: No init found. Try passing init= option to kernel.

Несколько дней гугления мало чем помогли...

 , , , ,

syler ()

как убрать построение initrd для ядра, которое давно уже снесено из базы dpkg?

dpkg -al | grep pve ничего не находит

а после update-initramfs -k all появляется: initrd.img-2.6.32-20-pve

где нужно удалить/подчистить, чтобы оно не появлялось больше?

дистр: Debian Wheezy, 2.6.32-20-pve - это от старых экспериментов с Proxmox

 

nooby ()

Узнать МАС-адрес до поднятия eth-интерфейса в initrd

Добрый день, Господа!

Возникла большая необходимость собрать initrd-файл, который при загрузки узнавал бы МАС-адрес одной (любой) физической сетевой карты, делал бы не его основании hostname системы и уже после поднимал сетевую карту и шел на DHCP-сервер.

Проблема в том, что поиск МАС-адрес нужно получить на самом начальном этапе загрузки initrd, а на данном этапе сетевая карта eth не подключен как модуль.

Соответственно, МАС-адреса нет ни в /sys, ни в dmesg.

Собственно, в данной ситуации мне нужно либо как-то спросить МАС-адрес у ядра, либо найти точку между поднятием сетевого интерфейса и получением IP по DHCP, чтобы вставить туда свой скрипт преобразования МАС в hostname.

Уважаемые, ни у кого нет идей, как можно выполнить вышеуказанное на данном этапе загрузки?

Благодарю

 

PIKNIK ()