diff options
Diffstat (limited to 'classes/image.bbclass')
| -rw-r--r-- | classes/image.bbclass | 77 |
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 |
