On Sun, Sep 1, 2013 at 10:25 AM, Chris Patterson <[email protected]> wrote: > Tracked down the issue to the busybox defconfig in the meta-virt layer. > > There were patches upstreamed to udev's mount script to require 'stat' in > addition to a similar update to busybox's config to provide it. > > commit ef7e1239b95dbef4e461007d6d0612c27a7919ec > Author: Andy Ross <[email protected]> > Date: Tue Sep 18 14:38:44 2012 -0700 > busybox: add /usr/bin/stat applet... > > commit 3543d0db691e82098c1da7bf12f43e0c57551a3d > Author: Andy Ross <[email protected]> > Date: Tue Sep 18 14:38:45 2012 -0700 > udev-extraconf: Don't mount root filesystem under /media... > > I suppose this could be resolved by updating the busybox defconfig to a > fragment turning on only the extra bits it wants? Or should I be > prioritizing my layers differently?
Converting to a fragment would be the best thing. The defconfig in meta-virt predates the fragment support for busybox, and no one has converted it yet. Cheers, Bruce > > > On Sun, Sep 1, 2013 at 12:41 AM, Chris Patterson <[email protected]> wrote: >> >> The reasoning for xen-image-initramfs was that I had minor issues with >> using stock core-image-minimal-initramfs and initramfs-live-boot. >> >> However, I have since tracked down the issue I was having with >> initramfs-live-boot, and determined we could drop initramfs-boot-xen in >> favor of initramfs-live-boot simply by adding LABEL=boot to the kernel args. >> >> Beyond that, vanilla core-image-minimal-initramfs would hang at "Waiting >> for removeable media..." indefinitely. After some testing, It appeared that >> adding coreutils to core-image-minimal-initramfs would resolve the issue >> (though not yet sure why, but looking into it). >> >> >> On Fri, Aug 30, 2013 at 1:36 AM, Bruce Ashfield <[email protected]> >> wrote: >>> >>> On Thu, Aug 29, 2013 at 11:37 PM, Chris Patterson <[email protected]> >>> wrote: >>> > xen-image-initramfs: newly added initrd to support testing >>> > xen-image-minimal and init script based on init-live.sh. >>> > --- >>> > recipes-extended/images/xen-image-initramfs.bb | 17 ++ >>> > recipes-extended/images/xen-image-minimal.bb | 55 +++++- >>> > .../initrdscripts/files/init-boot-xen.sh | 205 >>> > ++++++++++++++++++++ >>> > .../initrdscripts/initramfs-boot-xen_1.0.bb | 16 ++ >>> > 4 files changed, 286 insertions(+), 7 deletions(-) >>> > create mode 100644 recipes-extended/images/xen-image-initramfs.bb >>> > create mode 100644 >>> > recipes-extended/initrdscripts/files/init-boot-xen.sh >>> > create mode 100644 >>> > recipes-extended/initrdscripts/initramfs-boot-xen_1.0.bb >>> > >>> > diff --git a/recipes-extended/images/xen-image-initramfs.bb >>> > b/recipes-extended/images/xen-image-initramfs.bb >>> > new file mode 100644 >>> > index 0000000..d2f1301 >>> > --- /dev/null >>> > +++ b/recipes-extended/images/xen-image-initramfs.bb >>> > @@ -0,0 +1,17 @@ >>> > +DESCRIPTION = "Xen image initramfs" >>> > + >>> > +IMAGE_INSTALL = "initramfs-boot-xen busybox udev udev-extraconf >>> > base-passwd coreutils" >>> > + >>> > +# Do not pollute the initrd image with rootfs features >>> > +IMAGE_FEATURES = "" >>> > + >>> > +export IMAGE_BASENAME = "xen-image-initramfs" >>> > + >>> > +IMAGE_LINGUAS = "" >>> > + >>> > +LICENSE = "MIT" >>> > + >>> > +IMAGE_FSTYPES = "${INITRAMFS_FSTYPES}" >>> > +inherit core-image >>> > + >>> > +IMAGE_ROOTFS_SIZE = "8192" >>> > diff --git a/recipes-extended/images/xen-image-minimal.bb >>> > b/recipes-extended/images/xen-image-minimal.bb >>> > index 0cf55d6..c941339 100644 >>> > --- a/recipes-extended/images/xen-image-minimal.bb >>> > +++ b/recipes-extended/images/xen-image-minimal.bb >>> > @@ -1,14 +1,55 @@ >>> > -DESCRIPTION = "A minimal xen image" >>> > -IMAGE_INSTALL = "packagegroup-core-boot xen-minimal dropbear mdadm" >>> > +DESCRIPTION = "Image with Xen." >>> > + >>> > +INITRD_IMAGE ?= "xen-image-initramfs" >>> > + >>> > +IMAGE_INSTALL += " \ >>> > + ${CORE_IMAGE_BASE_INSTALL} \ >>> > + packagegroup-core-basic \ >>> > + packagegroup-core-ssh-openssh \ >>> > + kernel-module-xen-acpi-processor \ >>> > + kernel-module-xen-blkback \ >>> > + kernel-module-xen-blkfront \ >>> > + kernel-module-xen-evtchn \ >>> > + kernel-module-xenfs \ >>> > + kernel-module-xen-gntalloc \ >>> > + kernel-module-xen-gntdev \ >>> > + kernel-module-xen-netback \ >>> > + kernel-module-xen-netfront \ >>> > + kernel-module-xen-pcifront \ >>> > + kernel-module-xen-privcmd \ >>> > + kernel-module-xen-wdt \ >>> > + xen-base \ >>> > + xen-qemu \ >>> > + ${ROOTFS_PKGMANAGE_BOOTSTRAP} \ >>> > + " >>> > >>> > -IMAGE_LINGUAS = " " >>> > LICENSE = "MIT" >>> > >>> > inherit core-image >>> > >>> > -IMAGE_ROOTFS_SIZE = "8192" >>> > +syslinux_iso_populate_append() { >>> > + install -m 0444 ${STAGING_DATADIR}/syslinux/mboot.c32 >>> > ${ISODIR}${ISOLINUXDIR} >>> > +} >>> > + >>> > +syslinux_hddimg_populate_append() { >>> > + install -m 0444 ${STAGING_DATADIR}/syslinux/mboot.c32 >>> > ${HDDDIR}${SYSLINUXDIR} >>> > +} >>> > + >>> > +grubefi_populate_append() { >>> > + install -m 0644 ${DEPLOY_DIR_IMAGE}/xen-${MACHINE}.gz >>> > ${DEST}${EFIDIR}/xen.gz >>> > +} >>> > + >>> > +populate_append() { >>> > + install -m 0644 ${DEPLOY_DIR_IMAGE}/xen-${MACHINE}.gz >>> > ${DEST}/xen.gz >>> > +} >>> > >>> > -# remove not needed ipkg informations >>> > -ROOTFS_POSTPROCESS_COMMAND += "remove_packaging_data_files ; " >>> > +build_syslinux_cfg () { >>> > + echo "ALLOWOPTIONS 1" > ${SYSLINUXCFG} >>> > + echo "DEFAULT boot" >> ${SYSLINUXCFG} >>> > + echo "TIMEOUT 10" >> ${SYSLINUXCFG} >>> > + echo "PROMPT 1" >> ${SYSLINUXCFG} >>> > + echo "LABEL boot" >> ${SYSLINUXCFG} >>> > + echo " KERNEL mboot.c32" >> ${SYSLINUXCFG} >>> > + echo " APPEND /xen.gz loglvl=all guest_loglvl=all >>> > console=com1,vga com1=115200,8n1 --- /vmlinuz ramdisk_size=32768 >>> > root=/dev/ram0 rw console=hvc0 earlyprintk=xen console=tty0 panic=10 --- >>> > /initrd" >> ${SYSLINUXCFG} >>> > +} >>> > >>> > -require xen-bootimg.inc >>> > diff --git a/recipes-extended/initrdscripts/files/init-boot-xen.sh >>> > b/recipes-extended/initrdscripts/files/init-boot-xen.sh >>> > new file mode 100644 >>> > index 0000000..741f201 >>> > --- /dev/null >>> > +++ b/recipes-extended/initrdscripts/files/init-boot-xen.sh >>> > @@ -0,0 +1,205 @@ >>> > +#!/bin/sh >>> > + >>> > +PATH=/sbin:/bin:/usr/sbin:/usr/bin >>> > + >>> > +ROOT_MOUNT="/rootfs/" >>> > +ROOT_IMAGE="rootfs.img" >>> > +MOUNT="/bin/mount" >>> > +UMOUNT="/bin/umount" >>> > +ISOLINUX="" >>> > + >>> > +# Copied from initramfs-framework. The core of this script probably >>> > should be >>> > +# turned into initramfs-framework modules to reduce duplication. >>> > +udev_daemon() { >>> > + OPTIONS="/sbin/udev/udevd /sbin/udevd /lib/udev/udevd >>> > /sbin/systemd/systemd-udevd /lib/systemd/systemd-udevd" >>> > + >>> > + for o in $OPTIONS; do >>> > + if [ -x "$o" ]; then >>> > + echo $o >>> > + return 0 >>> > + fi >>> > + done >>> > + >>> > + return 1 >>> > +} >>> > + >>> > +_UDEV_DAEMON=`udev_daemon` >>> > + >>> > +early_setup() { >>> > + mkdir -p /proc >>> > + mkdir -p /sys >>> > + mount -t proc proc /proc >>> > + mount -t sysfs sysfs /sys >>> > + mount -t devtmpfs none /dev >>> > + >>> > + # support modular kernel >>> > + modprobe isofs 2> /dev/null >>> > + >>> > + mkdir -p /run >>> > + mkdir -p /var/run >>> > + mkdir -p /media >>> > + >>> > + $_UDEV_DAEMON --daemon >>> > + udevadm trigger --action=add >>> > +} >>> > + >>> > +read_args() { >>> > + [ -z "$CMDLINE" ] && CMDLINE=`cat /proc/cmdline` >>> > + for arg in $CMDLINE; do >>> > + optarg=`expr "x$arg" : 'x[^=]*=\(.*\)'` >>> > + case $arg in >>> > + root=*) >>> > + ROOT_DEVICE=$optarg ;; >>> > + rootfstype=*) >>> > + modprobe $optarg 2> /dev/null ;; >>> > + LABEL=*) >>> > + label=$optarg ;; >>> > + video=*) >>> > + video_mode=$arg ;; >>> > + vga=*) >>> > + vga_mode=$arg ;; >>> > + console=*) >>> > + if [ -z "${console_params}" ]; then >>> > + console_params=$arg >>> > + else >>> > + console_params="$console_params $arg" >>> > + fi ;; >>> > + debugshell*) >>> > + if [ -z "$optarg" ]; then >>> > + shelltimeout=30 >>> > + else >>> > + shelltimeout=$optarg >>> > + fi >>> > + esac >>> > + done >>> > +} >>> > + >>> > +boot_live_root() { >>> > + # Watches the udev event queue, and exits if all current events >>> > are handled >>> > + udevadm settle --timeout=3 --quiet >>> > + killall "${_UDEV_DAEMON##*/}" 2>/dev/null >>> > + >>> > + # Move the mount points of some filesystems over to >>> > + # the corresponding directories under the real root filesystem. >>> > + for dir in `awk '/\/dev.* \/media/{print $2}' /proc/mounts`; do >>> > + mkdir -p ${ROOT_MOUNT}/$dir >>> > + mount -n --move $dir ${ROOT_MOUNT}/$dir >>> > + done >>> > + mount -n --move /proc ${ROOT_MOUNT}/proc >>> > + mount -n --move /sys ${ROOT_MOUNT}/sys >>> > + mount -n --move /dev ${ROOT_MOUNT}/dev >>> > + >>> > + cd $ROOT_MOUNT >>> > + exec switch_root -c /dev/console $ROOT_MOUNT /sbin/init >>> > +} >>> > + >>> > +fatal() { >>> > + echo $1 >$CONSOLE >>> > + echo >$CONSOLE >>> > + exec sh >>> > +} >>> > + >>> > +early_setup >>> > + >>> > +[ -z "$CONSOLE" ] && CONSOLE="/dev/console" >>> > + >>> > +read_args >>> > + >>> > +echo "Waiting for removable media..." >>> > +C=0 >>> > +shelltimeout=5 >>> > +while true >>> > +do >>> > + udevadm trigger >>> > + udevadm settle >>> > + for i in `ls /media 2>/dev/null`; do >>> > + if [ -f /media/$i/$ROOT_IMAGE ] ; then >>> > + found="yes" >>> > + break >>> > + elif [ -f /media/$i/isolinux/$ROOT_IMAGE ]; then >>> > + found="yes" >>> > + ISOLINUX="isolinux" >>> > + break >>> > + fi >>> > + done >>> > + if [ "$found" = "yes" ]; then >>> > + break; >>> > + fi >>> > + # don't wait for more than $shelltimeout seconds, if it's set >>> > + if [ -n "$shelltimeout" ]; then >>> > + echo -n " " $(( $shelltimeout - $C )) >>> > + if [ $C -ge $shelltimeout ]; then >>> > + echo "..." >>> > + echo "Mounted filesystems" >>> > + mount | grep media >>> > + echo "Available block devices" >>> > + ls /dev/sd* >>> > + fatal "Cannot find rootfs.img file in /media/* , dropping >>> > to a shell " >>> > + fi >>> > + C=$(( C + 1 )) >>> > + fi >>> > + sleep 1 >>> > +done >>> > + >>> > +# Try to make a union mount of the root image. >>> > +# If no unification filesystem is available, mount the image >>> > read-only. >>> > +mount_and_boot() { >>> > + mkdir $ROOT_MOUNT >>> > + >>> > + mknod /dev/loop0 b 7 0 2>/dev/null >>> > + >>> > + # determine which unification filesystem to use >>> > + union_fs_type="" >>> > + if grep -q -w "overlayfs" /proc/filesystems; then >>> > + union_fs_type="overlayfs" >>> > + elif grep -q -w "aufs" /proc/filesystems; then >>> > + union_fs_type="aufs" >>> > + else >>> > + union_fs_type="" >>> > + fi >>> > + # make a union mount if possible >>> > + case $union_fs_type in >>> > + "overlayfs") >>> > + mkdir -p /rootfs.ro /rootfs.rw >>> > + if ! mount -o rw,loop,noatime,nodiratime >>> > /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs.ro; then >>> > + rm -rf /rootfs.ro /rootfs.rw >>> > + fatal "Could not mount rootfs image" >>> > + else >>> > + mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw >>> > + mount -t overlayfs -o >>> > "lowerdir=/rootfs.ro,upperdir=/rootfs.rw" overlayfs $ROOT_MOUNT >>> > + mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw >>> > + mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro >>> > + mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw >>> > + fi >>> > + ;; >>> > + "aufs") >>> > + mkdir -p /rootfs.ro /rootfs.rw >>> > + if ! mount -o rw,loop,noatime,nodiratime >>> > /media/$i/$ISOLINUX/$ROOT_IMAGE /rootfs.ro; then >>> > + rm -rf /rootfs.ro /rootfs.rw >>> > + fatal "Could not mount rootfs image" >>> > + else >>> > + mount -t tmpfs -o rw,noatime,mode=755 tmpfs /rootfs.rw >>> > + mount -t aufs -o "dirs=/rootfs.rw=rw:/rootfs.ro=ro" >>> > aufs $ROOT_MOUNT >>> > + mkdir -p $ROOT_MOUNT/rootfs.ro $ROOT_MOUNT/rootfs.rw >>> > + mount --move /rootfs.ro $ROOT_MOUNT/rootfs.ro >>> > + mount --move /rootfs.rw $ROOT_MOUNT/rootfs.rw >>> > + fi >>> > + ;; >>> > + "") >>> > + if ! mount -o rw,loop,noatime,nodiratime >>> > /media/$i/$ISOLINUX/$ROOT_IMAGE $ROOT_MOUNT ; then >>> > + fatal "Could not mount rootfs image" >>> > + else >>> > + mount -t tmpfs -o rw,noatime,mode=755 tmpfs >>> > $ROOT_MOUNT/media >>> > + fi >>> > + ;; >>> > + esac >>> > + >>> > + # boot the image >>> > + boot_live_root >>> > +} >>> > + >>> > +mount_and_boot >>> > + >>> > +# If we're getting here, we failed... >>> > +fatal "Installation image failed" >>> > + >>> > diff --git a/recipes-extended/initrdscripts/initramfs-boot-xen_1.0.bb >>> > b/recipes-extended/initrdscripts/initramfs-boot-xen_1.0.bb >>> > new file mode 100644 >>> > index 0000000..9380e83 >>> > --- /dev/null >>> > +++ b/recipes-extended/initrdscripts/initramfs-boot-xen_1.0.bb >>> > @@ -0,0 +1,16 @@ >>> > +DESCRIPTION = "A live image init script with support for Xen" >>> > +LICENSE = "MIT" >>> > +LIC_FILES_CHKSUM = >>> > "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" >>> > +SRC_URI = "file://init-boot-xen.sh" >>> > +PR = "r0" >>> > + >>> > +inherit allarch >>> > + >>> > +RDEPENDS_${PN} = "udev udev-extraconf" >>> > + >>> > +FILES_${PN} += " /init " >>> >>> I was going to ask if you are seeing any QA warnings with this, since >>> in the past we've had >>> to use update alternatives and priority to ensure that the right init >>> was used in an image .. but >>> then I noticed this is only pulled into the minimal config and there >>> shouldn't be any conflicting >>> init providers! >>> >>> Bruce >>> >>> > + >>> > +do_install() { >>> > + install -m 0755 ${WORKDIR}/init-boot-xen.sh ${D}/init >>> > +} >>> > + >>> > -- >>> > 1.7.10.4 >>> > >>> > _______________________________________________ >>> > meta-virtualization mailing list >>> > [email protected] >>> > https://lists.yoctoproject.org/listinfo/meta-virtualization >>> >>> >>> >>> -- >>> "Thou shalt not follow the NULL pointer, for chaos and madness await >>> thee at its end" >> >> > -- "Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end" _______________________________________________ meta-virtualization mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-virtualization
