#########################

# "/init" - перевод + дополнения.

# источник: fossapup64-9.5.iso/README.txt

# ("аналог" - https://github.com/puppylinux-woof-CE/initrd_progs/blob/master/0initrd/README.txt)

#

# -----------------

#

# 220824 - tranlate-shell, knn, imp

#

################

#

# --220912 edit

#
#


//////// ///////// /////// /////////

\\\\\ \\\\\\\\\ \\\\\\\ \\\\\\\\\

/////// ////////// /////// /////////


=========================================

/init

=========================================


Сценарий инициализации называют сердцем Puppy Linux.

Это не потому, что он реализует много вещей Puppy, а потому, что именно с этого начинается Puppy.

Когда начинается инициализация, полноценный Puppy по-прежнему представляет собой просто набор файлов на устройстве хранения.

Задача init состоит в том, чтобы использовать эти файлы для создания Puppy в оперативной памяти, а затем передать ему управление.



Некоторые важные файлы в мире инициализации:

=========================================


vmlinuz:

Это часть Puppy Linux для Linux, обычно называемая ядром Linux.

Ядро грузится в память и на нем производится работа до запуска инициализации.


initrd.gz:

Содержит файлы Puppy, которые формируют файловую систему на основе оперативной памяти, которая находится на месте при запуске init.

Сценарий инициализации является одним из этих файлов.


puppy-Файлы-sfs , puppy...sfs, zdrv...sfs, fdrv...sfs, ydrv...sfs, adrv...sfs:

(Где ... — конкретное имя и версия puppy, например, zdrv_slacko64_6.9.5.sfs)


puppy...sfs:

Это основной файл Puppy, содержащий большую часть, если не все, программное обеспечение, которое есть в текущем Puppy.

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


zdrv...sfs:

Он содержит модули ядра (драйверы устройств) и файлы прошивки, соответствующие ядру в vmlinuz.

Без этого файла Puppy обычно загружается, но некоторые устройства либо не работают, либо работают неправильно.


fdrv...sfs:

Он содержит файлы прошивки. Его можно использовать для переопределения содержимого zdrv...sfs.

Этот файл присутствует только в некоторых puppy.


ydrv...sfs:

Условно файл патча. Его можно использовать для переопределения содержимого файла puppy...sfs.

Обычно его нет.


adrv...sfs:

Условно файл приложения. Он переопределяет содержимое всех других файлов sfs.

Обычно его нет.



Обзор того, как это работает:

=========================


* Типичная frugal-установка Puppy — это каталог, содержащий вышеуказанные файлы.

* Итак, инициализация (init) начинается с определения местоположения этого каталога,

путем поиска файла puppy...sfs.

* При отсутствии каких-либо указаний на его местонахождение инициирует поиск по всем разделам подключенных носителей.

* Если он не может найти файл puppy...sfs, он прекращает загрузку, и сбрасывается в

консоль с несколькими сообщениями об ошибках на экране.

* Обнаружив puppy...sfs, он приступает к созданию многоуровневой файловой системы.

из файлов sfs в каталоге.


* Многоуровневая файловая система состоит из стека каталогов, большинство из этих слоев доступны только для чтения,

но верхний всегда доступен для чтения и записи.

* Каталог, содержащий стек, содержит все файлы из каждого слоя.

* Но если файл существует более чем в одном слое, отображается тот, который находится в самом верхнем слое.

Таким образом, порядок слоев имеет значение.


* Init создает стек, содержащий только каталог в RAM на основе tmpfs в качестве уровня чтения-записи.

* Затем он добавляет в этот стек файл puppy...sfs.

* Затем он обрабатывает другие файлы sfs, если они существуют.

* Добавляет fdrv...sfs.

* Добавляет zdrv...sfs.

* Он вставляет ydrv...sfs непосредственно под слоем чтения-записи.

* Он вставляет adrv...sfs непосредственно под слоем чтения-записи.

* Если все файлы присутствуют, мы получаем стек, который выглядит следующим образом:

tmpfs чтение-запись

adrv...sfs только для чтения

ydrv...sfs только для чтения

puppy...sfs только для чтения

fdrv...sfs только для чтения

zdrv...sfs только для чтения


* Если это первая загрузка, стек готов к включению в работающую систему.

* Но этот первый загрузочный стек не содержит постоянного хранилища.


* Если вы изменяете какие-либо файлы в работающей системе, они записываются в

слой чтения-записи, который существует только в оперативной памяти.


* При первой перезагрузке или выключении Puppy спросит, хотите ли вы сохранить сеанс.

* Если вы сохраните сессию, вам будет предложен процесс создания слоя сохранения,

в который Puppy затем скопирует все измененные файлы.

* Итак, если это не первая загрузка, init должен настроить любой слой сохранения и вставить его в стек.


* Init пытается разобраться, какой тип механизма слоя сохранения используется, и сделать его доступным в виде каталога.

* Если эта попытка потерпит неудачу в какой-либо момент, ничего дополнительного делаться не будет, и загрузка продолжится с первого загрузочного стека.


* Если считается, что загрузка происходит с "flash" устройства, каталог, содержащий слой сохранения

вставляется как слой только для чтения непосредственно под слоем для чтения и записи.

* В противном случае уровень чтения-записи tmpfs заменяется каталогом

содержащий слой сохранения в качестве слоя чтения-записи.

* Затем стек превращается в работающую систему, и init завершает работу.


* Если init обнаруживает некритические ошибки, он обычно записывает их в файл с именем bootinit.log.

* bootinit.log также хранит отладочные сообщения, которые вы, возможно, захотите прочитать.

* К этому файлу можно получить доступ в работающем puppy как /initrd/tmp/bootinit.log



Файлы/параметры, которые предоставляют входные данные для инициализации и изменяют то, что она делает:

================================================================



DISTRO_SPECS:

Это файл в initrd.gz, созданный компоновщиком Puppy.

Он содержит определения различной информации о конкретном puppy.

DISTRO_FILE_PREFIX определяет имя, которое часто встречается в принадлежащих ему файлах. например 'slacko64'.

DISTRO_VERSION определяет номер версии. например «6.9.5»

Очень важны для инициализации DISTRO_PUPPYSFS, DISTRO_ZDRVSFS, DISTRO_FDRVSFS, DISTRO_YDRVSFS,

DISTRO_ADRVFSS, которые определяют имена файлов по умолчанию для каждого из файлов Puppy sfs.



Параметры загрузки:

================


pmedia=<atahd|ataflash|usbhd|usbflash|cd>

Указывает тип загрузочного устройства.

Если это «cd», то в разделах выполняется поиск файла слоя сохранения, единственная ситуация, которая запускает такой поиск.

Если первые 3 символа — «usb», то любой поиск ограничен только USB-устройствами.

Если последние 5 символов являются «flash», верхний слой в стеке остается tmpfs в памяти, в противном случае любой найденный слой сохранения становится верхним слоем в стеке.

Этот параметр загрузки должен всегда предоставляться.


psubdir=</path/to/install/directory>

Если файлы Puppy находятся не в корне раздела, а в подкаталоге, путь этого каталога относительно корня раздела должен быть указан с помощью этого параметра.

например Если раздел sdb2 смонтирован как /mnt/sdb2, а файлы Puppy находятся в /mnt/sdb2/tahr64, то необходимо указать «psubdir=tahr64» или «psubdir=/tahr64».

Этот параметр может указывать подкаталоги более чем на одном уровне, например. "psubdir=puppy/tahr64" или "psubdir=/puppy/tahr64".

Если начальный «/» не указан, init добавит его.

Это путь по умолчанию для поиска любого файла puppy и любого раздела.


------------------------------------------------------------

pupsfs=<partition> Указывает раздел pupsfs...sfs

zdrv=<partition> Указывает раздел zdrv...sfs

fdrv=<partition> Указывает раздел fdrv...sfs

adrv=<partition> Указывает раздел adrv...sfs

ydrv=<partition> Указывает раздел ydrv...sfs

psave=<partition> Указывает раздел слоя сохранения


Где <partition> может быть именем, например, sdb2, или меткой, например Work или uuid

например 0db94719-cdf1-44b7-9766-23db62fb85a5


psave=<partition>

Указание psave=<partition> может быть весьма полезным для направления всех слоев сохранения в другой раздел.

например Если ваши puppy находятся на разделе ntfs,

то вы можете получить себе папку для сохранения, создав раздел Linux на USB-накопителе или жестком диске,

а затем указать загрузочный параметр psave=<uuid раздела Linux>.

Если вы забудете подключить соответствующее устройство, Puppy просто выполнит первую загрузку.

Никакого вреда, просто вставьте соответствующее USB-устройство и перезагрузите компьютер.


например: adrv=sdd6

пример: psave=Work

пример: pupsfs=0db94719-cdf1-44b7-9766-23db62fb85a5


----

pupsfs=<раздел>:<путь>/<имя файла> Указывает файл puppy...sfs.

zdrv=<раздел>:<путь>/<имя файла> Указывает файл zdrv...sfs.

fdrv=<раздел>:<путь>/<имя файла> Задает файл fdrv...sfs.

adrv=<раздел>:<путь>/<имя файла> Указывает файл adrv...sfs.

ydrv=<раздел>:<путь>/<имя файла> Задает файл ydrv...sfs.

psave=<раздел>:<путь>/<имя файла> Задает файл слоя сохранения.


Где <partition> может быть именем, например, sdb2, или меткой, например. Работа или uuid

Дж. 0Dbs4719-SDF1-44BH-9766-23DbsPumpPump

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

например "pupsfs=0db94719-cdf1"


Где <путь> — это подкаталог в разделе.

например "pupsfs=sdb2:/путь/к/" или "psave=:/путь/к/"

Любой указанный <путь> относится к корню раздела, так же как и "psubdir=".

Если <путь> не начинается с "/", то к нему добавляется "/".

Если <путь> не указан, используется каталог, определенный параметром "psubdir=".


Где <filename> просто имя файла,

например "pupsfs=sdb2:/path/to/my-improved-puppy.sfs" или "psave=sdc2:my-improved-savefolder"

Если <filename> не указано, используется имя файла по умолчанию, определенное в файле DISTRO_SPECS.


Для целей спецификации "psave=" папка сохранения считается просто файлом.

Спецификация <path> определяет каталог, содержащий папку сохранения,

и спецификация <filename> определяет его имя.

Итак, «psave=sdb4:/lxpupsc/mysave» значит, что папка сохранения находится в разделе sdb4.

в каталоге «/lxpupsc» с именем «mysave».

Принимая во внимание, что «psave=sdb4:/lxpupsc/mysave/» значит, что папка сохранения находится в разделе sdb4

в каталоге «/lxpupsc/mysave» с именем папки сохранения по умолчанию для puppy.


Не обязательно указывать все элементы,

но если ":" отсутствует, предполагается, что это спецификация <partition>.

например "pupsfs=sdb2" указывает, что файл puppy...sfs находится на sdb2 по пути по умолчанию с именем файла по умолчанию.

«fdrv=:alternate-firmware.sfs» указывает, что это файл с именем alternate-firmware.sfs.

на разделе по умолчанию в каталоге по умолчанию, то есть там, где находится puppy... sfs.


Рекомендуется всегда указывать pupsfs=<partition>.

Это позволяет init перейти прямо к этому разделу, чтобы найти файлы Puppy.

вместо поиска по всем разделам puppy...sfs.


пример: psave=sdc1:/path/to/tahrsave.4fs

пример: psave=sdc1:tahrsave.4fs

пример: zdrv=sdc1:/zz/myzz.sfs

Пример: adrv=sdd6:/puppy/drvs/custom/adrv.sfs

например: pupsfs=sdb2:/puppy/precise/puppy_precise_5.7.1.sfs


------------------------------------------------------------


pkeys=<спецификация раскладки клавиатуры> например de

Используется для настройки раскладки клавиатуры, которую будет использовать Puppy.


plang=<спецификация языка> например. de_DE.UTF-8

Указывает язык, который будет использовать Puppy, включая любые сообщения, отображаемые init.

Если параметр pkeys не указан, для установки раскладки клавиатуры используются первые две буквы этой спецификации.


pimod=<, разделенный список имен модулей ядра>

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

Нормальная загрузка модулей ядра не происходит до завершения инициализации.

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

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


pfix=<ram, nox, trim, nocopy, fsck, fsckp, rdsh, <число>>

Параметр pfix представляет собой список, разделенный символом ',', состоящий из 1 или более указанных выше подпараметров.

ram: работать только в оперативной памяти (не загружать сохранение ${DISTRO_FILE_PREFIX}).

nox: не запускать Х.

trim: добавьте «отменить» в параметры монтирования, если SSD.

copy: скопировать файлы .sfs в оперативную память

nocopy: не копировать файлы .sfs в оперативную память (по умолчанию копировать, если оперативная память <= 1024 МБ).

fsck: выполнить fsck файла ${DISTRO_FILE_PREFIX}save.?fs.

fsckp: выполнить fsck перед первым монтированием поддерживаемых разделов.

rdsh: выход в оболочку на начальном виртуальном диске.

<number>: черный список последних <число> папок (мультисессия). например pfix=3



Файлы параметров:

================


Если они существуют в каталоге frugall установки, их содержимое используется для установки некоторых переменных, которые в противном случае могли бы быть установлены параметрами загрузки.


SAVEMARK

Предоставляет средства указания того, что файл сохранения слоя находится в другом разделе того же

устройство. Он содержит одно число. Если puppy...sfs находится в sdb2 и SAVEMARK

содержит 4, ожидается, что файл слоя сохранения будет в формате sdb4.


initmodules.txt

Содержит список модулей ядра, которые init загружаются перед любым взаимодействием с клавиатурой.

Обычно это модули, необходимые для работы клавиатуры.


BOOT_SPECS

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

Его также можно использовать для установки других переменных в инициализации, например. "TZ='XXX-10'" устанавливает часовой пояс в Квинсленде, Австралия.

Идея состоит в том, что копия этого файла находится в пользовательском пространстве, пользователь редактирует этот файл, а затем сохраняет его копию в initrd.gz.

Этот файл также можно использовать вместо определенных файлов параметров, таких как initmodules.txt и даже SAVEMARK.

Частью этой концепции является перенос сложности из init в работающую систему.



#############################

ДОПОЛНИТЕЛЬНЫЕ ТЕХНИЧЕСКИЕ ПРИМЕЧАНИЯ

#############################


Как скрипт определяет, какой pupsave использовать

=============================================


Если вы не указали psave=<partition>:<filename>, то init выглядит

для файла с этим базовым именем:


/DISTRO_SPECS -> DISTRO_FILE_PREFIX='...'


${DISTRO_FILE_PREFIX}save — это фиксированное базовое имя для всех папок pupsave.

${DISTRO_FILE_PREFIX}save.?fs — это фиксированное базовое имя для всех файлов pupsave.



//////// ///////// /////// ///////// ///////

\\\\\ \\\\\\\\\ \\\\\\\ \\\\\\\\\ \\\\\\\

/////// ////////// /////// ///////// //////



ещё по теме puppy-init:

http://www.wikka.puppylinux.com/init

==============





#



######

#

# 220912 --knn

#

#

# незадокументированно, но иногда полезно ( # успешно скармливается иниту)

#


===========


значение параметров загрузки =:x


--------------

Пр.:


adrv=:x - отмена загрузки 'adrv...sfs'


ydrv=:x - отмена загрузки 'ydrv...sfs'


psave=:x - отмена загрузки "файла сохранения"