- Вопрос или проблема
- Ответ или решение
- Шаг 1: Установите необходимые зависимости
- Шаг 2: Подготовка к сборке
- Шаг 3: Запустите конфигурацию
- Шаг 4: Обратите внимание на содержимое README / INSTALL
- Шаг 5: При необходимости запустите дополнительные скрипты
- Шаг 6: Проверка конфигурации и дополнительных ошибок
- Шаг 7: Соберите проект
- Заключение
Вопрос или проблема
Я пытаюсь обновить GRUB с 2.06 до 2.12, следуя инструкциям в текстовом файле INSTALL
, включенном в архив (и внизу поста). У меня не хватает некоторых зависимостей, поэтому я запускаю:
sudo apt install gcc
sudo apt install bison
sudo apt install make
sudo apt install automake #Я не уверен, нужно ли это. Я пробовал следующие команды как до, так и после установки automake. Результат тот же.
#получить новую версию grub
wget ftp://ftp.gnu.org/gnu/grub/grub-2.12.tar.gz
tar -xf grub-2.12.tar.gz
#этап 1 текстового файла INSTALL
cd grub-2.12
#пропустить этапы 2 и 3 и перейти к 4. мой CLI не прокручивается, поэтому я использую tee, чтобы видеть полный вывод
#даже если бы я хотел сделать этап 3, я не могу, так как ./bootstrap не включен в архив.
./configure |& tee ~/configoutput
#этап 5 отсутствует, возможно опечатка или причина моей проблемы?
#этап 6
make
#другие этапы после этого, но я еще не дошел до них...
Все команды завершаются успешно, кроме make
, который выводит:
make: *** No targets specified and no makefile found. Stop.
Как мне сделать так, чтобы ./configure создал makefile, чтобы я мог использовать make
? Спасибо всем!!
./configure
похоже, не имеет ошибок, как указано в ~/configoutput
:
ИЗМЕНЕНИЕ: после замены |
на |&
, ~/configoutput
теперь включает ошибку! Я сейчас устанавливаю flex
и продолжаю следовать инструкциям, скоро дам отчет.
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to enable C11 features... none needed
checking whether the compiler is clang... no
checking for compiler option needed when checking for declarations... none
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for wchar.h... yes
checking for minix/config.h... no
checking for sys/types.h... (cached) yes
checking for features.h... yes
checking for linewrap.h... no
checking for unistd.h... (cached) yes
checking for sys/param.h... yes
checking for sys/socket.h... yes
checking for dirent.h... yes
checking for fnmatch.h... yes
checking for sys/stat.h... (cached) yes
checking for getopt.h... yes
checking for sys/cdefs.h... yes
checking for threads.h... yes
checking for limits.h... yes
checking for inttypes.h... (cached) yes
checking for stdint.h... (cached) yes
checking for langinfo.h... yes
checking for xlocale.h... no
checking for sys/mman.h... yes
checking for malloc.h... yes
checking for sys/time.h... yes
checking for strings.h... (cached) yes
checking for sysexits.h... yes
checking for crtdefs.h... no
checking for wctype.h... yes
checking whether it is safe to define __EXTENSIONS__... yes
checking whether _XOPEN_SOURCE should be defined... no
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for style of include used by make... GNU
checking whether make supports nested variables... yes
checking dependency style of gcc... gcc3
checking for pkg-config... no
checking for cmp... cmp
checking for bison... bison
checking for ranlib... ranlib
checking for gawk... (cached) gawk
checking for flex... no
checking for lex... no
checking for bison... (cached) bison
checking whether make sets $(MAKE)... (cached) yes
checking whether ln -s works... yes
configure: error: flex is not found
Соответствующая часть `grub-2.12/INSTALL’ из архива:
Сборка GRUB
=================
Самый простой способ скомпилировать этот пакет:
1. `cd' в каталог, содержащий исходный код пакета.
2. Пропустите этот и следующий шаг, если вы используете готовый архив, и переходите к
шагу 4. Если вы хотите переводы, введите `./linguas.sh'.
3. Введите `./bootstrap'.
autogen.sh (вызываемый bootstrap) использует python. По умолчанию он автоматически определяет
его, но это можно переопределить, установив переменную PYTHON.
4. Введите `./configure', чтобы настроить пакет для вашей системы.
Если вы используете `csh` на старой версии System V, вам может
понадобиться ввести `sh ./configure`, чтобы предотвратить выполнение `csh`
самой команды `configure`.
Запуск `configure` занимает некоторое время. Во время выполнения он выводит несколько
сообщений, которые сообщают, какие функции он проверяет.
6. Введите `make`, чтобы скомпилировать пакет.
7. При желании введите `make check`, чтобы выполнить любые самопроверки, которые идут
с пакетом. Обратите внимание, что многие тесты требуют прав root
для выполнения.
8. Введите `make install`, чтобы установить программы и любые файлы данных и
документацию.
9. Введите `make html` или `make pdf`, чтобы создать html или pdf
документацию. Обратите внимание, что они не создаются по умолчанию.
10. Вы можете удалить бинарные файлы программ и объектные файлы из каталога
исходного кода, введя `make clean`. Чтобы также удалить файлы, которые
создал `configure` (чтобы вы могли скомпилировать пакет для
другого типа компьютера), введите `make distclean`. Также есть
цель `make maintainer-clean`, но она предназначена в основном для
разработчиков пакета. Если вы ее используете, возможно, вам придется получить
всевозможные другие программы, чтобы восстановить файлы, которые шли
с дистрибутивом.
sudo apt-get update
sudo apt-get install -y build-essential bison flex libgmp3-dev xorriso
wget https://ftp.gnu.org/gnu/grub/grub-2.12.tar.gz
tar xzf grub-2.12.tar.gz
cd grub-2.12
./configure --prefix=/usr --sysconfdir=/etc --disable-werror
#Создать extra_deps.lst
echo "depends bli part_gpt" > grub-core/extra_deps.lst
make
sudo make install
grub-install --version
grub-install (GRUB) 2.12
смотрите мой пример сценария.
https://github.com/PeterSuh-Q3/tinycore-redpill/blob/main/.github/workflows/deploy.yml
Ответ или решение
Обновление GRUB с версии 2.06 до 2.12 может вызвать некоторые затруднения, особенно если не все зависимости установлены, или если отсутствуют необходимые скрипты для конфигурации и сборки. Ваша проблема связана с отсутствием Makefile, который должен быть создан во время выполнения команды ./configure
. Давайте разберёмся пошагово в возможных причинах и решениях.
Шаг 1: Установите необходимые зависимости
Начнём с установки всех необходимых зависимости, включая те, которые могут отсутствовать. Обратите внимание, что отсутствующий flex
и другие инструменты, такие как pkg-config
, могут быть причиной вашей проблемы. Установите все рекомендуемые зависимости с помощью следующей команды:
sudo apt-get update
sudo apt-get install -y build-essential bison flex libgmp3-dev xorriso
Шаг 2: Подготовка к сборке
После установки всех необходимых пакетов, скачайте и распакуйте новый GRUB:
wget https://ftp.gnu.org/gnu/grub/grub-2.12.tar.gz
tar -xzf grub-2.12.tar.gz
cd grub-2.12
Шаг 3: Запустите конфигурацию
Теперь попробуйте запустить конфигурацию снова:
./configure --prefix=/usr --sysconfdir=/etc --disable-werror
Важно запустить эту команду в консоли, где вы можете увидеть все выводимые сообщения. Если будет показана ошибка, обратите внимание на ее текст, так как он укажет на отсутствующие зависимости или ошибки конфигурации.
Шаг 4: Обратите внимание на содержимое README / INSTALL
Обратите внимание на инструкцию и возможность того, что в исходном коде могут быть пропущены некоторые скрипты. Если у вас нет ./bootstrap
, это может указывать на то, что запущен старый или неполный пакет.
Шаг 5: При необходимости запустите дополнительные скрипты
Если ./configure
по-прежнему не создает Makefile, это может указывать на необходимость запускать дополнительные приготовительные скрипты, такие как autogen.sh
или bootstrap
, если они доступны. (Однако, как вы упомянули, они могут отсутствовать в вашем архиве.) Убедитесь, что вы используете полный и корректный набор файлов.
Шаг 6: Проверка конфигурации и дополнительных ошибок
Если проблема не решается, проверьте файл config.log
, который создаётся в каталоге GRUB после выполнения команды ./configure
. Он может содержать подробные сообщения об ошибках и предоставлять информацию о том, на каком этапе произошла сбойная конфигурация.
Шаг 7: Соберите проект
Если все шаги выполнены правильно и ошибки устранены, запустите make
:
make
Заключение
Убедитесь, что все зависимости установлены и что у вас есть доступ ко всем необходимым скриптам. Если необходимость в дополнительных скриптах все же существует, рассмотрите возможность загрузки более полного архива или клонирования репозитория GRUB из системы управления версиями (например, Git), где вы сможете обнаружить все необходимые компоненты для сборки.
Если после всех описанных шагов проблема остаётся нерешённой, возможно, стоит обратиться к документации или сообществу GRUB для получения дополнительной помощи и поддержки.