diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/package_rpm.bbclass | 33 | ||||
-rw-r--r-- | meta/classes/rootfs_rpm.bbclass | 25 |
2 files changed, 38 insertions, 20 deletions
diff --git a/meta/classes/package_rpm.bbclass b/meta/classes/package_rpm.bbclass index 2c5545c11d..2ace0537ac 100644 --- a/meta/classes/package_rpm.bbclass +++ b/meta/classes/package_rpm.bbclass | |||
@@ -382,13 +382,39 @@ package_install_internal_rpm () { | |||
382 | cat ${target_rootfs}/install/install_solution.manifest > ${target_rootfs}/install/total_solution.manifest | 382 | cat ${target_rootfs}/install/install_solution.manifest > ${target_rootfs}/install/total_solution.manifest |
383 | cat ${target_rootfs}/install/install_multilib_solution.manifest >> ${target_rootfs}/install/total_solution.manifest | 383 | cat ${target_rootfs}/install/install_multilib_solution.manifest >> ${target_rootfs}/install/total_solution.manifest |
384 | 384 | ||
385 | # Construct install scriptlet wrapper | ||
386 | cat << EOF > ${WORKDIR}/scriptlet_wrapper | ||
387 | #!/bin/bash | ||
388 | |||
389 | export PATH="${PATH}" | ||
390 | export D="${target_rootfs}" | ||
391 | export OFFLINE_ROOT="\$D" | ||
392 | export IPKG_OFFLINE_ROOT="\$D" | ||
393 | export OPKG_OFFLINE_ROOT="\$D" | ||
394 | |||
395 | \$2 \$1/\$3 \$4 | ||
396 | if [ \$? -ne 0 ]; then | ||
397 | mkdir -p \$1/etc/rpm-postinsts | ||
398 | num=100 | ||
399 | while [ -e \$1/etc/rpm-postinsts/\${num} ]; do num=\$((num + 1)); done | ||
400 | echo "#!\$2" > \$1/etc/rpm-postinsts/\${num} | ||
401 | echo "# Arg: \$4" >> \$1/etc/rpm-postinsts/\${num} | ||
402 | cat \$1/\$3 >> \$1/etc/rpm-postinsts/\${num} | ||
403 | chmod +x \$1/etc/rpm-postinsts/\${num} | ||
404 | fi | ||
405 | EOF | ||
406 | |||
407 | chmod 0755 ${WORKDIR}/scriptlet_wrapper | ||
408 | |||
385 | # Attempt install | 409 | # Attempt install |
386 | ${RPM} --root ${target_rootfs} \ | 410 | ${RPM} --root ${target_rootfs} \ |
387 | --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ | 411 | --predefine "_rpmds_sysinfo_path ${target_rootfs}/etc/rpm/sysinfo" \ |
388 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ | 412 | --predefine "_rpmrc_platform_path ${target_rootfs}/etc/rpm/platform" \ |
413 | -D "_var ${localstatedir}" \ | ||
389 | -D "_dbpath ${rpmlibdir}" \ | 414 | -D "_dbpath ${rpmlibdir}" \ |
390 | --noscripts --notriggers --noparentdirs --nolinktos --replacepkgs \ | 415 | --noparentdirs --nolinktos --replacepkgs \ |
391 | -D "__dbi_txn create nofsync private" \ | 416 | -D "__dbi_txn create nofsync private" \ |
417 | -D "_cross_scriptlet_wrapper ${WORKDIR}/scriptlet_wrapper" \ | ||
392 | -Uhv ${target_rootfs}/install/total_solution.manifest | 418 | -Uhv ${target_rootfs}/install/total_solution.manifest |
393 | } | 419 | } |
394 | 420 | ||
@@ -685,6 +711,7 @@ python write_specfile () { | |||
685 | elif script == 'postrm': | 711 | elif script == 'postrm': |
686 | spec_scriptlets_bottom.append('%%postun -n %s' % splitname) | 712 | spec_scriptlets_bottom.append('%%postun -n %s' % splitname) |
687 | scriptvar = wrap_uninstall(scriptvar) | 713 | scriptvar = wrap_uninstall(scriptvar) |
714 | spec_scriptlets_bottom.append('# %s - %s' % (splitname, script)) | ||
688 | spec_scriptlets_bottom.append(scriptvar) | 715 | spec_scriptlets_bottom.append(scriptvar) |
689 | spec_scriptlets_bottom.append('') | 716 | spec_scriptlets_bottom.append('') |
690 | 717 | ||
@@ -762,19 +789,23 @@ python write_specfile () { | |||
762 | 789 | ||
763 | if srcpreinst: | 790 | if srcpreinst: |
764 | spec_scriptlets_top.append('%pre') | 791 | spec_scriptlets_top.append('%pre') |
792 | spec_scriptlets_top.append('# %s - preinst' % srcname) | ||
765 | spec_scriptlets_top.append(srcpreinst) | 793 | spec_scriptlets_top.append(srcpreinst) |
766 | spec_scriptlets_top.append('') | 794 | spec_scriptlets_top.append('') |
767 | if srcpostinst: | 795 | if srcpostinst: |
768 | spec_scriptlets_top.append('%post') | 796 | spec_scriptlets_top.append('%post') |
797 | spec_scriptlets_top.append('# %s - postinst' % srcname) | ||
769 | spec_scriptlets_top.append(srcpostinst) | 798 | spec_scriptlets_top.append(srcpostinst) |
770 | spec_scriptlets_top.append('') | 799 | spec_scriptlets_top.append('') |
771 | if srcprerm: | 800 | if srcprerm: |
772 | spec_scriptlets_top.append('%preun') | 801 | spec_scriptlets_top.append('%preun') |
802 | spec_scriptlets_top.append('# %s - prerm' % srcname) | ||
773 | scriptvar = wrap_uninstall(srcprerm) | 803 | scriptvar = wrap_uninstall(srcprerm) |
774 | spec_scriptlets_top.append(scriptvar) | 804 | spec_scriptlets_top.append(scriptvar) |
775 | spec_scriptlets_top.append('') | 805 | spec_scriptlets_top.append('') |
776 | if srcpostrm: | 806 | if srcpostrm: |
777 | spec_scriptlets_top.append('%postun') | 807 | spec_scriptlets_top.append('%postun') |
808 | spec_scriptlets_top.append('# %s - postrm' % srcname) | ||
778 | scriptvar = wrap_uninstall(srcpostrm) | 809 | scriptvar = wrap_uninstall(srcpostrm) |
779 | spec_scriptlets_top.append(scriptvar) | 810 | spec_scriptlets_top.append(scriptvar) |
780 | spec_scriptlets_top.append('') | 811 | spec_scriptlets_top.append('') |
diff --git a/meta/classes/rootfs_rpm.bbclass b/meta/classes/rootfs_rpm.bbclass index 95e9455e5c..b3875a437c 100644 --- a/meta/classes/rootfs_rpm.bbclass +++ b/meta/classes/rootfs_rpm.bbclass | |||
@@ -20,8 +20,6 @@ do_rootfs[depends] += "opkg-native:do_populate_sysroot" | |||
20 | 20 | ||
21 | do_rootfs[recrdeptask] += "do_package_write_rpm" | 21 | do_rootfs[recrdeptask] += "do_package_write_rpm" |
22 | 22 | ||
23 | AWKPOSTINSTSCRIPT = "${COREBASE}/scripts/rootfs_rpm-extract-postinst.awk" | ||
24 | |||
25 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf; " | 23 | RPM_PREPROCESS_COMMANDS = "package_update_index_rpm; package_generate_rpm_conf; " |
26 | RPM_POSTPROCESS_COMMANDS = "" | 24 | RPM_POSTPROCESS_COMMANDS = "" |
27 | 25 | ||
@@ -108,19 +106,9 @@ EOF | |||
108 | 106 | ||
109 | ${ROOTFS_POSTINSTALL_COMMAND} | 107 | ${ROOTFS_POSTINSTALL_COMMAND} |
110 | 108 | ||
111 | mkdir -p ${IMAGE_ROOTFS}/etc/rpm-postinsts/ | 109 | # Report delayed package scriptlets |
112 | ${RPM} --root ${IMAGE_ROOTFS} -D '_dbpath ${rpmlibdir}' -qa \ | 110 | for i in ${IMAGE_ROOTFS}/etc/rpm-postinsts/*; do |
113 | -D "__dbi_txn create nofsync private" \ | 111 | echo "Delayed package scriptlet: `head -n 3 $i | tail -n 1`" |
114 | --qf 'Name: %{NAME}\n%|POSTIN?{postinstall scriptlet%|POSTINPROG?{ (using %{POSTINPROG})}|:\n%{POSTIN}\n}:{%|POSTINPROG?{postinstall program: %{POSTINPROG}\n}|}|' \ | ||
115 | > ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined | ||
116 | awk -f ${AWKPOSTINSTSCRIPT} < ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined | ||
117 | rm ${IMAGE_ROOTFS}/etc/rpm-postinsts/combined | ||
118 | |||
119 | for i in ${IMAGE_ROOTFS}/etc/rpm-postinsts/*.sh; do | ||
120 | if [ -f $i ] && sh $i; then | ||
121 | # rm $i | ||
122 | mv $i $i.done | ||
123 | fi | ||
124 | done | 112 | done |
125 | 113 | ||
126 | install -d ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d | 114 | install -d ${IMAGE_ROOTFS}/${sysconfdir}/rcS.d |
@@ -128,11 +116,10 @@ EOF | |||
128 | i=\$i | 116 | i=\$i |
129 | cat > ${IMAGE_ROOTFS}${sysconfdir}/rcS.d/S${POSTINSTALL_INITPOSITION}configure << EOF | 117 | cat > ${IMAGE_ROOTFS}${sysconfdir}/rcS.d/S${POSTINSTALL_INITPOSITION}configure << EOF |
130 | #!/bin/sh | 118 | #!/bin/sh |
131 | for i in /etc/rpm-postinsts/*.sh; do | 119 | for i in /etc/rpm-postinsts/*; do |
132 | echo "Running postinst $i..." | 120 | echo "Running postinst $i..." |
133 | if [ -f $i ] && sh $i; then | 121 | if [ -f $i ] && $i; then |
134 | # rm $i | 122 | rm $i |
135 | mv $i $i.done | ||
136 | else | 123 | else |
137 | echo "ERROR: postinst $i failed." | 124 | echo "ERROR: postinst $i failed." |
138 | fi | 125 | fi |