Pxe: различия между версиями

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Соберём профиль education.iso (тут будет ошибка сборки, но этот раздел может быть полезен для понимания ситуации "в общем"))
(Alt Linux)
 
(не показано 11 промежуточных версий этого же участника)
Строка 74: Строка 74:
  
 
=Alt Linux=
 
=Alt Linux=
 +
 +
==Почему этот раздел находится в статье с именем PXE?==
 +
 +
Потому что конечная цель пересборки одного из профилей mkimage-profiles -- получение на выходе файлов, пригодных для загрузки через PXE.
 +
 +
Понятное дело, что, например, из iso и так понятно как загружаться...
  
 
==Предисловие==
 
==Предисловие==
Строка 175: Строка 181:
 
Т.е. не теряем ve/ и /vm в начале имён профилей из двух последних категорий!
 
Т.е. не теряем ve/ и /vm в начале имён профилей из двух последних категорий!
  
===Соберём профиль education.iso (тут будет ошибка сборки, но этот раздел может быть полезен для понимания ситуации "в общем")===
+
===Соберём профиль education.iso (тут будет, скорее всего ошибка сборки, если вы делаете это впервые)===
  
 
Если ещё в предыдущем разделе не перешли, то переходим в каталог репозитория
 
Если ещё в предыдущем разделе не перешли, то переходим в каталог репозитория
Строка 199: Строка 205:
 
Поскольку мы не офисные пользователи, а инженеры, пытающиеся пересобрать целый дистрибутив, мы должны смириться с тем, что это не получится так же легко, как, например, открыть видео файл и посмотреть киношку на любимом компьютере, на котором уже все настроено и работает.
 
Поскольку мы не офисные пользователи, а инженеры, пытающиеся пересобрать целый дистрибутив, мы должны смириться с тем, что это не получится так же легко, как, например, открыть видео файл и посмотреть киношку на любимом компьютере, на котором уже все настроено и работает.
 
Мы пытаемся собрать дистрибутив (!) -- и это по определению не может быть просто.
 
Мы пытаемся собрать дистрибутив (!) -- и это по определению не может быть просто.
 +
 +
====Возможная ошибка №1====
  
 
Разбираемся что не так, читая логи...
 
Разбираемся что не так, читая логи...
Строка 216: Строка 224:
 
</pre>
 
</pre>
  
Видим, что систем ругается на отсутствие пакета make-initrd-bootchain. Однако, попытка его поставить в нашей ОС (см. выше конкретную версию) ни к чему не приведйт. По кр. мере на текущий момент (2022-02-18), т.к. пакет отсутствует напрочь в P10 и есть он только в сизифе.
+
Видим, что систем ругается на отсутствие пакета make-initrd-bootchain. Однако, попытка его поставить в нашей ОС (см. выше конкретную версию) ни к чему не приведёт.
 +
 
 +
Дело в том, что согласно вот этому разделу документации (http://nightly.altlinux.org/docs/mkimage-profiles.html#_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_branch) мы собираем не тот бранч, на базе которого построена наша сборочная ОС. У нас конкретно бранч называется
 +
 
 +
p10
  
Поэтому оставляем идею сборки education.iso и берём другой профиль. Ну или если очень нужен education.iso -- меняем базовую ОС на другую, которая будет подключена к сизифу. Или подключаем сизиф репозиторий (так, вроде, тоже можно)...
+
, а если прочитать информацию по приведённой выше ссылке, то мы узнаем, что собирали мы на самом деле бранч под названием
 +
 
 +
sisyphus
 +
 
 +
Чтобы это исправить, делаем:
 +
 
 +
<pre>
  
 +
mkdir ~/.mkimage
  
 +
cat << 'EOF' > ~/.mkimage/profiles.mk
 +
ifneq (,$(BRANCH))
 +
APTCONF = ~/apt/apt.conf.$(BRANCH).$(ARCH)
 +
else
 +
APTCONF = ~/apt/apt.conf.sisyphus.$(ARCH)
 +
endif
 +
EOF
  
===Соберём профиль education.iso (тут будет ошибка сборки, но этот раздел может быть полезен для понимания ситуации "в общем")===
+
</pre>
  
Если ещё в предыдущем разделе не перешли, то переходим в каталог репозитория
+
Затем собираем с указанием переменной с бранчем:
  
  cd ~/mkimage-profiles
+
  BRANCH=p10 make education.iso
  
Собираем
 
  
make education.iso
+
====Возможная ошибка №2====
  
Процесс сборки на консоли должен выглядеть примерно так:
+
На этот раз ошибка будет выглядеть примерно так
  
 
<pre>
 
<pre>
 
** goal: education.iso
 
** goal: education.iso
 
** ARCH: x86_64
 
** ARCH: x86_64
09:24:18 cleaning up  
+
14:10:24 cleaning up  
09:24:19 initializing BUILDDIR: build/
+
14:10:26 initializing BUILDDIR: build/
09:24:19 preparing distro config
+
14:10:26 preparing distro config
make[1]: *** [lib/profile.mk:135: profile/populate] Ошибка 2
+
14:11:19 starting image build (coffee time)
 +
14:21:56 failed, see log: build/build.log
 +
14:21:56 (you might want to rerun with DEBUG=1)
 +
E: You don't have enough free space in /tmp/.private/administrator/mkimage-profiles.build.tG4BsFD/main/.work/pkgbox/aptbox/var/cache/apt/archives/.
 +
make[1]: *** [lib/build.mk:80: build-image] Ошибка 2
 
make: *** [Makefile:42: education.iso] Ошибка 1
 
make: *** [Makefile:42: education.iso] Ошибка 1
 
</pre>
 
</pre>
  
Поскольку мы не офисные пользователи, а инженеры, пытающиеся пересобрать целый дистрибутив, мы должны смириться с тем, что это не получится так же легко, как, например, открыть видео файл и посмотреть киношку на любимом компьютере, на котором уже все настроено и работает.
+
Скорее всего это связано с недостаточным количеством оперативной памяти на сборочной машине.
Мы пытаемся собрать дистрибутив (!) -- и это по определению не может быть просто.
 
 
 
Разбираемся что не так, читая логи...
 
 
 
<pre>
 
tail build/build.log
 
cp: warning: source file 'tagged/base+regular+extra' specified more than once
 
cp: warning: source file 'tagged/base+regular+extra' specified more than once
 
cp: warning: source file 'tagged/base+extra' specified more than once
 
cp: warning: source file 'tagged/base+l10n' specified more than once
 
cp: warning: source file 'tagged/security+luks' specified more than once
 
Error: Packages are not available in /tmp/.private/administrator/mkimage-profiles.build.CY9BckM/pkg/lists/STAGE1_PACKAGES:
 
make-initrd-bootchain
 
check-pkg-list: Some lists contain unavailable packages
 
make[3]: *** [Makefile:40: check-lists] Error 1
 
make[2]: *** [Makefile:11: all] Error 2
 
</pre>
 
 
 
Видим, что систем ругается на отсутствие пакета make-initrd-bootchain. Однако, попытка его поставить в нашей ОС (см. выше конкретную версию) ни к чему не приведйт. По кр. мере на текущий момент (2022-02-18), т.к. пакет отсутствует напрочь в P10 и есть он только в сизифе.
 
  
Поэтому оставляем идею сборки education.iso и берём другой профиль. Ну или если очень нужен education.iso -- меняем базовую ОС на другую, которая будет подключена к сизифу. Или подключаем сизиф репозиторий (так, вроде, тоже можно)...
+
В ходе текущего эксперимента удалось собрать образ education.iso только с объёмом оперативной памяти равным - XX гигабайт

Текущая версия на 14:30, 18 февраля 2022

OpenWRT

Подготовка сборочницы

apt update && apt dist-upgrade -y && apt install -y binutils libncurses5-dev bzip2 flex gawk gcc-7 grep libc-dev libz-dev make perl python rsync subversion unzip git
cd


Клонирование исходников и сборка

git clone https://github.com/openwrt/openwrt
cd openwrt
make menuconfig

(там выбрать target x86, subtarget=x86_64), в build settings сконфигурить размеры образа, еще в base system выпилить firewall если он не нужен, и т.д...


make -j$(nproc)

результаты будут в папке bin

Если нужен доп. софт

./scripts/feeds update -a
./scripts/feeds install -a

Затем через

make menuconfig

выбираем нужные пакеты и пересобираем через

make -j$(nproc)

Если нужно добавить пакет вручную

В каталоге

./feeda/packages/нужная_категория

создать каталог по аналогии с существующими, сформировать внутри Makefile, затем

./scripts/feeds update -i
./scripts/feeds install -a

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

make menuconfig

И собрать всё как обычно

make -j$(nproc)

Переопределение и добавление каталогов и файлов в rootfs

Чтобы добавлять/заменять файлы в будущем образе (менять конфиги/ключи/что угодно) нужно создать папку

files

на вернхнем уровне (там же где .config) и работать с ней так, как будто это корень системы.

Т.е., например,

files/etc/rc.local

в образе будет как

/etc/rc.local

, ну и т.д...


Alt Linux

Почему этот раздел находится в статье с именем PXE?

Потому что конечная цель пересборки одного из профилей mkimage-profiles -- получение на выходе файлов, пригодных для загрузки через PXE.

Понятное дело, что, например, из iso и так понятно как загружаться...

Предисловие

Общая идея состоит в том, чтобы иметь инструмент для пересборки актуального дистрибутива "Альт Линукс" с возможностью модификации образа под различные задачи, решение которых предполагается через загрузку по PXE.

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

Подготавливаем сборочную машину

Конкретно в рамках этого мануала установлена ОС https://mirror.yandex.ru/altlinux/p10/images/workstation/x86_64/alt-workstation-10.0-x86_64.iso. Далее все выполняемые действия буду проходить внутри неё.

Виртуальная машина, на которой проходит эксперимент имеет 32 ядра, 8 гигабайт оперативной памяти, 50 гигабайт ssd диск


Также исходим из того, что alt-workstation-10.0-x86_64.iso установлена таким образом, что не-root пользователя там зовут administrator и ему задан некоторый пароль. Для простоты работы точно такой же пароль задан и пользователю root. Предыдущее предложение важно для новичков в мире GNU/Linux, т.к. команды, приведённые ниже, будут зависеть от не-root пользователя и избавят неопытных пользователей от необходимости додумывать вводимые команды, т.к. команды сразу будут приведены в конкретном виде.


Устанавливаем пакеты для сборки

apt-get install && apt-get dist-upgrade -y && update-kernel -y && apt-get install -y mkimage mkimage-preinstall hasher git-core isomd5sum make-initrd-bootchain

Добавляем не-root пользователя в хешер

hasher-useradd administrator

Разрешаем хешеру монтировать /proc

echo 'allowed_mountpoints=/proc' >> /etc/hasher-priv/system

Входим под не-root пользователем

su - administrator

Если вдруг (если вдруг!) нужно будет разрешить делать sudo su из под пользователя administrator (было пару раз, что при сборке система просила повысить привилегии), то нужно раскоментировать строчку

# WHEEL_USERS ALL=(ALL) NOPASSWD: ALL

в файле

/etc/sudoers

, затем выйти и войти пользователем administrator


Создаём рабочие каталоги (мы в ~ пользователя administrator, если что, стоим и под пользователем administrator)

mkdir -p ~/out ~/tmp

Получаем репозиторий с профилями сборки для Альт Линукс

Стоя в ~ пользователя administrator

git clone git://git.altlinux.org/gears/m/mkimage-profiles.git

Пробуем что-нибудь собрать

Пока не начали, немного информации...

Перейдём в ~/mkimage-profiles

cd ~/mkimage-profiles

Просмотрим все доступные профили

make help

В результате будет выведен список доступных профилей по категориям. Категории могут быть примерно такими:

** available distribution targets:
и тут под этой строчкой много-много всяких профилей. Например, alt-workstation.iso

или такими:

** available virtual environment targets:
и тут опять же много всяких профилей. Например, ve/base.squash.xz

или категория:

** available virtual machine targets:
и тут опять список доступных профилей. Например vm/regular-cinnamon.vdi


Важный момент (возможно, не сразу понятный для начинающих): При сборке конкретного профиля конкретной категории параметром в команду

make

нужно передавать полное имя профиля. Касательно выше перечисленных разделов это будет, соответственно:

make education.iso

или

make ve/base.squash.xz

или

make vm/regular-cinnamon.vdi

Т.е. не теряем ve/ и /vm в начале имён профилей из двух последних категорий!

Соберём профиль education.iso (тут будет, скорее всего ошибка сборки, если вы делаете это впервые)

Если ещё в предыдущем разделе не перешли, то переходим в каталог репозитория

cd ~/mkimage-profiles

Собираем

make education.iso

Процесс сборки на консоли должен выглядеть примерно так:

** goal: education.iso
** ARCH: x86_64
09:24:18 cleaning up 
09:24:19 initializing BUILDDIR: build/
09:24:19 preparing distro config
make[1]: *** [lib/profile.mk:135: profile/populate] Ошибка 2
make: *** [Makefile:42: education.iso] Ошибка 1

Поскольку мы не офисные пользователи, а инженеры, пытающиеся пересобрать целый дистрибутив, мы должны смириться с тем, что это не получится так же легко, как, например, открыть видео файл и посмотреть киношку на любимом компьютере, на котором уже все настроено и работает. Мы пытаемся собрать дистрибутив (!) -- и это по определению не может быть просто.

Возможная ошибка №1

Разбираемся что не так, читая логи...

tail build/build.log 
cp: warning: source file 'tagged/base+regular+extra' specified more than once
cp: warning: source file 'tagged/base+regular+extra' specified more than once
cp: warning: source file 'tagged/base+extra' specified more than once
cp: warning: source file 'tagged/base+l10n' specified more than once
cp: warning: source file 'tagged/security+luks' specified more than once
Error: Packages are not available in /tmp/.private/administrator/mkimage-profiles.build.CY9BckM/pkg/lists/STAGE1_PACKAGES:
make-initrd-bootchain
check-pkg-list: Some lists contain unavailable packages
make[3]: *** [Makefile:40: check-lists] Error 1
make[2]: *** [Makefile:11: all] Error 2

Видим, что систем ругается на отсутствие пакета make-initrd-bootchain. Однако, попытка его поставить в нашей ОС (см. выше конкретную версию) ни к чему не приведёт.

Дело в том, что согласно вот этому разделу документации (http://nightly.altlinux.org/docs/mkimage-profiles.html#_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_branch) мы собираем не тот бранч, на базе которого построена наша сборочная ОС. У нас конкретно бранч называется

p10

, а если прочитать информацию по приведённой выше ссылке, то мы узнаем, что собирали мы на самом деле бранч под названием

sisyphus

Чтобы это исправить, делаем:


mkdir ~/.mkimage

cat << 'EOF' > ~/.mkimage/profiles.mk
ifneq (,$(BRANCH))
APTCONF = ~/apt/apt.conf.$(BRANCH).$(ARCH)
else
APTCONF = ~/apt/apt.conf.sisyphus.$(ARCH)
endif
EOF

Затем собираем с указанием переменной с бранчем:

BRANCH=p10 make education.iso


Возможная ошибка №2

На этот раз ошибка будет выглядеть примерно так

** goal: education.iso
** ARCH: x86_64
14:10:24 cleaning up 
14:10:26 initializing BUILDDIR: build/
14:10:26 preparing distro config
14:11:19 starting image build (coffee time)
14:21:56 failed, see log: build/build.log
14:21:56 (you might want to rerun with DEBUG=1)
E: You don't have enough free space in /tmp/.private/administrator/mkimage-profiles.build.tG4BsFD/main/.work/pkgbox/aptbox/var/cache/apt/archives/.
make[1]: *** [lib/build.mk:80: build-image] Ошибка 2
make: *** [Makefile:42: education.iso] Ошибка 1

Скорее всего это связано с недостаточным количеством оперативной памяти на сборочной машине.

В ходе текущего эксперимента удалось собрать образ education.iso только с объёмом оперативной памяти равным - XX гигабайт