Search code examples
network-programmingwgetyoctobitbakeyocto-recipe

Bitbake wget: unable to resolve host address ‘www.nano-editor.org’


I'm new to bitbake and working on a tutorial. I know that bitbake often comes with Yocto project but here I'm trying to use it as a stand-alone tool. The tutorial is connected with fetching a nano release(the text terminal editor) and building it. Unfortunately, I'm not able to fetch a release of nano with bitbake version 2.2, but with 1.52.0 everything is working. In a nutshell, this is what I'm getting. wget: unable to resolve host address ‘www.nano-editor.org’

This is the error I'm getting.

...
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
...

I get that it is something to do with my network configuration. What I can not understand is why I'm able to build Poky but not my project. This is my tree:

├── bitbake-cookerdaemon.log
├── classes
│   ├── base.bbclass
│   └── logging.bbclass
├── conf
│   ├── bblayers.conf
│   └── bitbake.conf
├── meta-hello
│   ├── conf
│   │   └── layer.conf
│   └── recipes-editor
│       └── nano
│           └── nano.bb

This is 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

I would appreciate any help, thanks.


Solution

  • I think, I experienced a similar issue recently. For me, the solution was to add do_fetch[network] = "1" after my addtask fetch line in my bbclass file (where I had the fetch task defined - base.bbclass in my case).

    To me, it looks like some kind of "network" permission got introduced into bitbake at some point. I would assume that any task that wants to access the network needs to have this property set. This would also explain why it works with an older version.

    But I haven't found any information about it in the documentation and I'm too lazy to look through their source-code history to find out.

    I tested your recipe with this solution using bitbake 2.2.1 on my machine and the fetch task worked, when I had the network property set.

    For completeness here is how I defined the fetch task:

    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()
    }