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

Материал из wiki.nntc.nnov.ru
Перейти к навигации Перейти к поиску
(Подготавливаем сборочную машину)
(Alt Linux)
 
(не показано 18 промежуточных версий этого же участника)
Строка 74: Строка 74:
  
 
=Alt Linux=
 
=Alt Linux=
 +
 +
==Почему этот раздел находится в статье с именем PXE?==
 +
 +
Потому что конечная цель пересборки одного из профилей mkimage-profiles -- получение на выходе файлов, пригодных для загрузки через PXE.
 +
 +
Понятное дело, что, например, из iso и так понятно как загружаться...
  
 
==Предисловие==
 
==Предисловие==
Строка 84: Строка 90:
  
 
Конкретно в рамках этого мануала установлена ОС https://mirror.yandex.ru/altlinux/p10/images/workstation/x86_64/alt-workstation-10.0-x86_64.iso. Далее все выполняемые действия буду проходить внутри неё.
 
Конкретно в рамках этого мануала установлена ОС 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.
 
Также исходим из того, что alt-workstation-10.0-x86_64.iso установлена таким образом, что не-root пользователя там зовут administrator и ему задан некоторый пароль. Для простоты работы точно такой же пароль задан и пользователю root.
Строка 91: Строка 100:
 
Устанавливаем пакеты для сборки
 
Устанавливаем пакеты для сборки
  
  apt-get install && apt-get dist-upgrade -y && update-kernel -y && apt-get install -y mkimage mkimage-preinstall hasher git-core isomd5sum
+
  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 пользователя в хешер
 
Добавляем не-root пользователя в хешер
Строка 120: Строка 129:
 
  mkdir -p ~/out ~/tmp
 
  mkdir -p ~/out ~/tmp
  
===Получаем репозиторий с профилями сборки для Альт Линукс===
+
==Получаем репозиторий с профилями сборки для Альт Линукс==
  
 
Стоя в ~ пользователя administrator
 
Стоя в ~ пользователя administrator
Строка 126: Строка 135:
 
  git clone git://git.altlinux.org/gears/m/mkimage-profiles.git
 
  git clone git://git.altlinux.org/gears/m/mkimage-profiles.git
  
===Пробуем что-нибудь собрать===
+
==Пробуем что-нибудь собрать==
  
====Пока не начали, немного информации...====
+
===Пока не начали, немного информации...===
  
 
Перейдём в ~/mkimage-profiles
 
Перейдём в ~/mkimage-profiles
Строка 141: Строка 150:
  
 
  ** available distribution targets:
 
  ** available distribution targets:
  и тут под этой строчкой много-много всяких профилей. Например, education.iso
+
  и тут под этой строчкой много-много всяких профилей. Например, alt-workstation.iso
  
 
или такими:
 
или такими:
Строка 172: Строка 181:
 
Т.е. не теряем ve/ и /vm в начале имён профилей из двух последних категорий!
 
Т.е. не теряем ve/ и /vm в начале имён профилей из двух последних категорий!
  
 
+
===Соберём профиль education.iso (тут будет, скорее всего ошибка сборки, если вы делаете это впервые)===
====Соберём профиль education.iso====
 
  
 
Если ещё в предыдущем разделе не перешли, то переходим в каталог репозитория
 
Если ещё в предыдущем разделе не перешли, то переходим в каталог репозитория
Строка 183: Строка 191:
 
  make education.iso
 
  make education.iso
  
Правильный процесс сборки на консоли должен выглядить примерно так:
+
Процесс сборки на консоли должен выглядеть примерно так:
 +
 
 +
<pre>
 +
** 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
 +
</pre>
 +
 
 +
Поскольку мы не офисные пользователи, а инженеры, пытающиеся пересобрать целый дистрибутив, мы должны смириться с тем, что это не получится так же легко, как, например, открыть видео файл и посмотреть киношку на любимом компьютере, на котором уже все настроено и работает.
 +
Мы пытаемся собрать дистрибутив (!) -- и это по определению не может быть просто.
 +
 
 +
====Возможная ошибка №1====
 +
 
 +
Разбираемся что не так, читая логи...
 +
 
 +
<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. Однако, попытка его поставить в нашей ОС (см. выше конкретную версию) ни к чему не приведёт.
 +
 
 +
Дело в том, что согласно вот этому разделу документации (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
 +
 
 +
Чтобы это исправить, делаем:  
  
 
<pre>
 
<pre>
fixme
+
 
 +
mkdir ~/.mkimage
 +
 
 +
cat << 'EOF' > ~/.mkimage/profiles.mk
 +
ifneq (,$(BRANCH))
 +
APTCONF = ~/apt/apt.conf.$(BRANCH).$(ARCH)
 +
else
 +
APTCONF = ~/apt/apt.conf.sisyphus.$(ARCH)
 +
endif
 +
EOF
 +
 
 
</pre>
 
</pre>
 +
 +
Затем собираем с указанием переменной с бранчем:
 +
 +
BRANCH=p10 make education.iso
 +
 +
 +
====Возможная ошибка №2====
 +
 +
На этот раз ошибка будет выглядеть примерно так
 +
 +
<pre>
 +
** 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
 +
</pre>
 +
 +
Скорее всего это связано с недостаточным количеством оперативной памяти на сборочной машине.
 +
 +
В ходе текущего эксперимента удалось собрать образ 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 гигабайт