libassuan
Bootstrapping
When libassuan introduces a soname change, the package and all of its direct dependents need to be boostrapped into the staging build environment.
This is due to the fact, that pacman links against libbassuan.so
via libgpgme.so
and simply placing an updated libassuan in staging would therefore break pacman.
Only after bootstrapping, the normal way of rebuilding of dependents against the staging repository can commence.
Update libassuan
Build the new version of libassuan against staging:
pkgctl build -s
Placeholder package
For bootstrapping purposes it is advised to create a temporary placeholder package for the previous version of libassuan (e.g. libassuan2
), which only provides the required library and the first symlink (e.g. /usr/lib/libassuan.so.0.8.7
and /usr/lib/libassuan.so.0
).
This placeholder package is only needed for bootstrapping and is therefore only temporarily added to the repositories!
Build the package normally against staging:
pkgctl build -s
Bootstrap direct dependents
Now, all direct dependents (i.e. gnupg
, gpgme
and pinentry
) need to be boostrapped using the updated libassuan and the placeholder package.
The below code blocks use libassuan 3.0.0 and libassuan2 2.5.7 as example, assuming all package source directories are located in the same directory:
pkgctl build -s --rebuild --install-to-chroot ../libassuan/libassuan-3.0.0-1-x86_64.pkg.tar.zst --install-to-chroot ../libassuan2/libassuan2-2.5.7-1-x86_64.pkg.tar.zst
Releasing bootstrapped packages
Release all direct dependents and the new version of libassuan (i.e. not libassuan2
!) to the staging repository at the same time.
In the libassuan source repository run:
pkgctl release -s
In the source repository of the placeholder package run:
pkgctl release --repo core-staging -m "Add libassuan2 as bootstrap package for libassuan 3.0.0"
In the source repository of each direct dependent run:
pkgctl release -s -m "Rebuild against libassuan 3.0.0, bootstrap with local libassuan2."
Afterwards update the staging repository, so that the new packages are added in a single transaction:
pkgctl db update
Rebuild bootstrapped packages
To ensure that packages remain reproducible, rebuild all direct dependents in staging. In the source repository of each direct dependent run:
pkgctl build -s -r --rebuild -u -m "Rebuild for reproducibility, after bootstrap"
Remove placeholder package
Finally, the placeholder package (libassuan2
) should be removed from the staging repository:
pkgctl db remove core-staging libassuan2