[poky] Why rpm install process is not working out of the pseudo context

Mark Hatle mark.hatle at windriver.com
Wed Jan 26 06:32:37 PST 2011


On 1/26/11 12:57 AM, Lu, Lianhao wrote:
> Hi guys,
> 
> Does anyone know why the RPM install process should be all executed in the pseudo context? Thank you!
> 
> I found that the rpm install process is not working when I manually enter the rpm command in the terminal (without pseudo).
> 
> The install process for rpm is:
> 1. generate db from solved db
>         ${RPM} -D "_rpmds_sysinfo_path ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/etc/rpm/sysinfo" \
>                 -D "_dbpath ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/install" -D "`cat ${RPMCONF_TARGET_BASE}.macro`" \
>                 -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync" \
>                 -U --justdb --noscripts --notriggers --noparentdirs --nolinktos --ignoresize \
>                 ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/install/install.manifest
> 
> 2. pull out a list of what to install
> 	${RPM} -D "_dbpath ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/install" -qa --yaml \
>                 | grep -i 'Packageorigin' | cut -d : -f 2 > ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/install/install_solution.manifest

The above two can be run without pseudo.

> 3. actual install
> 	${RPM} --root ${SDK_OUTPUT}/${SDKTARGETSYSROOT} \
>                 -D "_rpmds_sysinfo_path ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/etc/rpm/sysinfo" \
>                 -D "_dbpath ${rpmlibdir}" \
>                 --noscripts --notriggers --noparentdirs --nolinktos \
>                 -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync private" \
>                 -Uhv ${SDK_OUTPUT}/${SDKTARGETSYSROOT}/install/install_solution.manifest

The above item DOES require pseudo.  The --root tells RPM to chroot into a
specific directory before an install begins.  chroot is a command that only root
(or pseudo) can execute.  This is why pseudo content is required.

> If we put all the 3 steps under pseudo context, it works fine. But if all the 3 steps are out of pseudo context, the step 2) would fail complaining about:
> rpmdb: configured environment flags incompatible with existing environment
> error: cannot open Package(0) index using db3 - Invalid argument (22)
> error: cannot open Package database in /home/lulianhao/poky-build/meta-toolchain/tmp/work/mips-poky-linux/meta-toolchain-sdk-1.0-r1/sdk/image//opt/poky/0.9+snapshot/sysroots/mips-poky-linux/install

I'm surprised the first two fail.  It's possible that something in the berkley
db setup (unique to RPMs usage) is also attempting to use chroot or a similar
root only command of some type.

> If I add -D "__dbi_cdb create mp_mmapsize=128Mb mp_size=1Mb nofsync" options to step 2), it would succeed. But in step 3), nothing actually gets installed though the rpm doesn't report any error in step 3).

The second step should have the same __dbi_cdb as the first step.. If it doesn't
(or doesn't work) then it looks like you discovered a bug in the original
implementation.

I can look into this a big today.  (Hopefully this complex mechanism of doing
dependency resolution can go away with Zypper.. but we're not yet there.)

--Mark

> Best Regards,
> -Lianhao Lu
> _______________________________________________
> poky mailing list
> poky at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/poky




More information about the poky mailing list