Pxe: различия между версиями
Vovan (обсуждение | вклад) (→Подготовка сборочницы) |
Vovan (обсуждение | вклад) (→Alt Linux) |
||
(не показаны 33 промежуточные версии этого же участника) | |||
Строка 3: | Строка 3: | ||
==Подготовка сборочницы== | ==Подготовка сборочницы== | ||
− | apt update && apt install -y binutils bzip2 flex gawk gcc-7 grep libc-dev libz-dev make perl python rsync subversion unzip git | + | 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 | cd | ||
+ | |||
+ | ==Клонирование исходников и сборка== | ||
git clone https://github.com/openwrt/openwrt | git clone https://github.com/openwrt/openwrt | ||
Строка 19: | Строка 21: | ||
результаты будут в папке bin | результаты будут в папке 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 | ||
+ | |||
+ | Процесс сборки на консоли должен выглядеть примерно так: | ||
+ | |||
+ | <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> | ||
+ | |||
+ | 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> | ||
+ | |||
+ | Затем собираем с указанием переменной с бранчем: | ||
+ | |||
+ | 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 гигабайт