When building an image with openwrt/imagebuilder:sunxi-cortexa7-SNAPSHOT
it tries to download libubox20231128
but the index at https://downloads.openwrt.org/snapshots/packages/arm_cortex-a7_neon-vfpv4/base/ is still 20231127. I understand it's a snapshot builder, but the downloads.openwrt.org is also a snapshot, so they should be somewhat consistent.
PS: The device is sinovoip_bananapi-p2-zero
and not in the release yet. Built by hand everything works.
4 days passed, Docker requests libubox20231130
now, the package in the downloads is still libubox20231127
. Is this some kind of abnormal situation?
hnyman
December 1, 2023, 5:20am
3
Not really abnormal, but a temporary dependency discrepancy.
Packages buildbot builds each architecture at every 2-3 days. See date stamps here.
Your arch happens to have been built just before the package was updated. A build is running just now, so the downloadable package should be there soon.
The underlying reason for the discrepancy is two-step buildbot, where kernel and core packages are built separately for the firmware images. But normal packages for the download repo are built separately with an SDK from the first buildbot. In connection to certain package updates there can be a 2-3 day period when one package already depends on a new version that has not yet been built into the public download repo. (It gets visible if a non-shared core package depends on a normal package.)
This was tried to be solved in 2021, but the proposed fix was later reverted. My fix attempt:
openwrt:master
← hnyman:nonshared
opened 03:38PM - 06 Jun 21 UTC
cc @aparcar
Mark uci, ubus, libubox, lua, libnl-tiny and libjson-c as nonsha… red packages. This helps to keep coherent dependencies if these ABI versioned packages are later updated.
Before this commit it is possible to get missing dependencies in target-specific nonshared packages (like iwinfo) that depend on these shared ABI versioned packages. If these are later updated and rebuilt, only the new ABI version will be available for download, while the target-specific packages in releases continue to depend on the old ABI version.
After this commit the packages are built along the other nonshared packages by the phase1 images buildbot and will be available at the target/ download directories instead of packages/base dir. That will help to keep a coherent set available.
Reference to:
https://lists.openwrt.org/pipermail/openwrt-devel/2021-June/035436.html
https://lists.openwrt.org/pipermail/openwrt-devel/2021-June/035442.html
(This should probably be also backported to at least 21.02, but preferably just a before the rc3 or release, as applying this will soon remove the old shared packages, so the packages need to be in the available nonshared repos.)
**Background:**
Based on forum discussion, we have currently a broken 21.02.0-rc2 imagebuilder, as libiwinfo can't find the correct libubus version.
https://forum.openwrt.org/t/21-02-0-rc2-build-error-on-libubus20210215/98373
My analysis leading to the PR:
* ubus is a normal (shared) package in the packages/ downloads dir
* the nonshared libiwinfo depends on libubus with ABI specification.
* ubus has been updated since rc2, so new ubus and libubus versions are now
offered for download
* The nonshared libiwinfo is located in the target/ download directory of
rc2, and it still depends on the older libubus with the old ABI version. And
that old libubus version has already been replaced by the newer libubus
version in the normal packages download dir.
The libubus dependency difference is visible in the libiwinfo package metadata:
libiwinfo from 21.02-SNAPSHOT:
```
Package: libiwinfo20210106
Version: 2021-01-31-4a32b33e-1
Depends: libc, libnl-tiny1, libuci20130104, libubus20210603
```
From rc2:
```
Package: libiwinfo20210106
Version: 2021-01-31-4a32b33e-1
Depends: libc, libnl-tiny1, libuci20130104, libubus20210215
```
I went through the ~60 instances of "nonshared" packages in the main OpenWrt repo, and found that toggling six packages to nonshared would solve the common problems:
libubox, ubus, uci, lua, libjson-c, libnl-tiny
Additionally also elfutils (libelf, libdw) could be toggled to nonshared, but as that is only needed for the non-default "perf" package, I do not find it that important.
1 Like