summaryrefslogtreecommitdiff
path: root/classes/image.bbclass
diff options
context:
space:
mode:
Diffstat (limited to 'classes/image.bbclass')
-rw-r--r--classes/image.bbclass77
1 files changed, 63 insertions, 14 deletions
diff --git a/classes/image.bbclass b/classes/image.bbclass
index fd0df4df08..2105195003 100644
--- a/classes/image.bbclass
+++ b/classes/image.bbclass
@@ -1,4 +1,5 @@
inherit rootfs_${IMAGE_PKGTYPE}
+inherit kernel-arch
LICENSE = "MIT"
PACKAGES = ""
@@ -17,19 +18,25 @@ IMAGE_INITSCRIPTS ?= "initscripts"
#
IMAGE_LOGIN_MANAGER ?= "tinylogin"
-IMAGE_VARS = "${IMAGE_INITSCRIPTS} \
+# set sane default for the SPLASH variable
+SPLASH ?= ""
+
+IMAGE_KEEPROOTFS ?= ""
+IMAGE_KEEPROOTFS[doc] = "Set to non-empty to keep ${IMAGE_ROOTFS} around after image creation."
+
+IMAGE_BOOT ?= "${IMAGE_INITSCRIPTS} \
${IMAGE_DEV_MANAGER} \
${IMAGE_INIT_MANAGER} \
${IMAGE_LOGIN_MANAGER} "
-RDEPENDS += "${IMAGE_INSTALL} ${IMAGE_VARS}"
+RDEPENDS += "${IMAGE_INSTALL} ${IMAGE_BOOT}"
# "export IMAGE_BASENAME" not supported at this time
IMAGE_BASENAME[export] = "1"
-export PACKAGE_INSTALL ?= "${IMAGE_INSTALL} ${IMAGE_VARS}"
+export PACKAGE_INSTALL ?= "${IMAGE_INSTALL} ${IMAGE_BOOT}"
# We need to recursively follow RDEPENDS and RRECOMMENDS for images
-do_rootfs[recrdeptask] += "do_deploy do_populate_staging"
+do_rootfs[recrdeptask] += "do_deploy do_populate_sysroot"
# Images are generally built explicitly, do not need to be part of world.
EXCLUDE_FROM_WORLD = "1"
@@ -40,7 +47,7 @@ PID = "${@os.getpid()}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
-do_rootfs[depends] += "makedevs-native:do_populate_staging fakeroot-native:do_populate_staging"
+do_rootfs[depends] += "makedevs-native:do_populate_sysroot fakeroot-native:do_populate_sysroot"
python () {
import bb
@@ -48,9 +55,9 @@ python () {
deps = bb.data.getVarFlag('do_rootfs', 'depends', d) or ""
for type in (bb.data.getVar('IMAGE_FSTYPES', d, True) or "").split():
for dep in ((bb.data.getVar('IMAGE_DEPENDS_%s' % type, d) or "").split() or []):
- deps += " %s:do_populate_staging" % dep
+ deps += " %s:do_populate_sysroot" % dep
for dep in (bb.data.getVar('EXTRA_IMAGEDEPENDS', d, True) or "").split():
- deps += " %s:do_populate_staging" % dep
+ deps += " %s:do_populate_sysroot" % dep
bb.data.setVarFlag('do_rootfs', 'depends', deps, d)
runtime_mapping_rename("PACKAGE_INSTALL", d)
@@ -69,13 +76,11 @@ def get_devtable_list(d):
devtable = bb.data.getVar('IMAGE_DEVICE_TABLE', d, 1)
if devtable != None:
return devtable
- str = ""
devtables = bb.data.getVar('IMAGE_DEVICE_TABLES', d, 1)
if devtables == None:
devtables = 'files/device_table-minimal.txt'
- for devtable in devtables.split():
- str += " %s" % bb.which(bb.data.getVar('BBPATH', d, 1), devtable)
- return str
+ return " ".join([ bb.which(bb.data.getVar('BBPATH', d, 1), devtable)
+ for devtable in devtables.split() ])
def get_imagecmds(d):
import bb
@@ -104,7 +109,6 @@ LINGUAS_INSTALL = "${@" ".join(map(lambda s: "locale-base-%s" % s, bb.data.getVa
do_rootfs[nostamp] = "1"
do_rootfs[dirs] = "${TOPDIR}"
-do_rootfs[lockfiles] = "${IMAGE_ROOTFS}.lock"
do_build[nostamp] = "1"
# Must call real_do_rootfs() from inside here, rather than as a separate
@@ -115,8 +119,12 @@ fakeroot do_rootfs () {
mkdir -p ${IMAGE_ROOTFS}
mkdir -p ${DEPLOY_DIR_IMAGE}
+ mkdir -p ${IMAGE_ROOTFS}/etc
+
if [ "${USE_DEVFS}" != "1" ]; then
+ rm -rf ${IMAGE_ROOTFS}/etc/device_table
for devtable in ${@get_devtable_list(d)}; do
+ cat $devtable >> ${IMAGE_ROOTFS}/etc/device_table
makedevs -r ${IMAGE_ROOTFS} -D $devtable
done
fi
@@ -133,6 +141,7 @@ fakeroot do_rootfs () {
${IMAGE_POSTPROCESS_COMMAND}
${MACHINE_POSTPROCESS_COMMAND}
+ ${@['rm -rf ${IMAGE_ROOTFS}', ''][bool(d.getVar("IMAGE_KEEPROOTFS", 1))]}
}
do_deploy_to[nostamp] = "1"
@@ -196,7 +205,7 @@ log_check() {
# can decide if they want it or not
zap_root_password () {
- sed 's%^root:[^:]*:%root:*:%' < ${IMAGE_ROOTFS}/etc/passwd >${IMAGE_ROOTFS}/etc/passwd.new
+ sed 's%^root:[^:]*:%root::%' < ${IMAGE_ROOTFS}/etc/passwd >${IMAGE_ROOTFS}/etc/passwd.new
mv ${IMAGE_ROOTFS}/etc/passwd.new ${IMAGE_ROOTFS}/etc/passwd
}
@@ -231,8 +240,48 @@ rootfs_update_timestamp () {
date "+%m%d%H%M%Y" >${IMAGE_ROOTFS}/etc/timestamp
}
+# Install locales into image for every entry in IMAGE_LINGUAS
+install_linguas() {
+if [ -e ${IMAGE_ROOTFS}/usr/bin/opkg-cl ] ; then
+ OPKG="opkg-cl ${IPKG_ARGS}"
+
+ ${OPKG} update || true
+ ${OPKG} list_installed | awk '{print $1}' |sort | uniq > /tmp/installed-packages
+
+ for i in $(cat /tmp/installed-packages | grep -v locale) ; do
+ for translation in ${IMAGE_LINGUAS}; do
+ translation_split=$(echo ${translation} | awk -F '-' '{print $1}')
+ echo ${i}-locale-${translation}
+ echo ${i}-locale-${translation_split}
+ done
+ done | sort | uniq > /tmp/wanted-locale-packages
+
+ ${OPKG} list | awk '{print $1}' |grep locale |sort | uniq > /tmp/available-locale-packages
+
+ cat /tmp/wanted-locale-packages /tmp/available-locale-packages | sort | uniq -d > /tmp/pending-locale-packages
+
+ if [ -s /tmp/pending-locale-packages ] ; then
+ cat /tmp/pending-locale-packages | xargs ${OPKG} -nodeps install
+ fi
+ rm -f ${IMAGE_ROOTFS}${libdir}/opkg/lists/*
+
+ for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.preinst; do
+ if [ -f $i ] && ! sh $i; then
+ opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .preinst`
+ fi
+ done
+
+ for i in ${IMAGE_ROOTFS}${libdir}/opkg/info/*.postinst; do
+ if [ -f $i ] && ! sh $i configure; then
+ opkg-cl ${IPKG_ARGS} flag unpacked `basename $i .postinst`
+ fi
+ done
+
+fi
+}
+
# export the zap_root_password, create_etc_timestamp and remote_init_link
-EXPORT_FUNCTIONS zap_root_password create_etc_timestamp remove_init_link do_rootfs make_zimage_symlink_relative set_image_autologin rootfs_update_timestamp
+EXPORT_FUNCTIONS zap_root_password create_etc_timestamp remove_init_link do_rootfs make_zimage_symlink_relative set_image_autologin rootfs_update_timestamp install_linguas
addtask rootfs before do_build after do_install
addtask deploy_to after do_rootfs