Я новичок в bitbake и работаю над учебником. Я знаю, что bitbake часто поставляется с проектом Yocto, но здесь я пытаюсь использовать его как отдельный инструмент.
Учебник связан с получением версии nano (редактор текстового терминала) и ее сборкой. К сожалению, я не могу получить релиз nano с версией bitbake 2.2, но с 1.52.0 все работает.
Короче говоря, это то, что я получаю.
wget: unable to resolve host address ‘www.nano-editor.org’
Это ошибка, которую я получаю.
...
DEBUG: Running export PSEUDO_DISABLED=1; export DBUS_SESSION_BUS_ADDRESS = "unix:path=/run/user/1000/bus"; export SSH_AUTH_SOCK = "/run/user/1000/keyring/ssh"; export PATH = "/home/nikolay/linux_emb_prog/bitbake/bin:/home/nikolay/bin:~/bin:/home/nikolay/bin:~/bin:/home/nikolay/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin"; export HOME = "/home/nikolay"; /usr/bin/env wget -t 2 -T 30 --passive-ftp -O /home/nikolay/linux_emb_prog/bbhello/tmp/downloads/nano-2.2.6.tar.gz.tmp -P /home/nikolay/linux_emb_prog/bbhello/tmp/downloads 'https://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz' --progress=dot -v
--2023-01-07 21:50:14-- https://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz
Resolving www.nano-editor.org (www.nano-editor.org)... failed: Name or service not known.
wget: unable to resolve host address ‘www.nano-editor.org’
WARNING: Failed to fetch URL https://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz, attempting MIRRORS if available
...
Я понимаю, что это как-то связано с конфигурацией моей сети. Чего я не могу понять, так это почему я могу построить Poky, но не свой проект. Это мое дерево:
├── bitbake-cookerdaemon.log
├── classes
│ ├── base.bbclass
│ └── logging.bbclass
├── conf
│ ├── bblayers.conf
│ └── bitbake.conf
├── meta-hello
│ ├── conf
│ │ └── layer.conf
│ └── recipes-editor
│ └── nano
│ └── nano.bb
Это нано.бб
SUMMARY = "Recipe to build the 'nano' editor"
DESCRIPTION = "nano is text terminal editor."
HOMEPAGE = "www.nano-editor.org"
SUMMARY = "text terminal editor"
LICENSE = "GPL-3.0-or-later"
PN = "nano"
PV = "2.2.6"
P := "${PN}-${PV}"
SITE = "https://www.nano-editor.org/dist"
PV_MAJOR = "${@d.getVar('PV',True).split('.')[0]}"
PV_MINOR = "${@d.getVar('PV',True).split('.')[1]}"
SRC_URI = "${SITE}/v${PV_MAJOR}.${PV_MINOR}/${P}.tar.gz"
SRC_URI[md5sum] = "03233ae480689a008eb98feb1b599807"
SRC_URI[sha256sum] = \
"be68e133b5e81df41873d32c517b3e5950770c00fc5f4dd23810cd635abce67a"
inherit logging
python do_fetch() {
src_uri = (d.getVar('SRC_URI', True) or "").split()
bb.plain("Downloading source tarball from {} ...".format(src_uri))
if len(src_uri) == 0:
bb.fatal("Empty URI")
try:
fetcher = bb.fetch2.Fetch(src_uri,d)
fetcher.download()
except bb.fetch2.BBFetchException:
bb.fatal("Could not fetch source tarball.")
bb.plain("Download successful.")
}
addtask fetch before do_build
do_unpack() {
bbplain "Unpacking source tarball ..."
tar x -C ${WORKDIR} -f ${DL_DIR}/${P}.tar.gz
bbplain "Unpacked source tarball."
}
addtask unpack before do_build after do_fetch
do_configure() {
bbplain "Configure source package ..."
cd ${WORKDIR}/${P} && ./configure
bbplain "Configured source package."
}
addtask configure before do_build after do_unpack
do_compile() {
bbplain "Compiling package ..."
cd ${WORKDIR}/${P} && make
bbplain "Compiled package."
}
addtask compile before do_build after do_configure
do_clean[nostamp] = "1"
do_clean() {
bbplain "cleaning ${WORKDIR}/${P} ..."
rm -rf ${WORKDIR}/${P}
bbplain "cleaning ${TMPDIR}/stamps/*"
rm -f ${TMPDIR}/stamps/*
}
addtask clean
python do_testecho() {
os.system("echo something ${WORKDIR}")
}
addtask testecho
Буду признателен за любую помощь, спасибо.
Да пробовал и получилось. Смотрите ответ ниже.
Я думаю, я столкнулся с подобной проблемой недавно. Для меня решение состояло в том, чтобы добавить do_fetch[network] = "1"
после моей строки addtask fetch
в мой файл bbclass (где у меня была определена задача выборки — base.bbclass в моем случае).
Мне кажется, что в какой-то момент в bitbake появилось какое-то «сетевое» разрешение. Я бы предположил, что любая задача, которая хочет получить доступ к сети, должна иметь это свойство. Это также объясняет, почему он работает со старой версией.
Но я не нашел никакой информации об этом в документации, и мне лень просматривать их историю исходного кода, чтобы узнать.
Я проверил ваш рецепт с этим решением, используя bitbake 2.2.1 на моей машине, и задача выборки работала, когда у меня было установлено свойство network
.
Для полноты вот как я определил задачу выборки:
addtask fetch
do_fetch[dirs] = "${DL_DIR}"
do_fetch[vardeps] += "SRCREV"
do_fetch[network] = "1"
python base_do_fetch() {
src_uri = (d.getVar('SRC_URI') or "").split()
print("fetching: ", src_uri)
fetcher = bb.fetch2.Fetch(src_uri, d)
fetcher.download()
}
Да, это сработало. Вы правы, похоже, что это какое-то «сетевое» разрешение. Я также пытался с таким же успехом с BB_ALLOWED_NETWORKS = "*.nano-editor.org". Мне нужно изучить это подробнее.
Это похоже на проблему с DNS, теперь это происходит где-то в вашем проекте? или это часть конфигурации вашей сети?, вы можете узнать это, вручную выполнив
wget
попытку получить тот же URL-адрес, что и Bitbake, если вы все еще видите проблему, это связано с вашей сетью, если вы можете успешно выполнить:wget -t 2 -T 30 --passive-ftp -O -P 'https://www.nano-editor.org/dist/v2.2/nano-2.2.6.tar.gz'
Затем я вынимал аргументы из полного cmd, включая экспорты, один за другим, чтобы увидеть, какой из них вызывает это, и исправляя это позже в конфигах bitbake.