#########################
# "/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 - отмена загрузки "файла сохранения"