Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
11.5 Mб
Скачать

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

c

 

o m

ТРЮКИ

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

УМЕНЬШАЕМ

ТРЕБОВАНИЯ

BODHI LINUX

К ОПЕРАТИВНОЙ ПАМЯТИ

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

Есть много­ задач, которые проще­ решить в GNU/Linux, чем где то еще, поэтому­ вир­ туалки­ с Linux в наше время­ — это обычное­ дело. И чем меньше­ будет занимать на диске­ и в памяти такая виртуал­ ­ка, тем лучше­ . В этой статье я возьму­ за основу­

дистри­ бутив­

Bodhi

Linux

и покажу,

как уменьшить­

его требова­

ния­ к оператив­

­

ной памяти,

чтобы­

он

заработал­

на машинах с 512 Мбайт вместо­ офи­ циально­ необходимых­ 768 Мбайт. Описан­ ­ ные рекомендации­ актуаль­ ­ны для всех современ­ ­ных версий­ Ubuntu.

Игорь Орещенков r0bur@mail.ru

Bodhi Linux 6.0 — это несколь­ ­ко своеоб­ ­разный дистри­ ­бутив, но именно­ на нем я остановил­ свой выбор. Почему? Во первых­ , он основан­ на Ubuntu 20.04 LTS, что дает доступ­ к огромному­ числу­ программ­ в официаль­ ­ных репозитори­ ­ях Ubuntu. Во вторых­ , у Ubuntu огромное сообщес­ ­тво, опытом­ которого­ можно­ пользовать­ ­ся. В третьих­ , мне приглянулась­ легковес­ ­ная графичес­ ­кая среда­ Moksha Desktop. Да, у нее есть нюансы­ в настрой­ ­ке, но разобрать­ ­ся с ними нужно­ всего­ один раз. Ну и в четвертых­ , этот дистри­ ­бутив минималис­ ­тичен, но содержит­ инстру­ ­мен­ты Build Essential, которые позволя­ ­ют быстро­ что нибудь скомпилиро­ ­вать.

Итак, для установ­ ­ки Bodhi Linux требует­ ­ся 768 Мбайт оператив­ ­ной памяти, объем­ которой можно­ уменьшить­ до 384 Мбайт на работающей­ системе­ , и при этом ей все еще можно­ будет пользовать­ ­ся. Такая экономич­ ­ность поз­ воляет­ создать­ прилич­ ­ный пул виртуаль­ ­ных машин, например­ для моделирова­ ­ ния сетевых конфигура­ ­ций.

Если­ на виртуаль­ ной­ машине подкоррек­ тировать­ объем­ памяти можно­ за несколь­ ко­ секунд, то для установ­ ки­ Bodhi Linux на устарев­ ший­ компьютер­

с 512 Мбайт ОЗУ придет­ ­ся вместо­ этого­ где то искать и устанав­ ­ливать допол­ нительную­ планку­ памяти. Да и в конце­ концов­ , почему Bodhi Linux (и многие­ другие­ современ­ ­ные дистри­ ­бути­вы) так прожор­ ­ливы на этапе­ установ­ ­ки, хотя могут потом работать в гораздо­ более скромном­ окружении­ ?!

Для ответа­ на этот вопрос­ надо посмотреть­ , как происхо­ дит­ загрузка­ Bodhi Linux с дистри­ бутив­ ного­ носителя­ (на схеме­ ниже). Первым­ делом загрузчик­ операци­ онной­ системы­ помещает­ с носителя­ в оператив­ ную­ память ядро Linux /casper/vmlinuz с упакован­ ным­ содержимым­ минимальной­ файловой­ сис­ темы (МФС) /casper/initrd.gz, формиру­ ет­ окружение­ ядра с параметрами­ командной­ строки­ и передает­ ядру управление­ . Ядро получает­ параметры­ из окружения­ и принима­ ет­ их к сведению­ , определя­ ет­ и инициали­ зиру­ ет­ основное оборудо­ вание­ компьюте­ ра­ , после­ чего распаковы­ вает­ МФС и запус­ кает процесс­ init, текст сценария­ которого­ содержится­ в файле­ /init рас­ пакованной­ файловой­ системы­ .

Исполь­ зование­ ОЗУ при загрузке­ Bodhi Linux

Основная­ задача процес­ са­ init на данном­ этапе­ — отыскать­ на носителе­ образ основной файловой­ системы­ /casper/filesystem.squashfs, переключить­ ся­ на него с МФС и запустить­ свое продол­ жение­ . Для этого­ могут потребовать­ ся­ модули ядра с драйверами­ устройства­ , которые обслужива­ ют­ носитель с дис­ трибути­ вом­ и обеспечива­ ют­ понимание­ его файловой­ системы­ . Эти драйверы­ , если они не встроены­ в ядро, должны­ быть доступны­ из МФС.

Using the initial RAM disk (initrd)

Ramfs, rootfs and initramfs

После­ переключения­ на основную файловую­ систему­ МФС больше­ не требует­ ­ ся, и занимаемая­ ей оператив­ ная­ память освобож­ дает­ ся­ . Файловая­ система­ squashfs позволя­ ет­ работать с ней в режиме «только­ чтение­ » непосредс­ твен­ но­ из файла­ с образом­ . С этого­ момента­ оператив­ ная­ память использует­ ся­

восновном для следующих­ целей:

хранения­ кода выполняющих­ ­ся процес­ ­сов и обрабаты­ ­ваемых ими данных­ ;

хранения­ изменений­ , которые происхо­ ­дят в основной файловой­ системе­ (это реализует­ ­ся с помощью механизма­ overlayfs: дерево каталогов­ вир­ туальной­ файловой­ системы­ tmpfs, созданной­ в оператив­ ­ной памяти, нак­ ладывается­ на дерево каталогов­ основной файловой­ системы­ squashfs);

прочих­ системных­ кешей и буферов.

Overlay Filesystem

Tmpfs

На каком же этапе­ возника­ ­ет проблема­ в последова­ ­тель­нос­ти этих шагов? Чтобы­ узнать это, загрузим­ Bodhi Linux в виртуаль­ ­ной машине с 512 Мбайт ОЗУ. И почти­ сразу­ после­ того, как мы в меню загрузки­ выберем Try Bodhi или Install Now, получим черный­ экран смерти­ со множес­ ­твом диагности­ ­чес­ких сообщений­ . Несмотря­ на то что заключитель­ ­ный вердикт­ звучит­ как «Kernel panic - not syncing: No working init found» («Ядро останов­ ­лено — не синхро­ ­низи­

ровано­ : не найден­ рабочий init»), суть проблемы­ отражает­ самая первая­ стро­

ка: «Initramfs unpacking failed: write error» («Сбой при распаков­ ке­ initramfs:

ошибка­ записи»). Это значит­ , что ядро не смогло­ распаковать­ МФС из initrd. gz из за нехватки­ оператив­ ­ной памяти.

ПРИЧИНА ПРОБЛЕМЫ

Почему­ же памяти не хватило­ ? По большому­ счету­ на этом этапе­ в ОЗУ находятся­ ядро и заархивиро­ ван­ ная­ МФС. Во время­ загрузки­ ядро Linux активно выделяет­ , перемещает­ и освобож­ дает­ области памяти. Если ты не разработ­ чик­ ядра, уследить­ за всеми­ выполняемы­ ми­ действи­ ями­ довольно­ сложно­ . К счастью, когда­ ситуация­ стабили­ зиру­ ется­ , ядро формиру­ ет­ информацион­ ное­ сообщение­ и узнать «окончатель­ ный­ счет» можно­ с помощью команды­

$ dmesg | grep ']\sMemory'

Ниже­ приведе­ ны­ результаты­ ее выполнения­ для диапазона­ оператив­ ной­ памяти от 384 до 1024 Мбайт с шагом 128 Мбайт:

384 Мб: [ ] Memory: 263248K/392760K available (14339K kernel

code, 2400K rwdata, 5008K rodata, 2732K init, 4972K bss, 129512K

reserved, 0K cma-reserved)

512 Мб: [ ] Memory: 392272K/523832K available (14339K kernel

code, 2400K rwdata, 5008K rodata, 2732K init, 4972K bss, 131560K

reserved, 0K

cma-reserved)

640

Мб: [ ]

Memory: 520528K/654904K available (14339K kernel

code, 2400K rwdata, 5008K

rodata, 2732K init, 4972K bss, 134376K

reserved, 0K

cma-reserved)

768

Мб: [ ]

Memory: 649552K/785976K available (14339K kernel

code, 2400K rwdata, 5008K

rodata, 2732K init, 4972K bss, 136424K

reserved, 0K

cma-reserved)

896

Мб: [ ]

Memory: 778576K/917048K available (14339K kernel

code, 2400K rwdata, 5008K

rodata, 2732K init, 4972K bss, 138472K

reserved, 0K

cma-reserved)

1024

Мб: [ ]

Memory: 907600K/1048120K available (14339K kernel

code, 2400K rwdata, 5008K

rodata, 2732K init, 4972K bss, 140520K

reserved, 0K

cma-reserved)

На основании­ этих сведений­ можно­ сделать­ вывод, что объем­ памяти, занима­ емой процес­ сом­ ядра с сегмента­ ми­ кода (kernel code), констант­ (rodata), изменяемых­ неинициали­ зиро­ ван­ ных­ (rwdata) и инициали­ зиро­ ван­ ных­ (bss) дан­ ных постоян­ но­ и составля­ ет­ 29 451 Кбайт или пример­ но­ 29 Мбайт. Объем­ дополнитель­ но­ резервиру­ емой­ ядром памяти в некоторой­ степени­ зависит от общего­ объема­ оператив­ ной­ памяти компьюте­ ра­ , но в основном определя­ ­ ется размером­ файла­ initrd.gz. Можно­ сказать­ , что значение­ reserved равно­ сумме­ размера­ процес­ са­ ядра (29 Мбайт), файла­ initrd.gz (87 Мбайт) и сис­ темных структур­ (10–20 Мбайт).

Чтобы­ получить журнал­ сообщений­ ядра при 384 Мбайт и 512 Мбайт ОЗУ, ког­ да ядро не может распаковать­ МФС, перенаправь­ консоль­ в последова­ тель­ ­ ный порт ttyS0, добавив параметры­ ядра в командной­ строке­ загрузчи­ ка­ :

console=ttyS0 console=tty0 ignore_loglevel

А сам порт перенаправля­ ­ется в файл настрой­ ­кой виртуаль­ ­ной машины VirtualBox, как показано­ на рисунке­ .

В остальных­ случаях­ , когда­ оператив­ ной­ памяти достаточ­ но­ для распаков­ ки­ МФС, можно­ назначить­ прерыва­ ние­ процес­ са­ init после­ загрузки­ драйверов­ , достаточ­ ных­ для монтирова­ ния­ накопителей­ . Для этого­ к параметрам­ ядра надо добавить break=mount. Когда­ появится­ командная­ строка­ BusyBox, мож­ но вручную­ примон­ тировать­ к МФС основной накопитель­ и сохранить­ на него необходимые­ сведения­ .

Теперь­

мы можем посчитать­

, что объем­ свобод­ ной­

оператив­ ной­

памяти

на данном­

этапе­ составля­ ет­ 512 – 128 = 384 Мбайт. Это довольно­ много­ , если

учесть, что перед ядром стоит­ единствен­

ная­ задача распаков­ ки­ МФС из сжа­

того алгорит­ мом­

LZ4 архива­ . Сейчас­

самое время­ вспомнить­

, что в рас­

пакованном­

виде эта файловая­

система­

занимает­ 242

Мбайт, и для ее хра­

нения этот объем­ надо вычесть из имеюще­ ­гося свобод­ ­ного пространс­ ­тва: 384

– 242 = 142 Мбайт. Но это все еще прилич­ ­ный запас.

Распаков­ кой­ и одновремен­ но­ формирова­ нием­ МФС занимается­ конечный­ автомат­ , реализован­ ный­ в модуле init/initramfs.c. Он по мере необходимос­ ти­ резервиру­ ет­ буферную­ память, которая освобож­ дает­ ся­ полностью­ только­ пос­ ле завершения­ его работы. Поэтому­ в описыва­ емых­ условиях­ свобод­ ная­ опе­ ративная­ память исчерпывает­ ся­ в момент формирова­ ния­ 384/2 = 192 Мбайт МФС из 242 Мбайт необходимых­ .

ПАРАДОКСАЛЬНАЯ ИДЕЯ

Что, если не архивиро­ вать­ cpio-блок с МФС? Идея парадоксаль­ ная­ , но тогда­ ядру не придет­ ся­ выделять память для распаков­ ки­ и дистри­ бутив­ запустится­ на системах­ с 512 Мбайт ОЗУ. Естествен­ но­ , у такого способа­ будут недос­

татки. Во первых­ , размер­ образа­ увеличит­ ся­ на 242 – 83 = 159 Мбайт. Из за этого­ может возрасти­ время­ загрузки­ , если носитель с образом­ не очень про­ изводитель­ ный­ , например­ DVD-ROM или флешка­ USB 2.0.

Но хуже всего­ то, что этот способ­ совершенно­ неработос­ ­пособен, потому что из за увеличе­ ­ния файла­ initrd.gz объем­ свобод­ ­ной памяти сократит­ ­ся на 159 Мбайт, после­ чего вместо­ 384 Мбайт останет­ ­ся 225 Мбайт, в которые никак не сможет­ поместить­ ­ся 242-мегабайтная­ МФС. А на самом деле ока­ зывается­ , что перенос содержимого­ из cpio-блока­ в МФС тоже произво­ ­дит­ся через буферную­ память, что вызывает­ аварий­ ­ное прерыва­ ­ние процес­ ­са после­ обработ­ ­ки пример­ ­но 112 Мбайт. Поэтому­ надо искать другие­ пути.

ИЗУЧАЕМ СОСТАВ МИНИМАЛЬНОЙ ФС

Единствен­ ный­ объект­ , модификация­ которого­ может помочь сэкономить­ память на начальном­ этапе­ загрузки­ , — это МФС. Определить­ , какой объем­ занимают­ ее части­ , нетрудно­ — достаточ­ но­ выполнить­ внутри­ интересу­ ющих­ каталогов­ команду­

$ du -shm * | sort -rn | head

Она подсчи­ тыва­ ет­ и наглядно­ показывает­ размеры­ подкатало­ гов­ в текущем каталоге­ . В результате­ получилась­ карта­ самых крупных­ объектов­ МФС.

Элемен­ ты­ МФС с указани­ ем­ их размера­

Подав­ ляющую­ долю МФС составля­ ют­ бинарные­ файлы­ , предос­ тавлен­ ные­ про­ изводите­ лями­ устройств­ , и модули ядра с драйверами­ устройств­ . Хорошо бы узнать, из каких пакетов они появились­ :

$ dpkg-query -S /lib/firmware

wireless-regdb, linux-firmware, intel-microcode, amd64-microcode: /lib/firmware

$ dpkg-query -S /lib/modules linux-modules-extra-5.4.0-72-generic, linux-modules-5.4.0-72- generic, linux-headers-5.4.0-72-generic: /lib/modules

Оказыва­ ется­ , источники­ той массы­ файлов­ , из за которых «распуха­ ет­ » initrd. gz, — это всего­ несколь­ ­ко пакетов. Сгруппировать­ их по выполняемым­ фун­ кциям­ и удалить­ лишние­ не выйдет­ . Оставим­ пока эту проблему­ и попробу­ ем­ выяснить­ , все ли эти пакеты необходимы­ для начальной­ загрузки­ ОС. Для ответа­ на этот вопрос­ надо обратить­ ся­ к сценарию­ /init, который находится­ в корне­ МФС и координиру­ ­ет все выполняемые­ на этом этапе­ дей­ ствия.

ИССЛЕДОВАНИЕ СЦЕНАРИЯ /INIT

Сначала­ этот сценарий­ инициали­ зиру­ ет­ переменную­ окружения­ PATH, чтобы­ обеспечить­ себе доступ­ к системным­ утилитам­ :

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/

sbin:/bin

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

/dev

/root

/sys

<---

mount -t

sysfs -o nodev,noexec,nosuid sysfs /sys

/proc

<---

mount -t

proc -o nodev,noexec,nosuid proc /proc

/tmp

 

 

 

/var/lock

 

 

 

/dev

<---

mount -t

devtmpfs -o noexec,nosuid,mode=0755

udev /dev

 

 

 

/dev/pts

 

<--- mount -t devpts -o noexec,nosuid,gid=5,

mode=0620 devpts

/dev/pts

 

Затем­ формиру­ ­ется среда­ окружения­ , в которой отметим­ переменную­ RUNSIZE. Она определя­ ­ет размер­ оператив­ ­ной памяти, который будет зарезервирован­ для виртуаль­ ­ной файловой­ системы­ /run. Значение­ этой переменной­ извлекает­ ­ся из конфигура­ ­цион­ного файла­ /conf/initramfs.conf и по умолчанию­ составля­ ­ет 10%.

После­ подклю­ ­чения подпрог­ ­рамм из библиоте­ ­ки /script/functions запускает­ ­ся цикл разбора­ параметров­ , переданных­ ядру Linux из командной­ строки­ загрузчи­ ­ка:

for x in $(cat /proc/cmdline)

case $x in

...

ИмяПараметра=*)

ИМЯПАРАМЕТРА="${x#ИмяПараметра=}"

;;

...

initramfs.runsize=*)

RUNSIZE="${x#initramfs.runsize=}"

;;

boot=*)

BOOT=${x#boot=}

;;

break=*)

break=${x#break=}

;;

break)

break=premount

;;

...

esac

done

В основном

он дополняет­

или изменяет­

переменные­

среды­ . Например­ ,

на значение­

переменной­

RUNSIZE можно­ повлиять­

, указав­

параметр ядра

initramfs.runsize. Переменная­

BOOT — индикатор­

способа­

загрузки­

ОС:

local, nfs или casper. В дальнейшем­

она использует­ ся­ для подклю­ чения­

сце­

нариев­ монтирова­ ния­ основной файловой­

системы­

в команде­ такого вида:

 

. /scripts/${BOOT}

С помощью параметра­ break можно­ из командной­ строки­ ядра указать­ точку­ останова­ , которая прервет­ исполнение­ init и выдаст командную­ строку­ BusyBox в среде­ минимальной­ файловой­ системы­ . Эта возможность­ реализует­ ­ся фун­ кцией­ maybe_break(), определен­ ­ной в /script/functions, и я пользовал­ ­ся ей для анализа­ распре­ ­деле­ния оператив­ ­ной памяти на ранней­ стадии­ загрузки­ ядра. Еще можно­ обратить­ внимание­ на параметр root, который может при­ нять значение­ nfs для выполнения­ сетевой загрузки­ .

Далее­ происхо­ ­дит монтирова­ ­ние файловой­ системы­ /run, содержимое­ которой будет хранить­ ­ся в файловом­ кеше операци­ ­онной системы­ , то есть занимать место­ в оператив­ ­ной памяти:

mount -t tmpfs -o "nodev,noexec,nosuid,size=${RUNSIZE:-10%},

mode=0755" tmpfs /run

mkdir -m 0700 /run/initramfs

На самом деле объем­ оператив­ ­ной памяти, резервиру­ ­емой для файловой­ системы­ /run, никакого­ отношения­ к вопросу­ , который мы изу­ чаем, не имеет­ . Ведь сценарий­ /init начнет­

свою работу только­ после­ того, как МФС будет готова. Но о нем стоит­ помнить­ , если возникнут­ проблемы­ на следующем­ шаге загрузки­ .

Дальше­ загружа­ ­ются модули ядра, перечисленные­ в конфигура­ ­цион­ном файле­ /conf/modules, а именно­ dm-mod и dm-mirror. С помощью утилиты­ modinfo мы можем узнать, что модуль dm-mod встроен­ в ядро (filename: builtin), а dm-mirror находится­ вот в этом файле­ :

/lib/modules/5.4.0-72-generic/kernel/drivers/md/dm-mirror.ko

В его зависимос­ тях­ перечислены­ модули dm-region-hash.ko и dm-log, находя­ щиеся по тому же пути.

Потом­ сценарий­ init с помощью подпрог­ раммы­ run_scripts, определен­ ­ ной в /script/functions, выполняет­ в требуемой­ последова­ тель­ нос­ ти­ сце­

нарии из каталогов­ /scripts/init-top и /scripts/init-premount. Резуль­

тат — подклю­ чение­ драйверов­ generic-ide, инициали­ зация­ консоли­ и фрей­ мбуфера­ , запуск подсисте­ мы­ управления­ устройства­ ми­ udev и графичес­ кой­ заставки­ plymouth.

После­ загрузки­ подпрог­ ­рамм из файлов­ /scripts/local и /scripts/ casper (потому что в командной­ строке­ ядра указан­ параметр boot=casper) с их помощью подклю­ ­чает­ся драйвер­ RAID, модули поддер­ ­жки файловых­ сис­ тем и шифрования­ корневой­ файловой­ системы­ .

Наконец­ , выполняет­ ся­ функция­ mountroot (), определен­ ная­ в файле­ / scripts/casper (и переопре­ делив­ шая­ таковые из /scripts/local и / scripts/nfs). Она монтиру­ ет­ основную файловую­ систему­ к каталогу­ МФС / root, который задан переменной­ окружения­ rootmnt. Если монтирова­ ние­ основной файловой­ системы­ прошло­ успешно, на нее переносят­ ся­ виртуаль­ ­ ные файловые­ системы­ , содержащие­ сформировав­ ший­ ся­ к текущему­ времени­ контекст­ :

mount -n -o move /run ${rootmnt}/run

mount -n -o move /sys ${rootmnt}/sys

mount -n -o move /proc ${rootmnt}/proc

Последний­ шаг — это переключение­ корня­ на основную файловую­ систему­

и передача­ управления­ программе­ /sbin/init, если иное не было определе­ ­ но параметром­ ядра init.

Возможно­ , тебе уже спасал­ жизнь прием­ аварий­ ­ ной загрузки­ в командную­ строку­ , который сос­ тоит в указании­ параметра­ init=/bin/sh. Если нет, то держи­ на вооружении­ !

Подведем­ итог. На начальном­ этапе­ загрузки­ операци­ онной­ системы­ могут потребовать­ ся­ :

модули­ ядра с драйверами­ интерфейса­ и носителя­ , на котором размещен­ дистри­ ­бутив Bodhi Linux с образом­ основной файловой­ системы­ /casper/ filesystem.squashfs;

драйверы­ видеоадап­ ­тера для отображения­ красоч­ ­ной графичес­ ­кой зас­ тавки, которая сопровож­ ­дает загрузку­ ;

модули­ ядра с драйверами­ сетевых устройств­ , в том числе­ с бинарными­ блоками­ Wi-Fi, для сетевой загрузки­ .

Куда­ сложнее­ будет ответить­ на вопрос­ , от чего на этом этапе­ можно­ отказать­ ­ ся.

АГРЕССИВНЫЙ ПОДХОД

 

 

 

 

 

 

 

 

 

 

Bodhi Linux позициони­ рует­ ся­ как дистри­ бутив­

для бытового­ примене­ ния­

рядовыми­ пользовате­ лями­ , поэтому­ не кажется­ большим­

преступле­ нием­

убрать из него сетевые драйверы­

и таким образом­

лишить его возможнос­ ти­

сетевой загрузки­ . Ради установ­ ки­ на компьютер­

с 512 Мбайт оператив­ ной­

памяти можно­ пожертво­ вать­

и эстетичес­ кой­ стороной­

процес­ са­ , отказав­ шись­

от графичес­ кой­ заставки­ .

 

 

 

 

 

 

 

 

 

 

 

Такие­

допущения­

позволя­ ют­ с относитель­

но­ чистой­

совестью удалить­

из МФС самые объемные­

каталоги­ . Для этого­ после­ анализа­

структуры­

initrd.gz и извлечения­

МФС в каталог initramfs надо выполнить­

такие

команды­ :

 

 

 

 

 

 

 

 

 

 

 

 

 

$ rm -fr initramfs/usr/lib/firmware/{netronome,amdgpu,radeon,

liquidio,i915}

$ rm -fr initramfs/usr/lib/modules/5.4.0-72-generic/kernel/

drivers/{net,gpu,scsi}

IDE CDROM в Linux поддержи­ ­вает­ся через подсисте­ ­му SCSI. Так почему был удален­ каталог с драйверами­ этой подсисте­ ­мы?

С одной стороны­ , команда­ dmesg | grep 'scsi' показывает­ , что интерфейсы­ SCSI действи­ ­тель­но используют­ ­ся:

[ ] scsi host0: ahci

[ ] scsi host1: ahci

...

[ ] sr 1:0:0:0: Attached scsi CD-ROM sr0

[] sr 1:0:0:0: Attached scsi generic sg1 type 5

Сдругой­ стороны­ , команда­ lsmod не показывает­ загружен­ ­ных SCSI-модулей, что намекает­ на их наличие в ядре.

Такая­ чистка­ не помешает­ использовать­ видеоадап­ ­теры или SCSI RAID после­ установ­ ­ки операци­ ­онной системы­ на компьютер­ : все эти драйверы­ есть в образе­ основной файловой­ системы­ . Они будут недоступны­ лишь на раннем­ этапе­ загрузки­ с дистри­ ­бутив­ного носителя­ — до переключения­ с МФС на основную файловую­ систему­ . Один из этапов­ установ­ ­ки операци­ ­онной сис­ темы — генерация­ файла­ /boot/initrd.img, который содержит­ все необ­ ходимые для работы оборудо­ ­вания компонен­ ­ты.

После­ чистки­ размер­ МФС сократил­ ­ся на 136 Мбайт и составил­ 103 Мбайт, а упакован­ ­ный файл initrd.gz стал занимать 47 Мбайт. Образ Bodhi Linux с таким файлом­ работает­ на компьюте­ ­ре с 512 Мбайт оператив­ ­ной памяти как в демонстра­ ­цион­ном режиме (Try Bodhi), так и в режиме установ­ ­ки опе­ рационной­ системы­ (Install Now) на жесткий­ диск. Распре­ ­деле­ние оператив­ ­ной памяти выглядит­ следующим­ образом­ :

[ ] Memory: 433588K/523832K available (14339K kernel code, 2400K

rwdata, 5008K rodata, 2732K init, 4972K bss, 90244K reserved, 0K

cma-reserved)

Продолжение статьи

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ТРЮКИ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

e

 

 

p

df

-x

 

 

g

 

 

 

 

 

 

n

 

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

← НАЧАЛО СТАТЬИ wClick

 

BUY

 

to

 

 

 

.co m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

 

 

 

.

 

 

 

 

e

 

 

p

df

 

 

 

g

 

 

 

 

 

 

n

 

 

 

 

 

 

-x ha

 

 

 

 

УМЕНЬШАЕМ ТРЕБОВАНИЯ

BODHI LINUX

К ОПЕРАТИВНОЙ ПАМЯТИ

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

Графичес­ кая­ (слева­ ) и тексто­ вая­ (справа­ ) заставки­ при загрузке­ Bodhi Linux

При уменьшении­ объема­ памяти до 384 Мбайт удалось­ успешно загрузить­ ся­ в демонстра­ цион­ ном­ режиме, но процеду­ ра­ установ­ ки­ прервалась­ на этапе­ разметки­ накопителя­ .

ДЕЛИКАТНЫЙ ПОДХОД

 

 

 

 

 

 

Несмотря­

на сравнитель­

ный­

успех описан­ ного­

подхода­ , хотелось бы иметь

более авторитет­

ную­

аргумен­ тацию­

при отборе­ элемен­ тов­ , исключаемых­

из МФС. Посмотрим­

еще раз на состав­

пакетов, которые внесли­ вклад

в каталог модулей ядра. На себя обращает­

внимание­

linux-modules-extra-

5.4.0-72-generic. Слово­ extra намекает­ ,

что в нем собраны­

дополнения­

к пакету linux-modules-5.4.0-72-generic, без которых, возможно­ , удастся­ обойтись­ . Но удалить­ этот пакет средства­ ми­ dpkg не получится­ , потому что в целях минимизации­ МФС разработ­ чики­ исключили­ из нее базу данных­ со сведени­ ями­ об установ­ ленных­ пакетах (обычно­ она находится­ в каталоге­ /

var/lib/dpkg).

Будем­ действо­ ­вать следующим­ образом­ . Сначала­ получим из загружен­ ­ной в демонстра­ ­цион­ном режиме операци­ ­онной системы­ Bodhi Linux список­ фай­

лов, входящих­ в состав­ пакета linux-modules-extra-5.4.0-72-generic:

$ dpkg -L linux-modules-extra-5.4.0-72-generic | grep '^/lib/

modules/.*\.ko$' > list-extra.txt

Потом­ по составлен­ ному­ списку­ можно­ удалить­ из МФС модули ядра, отно­ сящиеся­ к этому­ пакету. Здесь, как и ранее, предполага­ ется­ , что МФС находится­ в каталоге­ initramfs.

$ cat list-extra.txt | while read module; do rm initramfs$module;

done

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

ющих файлах­ , потому что пакет linux-modules-extra-5.4.0-72-generic

представ­ ­лен в МФС частично­ . Но после­ завершения­ можно­ убедить­ ­ся в том, МФС стала­ значитель­ ­но компак­ ­тнее:

$ du -sh initramfs

179M initramfs

А содержимое­ каталога­ lib/firmware удалим­ полностью­ :

$ rm -fr initramfs/lib/firmware/*

Это сократит­ МФС до разумного­ размера­ в 86 Мбайт. Собранный­ с такой МФС файл initrd.gz занимает­ 37 Мбайт, а образ с ним загружа­ ется­ точно­ так же, как и в рассмот­ ренном­ выше случае­ . Память распре­ деля­ ется­ так:

[ ] Memory: 441968K/523832K available (14339K kernel code, 2400K

rwdata, 5008K rodata, 2732K init, 4972K bss, 81864K reserved, 0K

cma-reserved)

АВТОМАТИЧЕСКАЯ СБОРКА INITRD.GZ

 

 

 

 

 

А что, если восполь­

зовать­

ся­ файлом­

initrd.img, который автомати­ чес­ ки­ фор­

мируется­

в ходе установ­ ки­ операци­ онной­

системы­

на

компьютер­ ? Взять

и просто­ заменить этим файлом­

initrd.gz на носителе­ с дистри­ бути­ вом­

нельзя­ , ведь отличия­ между­ МФС установ­ ленной­

системы­

и дистри­ бути­ ва­ зак­

лючаются­

не только­ в составе­

драйверов­ , но и в наборе программ­

и текстах­

сценари­ ев­ . Однако­ можно­ извлечь из него каталоги­ lib/firmware и lib/ modules и поместить­ их в МФС.

Вот незадача­ ! Если попытаться­ загрузить­ систему­ с изготов­ ленно­ го­ таким методом образа­ , работа сценария­ init останав­ лива­ ется­ с сообщени­ ем­

/cow format specified as 'overlay' and no support found

Эту ошибку­ выводит следующая­ строка­ сценария­ /scripts/casper:

modprobe "${MP_QUIET}" -b overlay || panic "/cow format specified

as 'overlay' and no support found"

Оказыва­ ­ется, сценарий­ не может загрузить­ модуль файловой­ системы­ overlayfs, который не использует­ ­ся в установ­ ­ленной операци­ ­онной системе­ , но в демонстра­ ­цион­ном режиме необходим­ для образова­ ­ния изменяемо­ ­го слоя над основной файловой­ системой­ , которая доступна­ только­ для чтения­ . Для решения проблемы­ надо записать каталог /lib/modules/5.4.0-72- generic/kernel/fs/overlayfs в МФС, после­ чего обновить­ зависимос­ ­ти с помощью последова­ ­тель­нос­ти команд:

$ sudo chroot initramfs /bin/ash

#ln -s /bin/kmod /usr/sbin/depmod

#depmod

#exit

Если­ теперь пересобрать­ initrd.gz, то образ с ним будет рабочим, но, во первых­ , при загрузке­ по прежнему­ отсутству­ ет­ графичес­ кая­ заставка­ , а во вторых­ , размер­ МФС получился­ не таким уж компак­ тным­ : 172 Мбайт до упаков­ ки­ и 63 Мбайт — после­ . Память при этом распре­ деля­ ется­ так:

[ ] Memory: 417248K/523832K available (14339K kernel code, 2400K

rwdata, 5008K rodata, 2732K init, 4972K bss, 106584K reserved, 0K

cma-reserved)

Перед­ внесени­ ем­ изменений­ в конфигура­ цион­ ­ ные файлы­ не забудь сделать­ их резервные­ копии, а после­ генерации­ initrd.img восста­ ­ нови исходную конфигура­ цию­ !

Справить­ ся­ с обоими­ недостатка­ ми­ и сократить­ объем­ работы можно­ , если сгенери­ ровать­ файл initrd.img средства­ ми­ пакета initramfs-tools после­ небольшой­ подготов­ ки­ . Во первых­ , давай явным образом­ пропишем­ в файле­ / etc/initramfs-tools/modules список­ модулей, которые загружены­ (а зна­ чит, требуют­ ся­ ) при работе Bodhi Linux в демонстра­ цион­ ном­ режиме. Для получения­ такого списка­ надо (в демонстра­ цион­ ном­ режиме) выполнить­ команду­

$ lsmod | tail -n +2 | cut -f1 -d ' ' > modules.txt

Во вторых­ , чтобы­ в initrd.img попали только­ те драйверы­ , которые нужны­ для поддер­ жки­ оборудо­ вания­ конкрет­ ного­ компьюте­ ра­ , в файл /etc/ initramfs-tools/initramfs.conf внесем­ исправление­ :

MODULES=dep

Теперь­ можно­ запустить­ формирова­ ние­ файла­ initrd.img командой­

$ mkinitramfs -o initrd.img

Осталось­ только­ перенести­ из него каталоги­ lib/firmware и lib/modules в МФС. Специаль­ ной­ заботы по поводу overlayfs в этом случае­ не требует­ ся­ , потому что модуль присутс­ тву­ ет­ в сформирован­ ном­ списке­ .

При извлечении­ файловой­ системы­ из initrd. img будь внимате­ ­лен: он состоит­ из двух частей­ ,

а не из трех. Сценарий­ , запущенный­ с кон­ фигурацион­ ­ным параметром­ MODULES=dep, оставит­ микрокод­ только­ того процес­ ­сора, которым оснащен­ работающий­ компьютер­ . А каталог lib/firmware в извлечен­ ­ной из него файловой­ системе­ может вообще­ отсутство­ ­вать.

Образ­ , в который был помещен initrd.gz с МФС, подготов­ ленной­ описан­ ­ ным способом­ , показал наилучший­ результат­ . Во первых­ , МФС получилась­ самая компак­ тная­ : 55 Мбайт в распакован­ ном­ виде и 26 Мбайт в упакован­ ном­ . Красноречи­ вее­ всего­ об этом говорит распре­ деле­ ние­ памяти:

[ ] Memory: 451928K/523832K available (14339K kernel code, 2400K

rwdata, 5008K rodata, 2732K init, 4972K bss, 71904K reserved, 0K

cma-reserved)

Во вторых­ , благода­ ­ря включению­ в МФС драйверов­ , специфич­ ­ных для компь­ ютера­ , при загрузке­ демонстри­ ­рует­ся графичес­ ­кая заставка­ (ура, мы сделали­ это!).

Такой­ способ­ оптимиза­ ­ции МФС лучше­ всего­ подходит­ для создания­ вир­ туальных­ машин с единой­ конфигура­ ­цией. Увы, созданный­ таким методом носитель с дистри­ ­бути­вом не смог отыскать­ основную файловую­ систему­ на реальных­ компьюте­ ­рах, в отличие­ от рассмот­ ­ренных раньше­ вариантов­ .

ВЫВОДЫ

Некото­ рые­ современ­ ные­ дистри­ бути­ вы­ GNU/Linux завышают­ «порог входа­ »: предъявля­ ют­ более высокие требова­ ния­ к оператив­ ной­ памяти на этапе­ запус­ ка установ­ ки­ или демонстра­ цион­ ного­ режима, чем на самом деле требует­ ся­ для работы ОС. Причина­ , с одной стороны­ , в том, что при извлечении­ минимальной­ файловой­ системы­ из блока­ cpio ядро нерациональ­ но­ использует­ оператив­ ную­ память, а с другой­ — в избыточ­ ном­ наборе драйверов­ , которые разработ­ чики­ дистри­ бути­ вов­ включают­ в минимальную­ файловую­ систему­ .

Мы проана­ лизи­ рова­ ли­ состав­ минимальной­ файловой­ системы­ и нашли­ несколь­ ко­ способов­ оптимизи­ ровать­ его. Описан­ ные­ приемы­ позволя­ ют­ так модифициро­ вать­ образ Bodhi Linux 6.0, чтобы­ он был пригоден­ для установ­ ки­ операци­ онной­ системы­ на компьюте­ ры­ с 512 Мбайт оператив­ ной­ памяти. Это может оказать­ ся­ полезно­ при создании­ однотип­ ных­ виртуаль­ ных­ машин или для продления­ срока­ службы­ устарев­ шей­ техники­ .

Надо­ отметить­ , что использован­ ­ный в статье прием­ с полной­ очисткой­ содержимого­ каталога­ /lib/firmware может привес­ ­ти к проблеме­ в случае­ , если бинарный­ блок требует­ ­ся драйверу­ , интегри­ ­рован­ному в ядро. Впрочем­ , на практике­ с этим столкнуть­ ­ся не пришлось­ .

ПРИЛОЖЕНИЕ 1. АНАЛИЗИРУЕМ СТРУКТУРУ INITRD.GZ

Файл initrd.gz из образа­ Bodhi Linux 6.0 состоит­ из трех частей­ : микрокода­

для процес­ соров­ AMD, микрокода­ для процес­ соров­ Intel и собствен­ но­ упа­ кованной­ минимальной­ файловой­ системы­ . Чтобы­ добрать­ ся­ до этой ФС, нуж­ но узнать, по какому смещению­ от начала файла­ она находится­ . А для этого­ придет­ ся­ последова­ тель­ но­ измерить­ каждую­ предыду­ щую­ часть. Приступим­ :

$ file initrd.gz

initrd.gz: ASCII cpio archive (SVR4 with no CRC)

Первая­ часть — это архив формата­ cpio. Посмотрим­ его содержимое­ , чтобы­ определить­ размер­ :

$ cpio -it < initrd.gz

.

kernel kernel/x86

kernel/x86/microcode

kernel/x86/microcode/AuthenticAMD.bin 62 блока­

Из вывода команды­ понятно­ , что мы просмотре­ ­ли микрокод­ для процес­ ­соров AMD, размер­ которого­ 62 блока­ по 512 байт. Отступаем­ на 62 блока­ от начала файла­ initrd.gz и определя­ ­ем формат­ следующей­ части­ :

$ dd if=initrd.gz bs=512 skip=62 | file - /dev/stdin: ASCII cpio archive (SVR4 with no CRC)

Снова­ перед нами архив формата­ cpio, который мы можем просмотреть­ :

$ dd if=initrd.gz bs=512 skip=62 | cpio -it kernel

kernel/x86

kernel/x86/microcode

kernel/x86/microcode/.enuineIntel.align.0123456789abc

kernel/x86/microcode/GenuineIntel.bin 6760 блоков­

Оказыва­ ется­ , это микрокод­ для процес­ соров­ Intel, который значитель­ но­ боль­ ше — 6760 блоков­ . Вычисляем­ смещение­ к следующей­ части­ :

echo((6760+62)) 6822

Что же представ­ ляет­ собой третий­ блок?

$ dd if=initrd.gz bs=512 skip=6822 | file - /dev/stdin: LZ4 compressed data (v0.1-v0.9)

Перед­ нами данные­ , сжатые­ алгорит­ мом­ LZ4. А что, собствен­ но­ , сжато­ ?

$ dd if=initrd.gz bs=512 skip=6822 | unlz4 | file - /dev/stdin: ASCII cpio archive (SVR4 with no CRC)

А сжат архив cpio, содержимое­ которого­ мы можем увидеть­ после­ пред­ варительной­ распаков­ ки­ :

$ dd if=initrd.gz bs=512 skip=6822 | unlz4 | cpio -it

.

bin conf

conf/arch.conf

...

var/lib

var/lib/dhcp 474504 блока­

Это как раз то, что нам нужно­ , — минимальная­ файловая­ система­ . Теперь у нас достаточ­ но­ информации­ , чтобы­ ее извлечь.

ПРИЛОЖЕНИЕ 2. ИЗВЛЕКАЕМ МИНИМАЛЬНУЮ ФАЙЛОВУЮ СИСТЕМУ

Сведений­ , собранных­

при анализе­

файла­ initrd.gz, хватит­ , чтобы­ можно­ было

сразу­ приступить­

к извлечению­

минимальной­

файловой­

системы­

. Но уместно­

вспомнить­

, что потом нам надо будет собрать­

файл initrd.gz после­ внесения­

изменений­

в

минимальную­

файловую­

систему­

. Поэтому­ , пока еще свежи­

в памяти

сведения­

о структуре­

этого­

файла­ , сохраним­

первые­

его части­

в отдельных­

файлах­ initrd.p1 и initrd.p2, которые затем будем не задумываясь­

использовать­

для сборки­ :

 

 

 

 

 

 

 

 

 

 

 

 

$ dd if=initrd.gz bs=512 count=62 of=initrd.p1 62+0 записей получено­ 62+0 записей отправлено­

31744 байт (32 kB, 31 KiB) скопиро­ ван­

$ dd if=initrd.gz bs=512 skip=62 count=6760 of=initrd.p2 6760+0 записей получено­ 6760+0 записей отправлено­

3461120 байт (3,5 MB, 3,3 MiB) скопиро­ ван­

А теперь можно­ извлечь минимальную­ файловую­ систему­ . Для этого­ надо соз­ дать каталог, в который будут помещены­ ее файлы­ , сделать­ его текущим, пос­ ле чего набрать­ ту же команду­ , которая недавно­ была использована­ для прос­ мотра, заменив на ней ключ t ключом­ m:

mkdir initramfs

&&

cd initramfs

 

dd if=../initrd.gz

bs=512 skip=6822 | unlz4 | cpio -im

171678+1

записей

получено­

 

171678+1

записей

отправлено­

 

87899275

(88 MB,

84

MiB) скопиро­

ван­

474504 блока­

После­ извлечения­ можно­ выйти­ из каталога­ и оценить­ размер­ его содер­ жимого:

$ cd .. && du -sh initramfs 239M initramfs

Почти­ 240 Мбайт — действи­ тель­ но­ , это серьезная­ нагрузка­ на оператив­ ную­ память. Наверняка­ среди­ этой массы­ есть много­ того, что не является­ абсо­ лютно­ необходимым­ на начальной­ фазе загрузки­ операци­ онной­ системы­ . А значит­ , ненужные­ элемен­ ты­ можно­ удалить­ , после­ чего произвести­ сборку­ файла­ initrd.gz с облегченной­ минимальной­ файловой­ системой­ .

ПРИЛОЖЕНИЕ 3. СОБИРАЕМ ФАЙЛ INITRD.GZ

Собирать­ файл initrd.gz будем в порядке­ , обратном тому, в котором раз­ бирали. Сначала­ надо сформировать­ его третью часть init.p3, упаковав­ модифициро­ ван­ ную­ минимальную­ ФС:

$ cd initramfs

$ find . | cpio -H newc -o | lz4 -l8 > ../initrd.p3

В начале своих­ эксперимен­ ­тов я восполь­ ­зовал­ся утилитой­ lz4 без параметров­ и при загрузке­

с модифициро­ ­ван­ного дистри­ ­бути­ва получил сообщение­ об ошибке­ «Initramfs unpacking failed». Из документации­ я узнал, что ключ -l задает­ подходящую­ степень­ сжатия­ .

Осталось­ соединить­ три части­ (первые­ две из них с микрокодом­ процес­ соров­ достались­ в наследс­ тво­ ) в новый файл initrd.gz:

$ cd ..

$ cat initrd.p1 initrd.p2 initrd.p3 > initrd.gz

После­ замены файла­ initrd.gz на носителе­ с дистри­ бути­ вом­ не забудь подсчи­ ­ тать его контроль­ ную­ сумму­ и внести­ исправление­ в файл /md5sum.txt. Тогда­ при загрузке­ не увидишь­ предуп­ режде­ ние­ о том, что носитель поврежден­ .

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

GEEK

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

ИЗУЧАЕМ ЭЛЕКТРОНИКУ С ГРИНЧЕМ

Бип хо хо бип! Прием­ прием­ ...

Наконец то мне удалось­ связать­ ­ся с тобой, приспешник­ ! Это я, Гринч. Я уже украл Рождес­ ­тво, а теперь похищу и ваш любимый Новый год! Нет времени­ на воп­ росы, у нас много­ работы. Мы сделаем­ ловушку­ на Деда Мороза, украдем­ новогоднюю­ елку и научимся­ хакать умные гирлянды­ ! Мне уже удалось­ взломать­ сайт «Хакера» и запостить­ эту статью. Читай скорее­ , пока не пришел­ админ!

prostorosty

I'm just a TechnoFreak. 7753313vv@gmail.com

Прежде­ чем переходить­ к пакостям­ , нам с тобой надо будет как следует­ под­ готовиться­ . Я нашел на «Хакере» несколь­ ко­ статей­ по электро­ нике­ и пайке­ , знания­ откуда­ тебе сегодня­ пригодят­ ся­ . Прочитай­ их, ведь нам предсто­ ит­ работать с электро­ никой­ , иначе­ праздник­ останет­ ся­ на своем­ месте­ !

Цифровая­ электро­ ­ника с самого начала. Собираем­ схемы­ на MOSFET-транзисто­ ­рах

Бунт многоно­ ­жек. Собираем­ устройство­ с интегральными­ микросхе­ ­мами

Время­ паять! Подбира­ ­ем инстру­ ­мен­ты и осва­ иваем искусство­ пайки­

Искусс­ ­тво пайки­ . Выбираем­ инстру­ ­мен­ты, при­ боры и расходни­ ­ки для домашней­ мастер­ ­ской

Прочитал­ ? Горжусь­ ! Начнем­ же немедленно­ подготов­ ку­ к самому ответствен­ ­ ному делу твоей­ жизни­ .

ГРИНЧУ НУЖЕН ТРАНСПОРТ

Тебе­ предсто­ ­ит сконстру­ ­иро­вать для меня механичес­ ­кие сани, прямо­ как у Санты­ . Но если этот пузатый лопух на них подарки­ развозит­ , то я буду скла­ дывать в них подарки­ украден­ ­ные. Только­ без оленей­ — не будем уподоб­ ­лять­ ся Клаусу­ и мучить бедных­ зверят­ , мои сани должны­ быть самоходными­ .

Для изготов­ ­ления моих саней тебе потребу­ ­ется электрод­ ­вигатель. С ним ты наверняка­ сталкивал­ ­ся, но сейчас­ я расска­ ­жу о нем подробнее­ .

Электродвигатель

Как то мой старый­ товарищ Майкл­ Фарадей обнаружил­ , что при взаимо­ ­дей­ ствии магнита­ и электри­ ­чес­кого тока в провод­ ­нике может возникнуть­ неп­ рерывное­ вращение­ . На этом и основыва­ ­ется принцип­ работы электрод­ ­вигате­ ля.

 

 

 

 

Принцип­ работы двигате­ ля­ постоян­

ного­

тока

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Расположив­

в магнитном­

поле вертикаль­

но­ рамку­ из провод­ ника­

и пустив­

по ней ток, мы сможем­

создать­

электро­ маг­ нитное­

 

поле вокруг­ провод­ ника­ .

Оно будет взаимо­ дей­ ство­ вать­

с полюсами­ магнитов­ , и в итоге­ от одного­ рамка­

оттолкнет­

ся­ , а к другому­

притянет­

ся­ . Так рамка­ дойдет­

до горизонталь­ ного­

положения­ , в котором магнитное­

поле перестанет­

действо­ вать­

на магнит­ . Что­

бы вращение­

продол­ жилось­

,

необходимо­

добавить еще одну рамку­ под углом

либо поменять направле­ ние­

тока в рамке­ в нужный­

момент. На гифке­ выше

это делается­

 

при помощи двух полуколец­ , к которым подклю­ чены­

контак­ тные­

пластины­

от батарейки­ . И после­ совершения­

полуобо­ рота­

меняется­

поляр­

ность и вращение­

не прекраща­ ется­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Сущес­ тву­ ет­ немало разных­ типов электро­ мото­ ров­ , но нам потребу­

ется­

дви­

гатель постоян­

ного­

тока.

Переключение­

фаз здесь происхо­ дит­

прямо­ внутри­

двигате­ ля­ . Благода­ ря­ этому­

он

может

питаться­

и

 

постоян­

ным­

током,

и переменным­ . Постоян­

ный­

ток с течением­ времени­

не изменяет­

ся­ по величи­

не и направле­ нию­ , а переменный­

— изменяет­

ся­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Электрод­ вигатель­ на схеме­

Продолжаем делать сани

Санями­ мы будем управлять с рассто­ яния­ , правда­ небольшого­ . Не станем­ наг­ ружаться­ дистанци­ онным­ управлением­ (может, сделаем­ это в следующем­ году). А сейчас­ обойдем­ ся­ провод­ ным­ . Изготовим­ простой­ пульт из перек­ лючателей­ и по длинному­ проводу­ будем рулить нашими санями.

Но сначала­ нам потребу­ ­ются сами сани. Не на голых же моторах ездить, как барон Мюнхга­ ­узен на ядре. Специаль­ ­но для тебя прилагаю­ чертеж­ с раз­ мерами, сможешь­ вырезать все детали сам из пластмас­ ­сы с помощью наг­ ретого паяльником­ ножа или из дерева с помощью лобзика­ .

Чертеж­ саней

Из электро­ ники­ , как ты уже догадался­ , нам потребу­ ется­ всего­ ничего: два моторчика­ редуктора­ и колеса для них, кнопка­ для запуска­ двигате­ лей­ и небольшой­ аккумуля­ тор­ — надо же нам чем то питать наши сани.

Теперь­ паяй всё по схеме­ снизу­ и размещай­ на наших санях. На «Хакере» есть статья о том, как это делать. Провода­ , идущие­ от аккумуля­ тора­ и от кноп­ ки к моторам, ты можешь выбрать­ любой удобной­ тебе длины­ — они будут соединять­ сани с пультом­ , и от нее зависит, насколь­ ко­ далеко ты сможешь­ отойти­ .

Редук­ ­торы с колесами­ расположи­ по бокам, чтобы­ колеса чуть припод­ ­ нимали заднюю­ часть саней. А на аккумуля­ ­тор или батарейку­ наклей­ кноп­ ку — можешь использовать­ их как каркас­ для «пульта­ ». Если после­ монтажа­ колеса крутят­ ­ся не в ту сторону­ , значит­ , стоит­ поменять полярность­ аккумуля­ ­ тора.

Схема­ электро­ ники­ саней

Отлично­ , теперь у нас есть сани. Прежде­ чем отправлять­ ся­ красть на них подарки­ , потренируй­ ся­ в управлении­ . Кнопка­ будет двигать­ их вперед­ , а про­ водом от «пульта­ » можно­ оттянуть­ сани назад. Такое вот простое­ управление­ .

ЛОВУШКА ДЛЯ САНТЫ

Сани­ мы сделали­ , доехали­ на них до домика ничего не подозрева­ ­ющих жителей планеты­ Земля­ , проник­ ­ли в дом и забрали­ все подарки­ . Легко­ ! Но что делать, если мы опереди­ ­ли Деда Мороза и он еще не пришел­ ? Ты ведь зна­ ешь, что он не может показывать­ ­ся на глаза­ людям. Используем­ эту слабость­ себе во благо­ ! Чтобы­ спугнуть­ новогоднего­ волшебни­ ­ка, нам достаточ­ ­но всего­ лишь его обнаружить­ . Для этого­ мы с тобой изготовим­ простую­ сигнализа­ ­ цию растяжку­ , которую можно­ установить­ куда угодно­ . На окно, на дверь, да хоть на камин. Как только­ пузатый красноносый­ дед пролезет­ в квартиру­ , сработа­ ­ет сигнализа­ ­ция, ее жильцы­ проснутся­ , и Дед Мороз исчезнет! Никто­ не получит подарков­ , как и задумано­ .

Для изготов­ ­ления сигнализа­ ­ции нам потребу­ ­ется прищеп­ ­ка, батарейка­ , пара кусочков­ металличес­ ­кого провод­ ­ника и пьезодина­ ­мик. Из всего­ списка­ последний­ элемент­ не был описан­ в статьях­ на «Хакере», поэтому­ сейчас­ я расска­ ­жу о нем подробнее­ .

Пьезодинамик

Внешний­ вид пьезодина­ мика­ и обозначение­ на схеме­

Одна­ из главных­ частей­ пьезодина­ мика­ (он же зуммер­ ) — это мембра­ на­ . Она то и издает­ звук. Происхо­ дит­ это за счет ее непрерыв­ ного­ колебания­ . По сути, она своей­ вибраци­ ей­ «сотряса­ ет­ » воздух­ , так и получается­ писк. Но если подать на мембра­ ну­ постоян­ ное­ напряжение­ , звука­ ты не услышишь­ , разве­ что тихий щелчок­ . Мембра­ на­ выгнется­ , примет­ одно положение­ и боль­ ше двигать­ ся­ не будет. Чтобы­ заставить­ ее и дальше­ звучать­ , необходимо­ пос­ тоянно­ менять напряжение­ . Сделать­ это можно­ с помощью аналого­ вого­ или цифрового­ сигнала­ , о них уже говорилось­ в одной­ из статей­ . Для работы пьезодина­ мика­ необходим­ генератор­ звуковых­ колебаний­ . В большинс­ тве­ современ­ ных­ зуммеров­ он встроенный­ , но перед покупкой­ в этом лучше­ убе­ диться­ .

Возвращаемся к сигнализации

Итак, нам осталось­ присоеди­ ­нить к концам­ прищеп­ ­ки металличес­ ­кие провод­ ­ ники (закручен­ ­ная в маленькую­ спираль­ скрепка­ пойдет­ ) и припаять­ провод­ ­ки от них. Один — к контакту­ зуммера­ , другой­ — к батарейке­ , а также­ соединить­ оставшиеся­ концы­ . Теперь надо все как следует­ закрепить­ на скрепке­ , чтобы­ ловушка­ получилась­ максималь­ ­но компак­ ­тной. И необходимо­ «взвести­ » нашу сигнализа­ ­цию. Для этого­ надо изготовить­ саму растяжку­ . Это будет просто­ нитка­ , с одного­ конца­ которой привяжем­ тонкий­ диэлектрик­ , хотя бы кусочек картона­ . Теперь его можно­ зажать между­ провод­ ­никами прищеп­ ­ки и уста­ новить в нужном­ месте­ . Как только­ дверь откроется­ , диэлектрик­ вылетит из зажима, и цепь замкнет­ ­ся. По квартире­ раздас­ ­тся писк — все проснутся­ , и Дед Мороз сбежит­ .

Ловуш­ ка­ на Деда Мороза готова!

ПОХИТИТЕЛИ ЕЛОК

 

 

 

 

 

 

 

 

 

 

Нет ничего лучше­ , чем похитить елку! Но таскать­

деревья я устал, поэтому­ ты

сделаешь­

елку своими­

руками, а я у тебя ее украду­ ! Тебе понадобят­ ся­ паяль­

ник и светоди­ оды­ . Еще можно­ изготовить­

небольшой­

блок управления­ на базе

чипа 555, чтобы­ заставить­

нашу елку мигать. Про такую схему­ на «Хакере» уже

была статья, можешь посмотреть­

схему­ там, собрать­

ее и подклю­ чить­

к нашей

елке.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Паять­ елку будет очень просто­ — достаточ­ но­ последова­ тель­

но­ соединить­

все светоди­ оды­

и источник питания. Анод одного­ светоди­ ода­ — к катоду сле­

дующего­ , и так, пока не кончатся­

светоди­ оды­ . В конце­ , когда­ останет­ ся­ всего­

два контакта­ , надо, не перепутав­

их, припаять­

анод к плюсу­ батарейки­ ,

а катод — к минусу.

 

 

 

 

 

 

 

 

 

 

Схема­ пайки­ елки

Теперь­ осталось­ припаять­ концы­ нашей схемы­ к батарейке­ «Крона­ ». Елка готова! Иду похищать.

Елка­

Теперь­ я бы хотел украсть новогоднюю­ звезду­ . Вот тебе схема­ пайки­ под­ ходящей звезды­ . Немедленно­ принимай­ ся­ за работу!

Схема­ пайки­ звезды­

Отлично­ , теперь у нас и елка, и звезда­ есть. Все очень компак­ тное­ — украв, можно­ носить с собой в сумке­ и хвастать­ ся­ .

Звезда­

РУКОВОДСТВО ПО ВЗЛОМУ ГИРЛЯНД

Я обещал­ еще расска­ зать­ о взломе­ гирлянд­ . Обычную­ гирлянду­ , которую под­ ключают­ в розетку­ , можно­ взломать­ только­ физически­ . Вскрыть блок управле­ ния, подклю­ чить­ микрокон­ трол­ лер­ , например­ Arduino, и написать собствен­ ную­ программу­ управления­ гирляндой­ . Если тебе это интерес­ но­ , но ты не знаешь­ , как пользовать­ ся­ Arduino, то загляни­ на вики­ «Амперки», там неплохо­ описаны­ азы управления­ этим микрокон­ трол­ лером­ .

Умные­ гирлянды­ для настояще­ го­ злодея­ куда привлекатель­ нее­ ! Ведь мож­ но подклю­ чить­ ся­ к ним по Wi-Fi и управлять каждым­ светоди­ одом­ отдельно­ . Мои приспешни­ ки­ еще в далеком 2018 году заинте­ ресо­ вались­ этой темой, изучили­ очень популярные­ IoT-гирлянды­ марки­ Twinkly и даже создали­ кнопку­ для отключения­ всех подклю­ чен­ ных­ в сеть гирлянд­ !

Парни­ разобрались­ , как гирлянда­ сообщает­ ­ся с мобильным­ приложе­ ­нием. Они выяснили­ , что сначала­ надо напрямую­ подклю­ ­чить­ся к Twinkly как к точке­ доступа­ и настро­ ­ить подклю­ ­чение гирлянды­ к домашней­ сети, через которую ты будешь управлять гирляндой­ . Изучив­ сообщение­ , они узнали­ , что переда­ ваемые данные­ не зашифрованы­ , несмотря­ на то что при исходной настрой­ ­ке пароль от Wi-Fi и передавал­ ­ся в зашифрован­ ­ном виде. Если шифрования­ нет, значит­ , можно­ провер­ ­нуть MITM и изучить­ работу API.

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

Только­ посмотри­ , они вывели на гирлянду­ «змейку­ »! А еще провели­ атаку­ , в ходе которой на всех обнаружен­ ­ных устройствах­ Twinkly выводится­ «Hack the Planet».

MISSION COMPLETE

 

 

 

 

Мой дорогой приспешник­

, ты хорошо поработал­ , и вместе­ мы подготови­ лись­

к похищению­

праздни­ ка­ . Но знаешь­ , я что подумал?

Этот год выдался­

не таким уж и простым­

для многих­ . И было бы совсем­

некрасиво­

лишать

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

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

 

o

 

 

.

 

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

df

-x

 

n

e

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

«Хакеру» нужны новые авторы, и ты можешь стать одним из них! Если тебе интересно то, о чем мы пишем, и есть желание исследовать эти темы вместе с нами, то не упусти возможность вступить в ряды наших авторов и получать за это все, что им причитается.

Авторы получают денежное вознаграждение. Размер зависит от сложности и уникальности темы и объема проделанной работы (но не от объема текста).

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

Кроме того, наличие публикаций — это отличный способ показать работодателю и коллегам, что ты в теме. А еще мы планируем запуск англоязычной версии, так что у тебя будет шанс быть узнанным и за

рубежом.

И конечно, мы всегда указываем в статьях имя или псевдоним автора. На сайте ты можешь сам заполнить характеристику, поставить фото, написать что-то о себе, добавить ссылку на сайт и профили в соцсетях. Или, наоборот, не делать этого в целях конспирации.

Я ТЕХНАРЬ, А НЕ ЖУРНАЛИСТ. ПОЛУЧИТСЯ ЛИ У МЕНЯ НАПИСАТЬ СТАТЬЮ?

Главное в нашем деле — знания по теме, а не корочки журналиста. Знаешь тему — значит, и написать сможешь. Не умеешь — поможем, будешь сомневаться — поддержим, накосячишь — отредактируем. Не зря у нас работает столько редакторов! Они не только правят буквы, но и помогают с темами и форматом и «причесывают» авторский текст, если в этом есть необходимость. И конечно, перед публикацией мы согласуем с автором все правки и вносим новые, если нужно.

КАК ПРИДУМАТЬ ТЕМУ?

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

Первым делом задай себе несколько простых вопросов:

«Разбираюсь ли я в чем то, что может заинтересовать других?»

Частый случай: люди делают что-то потрясающее, но считают свое занятие вполне обыденным. Если твоя мама и девушка не хотят слушать про реверс малвари, сборку ядра Linux, проектирование микропроцессоров или хранение данных в ДНК, это не значит, что у тебя не найдется благодарных читателей.

«Были ли у меня в последнее время интересные проекты?» Если ты ресерчишь, багхантишь, решаешь crackme или задачки на CTF, если ты разрабатываешь что-то необычное или даже просто настроил себе какую-то удобную штуковину, обязательно расскажи нам! Мы вместе придумаем, как лучше подать твои наработки.

«Знаю ли я какую то историю, которая кажется мне крутой?»

Попробуй вспомнить: если ты буквально недавно рассказывал кому-то о чем-то очень важном или захватывающем (и связанным с ИБ или ИТ), то с немалой вероятностью это может быть неплохой темой для статьи. Или как минимум натолкнет тебя на тему.

«Не подмечал ли я, что в Хакере упустили что то важное?» Если мы о чем-то не писали, это могло быть не умышленно. Возможно, просто никому не пришла в голову эта тема или не было человека, который взял бы ее на себя. Кстати, даже если писать сам ты не собираешься, подкинуть нам идею все равно можно.

Уговорили, каков план действий?

1.Придумываешь актуальную тему или несколько.

2.Описываешь эту тему так, чтобы было понятно, что будет в статье и зачем ее кому-то читать. Обычно достаточно рабочего заголовка и нескольких предложений (pro tip: их потом можно пустить на введение).

3.Выбираешь редактора и отправляешь ему свои темы (можно главреду — он разберется). Заодно неплохо бывает представиться и написать пару слов о себе.

4.С редактором согласуете детали и сроки сдачи черновика. Также он выдает тебе правила оформления и отвечает на все интересующие вопросы.

5.Пишешь статью в срок и отправляешь ее. Если возникают какие-то проблемы, сомнения или просто задержки, ты знаешь, к кому обращаться.

6.Редактор читает статью, принимает ее или возвращает с просьбой

доработать и руководством к действию.

7. Перед публикацией получаешь версию с правками и обсуждаешь их

с редактором (или просто даешь добро).

8.Дожидаешься выхода статьи и поступления вознаграждения.

Если хочешь публиковаться в «Хакере», придумай тему для первой статьи и предложи редакции.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

№12 (285)

Андрей­

Письмен­ ­ный

Вален­ тин­ Холмогоров­

Илья Русанен

Главный­ редактор­

 

Ведущий редактор­

Разработ­

­ка

pismenny@glc.ru

 

valentin@holmogorov.ru

rusanen@glc.ru

 

 

 

 

 

Евгения­

Шарипова­

 

 

 

 

 

 

 

Литератур­ ный­ редактор­

 

 

MEGANEWS

Мария­ Нефёдова­ nefedova@glc.ru

АРТ

yambuto yambuto@gmail.com

КОНСУЛЬТАЦИОННЫЙ СОВЕТ

Иван Андреев­ , Олег Афонин­ , Марк Бруцкий­ Стемпковский­ , Алексей­ Глазков­ , Nik Zerof, Юрий Язев

РЕКЛАМА

Анна­ Яковлева­

Директор­ по спецпро­ ­ектам yakovleva.a@glc.ru

РАСПРОСТРАНЕНИЕ И ПОДПИСКА

Вопросы­

по подписке­

:

​Воп­росы по материалам­

:

 

lapina@glc.ru

 

 

 

support@glc.ru​

 

 

 

 

 

 

 

 

 

 

Адрес­ редакции­ : 125080, город Москва­ , Волоколам­ ­ское шоссе­ , дом 1, строение­ 1, этаж 8, помещение­ IX, комната­ 54, офис 7. Издатель­ : ИП Югай Александр­ Олегович­ , 400046, Волгоград­ ­ская область, г. Волгоград­ , ул. Дружбы­ народов, д. 54. Учредитель­ : ООО «Медиа Кар»​ ​125080, город Москва­ , Волоколам­ ­ское шоссе­ , дом 1, строение­ 1, этаж 8, помещение­ IX, комната­ 54, офис 7. Зарегистри­ ­рова­но в Федеральной­ службе­ по надзору­ в сфере­ связи­ , информацион­ ­ных технологий­ и массовых­ коммуника­ ­ций (Роскомнад­ ­зоре), свидетель­ ­ство ​Эл № ​ФС77-​67001 от ​30.08​.​ 2016 года. Мнение­ редакции­ не обязатель­ ­но совпада­ ­ет с мнением­ авторов­ . Все материалы­ в номере предос­ ­тавля­ются как информация­ к раз­ мышлению­ . Лица, использующие­ данную­ информацию­ в противо­ ­закон­ных целях, могут быть привлечены­ к ответствен­ ­ности. Редакция­ не несет ответствен­ ­ности за содержание­ рекламных­ объявле­ ­ний в номере. По вопросам­ лицензирова­ ­ния и получения­ прав на использование­ редакцион­ ­ ных материалов­ журнала­ обращай­ ­тесь по адресу­ : xakep@glc.ru. © Журнал­ «Хакер», РФ, 2022

Соседние файлы в папке журнал хакер