summaryrefslogtreecommitdiffstats
path: root/meta/classes/rootfs_deb.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'meta/classes/rootfs_deb.bbclass')
-rw-r--r--meta/classes/rootfs_deb.bbclass137
1 files changed, 137 insertions, 0 deletions
diff --git a/meta/classes/rootfs_deb.bbclass b/meta/classes/rootfs_deb.bbclass
new file mode 100644
index 0000000000..b1c52f9dd6
--- /dev/null
+++ b/meta/classes/rootfs_deb.bbclass
@@ -0,0 +1,137 @@
1#
2# Copyright 2006-2007 Openedhand Ltd.
3#
4
5ROOTFS_PKGMANAGE = "dpkg apt"
6ROOTFS_PKGMANAGE_BOOTSTRAP = "run-postinsts"
7
8do_rootfs[depends] += "dpkg-native:do_populate_sysroot apt-native:do_populate_sysroot"
9do_rootfs[recrdeptask] += "do_package_write_deb"
10rootfs_deb_do_rootfs[vardepsexclude] += "BUILDNAME"
11
12do_rootfs[lockfiles] += "${DEPLOY_DIR_DEB}/deb.lock"
13
14python rootfs_deb_bad_recommendations() {
15 if d.getVar("BAD_RECOMMENDATIONS", True):
16 bb.warn("Debian package install does not support BAD_RECOMMENDATIONS")
17}
18do_rootfs[prefuncs] += "rootfs_deb_bad_recommendations"
19
20DEB_POSTPROCESS_COMMANDS = ""
21
22opkglibdir = "${localstatedir}/lib/opkg"
23
24deb_package_setflag() {
25 sed -i -e "/^Package: $2\$/{n; s/Status: install ok .*/Status: install ok $1/;}" ${IMAGE_ROOTFS}/var/lib/dpkg/status
26}
27
28deb_package_getflag() {
29 cat ${IMAGE_ROOTFS}/var/lib/dpkg/status | sed -n -e "/^Package: $2\$/{n; s/Status: install ok .*/$1/; p}"
30}
31
32fakeroot rootfs_deb_do_rootfs () {
33 set +e
34
35 mkdir -p ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives
36
37 # update index
38 package_update_index_deb
39
40 #install packages
41 export INSTALL_ROOTFS_DEB="${IMAGE_ROOTFS}"
42 export INSTALL_BASEARCH_DEB="${DPKG_ARCH}"
43 export INSTALL_ARCHS_DEB="${PACKAGE_ARCHS}"
44 export INSTALL_PACKAGES_NORMAL_DEB="${PACKAGE_INSTALL}"
45 export INSTALL_PACKAGES_ATTEMPTONLY_DEB="${PACKAGE_INSTALL_ATTEMPTONLY}"
46 export INSTALL_PACKAGES_LINGUAS_DEB="${LINGUAS_INSTALL}"
47 export INSTALL_TASK_DEB="rootfs"
48
49 package_install_internal_deb
50 ${DEB_POSTPROCESS_COMMANDS}
51
52 rootfs_install_complementary
53
54 export D=${IMAGE_ROOTFS}
55 export OFFLINE_ROOT=${IMAGE_ROOTFS}
56 export IPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
57 export OPKG_OFFLINE_ROOT=${IMAGE_ROOTFS}
58 export INTERCEPT_DIR=${WORKDIR}/intercept_scripts
59 export NATIVE_ROOT=${STAGING_DIR_NATIVE}
60
61 # Attempt to run preinsts
62 # Mark packages with preinst failures as unpacked
63 for i in ${IMAGE_ROOTFS}/var/lib/dpkg/info/*.preinst; do
64 if [ -f $i ] && ! sh $i; then
65 deb_package_setflag unpacked `basename $i .preinst`
66 fi
67 done
68
69 # Attempt to run postinsts
70 # Mark packages with postinst failures as unpacked
71 for i in ${IMAGE_ROOTFS}/var/lib/dpkg/info/*.postinst; do
72 if [ -f $i ] && ! sh $i configure; then
73 deb_package_setflag unpacked `basename $i .postinst`
74 fi
75 done
76
77 set -e
78
79 install -d ${IMAGE_ROOTFS}/${sysconfdir}
80 echo ${BUILDNAME} > ${IMAGE_ROOTFS}/${sysconfdir}/version
81
82 # Hacks to allow opkg's update-alternatives and opkg to coexist for now
83 mkdir -p ${IMAGE_ROOTFS}${opkglibdir}
84 if [ -e ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives ]; then
85 rmdir ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives
86 fi
87 ln -s ${opkglibdir}/alternatives ${IMAGE_ROOTFS}/var/lib/dpkg/alternatives
88 ln -s /var/lib/dpkg/info ${IMAGE_ROOTFS}${opkglibdir}/info
89 ln -s /var/lib/dpkg/status ${IMAGE_ROOTFS}${opkglibdir}/status
90
91 ${ROOTFS_POSTPROCESS_COMMAND}
92
93 if ${@base_contains("IMAGE_FEATURES", "read-only-rootfs", "true", "false" ,d)}; then
94 if [ -n "$(delayed_postinsts)" ]; then
95 bberror "Some packages could not be configured offline and rootfs is read-only."
96 exit 1
97 fi
98 fi
99
100 log_check rootfs
101}
102
103rootfs_deb_do_rootfs[vardeps] += "delayed_postinsts"
104
105delayed_postinsts () {
106 cat ${IMAGE_ROOTFS}/var/lib/dpkg/status|grep -e "^Package:" -e "^Status:"|sed -ne 'N;s/Package: \(.*\)\nStatus:.*unpacked/\1/p'
107}
108
109save_postinsts () {
110 # Scripts need to be ordered when executed, this ensures numeric order
111 # If we ever run into needing more the 899 scripts, we'll have to
112 # change num to start with 1000.
113 num=100
114 for p in $(delayed_postinsts); do
115 install -d ${IMAGE_ROOTFS}${sysconfdir}/deb-postinsts
116 cp ${IMAGE_ROOTFS}/var/lib/dpkg/info/$p.postinst ${IMAGE_ROOTFS}${sysconfdir}/deb-postinsts/$num-$p
117 num=`echo \$((num+1))`
118 done
119}
120
121remove_packaging_data_files() {
122 rm -rf ${IMAGE_ROOTFS}${opkglibdir}
123 rm -rf ${IMAGE_ROOTFS}/var/lib/dpkg/
124}
125
126rootfs_install_packages() {
127 ${STAGING_BINDIR_NATIVE}/apt-get ${APT_ARGS} install `cat $1` --force-yes --allow-unauthenticated
128
129 # Mark all packages installed
130 sed -i -e "s/Status: install ok unpacked/Status: install ok installed/;" $INSTALL_ROOTFS_DEB/var/lib/dpkg/status
131}
132
133rootfs_uninstall_packages() {
134 # for some reason, --root doesn't really work here... We use --admindir&--instdir instead.
135 ${STAGING_BINDIR_NATIVE}/dpkg --admindir=${IMAGE_ROOTFS}/var/lib/dpkg --instdir=${IMAGE_ROOTFS} -r --force-depends $@
136}
137