diff options
Diffstat (limited to 'external/meta-virtualization')
308 files changed, 18840 insertions, 0 deletions
diff --git a/external/meta-virtualization/.gitignore b/external/meta-virtualization/.gitignore new file mode 100644 index 00000000..65feb826 --- /dev/null +++ b/external/meta-virtualization/.gitignore @@ -0,0 +1,6 @@ +build*/ +pyshtables.py +*.swp +*.orig +*.rej +*~ diff --git a/external/meta-virtualization/COPYING.MIT b/external/meta-virtualization/COPYING.MIT new file mode 100644 index 00000000..fb950dc6 --- /dev/null +++ b/external/meta-virtualization/COPYING.MIT @@ -0,0 +1,17 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/external/meta-virtualization/README b/external/meta-virtualization/README new file mode 100644 index 00000000..810f263c --- /dev/null +++ b/external/meta-virtualization/README @@ -0,0 +1,78 @@ +meta-virtualization +=================== + +This layer provides support for building Xen, KVM, Libvirt, and associated +packages necessary for constructing OE-based virtualized solutions. + +The bbappend files for some recipes (e.g. linux-yocto) in this layer need to +have 'virtualization' in DISTRO_FEATURES to have effect. To enable them, add +in configuration file the following line. + + DISTRO_FEATURES_append = " virtualization" + +If meta-virtualization is included, but virtualization is not enabled as a +distro feature a warning is printed at parse time: + + You have included the meta-virtualization layer, but + 'virtualization' has not been enabled in your DISTRO_FEATURES. Some bbappend files + may not take effect. See the meta-virtualization README for details on enabling + virtualization support. + +If you know what you are doing, this warning can be disabled by setting the following +variable in your configuration: + + SKIP_META_VIRT_SANITY_CHECK = 1 + +Depending on your use case, there are other distro features in meta-virtualization +that may also be enabled: + + - xen: enables xen functionality in various packages (kernel, libvirt, etc) + - kvm: enables KVM configurations in the kernel and autoloads modules + - aufs: enables aufs support in docker and linux-yocto + - x11: enable xen and libvirt functionality related to x11 + - selinux: enables functionality in libvirt and lxc + - systemd: enable systemd services and unit files (for recipes for support) + - sysvinit: enable sysvinit scripts (for recipes with support) + +Dependencies +------------ +This layer depends on: + +URI: git://github.com/openembedded/openembedded-core.git +branch: master +revision: HEAD +prio: default + +URI: git://github.com/openembedded/meta-openembedded.git +branch: master +revision: HEAD +layers: meta-oe + meta-networking + meta-filesystems + meta-python + +BBFILE_PRIORITY_openembedded-layer = "4" + +Required for Xen XSM policy: +URI: git://git.yoctoproject.org/meta-selinux +branch: master +revision: HEAD +prio: default + +Maintenance +----------- + +Send pull requests, patches, comments or questions to meta-virtualization@yoctoproject.org + +Maintainer: Bruce Ashfield <bruce.ashfield@gmail.com> + +When sending single patches, please using something like: +$ git send-email -1 -M --to meta-virtualization@yoctoproject.org --subject-prefix='meta-virtualization][PATCH' + +License +------- + +All metadata is MIT licensed unless otherwise stated. Source code included +in tree for individual recipes is under the LICENSE stated in each recipe +(.bb file) unless otherwise stated. + diff --git a/external/meta-virtualization/classes/sanity-meta-virt.bbclass b/external/meta-virtualization/classes/sanity-meta-virt.bbclass new file mode 100644 index 00000000..b4ed0825 --- /dev/null +++ b/external/meta-virtualization/classes/sanity-meta-virt.bbclass @@ -0,0 +1,10 @@ +addhandler virt_bbappend_distrocheck +virt_bbappend_distrocheck[eventmask] = "bb.event.SanityCheck" +python virt_bbappend_distrocheck() { + skip_check = e.data.getVar('SKIP_META_VIRT_SANITY_CHECK') == "1" + if 'virtualization' not in e.data.getVar('DISTRO_FEATURES').split() and not skip_check: + bb.warn("You have included the meta-virtualization layer, but \ +'virtualization' has not been enabled in your DISTRO_FEATURES. Some bbappend files \ +may not take effect. See the meta-virtualization README for details on enabling \ +virtualization support.") +} diff --git a/external/meta-virtualization/conf/distro/include/meta-virt-default-versions.inc b/external/meta-virtualization/conf/distro/include/meta-virt-default-versions.inc new file mode 100644 index 00000000..27e7b90d --- /dev/null +++ b/external/meta-virtualization/conf/distro/include/meta-virt-default-versions.inc @@ -0,0 +1,9 @@ +# Meta-virtuailization PREFERED_VERSION + +PREFERRED_VERSION_python-blinker = "1.3" +PREFERRED_VERSION_python-gevent = "1.0.1" +PREFERRED_VERSION_python-m2crypto = "0.22.3" +PREFERRED_VERSION_python-pyyaml = "3.11" +PREFERRED_VERSION_python-redis = "2.10.3" +PREFERRED_VERSION_python-sqlalchemy = "1.1.5" +PREFERRED_VERSION_python-werkzeug = "0.10.4" diff --git a/external/meta-virtualization/conf/distro/include/virt_security_flags.inc b/external/meta-virtualization/conf/distro/include/virt_security_flags.inc new file mode 100644 index 00000000..f4c288b8 --- /dev/null +++ b/external/meta-virtualization/conf/distro/include/virt_security_flags.inc @@ -0,0 +1,5 @@ +# Build errors with the pie options enabled +SECURITY_CFLAGS_pn-libvirt = "${SECURITY_NO_PIE_CFLAGS}" + +# This has text relco errors with the pie options enabled +SECURITY_CFLAGS_pn-lxc = "${SECURITY_NO_PIE_CFLAGS}" diff --git a/external/meta-virtualization/conf/layer.conf b/external/meta-virtualization/conf/layer.conf new file mode 100644 index 00000000..dc42e603 --- /dev/null +++ b/external/meta-virtualization/conf/layer.conf @@ -0,0 +1,41 @@ +# We have a conf and classes directory, append to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have a recipes directory, add to BBFILES +BBFILES += "${LAYERDIR}/recipes*/*/*.bb ${LAYERDIR}/recipes*/*/*.bbappend" + +BBFILE_COLLECTIONS += "virtualization-layer" +BBFILE_PATTERN_virtualization-layer := "^${LAYERDIR}/" +BBFILE_PRIORITY_virtualization-layer = "8" + +# Custom licenses used by some packages in this layer +LICENSE_PATH += "${LAYERDIR}/files/custom-licenses" + +# This should only be incremented on significant changes that will +# cause compatibility issues with other layers +LAYERVERSION_virtualization-layer = "1" +LAYERSERIES_COMPAT_virtualization-layer = "sumo thud" +LAYERDEPENDS_virtualization-layer = " \ + core \ + openembedded-layer \ + networking-layer \ + filesystems-layer \ + meta-python \ +" + +# webserver: naigos requires apache2 +LAYERRECOMMENDS_virtualization-layer = " \ + webserver \ +" + +# Override security flags +require conf/distro/include/virt_security_flags.inc + +PREFERRED_PROVIDER_virtual/runc ?= "runc-docker" +PREFERRED_PROVIDER_virtual/containerd ?= "containerd-opencontainers" + +# Sanity check for meta-virtualization layer. +# Setting SKIP_META_VIRT_SANITY_CHECK to "1" would skip the bbappend files check. +INHERIT += "sanity-meta-virt" + +require ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'meta-virt-default-versions.inc', '', d)} diff --git a/external/meta-virtualization/docs/00-INDEX b/external/meta-virtualization/docs/00-INDEX new file mode 100644 index 00000000..a2ffd99f --- /dev/null +++ b/external/meta-virtualization/docs/00-INDEX @@ -0,0 +1,12 @@ +This is a brief list of all the files in meta-virtualization/docs and what +they contain. If you add a documentation file, please list it here in +alphabetical order as well. + +00-INDEX + - this file. + +00-README + - info on the goals of meta-virtualization and this docs subdir + +openvswitch.txt + - example on how to setup openvswitch with qemu/kvm. diff --git a/external/meta-virtualization/docs/00-README b/external/meta-virtualization/docs/00-README new file mode 100644 index 00000000..6fea1125 --- /dev/null +++ b/external/meta-virtualization/docs/00-README @@ -0,0 +1,6 @@ +meta-virtualization: docs +========================= + +The docs subdirectory is a holding tank for meta-virtualization related +READMEs, documentation, testing information, configuration and other +notes that help the users of meta-virt. diff --git a/external/meta-virtualization/docs/openvswitch.txt b/external/meta-virtualization/docs/openvswitch.txt new file mode 100644 index 00000000..4410d27e --- /dev/null +++ b/external/meta-virtualization/docs/openvswitch.txt @@ -0,0 +1,96 @@ +Simple setup for connecting openvswitch to qemu/kvm +=================================================== +This example brings up openvswitch using a private network. + +Preliminary notes +================= +1. Make sure to build kernel support for openvswitch as a module. The +openvswitch init scripts expect to load a module and upon success +continue to setup the switch. If openvswitch is compiled +statically, the init scripts not load the ovs-vswitchd daemon +and none of the configured bridges will show up in the interfaces +table (ifconfig). You can get around this limiation by running the +following by hand: + # ovs-vswitchd --pidfile --detach + +2. Verify that ovs-vswitchd is running before proceeding: + # /etc/init.d/openvswitch-switch status + ovsdb-server is running with pid 1867 + ovs-vswitchd is running with pid 1877 + +3. A kernel and rootfs is required for qemu bring up. + +Qemu Setup +========== +The host requires a /etc/qemu-ifup script to setup the bridging and tap +devices. Qemu will invoke this qemu-ifup script at startup. Here is +an example script: +$ cat /etc/qemu-fup + #!/bin/sh + # the tap is dynamically assigned and passed into this script + # as a parameter + TAP=$1 + + # Note: if booting over NFS, once the $ETH0 device is added to the bridge, + # your host will be unusable. In that case, setup networking + # init scripts appropriately and change the following to work + # with it. + ETH0="eth1" + NETMASK=255.255.255.0 + IP=192.168.1.1 + GATEWAY= + SWITCH=ovsbr0 + if [ -n "$TAP" ];then + ifconfig $TAP up + ifconfig $SWITCH down &>/dev/null + ovs-vsctl del-br $SWITCH + ovs-vsctl add-br $SWITCH + ifconfig $ETH0 0.0.0.0 + ifconfig $SWITCH $IP up netmask $NETMASK + #-- external access not required for this test. + #route add default gw $GATEWAY + ovs-vsctl add-port $SWITCH $ETH0 + ovs-vsctl add-port $SWITCH $TAP + exit 0 + else + echo "$0: No tap device" + exit 1 + fi + +Start Qemu +========== +This example will bring up qemu with a tap network interface. +Note: this command must be run as root due to the networking setup. + + $ qemu-system-x86_64 -nographic -k en-us -m 1024 \ + -net nic,macaddr=1a:46:0b:ca:bc:7a,model=virtio \ + -net tap -enable-kvm\ + -kernel /opt/dpdk-guest-kernel \ + -append 'root=/dev/vda ro console=ttyS0' \ + -drive file=/opt/intel-xeon-core-ovp-kvm-preempt-rt-dist.ext3,cache=none,if=virtio + +Once the guest OS is up and running, configure the quest network interface: + $ ifconfig eth0 192.168.1.10 + +Ping the bridge: + $ ping 192.168.1.1 + +From the host, view the bridged network: +$ ovs-vsctl show +c1212b96-ef49-4a8e-b598-09b05b854dd0 + Bridge "ovsbr0" + Port "tap0" + Interface "tap0" + Port "eth1" + Interface "eth1" + Port "ovsbr0" + Interface "ovsbr0" + type: internal + +At this point, openvswitch is up and running. If you want external +network access, you need to set a GATEWAY in the qemu-ifup script and +make sure the external device is part of the bridge. + +Note: +Proper setup will require a /etc/qemu-ifdown script to tear down the +bridge and interfaces. (not provided here). diff --git a/external/meta-virtualization/files/custom-licenses/Intel-ACPI b/external/meta-virtualization/files/custom-licenses/Intel-ACPI new file mode 100644 index 00000000..df0d0bba --- /dev/null +++ b/external/meta-virtualization/files/custom-licenses/Intel-ACPI @@ -0,0 +1,104 @@ +1. Copyright Notice + +Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp. +All rights reserved. + +2. License + +2.1. This is your license from Intel Corp. under its intellectual property +rights. You may have additional license terms from the party that provided +you this software, covering your right to use that party's intellectual +property rights. + +2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a +copy of the source code appearing in this file ("Covered Code") an +irrevocable, perpetual, worldwide license under Intel's copyrights in the +base code distributed originally by Intel ("Original Intel Code") to copy, +make derivatives, distribute, use and display any portion of the Covered +Code in any form, with the right to sublicense such rights; and + +2.3. Intel grants Licensee a non-exclusive and non-transferable patent +license (with the right to sublicense), under only those claims of Intel +patents that are infringed by the Original Intel Code, to make, use, sell, +offer to sell, and import the Covered Code and derivative works thereof +solely to the minimum extent necessary to exercise the above copyright +license, and in no event shall the patent license extend to any additions +to or modifications of the Original Intel Code. No other license or right +is granted directly or by implication, estoppel or otherwise; + +The above copyright and patent license is granted only if the following +conditions are met: + +3. Conditions + +3.1. Redistribution of Source with Rights to Further Distribute Source. +Redistribution of source code of any substantial portion of the Covered +Code or modification with rights to further distribute source must include +the above Copyright Notice, the above License, this list of Conditions, +and the following Disclaimer and Export Compliance provision. In addition, +Licensee must cause all Covered Code to which Licensee contributes to +contain a file documenting the changes Licensee made to create that Covered +Code and the date of any change. Licensee must include in that file the +documentation of any changes made by any predecessor Licensee. Licensee +must include a prominent statement that the modification is derived, +directly or indirectly, from Original Intel Code. + +3.2. Redistribution of Source with no Rights to Further Distribute Source. +Redistribution of source code of any substantial portion of the Covered +Code or modification without rights to further distribute source must +include the following Disclaimer and Export Compliance provision in the +documentation and/or other materials provided with distribution. In +addition, Licensee may not authorize further sublicense of source of any +portion of the Covered Code, and must include terms to the effect that the +license from Licensee to its licensee is limited to the intellectual +property embodied in the software Licensee provides to its licensee, and +not to intellectual property embodied in modifications its licensee may +make. + +3.3. Redistribution of Executable. Redistribution in executable form of any +substantial portion of the Covered Code or modification must reproduce the +above Copyright Notice, and the following Disclaimer and Export Compliance +provision in the documentation and/or other materials provided with the +distribution. + +3.4. Intel retains all right, title, and interest in and to the Original +Intel Code. + +3.5. Neither the name Intel nor any other trademark owned or controlled by +Intel shall be used in advertising or otherwise to promote the sale, use or +other dealings in products derived from or relating to the Covered Code +without prior written authorization from Intel. + +4. Disclaimer and Export Compliance + +4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED +HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE +IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, +INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY +UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY +IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A +PARTICULAR PURPOSE. + +4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES +OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR +COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, +SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY +CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL +HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS +SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY +LIMITED REMEDY. + +4.3. Licensee shall not export, either directly or indirectly, any of this +software or system incorporating such software without first obtaining any +required license or other approval from the U. S. Department of Commerce or +any other agency or department of the United States Government. In the +event Licensee exports any such software from the United States or +re-exports any such software from a foreign destination, Licensee shall +ensure that the distribution and export/re-export of the software is in +compliance with all laws, regulations, orders, or other restrictions of the +U.S. Export Administration Regulations. Licensee agrees that neither it nor +any of its subsidiaries will export/re-export any technical data, process, +software, or service, directly or indirectly, to any country for which the +United States government or any agency thereof requires an export license, +other governmental approval, or letter of assurance, without first obtaining +such license, approval or letter. diff --git a/external/meta-virtualization/files/custom-licenses/NewRelic b/external/meta-virtualization/files/custom-licenses/NewRelic new file mode 100644 index 00000000..9c2e5e86 --- /dev/null +++ b/external/meta-virtualization/files/custom-licenses/NewRelic @@ -0,0 +1,33 @@ + Copyright (c) 2010-2014 New Relic, Inc. All rights reserved. + +Certain inventions disclosed in this file may be claimed within patents +owned or patent applications filed by New Relic, Inc. or third parties. +Subject to the terms of this notice, New Relic grants you a nonexclusive, +nontransferable license, without the right to sublicense, to (a) install +and execute one copy of these files on any number of workstations owned or +controlled by you and (b) distribute verbatim copies of these files to +third parties. As a condition to the foregoing grant, you must provide this +notice along with each copy you distribute and you must not remove, alter, +or obscure this notice. + +All other use, reproduction, modification, distribution, or other +exploitation of these files is strictly prohibited, except as may be set +forth in a separate written license agreement between you and New Relic. +The terms of any such license agreement will control over this notice. The +license stated above will be automatically terminated and revoked if you +exceed its scope or violate any of the terms of this notice. + +This License does not grant permission to use the trade names, trademarks, +service marks, or product names of New Relic, except as required for +reasonable and customary use in describing the origin of this file and +reproducing the content of this notice. You may not mark or brand this file +with any trade name, trademarks, service marks, or product names other than +the original brand (if any) provided by New Relic. + +Unless otherwise expressly agreed by New Relic in a separate written +license agreement, these files are provided AS IS, WITHOUT WARRANTY OF ANY +KIND, including without any implied warranties of MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE, TITLE, or NON-INFRINGEMENT. As a condition to +your use of these files, you are solely responsible for such use. New Relic +will have no liability to you for direct, indirect, consequential, +incidental, special, or punitive damages or for lost profits or data. diff --git a/external/meta-virtualization/files/fs-perms-nagios.txt b/external/meta-virtualization/files/fs-perms-nagios.txt new file mode 100644 index 00000000..1334cd12 --- /dev/null +++ b/external/meta-virtualization/files/fs-perms-nagios.txt @@ -0,0 +1,2 @@ +${sysconfdir}/nagios 0755 nagios nagios false - - - +${libdir}/nagios/plugins 0755 nagios nagios true 0644 nagios nagios diff --git a/external/meta-virtualization/recipes-containers/cgroup-lite/cgroup-lite_1.15.bb b/external/meta-virtualization/recipes-containers/cgroup-lite/cgroup-lite_1.15.bb new file mode 100644 index 00000000..7b48c3ac --- /dev/null +++ b/external/meta-virtualization/recipes-containers/cgroup-lite/cgroup-lite_1.15.bb @@ -0,0 +1,34 @@ +SECTION = "devel" +SUMMARY = "Light-weight package to set up cgroups at system boot." +DESCRIPTION = "Light-weight package to set up cgroups at system boot." +HOMEPAGE = "http://packages.ubuntu.com/source/artful/cgroup-lite" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://debian/copyright;md5=5d5da4e0867cf06014f87102154d0102" +SRC_URI = "https://launchpad.net/ubuntu/+archive/primary/+files/cgroup-lite_1.15.tar.xz" +SRC_URI += "file://cgroups-init" +SRC_URI[md5sum] = "1438c1f4a7227c0dedfce5f86f02591d" +SRC_URI[sha256sum] = "02f44c70ed3cf27b9e89e5266492fddf4b455336ab4e03abc85e92297537201f" + +inherit allarch update-rc.d systemd + +INITSCRIPT_NAME = "cgroups-init" +INITSCRIPT_PARAMS = "start 8 2 3 4 5 . stop 20 0 1 6 ." + +# Keeps the sysvinit scripts out of the image if building +# where systemd is in use. +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "cgroups-init.service" +SYSTEMD_AUTO_ENABLE_${PN} = "mask" + + +do_install() { + install -d ${D}/bin + install -m 0755 ${S}/scripts/cgroups-mount ${D}/bin + install -m 0755 ${S}/scripts/cgroups-umount ${D}/bin + + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/cgroups-init ${D}${sysconfdir}/init.d/cgroups-init + + install -d ${D}${systemd_unitdir}/system + ln -sf /dev/null ${D}${systemd_unitdir}/system/cgroups-init.service +} diff --git a/external/meta-virtualization/recipes-containers/cgroup-lite/files/cgroups-init b/external/meta-virtualization/recipes-containers/cgroup-lite/files/cgroups-init new file mode 100755 index 00000000..e5040240 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/cgroup-lite/files/cgroups-init @@ -0,0 +1,27 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: cgroups mount +# Required-Start: $network $remote_fs +# Required-Stop: $network $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: mount/unmount cgroups +### END INIT INFO + +# must start before libvirtd is run +case "$1" in + start) + echo -n "Mounting cgroups..." + /bin/cgroups-mount + echo "Done" + ;; + stop) + echo -n "Unmounting cgroups..." + /bin/cgroups-umount + echo "Done" + ;; + *) + echo "Usage: /etc/init.d/cgroups-init {start|stop}" + exit 1 + ;; +esac diff --git a/external/meta-virtualization/recipes-containers/containerd/containerd-docker_git.bb b/external/meta-virtualization/recipes-containers/containerd/containerd-docker_git.bb new file mode 100644 index 00000000..b18a9bb2 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/containerd/containerd-docker_git.bb @@ -0,0 +1,14 @@ +SRCREV = "3addd840653146c90a254301d6c3a663c7fd6429" +SRC_URI = "\ + git://github.com/docker/containerd.git;branch=v0.2.x;destsuffix=git/src/github.com/containerd/containerd \ + " + +include containerd.inc + +CONTAINERD_VERSION = "v0.2.x" +S = "${WORKDIR}/git/src/github.com/containerd/containerd" + +PROVIDES += "virtual/containerd" +RPROVIDES_${PN} = "virtual/containerd" + +DEPENDS += "btrfs-tools" diff --git a/external/meta-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bb b/external/meta-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bb new file mode 100644 index 00000000..c6b4f5e4 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bb @@ -0,0 +1,11 @@ +SRCREV = "cfd04396dc68220d1cecbe686a6cc3aa5ce3667c" +SRC_URI = "git://github.com/containerd/containerd;nobranch=1 \ + file://0001-build-use-oe-provided-GO-and-flags.patch \ + " + +include containerd.inc + +CONTAINERD_VERSION = "v1.0.2" + +PROVIDES += "virtual/containerd" +RPROVIDES_${PN} = "virtual/containerd" diff --git a/external/meta-virtualization/recipes-containers/containerd/containerd.inc b/external/meta-virtualization/recipes-containers/containerd/containerd.inc new file mode 100644 index 00000000..0eca5a64 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/containerd/containerd.inc @@ -0,0 +1,92 @@ +HOMEPAGE = "https://github.com/docker/containerd" +SUMMARY = "containerd is a daemon to control runC" +DESCRIPTION = "containerd is a daemon to control runC, built for performance and density. \ + containerd leverages runC's advanced features such as seccomp and user namespace \ + support as well as checkpoint and restore for cloning and live migration of containers." + +# Apache-2.0 for containerd +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE.code;md5=aadc30f9c14d876ded7bedc0afd2d3d7" + +SRC_URI += "file://containerd.service" + +S = "${WORKDIR}/git" + +PV = "${CONTAINERD_VERSION}+git${SRCREV}" + +inherit go +inherit goarch + +GO_IMPORT = "import" + +RRECOMMENDS_${PN} = "lxc docker" +CONTAINERD_PKG="github.com/containerd/containerd" + +INSANE_SKIP_${PN} += "ldflags" + +do_configure[noexec] = "1" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/ + # without this, the stress test parts of the build fail + cp ${S}/src/import/*.go ${S}/src/import/vendor/src/github.com/containerd/containerd + + for c in content errdefs fs images mount snapshots linux api runtimes defaults progress \ + protobuf reference diff platforms runtime remotes version archive dialer gc metadata \ + metrics filters identifiers labels leases plugin server services \ + cmd cio containers namespaces oci events log reaper sys rootfs; do + ln -sfn ${S}/src/import/${c} ${S}/src/import/vendor/github.com/containerd/containerd/${c} + done + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export BUILDTAGS="no_btrfs static_build netgo" + export CFLAGS="${CFLAGS}" + export LDFLAGS="${LDFLAGS}" + + cd ${S}/src/import + oe_runmake binaries +} + +# Note: disabled for now, since docker is launching containerd +# inherit systemd +# SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" +# SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','containerd.service','',d)}" + +do_install() { + mkdir -p ${D}/${bindir} + + cp ${S}/src/import/bin/containerd ${D}/${bindir}/containerd + cp ${S}/src/import/bin/containerd-shim ${D}/${bindir}/containerd-shim + cp ${S}/src/import/bin/ctr ${D}/${bindir}/containerd-ctr + + ln -sf containerd ${D}/${bindir}/docker-containerd + ln -sf containerd-shim ${D}/${bindir}/docker-containerd-shim + ln -sf containerd-ctr ${D}/${bindir}/docker-containerd-ctr + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${WORKDIR}/containerd.service ${D}/${systemd_unitdir}/system + # adjust from /usr/local/bin to /usr/bin/ + sed -e "s:/usr/local/bin/containerd:${bindir}/docker-containerd:g" -i ${D}/${systemd_unitdir}/system/containerd.service + fi +} + +FILES_${PN} += "${systemd_system_unitdir}/*" + +INHIBIT_PACKAGE_STRIP = "1" +INSANE_SKIP_${PN} += "ldflags already-stripped" + +COMPATIBLE_HOST = "^(?!(qemu)?mips).*" diff --git a/external/meta-virtualization/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch b/external/meta-virtualization/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch new file mode 100644 index 00000000..75a984be --- /dev/null +++ b/external/meta-virtualization/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch @@ -0,0 +1,26 @@ +From e31acef290181434efaf47e70db7ad0d92dbe300 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Thu, 19 Apr 2018 17:09:51 -0400 +Subject: [PATCH] build: use oe provided GO and flags + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/import/Makefile b/src/import/Makefile +index 9d8cf8a18fbc..492d033fe2a7 100644 +--- a/src/import/Makefile ++++ b/src/import/Makefile +@@ -134,7 +134,7 @@ bin/%: cmd/% FORCE + + bin/containerd-shim: cmd/containerd-shim FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 + @echo "$(WHALE) bin/containerd-shim" +- @CGO_ENABLED=0 go build -o bin/containerd-shim ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim ++ @$(GO) build -o bin/containerd-shim ${SHIM_GO_LDFLAGS} $(GOBUILDFLAGS) ${GO_TAGS} ./cmd/containerd-shim + + binaries: $(BINARIES) ## build binaries + @echo "$(WHALE) $@" +-- +2.4.0.53.g8440f74 + diff --git a/external/meta-virtualization/recipes-containers/containerd/files/containerd.service b/external/meta-virtualization/recipes-containers/containerd/files/containerd.service new file mode 100644 index 00000000..23633b02 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/containerd/files/containerd.service @@ -0,0 +1,11 @@ +[Unit] +Description=containerd +Documentation=https://containerd.tools +After=network.target + +[Service] +ExecStart=/usr/local/bin/containerd +Delegate=yes + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-containers/cri-o/cri-o_git.bb b/external/meta-virtualization/recipes-containers/cri-o/cri-o_git.bb new file mode 100644 index 00000000..822c57ff --- /dev/null +++ b/external/meta-virtualization/recipes-containers/cri-o/cri-o_git.bb @@ -0,0 +1,135 @@ +HOMEPAGE = "https://github.com/kubernetes-sigs/cri-o" +SUMMARY = "Open Container Initiative-based implementation of Kubernetes Container Runtime Interface" +DESCRIPTION = "cri-o is meant to provide an integration path between OCI conformant \ +runtimes and the kubelet. Specifically, it implements the Kubelet Container Runtime \ +Interface (CRI) using OCI conformant runtimes. The scope of cri-o is tied to the scope of the CRI. \ +. \ +At a high level, we expect the scope of cri-o to be restricted to the following functionalities: \ +. \ + - Support multiple image formats including the existing Docker image format \ + - Support for multiple means to download images including trust & image verification \ + - Container image management (managing image layers, overlay filesystems, etc) \ + - Container process lifecycle management \ + - Monitoring and logging required to satisfy the CRI \ + - Resource isolation as required by the CRI \ + " + +SRCREV_cri-o = "774a29ecf6855f2dff266dc2aa2fe81d7d964465" +SRC_URI = "\ + git://github.com/kubernetes-sigs/cri-o.git;nobranch=1;name=cri-o \ + file://0001-Makefile-force-symlinks.patch \ + file://crio.conf \ + " + +# Apache-2.0 for docker +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" + +GO_IMPORT = "import" + +PV = "1.12.0+git${SRCREV_cri-o}" + +DEPENDS = " \ + glib-2.0 \ + btrfs-tools \ + gpgme \ + ostree \ + libdevmapper \ + " +RDEPENDS_${PN} = " \ + cni \ + " + +PACKAGES =+ "${PN}-config" + +RDEPENDS_${PN} += " virtual/containerd virtual/runc" +RDEPENDS_${PN} += " e2fsprogs-mke2fs" + +inherit systemd +inherit go +inherit goarch +inherit pkgconfig + +EXTRA_OEMAKE="BUILDTAGS=''" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + export GOPATH="${S}/src/import:${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + mkdir -p ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o + ln -sf ../../../../cmd ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/cmd + ln -sf ../../../../test ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/test + ln -sf ../../../../oci ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/oci + ln -sf ../../../../server ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/server + ln -sf ../../../../pkg ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/pkg + ln -sf ../../../../libpod ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/libpod + ln -sf ../../../../libkpod ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/libkpod + ln -sf ../../../../utils ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/utils + ln -sf ../../../../types ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/types + ln -sf ../../../../version ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/version + ln -sf ../../../../lib ${S}/src/import/vendor/github.com/kubernetes-sigs/cri-o/lib + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/import + + oe_runmake binaries +} + +SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" +SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','crio.service','',d)}" +SYSTEMD_AUTO_ENABLE_${PN} = "enable" + +do_install() { + localbindir="/usr/local/bin" + + install -d ${D}${localbindir} + install -d ${D}/${libexecdir}/crio + install -d ${D}/${sysconfdir}/crio + install -d ${D}${systemd_unitdir}/system/ + + install ${WORKDIR}/crio.conf ${D}/${sysconfdir}/crio/crio.conf + + # sample config files, they'll go in the ${PN}-config below + install -d ${D}/${sysconfdir}/crio/config/ + install -m 755 -D ${S}/src/import/test/testdata/* ${D}/${sysconfdir}/crio/config/ + + install ${S}/src/import/bin/crio ${D}/${localbindir} + install ${S}/src/import/bin/crio-config ${D}/${localbindir} + + install ${S}/src/import/bin/conmon ${D}/${localbindir}/crio + install ${S}/src/import/bin/pause ${D}/${localbindir}/crio + + install -m 0644 ${S}/src/import/contrib/systemd/crio.service ${D}${systemd_unitdir}/system/ + install -m 0644 ${S}/src/import/contrib/systemd/crio-shutdown.service ${D}${systemd_unitdir}/system/ +} + +FILES_${PN}-config = "${sysconfdir}/crio/config/*" +FILES_${PN} += "${systemd_unitdir}/system/*" +FILES_${PN} += "/usr/local/bin/*" + +INHIBIT_PACKAGE_STRIP = "1" +INSANE_SKIP_${PN} += "ldflags already-stripped" + +deltask compile_ptest_base + diff --git a/external/meta-virtualization/recipes-containers/cri-o/files/0001-Makefile-force-symlinks.patch b/external/meta-virtualization/recipes-containers/cri-o/files/0001-Makefile-force-symlinks.patch new file mode 100644 index 00000000..0b106e41 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/cri-o/files/0001-Makefile-force-symlinks.patch @@ -0,0 +1,26 @@ +From 53371afbf0f20a1651ee6f2406cd2be056a31066 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Thu, 1 Nov 2018 11:17:05 -0400 +Subject: [PATCH] Makefile: force symlinks + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/import/Makefile b/src/import/Makefile +index cf37bec..68c8eeb 100644 +--- a/src/import/Makefile ++++ b/src/import/Makefile +@@ -66,7 +66,7 @@ help: + .gopathok: + ifeq ("$(wildcard $(GOPKGDIR))","") + mkdir -p "$(GOPKGBASEDIR)" +- ln -s "$(CURDIR)" "$(GOPKGDIR)" ++ ln -sf "$(CURDIR)" "$(GOPKGDIR)" + endif + touch "$(GOPATH)/.gopathok" + +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-containers/cri-o/files/crio.conf b/external/meta-virtualization/recipes-containers/cri-o/files/crio.conf new file mode 100644 index 00000000..51d7f404 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/cri-o/files/crio.conf @@ -0,0 +1,147 @@ +# generated via: crio --config="" config --default + +# The "crio" table contains all of the server options. +[crio] + +# root is a path to the "root directory". CRIO stores all of its data, +# including container images, in this directory. +root = "/var/lib/containers/storage" + +# run is a path to the "run directory". CRIO stores all of its state +# in this directory. +runroot = "/var/run/containers/storage" + +# storage_driver select which storage driver is used to manage storage +# of images and containers. +storage_driver = "" + +# storage_option is used to pass an option to the storage driver. +storage_option = [ +] + +# The "crio.api" table contains settings for the kubelet/gRPC +# interface (which is also used by crioctl). +[crio.api] + +# listen is the path to the AF_LOCAL socket on which crio will listen. +listen = "/var/run/crio.sock" + +# stream_address is the IP address on which the stream server will listen +stream_address = "" + +# stream_port is the port on which the stream server will listen +stream_port = "10010" + +# file_locking is whether file-based locking will be used instead of +# in-memory locking +file_locking = true + +# The "crio.runtime" table contains settings pertaining to the OCI +# runtime used and options for how to set up and manage the OCI runtime. +[crio.runtime] + +# runtime is the OCI compatible runtime used for trusted container workloads. +# This is a mandatory setting as this runtime will be the default one +# and will also be used for untrusted container workloads if +# runtime_untrusted_workload is not set. +runtime = "/usr/bin/runc" + +# runtime_untrusted_workload is the OCI compatible runtime used for untrusted +# container workloads. This is an optional setting, except if +# default_container_trust is set to "untrusted". +runtime_untrusted_workload = "" + +# default_workload_trust is the default level of trust crio puts in container +# workloads. It can either be "trusted" or "untrusted", and the default +# is "trusted". +# Containers can be run through different container runtimes, depending on +# the trust hints we receive from kubelet: +# - If kubelet tags a container workload as untrusted, crio will try first to +# run it through the untrusted container workload runtime. If it is not set, +# crio will use the trusted runtime. +# - If kubelet does not provide any information about the container workload trust +# level, the selected runtime will depend on the default_container_trust setting. +# If it is set to "untrusted", then all containers except for the host privileged +# ones, will be run by the runtime_untrusted_workload runtime. Host privileged +# containers are by definition trusted and will always use the trusted container +# runtime. If default_container_trust is set to "trusted", crio will use the trusted +# container runtime for all containers. +default_workload_trust = "trusted" + +# conmon is the path to conmon binary, used for managing the runtime. +conmon = "/usr/libexec/crio/conmon" + +# conmon_env is the environment variable list for conmon process, +# used for passing necessary environment variable to conmon or runtime. +conmon_env = [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", +] + +# selinux indicates whether or not SELinux will be used for pod +# separation on the host. If you enable this flag, SELinux must be running +# on the host. +selinux = false + +# seccomp_profile is the seccomp json profile path which is used as the +# default for the runtime. +seccomp_profile = "/etc/crio/seccomp.json" + +# apparmor_profile is the apparmor profile name which is used as the +# default for the runtime. +apparmor_profile = "crio-default" + +# cgroup_manager is the cgroup management implementation to be used +# for the runtime. +cgroup_manager = "cgroupfs" + +# hooks_dir_path is the oci hooks directory for automatically executed hooks +hooks_dir_path = "/usr/share/containers/oci/hooks.d" + +# pids_limit is the number of processes allowed in a container +pids_limit = 1024 + +# The "crio.image" table contains settings pertaining to the +# management of OCI images. +[crio.image] + +# default_transport is the prefix we try prepending to an image name if the +# image name as we receive it can't be parsed as a valid source reference +default_transport = "docker://" + +# pause_image is the image which we use to instantiate infra containers. +pause_image = "kubernetes/pause" + +# pause_command is the command to run in a pause_image to have a container just +# sit there. If the image contains the necessary information, this value need +# not be specified. +pause_command = "/pause" + +# signature_policy is the name of the file which decides what sort of policy we +# use when deciding whether or not to trust an image that we've pulled. +# Outside of testing situations, it is strongly advised that this be left +# unspecified so that the default system-wide policy will be used. +signature_policy = "" + +# image_volumes controls how image volumes are handled. +# The valid values are mkdir and ignore. +image_volumes = "mkdir" + +# insecure_registries is used to skip TLS verification when pulling images. +insecure_registries = [ +] + +# registries is used to specify a comma separated list of registries to be used +# when pulling an unqualified image (e.g. fedora:rawhide). +registries = [ +] + +# The "crio.network" table contains settings pertaining to the +# management of CNI plugins. +[crio.network] + +# network_dir is is where CNI network configuration +# files are stored. +network_dir = "/etc/cni/net.d/" + +# plugin_dir is is where CNI plugin binaries are stored. +plugin_dir = "/opt/cni/bin/" diff --git a/external/meta-virtualization/recipes-containers/criu/criu_git.bb b/external/meta-virtualization/recipes-containers/criu/criu_git.bb new file mode 100644 index 00000000..00de417b --- /dev/null +++ b/external/meta-virtualization/recipes-containers/criu/criu_git.bb @@ -0,0 +1,87 @@ +SUMMARY = "CRIU" +DESCRIPTION = "Checkpoint/Restore In Userspace, or CRIU, is a software tool for \ +Linux operating system. Using this tool, you can freeze a running application \ +(or part of it) and checkpoint it to a hard drive as a collection of files. \ +You can then use the files to restore and run the application from the point \ +it was frozen at. The distinctive feature of the CRIU project is that it is \ +mainly implemented in user space" +HOMEPAGE = "http://criu.org" +SECTION = "console/tools" +LICENSE = "GPLv2" + +EXCLUDE_FROM_WORLD = "1" + +LIC_FILES_CHKSUM = "file://COPYING;md5=412de458544c1cb6a2b512cd399286e2" + +SRCREV = "c49eab368a68682475c4e693258246e04232e6d2" +PV = "3.10+git${SRCPV}" + +SRC_URI = "git://github.com/xemul/criu.git;protocol=git \ + file://0001-criu-Fix-toolchain-hardcode.patch \ + file://0002-criu-Skip-documentation-install.patch \ + file://0001-criu-Change-libraries-install-directory.patch \ + file://lib-Makefile-overwrite-install-lib-to-allow-multiarc.patch \ + " + +COMPATIBLE_HOST = "(x86_64|arm|aarch64).*-linux" + +DEPENDS += "libnl libcap protobuf-c-native protobuf-c util-linux-native libbsd libnet" +RDEPENDS_${PN} = "bash" + +S = "${WORKDIR}/git" + +# +# CRIU just can be built on ARMv7 and ARMv6, so the Makefile check +# if the ARCH is ARMv7 or ARMv6. +# ARM BSPs need set CRIU_BUILD_ARCH variable for building CRIU. +# +EXTRA_OEMAKE_arm += "ARCH=arm UNAME-M=${CRIU_BUILD_ARCH} WERROR=0" +EXTRA_OEMAKE_x86-64 += "ARCH=x86 WERROR=0" +EXTRA_OEMAKE_aarch64 += "ARCH=arm64 WERROR=0" + +EXTRA_OEMAKE_append += "SBINDIR=${sbindir} LIBDIR=${libdir} INCLUDEDIR=${includedir} PIEGEN=no" +EXTRA_OEMAKE_append += "LOGROTATEDIR=${sysconfdir} SYSTEMDUNITDIR=${systemd_unitdir}" + +CFLAGS += "-D__USE_GNU -D_GNU_SOURCE " + +CFLAGS += " -I${STAGING_INCDIR} -I${STAGING_INCDIR}/libnl3" +CFLAGS_arm += "-D__WORDSIZE" + +# overide LDFLAGS to allow criu to build without: "x86_64-poky-linux-ld: unrecognized option '-Wl,-O1'" +export LDFLAGS="" +export C_INCLUDE_PATH="${STAGING_INCDIR}/libnl3" + +export BUILD_SYS +export HOST_SYS + +inherit setuptools + +PACKAGECONFIG ??= "" +PACKAGECONFIG[selinux] = ",,libselinux" + +CLEANBROKEN = "1" + +do_compile_prepend() { + rm -rf ${S}/images/google/protobuf/descriptor.proto + ln -s ${PKG_CONFIG_SYSROOT_DIR}/usr/include/google/protobuf/descriptor.proto ${S}/images/google/protobuf/descriptor.proto +} + +do_compile () { + oe_runmake FULL_PYTHON=${PYTHON} PYTHON=python2 +} + +do_install () { + export INSTALL_LIB="${libdir}/${PYTHON_DIR}/site-packages" + oe_runmake PREFIX=${exec_prefix} LIBDIR=${libdir} DESTDIR="${D}" FULL_PYTHON=${PYTHON} PYTHON=python2 install +} + +FILES_${PN} += "${systemd_unitdir}/ \ + ${libdir}/python2.7/site-packages/ \ + ${libdir}/pycriu/ \ + ${libdir}/crit-0.0.1-py2.7.egg-info \ + " + +FILES_${PN}-staticdev += " \ + ${libexecdir}/compel/std.lib.a \ + ${libexecdir}/compel/fds.lib.a \ + " diff --git a/external/meta-virtualization/recipes-containers/criu/files/0001-criu-Change-libraries-install-directory.patch b/external/meta-virtualization/recipes-containers/criu/files/0001-criu-Change-libraries-install-directory.patch new file mode 100644 index 00000000..afb1332d --- /dev/null +++ b/external/meta-virtualization/recipes-containers/criu/files/0001-criu-Change-libraries-install-directory.patch @@ -0,0 +1,38 @@ +From f64fbca70e6049dad3c404d871f2383d97725d2d Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Fri, 8 Sep 2017 15:11:31 -0400 +Subject: [PATCH] criu: Change libraries install directory + +Install the libraries into /usr/lib(or /usr/lib64) + +Signed-off-by: Jianchuan Wang <jianchuan.wang@windriver.com> +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + Makefile.install | 13 ------------- + 1 file changed, 13 deletions(-) + +diff --git a/Makefile.install b/Makefile.install +index 1def3cf..d020eef 100644 +--- a/Makefile.install ++++ b/Makefile.install +@@ -9,19 +9,6 @@ LIBEXECDIR ?= $(PREFIX)/libexec + RUNDIR ?= /run + + # +-# For recent Debian/Ubuntu with multiarch support. +-DEB_HOST_MULTIARCH := $(shell dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null) +-ifneq "$(DEB_HOST_MULTIARCH)" "" +- LIBDIR ?= $(PREFIX)/lib/$(DEB_HOST_MULTIARCH) +-else +- # +- # For most other systems +- ifeq "$(shell uname -m)" "x86_64" +- LIBDIR ?= $(PREFIX)/lib64 +- endif +-endif +- +-# + # LIBDIR falls back to the standard path. + LIBDIR ?= $(PREFIX)/lib + diff --git a/external/meta-virtualization/recipes-containers/criu/files/0001-criu-Fix-toolchain-hardcode.patch b/external/meta-virtualization/recipes-containers/criu/files/0001-criu-Fix-toolchain-hardcode.patch new file mode 100644 index 00000000..838cbdc9 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/criu/files/0001-criu-Fix-toolchain-hardcode.patch @@ -0,0 +1,100 @@ +From c005b7a4874f55df687ff22bc425551775581421 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Fri, 8 Sep 2017 15:02:14 -0400 +Subject: [PATCH] criu: Fix toolchain hardcode + +Replace ":=" to "?=" so that the toolchain used by bitbake build system will +be taken. + +Signed-off-by: Yang Shi <yang.shi@windriver.com> +Signed-off-by: Jianchuan Wang <jianchuan.wang@windriver.com> +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + Makefile | 2 +- + scripts/nmk/scripts/include.mk | 2 +- + scripts/nmk/scripts/tools.mk | 40 ++++++++++++++++++++-------------------- + 3 files changed, 22 insertions(+), 22 deletions(-) + +diff --git a/Makefile b/Makefile +index f2583a2..d7f51e5 100644 +--- a/Makefile ++++ b/Makefile +@@ -17,7 +17,7 @@ ifeq ($(origin HOSTCFLAGS), undefined) + HOSTCFLAGS := $(CFLAGS) $(USERCFLAGS) + endif + +-UNAME-M := $(shell uname -m) ++UNAME-M ?= $(shell uname -m) + + # + # Supported Architectures +diff --git a/scripts/nmk/scripts/include.mk b/scripts/nmk/scripts/include.mk +index 04ccb3a..0d63bc7 100644 +--- a/scripts/nmk/scripts/include.mk ++++ b/scripts/nmk/scripts/include.mk +@@ -22,7 +22,7 @@ SUBARCH := $(shell uname -m | sed \ + -e s/aarch64.*/aarch64/) + + ARCH ?= $(SUBARCH) +-SRCARCH := $(ARCH) ++SRCARCH ?= $(ARCH) + + export SUBARCH ARCH SRCARCH + +diff --git a/scripts/nmk/scripts/tools.mk b/scripts/nmk/scripts/tools.mk +index 56dba84..1698821 100644 +--- a/scripts/nmk/scripts/tools.mk ++++ b/scripts/nmk/scripts/tools.mk +@@ -2,31 +2,31 @@ ifndef ____nmk_defined__tools + + # + # System tools shorthands +-RM := rm -f ++RM ?= rm -f + HOSTLD ?= ld +-LD := $(CROSS_COMPILE)$(HOSTLD) ++LD ?= $(CROSS_COMPILE)$(HOSTLD) + HOSTCC ?= gcc +-CC := $(CROSS_COMPILE)$(HOSTCC) +-CPP := $(CC) -E +-AS := $(CROSS_COMPILE)as +-AR := $(CROSS_COMPILE)ar +-STRIP := $(CROSS_COMPILE)strip +-OBJCOPY := $(CROSS_COMPILE)objcopy +-OBJDUMP := $(CROSS_COMPILE)objdump +-NM := $(CROSS_COMPILE)nm +-MAKE := make +-MKDIR := mkdir -p +-AWK := awk +-PERL := perl +-FULL_PYTHON := $(shell which python2 2>/dev/null || which python3 2>/dev/null) ++CC ?= $(CROSS_COMPILE)$(HOSTCC) ++CPP ?= $(CC) -E ++AS ?= $(CROSS_COMPILE)as ++AR ?= $(CROSS_COMPILE)ar ++STRIP ?= $(CROSS_COMPILE)strip ++OBJCOPY ?= $(CROSS_COMPILE)objcopy ++OBJDUMP ?= $(CROSS_COMPILE)objdump ++NM ?= $(CROSS_COMPILE)nm ++MAKE ?= make ++MKDIR ?= mkdir -p ++AWK ?= awk ++PERL ?= perl ++FULL_PYTHON ?= $(shell which python2 2>/dev/null || which python3 2>/dev/null) + PYTHON ?= $(shell basename $(FULL_PYTHON)) +-FIND := find +-SH := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ ++FIND ?= find ++SH ?= $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + else if [ -x /bin/bash ]; then echo /bin/bash; \ + else echo sh; fi ; fi) +-CSCOPE := cscope +-ETAGS := etags +-CTAGS := ctags ++CSCOPE ?= cscope ++ETAGS ?= etags ++CTAGS ?= ctags + + export RM HOSTLD LD HOSTCC CC CPP AS AR STRIP OBJCOPY OBJDUMP + export NM SH MAKE MKDIR AWK PERL PYTHON SH CSCOPE diff --git a/external/meta-virtualization/recipes-containers/criu/files/0002-criu-Skip-documentation-install.patch b/external/meta-virtualization/recipes-containers/criu/files/0002-criu-Skip-documentation-install.patch new file mode 100644 index 00000000..af45db73 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/criu/files/0002-criu-Skip-documentation-install.patch @@ -0,0 +1,26 @@ +From 45d74ae8a314c481398ba91a3697ffbd074cd98b Mon Sep 17 00:00:00 2001 +From: Jianchuan Wang <jianchuan.wang@windriver.com> +Date: Tue, 16 Aug 2016 09:42:24 +0800 +Subject: [PATCH] criu: Skip documentation install + +asciidoc is needed to generate CRIU documentation, so skip it in install. + +Signed-off-by: Jianchuan Wang <jianchuan.wang@windriver.com> + +--- + Makefile.install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.install b/Makefile.install +index 3987bcc..1def3cf 100644 +--- a/Makefile.install ++++ b/Makefile.install +@@ -29,7 +29,7 @@ export PREFIX BINDIR SBINDIR MANDIR RUNDIR + export LIBDIR INCLUDEDIR LIBEXECDIR + + install-man: +- $(Q) $(MAKE) -C Documentation install ++# $(Q) $(MAKE) -C Documentation install + .PHONY: install-man + + install-lib: lib diff --git a/external/meta-virtualization/recipes-containers/criu/files/fix-building-on-newest-glibc-and-kernel.patch b/external/meta-virtualization/recipes-containers/criu/files/fix-building-on-newest-glibc-and-kernel.patch new file mode 100644 index 00000000..9361adc2 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/criu/files/fix-building-on-newest-glibc-and-kernel.patch @@ -0,0 +1,45 @@ +From b59947007362b53e9f41f1e5a33071dedf1c59ac Mon Sep 17 00:00:00 2001 +From: Adrian Reber <areber@redhat.com> +Date: Thu, 28 Sep 2017 09:13:33 +0000 +Subject: [PATCH] fix building on newest glibc and kernel + +On Fedora rawhide with kernel-headers-4.14.0-0.rc2.git0.1.fc28.x86_64 +glibc-devel-2.26.90-15.fc28.x86_64 criu does not build any more: + +In file included from /usr/include/linux/aio_abi.h:31:0, + from criu/cr-check.c:24: +/usr/include/sys/mount.h:35:3: error: expected identifier before numeric constant + MS_RDONLY = 1, /* Mount read-only. */ + ^ +make[2]: *** [/builddir/build/BUILD/criu-3.5/scripts/nmk/scripts/build.mk:111: criu/cr-check.o] Error 1 +make[1]: *** [criu/Makefile:73: criu/built-in.o] Error 2 +make: *** [Makefile:233: criu] Error 2 + +This simple re-ordering of includes fixes it for me. + +Signed-off-by: Adrian Reber <areber@redhat.com> +Signed-off-by: Andrei Vagin <avagin@virtuozzo.com> + +Upstream-Status: Backport +[https://github.com/checkpoint-restore/criu/commit/f41e386d4d40e3e26b0cfdc85a812b7edb337f1d#diff-cc847b1cc975358c6582595be92d48db] + +Signed-off-by: Yi Zhao <yi.zhao@windriver.com> + +--- + criu/cr-check.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/criu/cr-check.c b/criu/cr-check.c +index 1dd887a..93df2ab 100644 +--- a/criu/cr-check.c ++++ b/criu/cr-check.c +@@ -21,8 +21,8 @@ + #include <netinet/in.h> + #include <sys/prctl.h> + #include <sched.h> +-#include <linux/aio_abi.h> + #include <sys/mount.h> ++#include <linux/aio_abi.h> + + #include "../soccr/soccr.h" + diff --git a/external/meta-virtualization/recipes-containers/criu/files/lib-Makefile-overwrite-install-lib-to-allow-multiarc.patch b/external/meta-virtualization/recipes-containers/criu/files/lib-Makefile-overwrite-install-lib-to-allow-multiarc.patch new file mode 100644 index 00000000..70ccb287 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/criu/files/lib-Makefile-overwrite-install-lib-to-allow-multiarc.patch @@ -0,0 +1,28 @@ +From 6caf90592d61c8c45b32cb7ff76709f9326030e2 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Fri, 8 Sep 2017 15:40:49 -0400 +Subject: [PATCH] lib/Makefile: overwrite install-lib, to allow multiarch + +I am not sure why Yocto installs python modules in arch specific +/usr/libXX directories but it does. Allow the recipe to pass this via +INSTALL_LIB. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + lib/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/Makefile b/lib/Makefile +index b1bb057..06f5c5d 100644 +--- a/lib/Makefile ++++ b/lib/Makefile +@@ -53,7 +53,7 @@ install: lib-c lib-py crit/crit lib/c/criu.pc.in + $(Q) sed -e 's,@version@,$(CRIU_VERSION),' -e 's,@libdir@,$(LIBDIR),' -e 's,@includedir@,$(dir $(INCLUDEDIR)/criu/),' lib/c/criu.pc.in > lib/c/criu.pc + $(Q) install -m 644 lib/c/criu.pc $(DESTDIR)$(LIBDIR)/pkgconfig + $(E) " INSTALL " crit +- $(Q) $(PYTHON) scripts/crit-setup.py install --prefix=$(DESTDIR)$(PREFIX) --record $(CRIT_SETUP_FILES) ++ $(Q) $(PYTHON) scripts/crit-setup.py install --prefix=$(DESTDIR)$(PREFIX) --record $(CRIT_SETUP_FILES) --install-lib=$(DESTDIR)$(INSTALL_LIB) + .PHONY: install + + uninstall: diff --git a/external/meta-virtualization/recipes-containers/docker-compose/files/0001-Allow-newer-versions-of-requests.patch b/external/meta-virtualization/recipes-containers/docker-compose/files/0001-Allow-newer-versions-of-requests.patch new file mode 100644 index 00000000..6fc7bb4c --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker-compose/files/0001-Allow-newer-versions-of-requests.patch @@ -0,0 +1,32 @@ +From 15cf1a31f5af8f09531bb837b92bd6ea49bd1744 Mon Sep 17 00:00:00 2001 +From: Pascal Bach <pascal.bach@siemens.com> +Date: Wed, 13 Sep 2017 08:41:21 +0200 +Subject: [PATCH] Allow newer versions of requests + +docker compose has strict requirements to use requests < 2.12 + +However it works without issues with newer versions, so this patch removes the check. + +Upstream-Status: Pending + +Signed-off-by: Pascal Bach <pascal.bach@siemens.com> +--- + setup.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index 192a0f6..f444757 100644 +--- a/setup.py ++++ b/setup.py +@@ -33,7 +33,7 @@ install_requires = [ + 'cached-property >= 1.2.0, < 2', + 'docopt >= 0.6.1, < 0.7', + 'PyYAML >= 3.10, < 4', +- 'requests >= 2.6.1, != 2.11.0, < 2.12', ++ 'requests >= 2.6.1, != 2.11.0', + 'texttable >= 0.9.0, < 0.10', + 'websocket-client >= 0.32.0, < 1.0', + 'docker >= 2.5.1, < 3.0', +-- +2.1.4 + diff --git a/external/meta-virtualization/recipes-containers/docker-compose/python3-docker-compose_1.16.1.bb b/external/meta-virtualization/recipes-containers/docker-compose/python3-docker-compose_1.16.1.bb new file mode 100644 index 00000000..851c2510 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker-compose/python3-docker-compose_1.16.1.bb @@ -0,0 +1,31 @@ +SUMMARY = "Multi-container orchestration for Docker" +HOMEPAGE = "https://www.docker.com/" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=435b266b3899aa8a959f17d41c56def8" + +SRC_URI += "file://0001-Allow-newer-versions-of-requests.patch" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "8dcadf09143600fcb573b43f446c8f9a" +SRC_URI[sha256sum] = "fb46a6a2c4d193a3ff1e4d7208eea920b629c81dc92257c87f3f93095cfb0bdf" + +RDEPENDS_${PN} = "\ + ${PYTHON_PN}-cached-property \ + ${PYTHON_PN}-certifi \ + ${PYTHON_PN}-chardet \ + ${PYTHON_PN}-colorama \ + ${PYTHON_PN}-docker \ + ${PYTHON_PN}-docker-pycreds \ + ${PYTHON_PN}-dockerpty \ + ${PYTHON_PN}-docopt \ + ${PYTHON_PN}-idna \ + ${PYTHON_PN}-jsonschema \ + ${PYTHON_PN}-pyyaml \ + ${PYTHON_PN}-requests \ + ${PYTHON_PN}-six \ + ${PYTHON_PN}-terminal \ + ${PYTHON_PN}-texttable \ + ${PYTHON_PN}-urllib3 \ + ${PYTHON_PN}-websocket-client \ + " diff --git a/external/meta-virtualization/recipes-containers/docker-distribution/docker-distribution_git.bb b/external/meta-virtualization/recipes-containers/docker-distribution/docker-distribution_git.bb new file mode 100644 index 00000000..2892556a --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker-distribution/docker-distribution_git.bb @@ -0,0 +1,68 @@ +HOMEPAGE = "http://github.com/docker/distribution" +SUMMARY = "The Docker toolset to pack, ship, store, and deliver content" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=d2794c0df5b907fdace235a619d80314" + +SRCREV_distribution="48294d928ced5dd9b378f7fd7c6f5da3ff3f2c89" +SRC_URI = "git://github.com/docker/distribution.git;branch=release/2.6;name=distribution;destsuffix=git/src/github.com/docker/distribution \ + file://docker-registry.service \ + " + +PACKAGES =+ "docker-registry" + +PV = "v2.6.2" +S = "${WORKDIR}/git/src/github.com/docker/distribution" + +GO_IMPORT = "import" + +inherit goarch +inherit go + +# This disables seccomp and apparmor, which are on by default in the +# go package. +EXTRA_OEMAKE="BUILDTAGS=''" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOPATH="${WORKDIR}/git/" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export GO_GCFLAGS="" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S} + + oe_runmake binaries +} + +do_install() { + install -d ${D}/${sbindir} + install ${S}/bin/registry ${D}/${sbindir} + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${WORKDIR}/docker-registry.service ${D}/${systemd_unitdir}/system + fi + + install -d ${D}/${sysconfdir}/docker-distribution/registry/ + install ${S}/cmd/registry/config-example.yml ${D}/${sysconfdir}/docker-distribution/registry/config.yml + + # storage for the registry containers + install -d ${D}/${localstatedir}/lib/registry/ +} + +INSANE_SKIP_${PN} += "ldflags already-stripped" +INSANE_SKIP_${MLPREFIX}docker-registry += "ldflags already-stripped textrel" + +FILES_docker-registry = "${sbindir}/*" +FILES_docker-registry += "${systemd_unitdir}/system/docker-registry.service" +FILES_docker-registry += "${sysconfdir}/docker-distribution/*" +FILES_docker-registry += "${localstatedir}/lib/registry/" + +SYSTEMD_SERVICE_docker-registry = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker-registry.service','',d)}" +SYSTEMD_AUTO_ENABLE_docker-registry = "enable" diff --git a/external/meta-virtualization/recipes-containers/docker-distribution/files/docker-registry.service b/external/meta-virtualization/recipes-containers/docker-distribution/files/docker-registry.service new file mode 100644 index 00000000..15460c7a --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker-distribution/files/docker-registry.service @@ -0,0 +1,10 @@ +[Unit] +Description=v2 Registry server for Docker + +[Service] +Type=simple +ExecStart=/usr/sbin/registry serve /etc/docker-distribution/registry/config.yml +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-containers/docker/docker-ce_git.bb b/external/meta-virtualization/recipes-containers/docker/docker-ce_git.bb new file mode 100644 index 00000000..caf6d704 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker/docker-ce_git.bb @@ -0,0 +1,167 @@ +HOMEPAGE = "http://www.docker.com" +SUMMARY = "Linux container runtime" +DESCRIPTION = "Linux container runtime \ + Docker complements kernel namespacing with a high-level API which \ + operates at the process level. It runs unix processes with strong \ + guarantees of isolation and repeatability across servers. \ + . \ + Docker is a great building block for automating distributed systems: \ + large-scale web deployments, database clusters, continuous deployment \ + systems, private PaaS, service-oriented architectures, etc. \ + . \ + This package contains the daemon and client. Using docker.io is \ + officially supported on x86_64 and arm (32-bit) hosts. \ + Other architectures are considered experimental. \ + . \ + Also, note that kernel version 3.10 or above is required for proper \ + operation of the daemon process, and that any lower versions may have \ + subtle and/or glaring issues. \ + " + +SRCREV_docker = "6e632f7fc395d15bce46f426086e91c01598cf59" +SRCREV_libnetwork = "6da50d1978302f04c3e2089e29112ea24812f05b" +SRC_URI = "\ + git://github.com/docker/docker-ce.git;branch=18.09;name=docker \ + git://github.com/docker/libnetwork.git;branch=bump_18.09;name=libnetwork;destsuffix=git/libnetwork \ + file://docker.init \ + " + +# Apache-2.0 for docker +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/components/engine/LICENSE;md5=9740d093a080530b5c5c6573df9af45a" + +GO_IMPORT = "import" + +S = "${WORKDIR}/git" + +DOCKER_VERSION = "18.09.0-ce" +PV = "${DOCKER_VERSION}+git${SRCREV_docker}" + +DEPENDS = " \ + go-cli \ + go-pty \ + go-context \ + go-mux \ + go-patricia \ + go-logrus \ + go-fsnotify \ + go-dbus \ + go-capability \ + go-systemd \ + btrfs-tools \ + sqlite3 \ + go-distribution \ + compose-file \ + go-connections \ + notary \ + grpc-go \ + libtool-native \ + libtool \ + " + +PACKAGES =+ "${PN}-contrib" + +DEPENDS_append_class-target = " lvm2" +RDEPENDS_${PN} = "util-linux util-linux-unshare iptables \ + ${@bb.utils.contains('DISTRO_FEATURES', 'aufs', 'aufs-util', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'cgroup-lite', d)} \ + " +RDEPENDS_${PN} += "virtual/containerd virtual/runc" + +RRECOMMENDS_${PN} = "kernel-module-dm-thin-pool kernel-module-nf-nat" +RSUGGESTS_${PN} = "lxc rt-tests" +DOCKER_PKG="github.com/docker/docker" + +inherit systemd update-rc.d +inherit go +inherit goarch +inherit pkgconfig + +do_configure[noexec] = "1" + +do_compile() { + # Set GOPATH. See 'PACKAGERS.md'. Don't rely on + # docker to download its dependencies but rather + # use dependencies packaged independently. + cd ${S}/src/import + rm -rf .gopath + mkdir -p .gopath/src/"$(dirname "${DOCKER_PKG}")" + ln -sf ../../../../components/engine/ .gopath/src/"${DOCKER_PKG}" + + mkdir -p .gopath/src/github.com/docker + ln -sf ${WORKDIR}/git/libnetwork .gopath/src/github.com/docker/libnetwork + ln -sf ${S}/src/import/components/cli .gopath/src/github.com/docker/cli + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + # in order to exclude devicemapper and btrfs - https://github.com/docker/docker/issues/14056 + export DOCKER_BUILDTAGS='exclude_graphdriver_btrfs exclude_graphdriver_devicemapper' + + export DISABLE_WARN_OUTSIDE_CONTAINER=1 + + cd ${S}/src/import/components/engine + + # this is the unsupported build structure + # that doesn't rely on an existing docker + # to build this: + VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_docker}" ./hack/make.sh dynbinary + + # build the proxy + cd ${S}/src/import/.gopath/src/github.com/docker/libnetwork + oe_runmake cross-local + + # build the cli + cd ${S}/src/import/components/cli + export CFLAGS="" + export LDFLAGS="" + export DOCKER_VERSION=${DOCKER_VERSION} + VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_docker}" make dynbinary +} + +SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" +SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker.service','',d)}" +SYSTEMD_AUTO_ENABLE_${PN} = "enable" + +INITSCRIPT_PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${PN}','',d)}" +INITSCRIPT_NAME_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','docker.init','',d)}" +INITSCRIPT_PARAMS_${PN} = "defaults" + +do_install() { + mkdir -p ${D}/${bindir} + cp ${S}/src/import/components/cli/build/docker ${D}/${bindir}/docker + cp ${S}/src/import/components/engine/bundles/latest/dynbinary-daemon/dockerd ${D}/${bindir}/dockerd + cp ${WORKDIR}/git/libnetwork/bin/docker-proxy* ${D}/${bindir}/docker-proxy + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${S}/src/import/components/engine/contrib/init/systemd/docker.* ${D}/${systemd_unitdir}/system + # replaces one copied from above with one that uses the local registry for a mirror + install -m 644 ${S}/src/import/components/engine/contrib/init/systemd/docker.service ${D}/${systemd_unitdir}/system + else + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/docker.init ${D}${sysconfdir}/init.d/docker.init + fi + + mkdir -p ${D}${datadir}/docker/ + install -m 0755 ${S}/src/import/components/engine/contrib/check-config.sh ${D}${datadir}/docker/ +} + +inherit useradd +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "-r docker" + +FILES_${PN} += "${systemd_unitdir}/system/*" + +FILES_${PN}-contrib += "${datadir}/docker/check-config.sh" +RDEPENDS_${PN}-contrib += "bash" + +# DO NOT STRIP docker +INHIBIT_PACKAGE_STRIP = "1" +INSANE_SKIP_${PN} += "ldflags" diff --git a/external/meta-virtualization/recipes-containers/docker/docker_git.bb b/external/meta-virtualization/recipes-containers/docker/docker_git.bb new file mode 100644 index 00000000..79578083 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker/docker_git.bb @@ -0,0 +1,173 @@ +HOMEPAGE = "http://www.docker.com" +SUMMARY = "Linux container runtime" +DESCRIPTION = "Linux container runtime \ + Docker complements kernel namespacing with a high-level API which \ + operates at the process level. It runs unix processes with strong \ + guarantees of isolation and repeatability across servers. \ + . \ + Docker is a great building block for automating distributed systems: \ + large-scale web deployments, database clusters, continuous deployment \ + systems, private PaaS, service-oriented architectures, etc. \ + . \ + This package contains the daemon and client. Using docker.io is \ + officially supported on x86_64 and arm (32-bit) hosts. \ + Other architectures are considered experimental. \ + . \ + Also, note that kernel version 3.10 or above is required for proper \ + operation of the daemon process, and that any lower versions may have \ + subtle and/or glaring issues. \ + " + +SRCREV_docker = "489b8eda6674523df8b82a210399b7d2954427d0" +SRCREV_libnetwork = "6da50d1978302f04c3e2089e29112ea24812f05b" +SRCREV_cli = "51668a30f26250ccfce31bcc13d9334eaafabe36" +SRC_URI = "\ + git://github.com/moby/moby.git;nobranch=1;name=docker \ + git://github.com/docker/libnetwork.git;branch=bump_18.09;name=libnetwork;destsuffix=git/libnetwork \ + git://github.com/docker/cli;branch=18.09;name=cli;destsuffix=git/cli \ + file://docker.init \ + file://0001-libnetwork-use-GO-instead-of-go.patch \ + " + +# Apache-2.0 for docker +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=4859e97a9c7780e77972d989f0823f28" + +GO_IMPORT = "import" + +S = "${WORKDIR}/git" + +DOCKER_VERSION = "18.09.0" +PV = "${DOCKER_VERSION}+git${SRCREV_docker}" + +DEPENDS = " \ + go-cli \ + go-pty \ + go-context \ + go-mux \ + go-patricia \ + go-logrus \ + go-fsnotify \ + go-dbus \ + go-capability \ + go-systemd \ + btrfs-tools \ + sqlite3 \ + go-distribution \ + compose-file \ + go-connections \ + notary \ + grpc-go \ + libtool \ + " + +PACKAGECONFIG ??= "" +PACKAGECONFIG[seccomp] = "seccomp,,libseccomp" + +PACKAGES =+ "${PN}-contrib" + +DEPENDS_append_class-target = " lvm2" +RDEPENDS_${PN} = "util-linux util-linux-unshare iptables \ + ${@bb.utils.contains('DISTRO_FEATURES', 'aufs', 'aufs-util', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'cgroup-lite', d)} \ + " +RDEPENDS_${PN} += "virtual/containerd virtual/runc" + +RRECOMMENDS_${PN} = "kernel-module-dm-thin-pool kernel-module-nf-nat docker-init" +RSUGGESTS_${PN} = "lxc rt-tests" +DOCKER_PKG="github.com/docker/docker" + +inherit systemd update-rc.d +inherit go +inherit goarch +inherit pkgconfig + +do_configure[noexec] = "1" + +do_compile() { + # Set GOPATH. See 'PACKAGERS.md'. Don't rely on + # docker to download its dependencies but rather + # use dependencies packaged independently. + cd ${S}/src/import + rm -rf .gopath + mkdir -p .gopath/src/"$(dirname "${DOCKER_PKG}")" + ln -sf ../../../.. .gopath/src/"${DOCKER_PKG}" + + mkdir -p .gopath/src/github.com/docker + ln -sf ${WORKDIR}/git/libnetwork .gopath/src/github.com/docker/libnetwork + ln -sf ${WORKDIR}/git/cli .gopath/src/github.com/docker/cli + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + # in order to exclude devicemapper and btrfs - https://github.com/docker/docker/issues/14056 + export DOCKER_BUILDTAGS='exclude_graphdriver_btrfs exclude_graphdriver_devicemapper ${PACKAGECONFIG_CONFARGS}' + + export DISABLE_WARN_OUTSIDE_CONTAINER=1 + + cd ${S}/src/import/ + + # this is the unsupported built structure + # that doesn't rely on an existing docker + # to build this: + VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_docker}" ./hack/make.sh dynbinary + + # build the cli + cd ${S}/src/import/.gopath/src/github.com/docker/cli + export CFLAGS="" + export LDFLAGS="" + export DOCKER_VERSION=${DOCKER_VERSION} + VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_docker}" make dynbinary + + # build the proxy + cd ${S}/src/import/.gopath/src/github.com/docker/libnetwork + oe_runmake cross-local +} + +SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" +SYSTEMD_SERVICE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker.service','',d)}" + +SYSTEMD_AUTO_ENABLE_${PN} = "enable" + +INITSCRIPT_PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${PN}','',d)}" +INITSCRIPT_NAME_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','docker.init','',d)}" +INITSCRIPT_PARAMS_${PN} = "defaults" + +do_install() { + mkdir -p ${D}/${bindir} + cp ${WORKDIR}/git/cli/build/docker ${D}/${bindir}/docker + cp ${S}/src/import/bundles/latest/dynbinary-daemon/dockerd ${D}/${bindir}/dockerd + cp ${WORKDIR}/git/libnetwork/bin/docker-proxy* ${D}/${bindir}/docker-proxy + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${S}/src/import/contrib/init/systemd/docker.* ${D}/${systemd_unitdir}/system + # replaces one copied from above with one that uses the local registry for a mirror + install -m 644 ${S}/src/import/contrib/init/systemd/docker.service ${D}/${systemd_unitdir}/system + else + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/docker.init ${D}${sysconfdir}/init.d/docker.init + fi + + mkdir -p ${D}${datadir}/docker/ + install -m 0755 ${S}/src/import/contrib/check-config.sh ${D}${datadir}/docker/ +} + +inherit useradd +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "-r docker" + +FILES_${PN} += "${systemd_unitdir}/system/*" + +FILES_${PN}-contrib += "${datadir}/docker/check-config.sh" +RDEPENDS_${PN}-contrib += "bash" + +# DO NOT STRIP docker +INHIBIT_PACKAGE_STRIP = "1" +INSANE_SKIP_${PN} += "ldflags textrel" diff --git a/external/meta-virtualization/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch b/external/meta-virtualization/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch new file mode 100644 index 00000000..c623b260 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch @@ -0,0 +1,59 @@ +From 04c07804930faad708218a3134c81de06a9c742a Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Fri, 6 Apr 2018 23:58:22 -0400 +Subject: [PATCH] libnetwork: use $(GO) instead of go + +Ensure that the libnetwork makefile uses the go cross flags and +utilities. + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + Makefile | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +Index: git/libnetwork/Makefile +=================================================================== +--- git.orig/libnetwork/Makefile ++++ git/libnetwork/Makefile +@@ -45,9 +45,9 @@ + build-local: + @echo "🐳 $@" + @mkdir -p "bin" +- go build -tags experimental -o "bin/dnet" ./cmd/dnet +- go build -o "bin/docker-proxy" ./cmd/proxy +- CGO_ENABLED=0 go build -o "bin/diagnosticClient" ./cmd/diagnostic ++ $(GO) build -tags experimental -o "bin/dnet" ./cmd/dnet ++ $(GO) build -o "bin/proxy" ./cmd/proxy ++ CGO_ENABLED=0 $(GO) build -o "bin/diagnosticClient" ./cmd/diagnostic + CGO_ENABLED=0 go build -o "bin/testMain" ./cmd/networkdb-test/testMain.go + + build-images: +@@ -82,8 +82,8 @@ + + cross-local: + @echo "🐳 $@" +- go build -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet +- go build -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy ++ @$(GO) build -linkshared $(GOBUILDFLAGS) -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy ++ @$(GO) build -linkshared $(GOBUILDFLAGS) -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet + + # Rebuild protocol buffers. + # These may need to be rebuilt after vendoring updates, so .proto files are declared .PHONY so they are always rebuilt. +@@ -130,7 +130,7 @@ + if ls $$dir/*.go &> /dev/null; then \ + pushd . &> /dev/null ; \ + cd $$dir ; \ +- go test ${INSIDECONTAINER} -test.parallel 5 -test.v -covermode=count -coverprofile=./profile.tmp ; \ ++ $(GO) test ${INSIDECONTAINER} -test.parallel 5 -test.v -covermode=count -coverprofile=./profile.tmp ; \ + ret=$$? ;\ + if [ $$ret -ne 0 ]; then exit $$ret; fi ;\ + popd &> /dev/null; \ +@@ -145,7 +145,7 @@ + # Depends on binaries because vet will silently fail if it can not load compiled imports + vet: ## run go vet + @echo "🐳 $@" +- @test -z "$$(go vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" ++ @test -z "$$($(GO) vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" + + misspell: + @echo "🐳 $@" diff --git a/external/meta-virtualization/recipes-containers/docker/files/docker-registry.service b/external/meta-virtualization/recipes-containers/docker/files/docker-registry.service new file mode 100644 index 00000000..7b4bc468 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker/files/docker-registry.service @@ -0,0 +1,19 @@ +[Unit] +Description=docker private registry service +After=docker.service + +[Service] +ExecStartPre=-/usr/bin/docker kill registry +ExecStartPre=-/usr/bin/docker rm registry +ExecStart=/usr/bin/docker run --name registry -v /mirror/registry:/tmp/ -p 5000:5000 \ + -e "STANDALONE=true" \ + -e "MIRROR_SOURCE=https://registry-1.docker.io" \ + -e "MIRROR_SOURCE_INDEX=https://index.docker.io" \ + -e "SETTINGS_FLAVOR=local" \ + registry +ExecStop=-/usr/bin/docker stop registry +Restart=always +RestartSec=10s + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-containers/docker/files/docker.init b/external/meta-virtualization/recipes-containers/docker/files/docker.init new file mode 100644 index 00000000..0aea8d01 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/docker/files/docker.init @@ -0,0 +1,131 @@ +#!/bin/sh +# +# /etc/rc.d/init.d/docker +# +# Daemon for docker.com +# +# chkconfig: 2345 95 95 +# description: Daemon for docker.com + +### BEGIN INIT INFO +# Provides: docker +# Required-Start: $network cgconfig +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop docker +# Description: Daemon for docker.com +### END INIT INFO + +# Source function library. +. /etc/init.d/functions + +prog="dockerd" +unshare=/usr/bin/unshare +exec="/usr/bin/$prog" +pidfile="/var/run/$prog.pid" +lockfile="/var/lock/subsys/$prog" +logfile="/var/log/$prog" +other_args="--registry-mirror=http://localhost:5000 --insecure-registry=http://localhost:5000 --raw-logs" + +[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog + +start() { + [ -x $exec ] || exit 5 + + check_for_cleanup + + if ! [ -f $pidfile ]; then + printf "Starting $prog:\t" + echo -e "\n$(date)\n" >> $logfile + "$unshare" -m -- $exec $other_args &>> $logfile & + pid=$! + touch $lockfile + # wait up to 10 seconds for the pidfile to exist. see + # https://github.com/docker/docker/issues/5359 + tries=0 + while [ ! -f $pidfile -a $tries -lt 10 ]; do + sleep 1 + tries=$((tries + 1)) + done + success + echo + else + failure + echo + printf "$pidfile still exists...\n" + exit 7 + fi +} + +stop() { + echo -n $"Stopping $prog: " + killproc $prog + retval=$? + echo + [ $retval -eq 0 ] && rm -f $lockfile + return $retval +} + +restart() { + stop + start +} + +reload() { + restart +} + +force_reload() { + restart +} + +rh_status() { + status $prog +} + +rh_status_q() { + rh_status >/dev/null 2>&1 +} + + +check_for_cleanup() { + if [ -f ${pidfile} ]; then + /bin/ps -fp $(cat ${pidfile}) > /dev/null || rm ${pidfile} + fi +} + +case "$1" in + start) + rh_status_q && exit 0 + $1 + ;; + stop) + rh_status_q || exit 0 + $1 + ;; + restart) + $1 + ;; + reload) + rh_status_q || exit 7 + $1 + ;; + force-reload) + force_reload + ;; + status) + rh_status + ;; + condrestart|try-restart) + rh_status_q || exit 0 + restart + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" + exit 2 +esac + +exit $? diff --git a/external/meta-virtualization/recipes-containers/go-digest/go-digest_git.bb b/external/meta-virtualization/recipes-containers/go-digest/go-digest_git.bb new file mode 100644 index 00000000..a2f8cd69 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/go-digest/go-digest_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "Common digest package used across the container ecosystem." +HOMEPAGE = "https://github.com/opencontainers/go-digest.git" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE.code;md5=9cd86830b557232ce55e2a6b47387471" + +SRCNAME = "go-digest" + +PKG_NAME = "github.com/opencontainers/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "b6234c321f263c503268e3b205f3d9755f9d14ed" +PV = "v1.0.0-rc0+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE.code ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_digest_file_sysroot_preprocess" + +go_digest_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-containers/go-errors/go-errors_git.bb b/external/meta-virtualization/recipes-containers/go-errors/go-errors_git.bb new file mode 100644 index 00000000..3bb74a7c --- /dev/null +++ b/external/meta-virtualization/recipes-containers/go-errors/go-errors_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "Simple error handling primitives" +HOMEPAGE = "https://github.com/pkg/errors" +SECTION = "devel/go" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=6fe682a02df52c6653f33bd0f7126b5a" + +SRCNAME = "errors" + +PKG_NAME = "github.com/pkg/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "248dadf4e9068a0b3e79f02ed0a610d935de5302" +PV = "v0.8.0+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go" -not -path "*/.tool/*"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_errors_file_sysroot_preprocess" + +go_errors_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-containers/go-spf13-cobra/spf13-cobra_git.bb b/external/meta-virtualization/recipes-containers/go-spf13-cobra/spf13-cobra_git.bb new file mode 100644 index 00000000..e942e4e3 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/go-spf13-cobra/spf13-cobra_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "A Commander for modern Go CLI interactions" +HOMEPAGE = "https://github.com/spf13/cobra" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE.txt;md5=920d76114a32b0fb75b3f2718c5a91be" + +SRCNAME = "cobra" + +PKG_NAME = "github.com/spf13/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "b5d8e8f46a2f829f755b6e33b454e25c61c935e1" +PV = "v0.0.1+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go" -not -path "*/.tool/*"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE.txt ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "cobra_file_sysroot_preprocess" + +cobra_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-containers/go-spf13-pflag/spf13-pflag_git.bb b/external/meta-virtualization/recipes-containers/go-spf13-pflag/spf13-pflag_git.bb new file mode 100644 index 00000000..2fbcb439 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/go-spf13-pflag/spf13-pflag_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "Drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags." +HOMEPAGE = "https://github.com/spf13/pflag" +SECTION = "devel/go" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=1e8b7dc8b906737639131047a590f21d" + +SRCNAME = "pflag" + +PKG_NAME = "github.com/spf13/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "9ff6c6923cfffbcd502984b8e0c80539a94968b7" +PV = "v1.0.0-rc4+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go" -not -path "*/.tool/*"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "pflag_file_sysroot_preprocess" + +pflag_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-containers/kubernetes/kubernetes/0001-cross-don-t-build-tests-by-default.patch b/external/meta-virtualization/recipes-containers/kubernetes/kubernetes/0001-cross-don-t-build-tests-by-default.patch new file mode 100644 index 00000000..659e3013 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/kubernetes/kubernetes/0001-cross-don-t-build-tests-by-default.patch @@ -0,0 +1,33 @@ +From fa912b53186a047d787c8c456156b9dbdcdf040d Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Thu, 1 Nov 2018 10:21:10 -0400 +Subject: [PATCH] cross: don't build tests by default + +The hack/* build infrastructure doesn't respect the WHAT= commands +that the make infrastructure provides to limit what is built. + +In our case, we are cross building and can't build the server test +components without error. As such, we patch the targets out of the +script to allow a successful build. + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + hack/make-rules/cross.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/import/hack/make-rules/cross.sh b/hack/make-rules/cross.sh +index 8e1e938..0898c5c 100755 +--- a/src/import/hack/make-rules/cross.sh ++++ b/src/import/hack/make-rules/cross.sh +@@ -33,6 +33,6 @@ make all WHAT="${KUBE_NODE_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_NODE_PLATFO + + make all WHAT="${KUBE_CLIENT_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_CLIENT_PLATFORMS[*]}" + +-make all WHAT="${KUBE_TEST_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_TEST_PLATFORMS[*]}" ++#make all WHAT="${KUBE_TEST_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_TEST_PLATFORMS[*]}" + +-make all WHAT="${KUBE_TEST_SERVER_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_TEST_SERVER_PLATFORMS[*]}" ++#make all WHAT="${KUBE_TEST_SERVER_TARGETS[*]}" KUBE_BUILD_PLATFORMS="${KUBE_TEST_SERVER_PLATFORMS[*]}" +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-containers/kubernetes/kubernetes/0001-hack-lib-golang.sh-use-CC-from-environment.patch b/external/meta-virtualization/recipes-containers/kubernetes/kubernetes/0001-hack-lib-golang.sh-use-CC-from-environment.patch new file mode 100644 index 00000000..62d05210 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/kubernetes/kubernetes/0001-hack-lib-golang.sh-use-CC-from-environment.patch @@ -0,0 +1,40 @@ +From 9cbb2d523d481053d405ebac830c2074b00d3417 Mon Sep 17 00:00:00 2001 +From: Koen Kooi <koen.kooi@linaro.org> +Date: Mon, 23 Jul 2018 15:28:02 +0200 +Subject: [PATCH] hack/lib/golang.sh: use CC from environment + +Toolchain tupples differs, especially when using vendor provides ones. + +Upstream-status: Inappropriate [embedded specific] +Signed-off-by: Koen Kooi <koen.kooi@linaro.org> +--- + hack/lib/golang.sh | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh +index c5d4634..563e2b4b 100755 +--- a/src/import/hack/lib/golang.sh ++++ b/src/import/hack/lib/golang.sh +@@ -278,19 +278,15 @@ kube::golang::set_platform_envs() { + case "${platform}" in + "linux/arm") + export CGO_ENABLED=1 +- export CC=arm-linux-gnueabihf-gcc + ;; + "linux/arm64") + export CGO_ENABLED=1 +- export CC=aarch64-linux-gnu-gcc + ;; + "linux/ppc64le") + export CGO_ENABLED=1 +- export CC=powerpc64le-linux-gnu-gcc + ;; + "linux/s390x") + export CGO_ENABLED=1 +- export CC=s390x-linux-gnu-gcc + ;; + esac + fi +-- +2.9.5 + diff --git a/external/meta-virtualization/recipes-containers/kubernetes/kubernetes_git.bb b/external/meta-virtualization/recipes-containers/kubernetes/kubernetes_git.bb new file mode 100644 index 00000000..c3810b0d --- /dev/null +++ b/external/meta-virtualization/recipes-containers/kubernetes/kubernetes_git.bb @@ -0,0 +1,111 @@ +HOMEPAGE = "git://github.com/kubernetes/kubernetes" +SUMMARY = "Production-Grade Container Scheduling and Management" +DESCRIPTION = "Kubernetes is an open source system for managing containerized \ +applications across multiple hosts, providing basic mechanisms for deployment, \ +maintenance, and scaling of applications. \ +" + +# Note: 1.11+ requires go 1.10.2+, so the following must be set +# in your configuration: GOVERSION = "1.10%" +PV = "1.12.0+git${SRCREV_kubernetes}" +SRCREV_kubernetes = "d93ba8b6d1e2afcb30da3e354928ed00e6682223" + +SRC_URI = "git://github.com/kubernetes/kubernetes.git;branch=release-1.12;name=kubernetes \ + file://0001-hack-lib-golang.sh-use-CC-from-environment.patch \ + file://0001-cross-don-t-build-tests-by-default.patch \ + " + +DEPENDS += "rsync-native \ + coreutils-native \ + " + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" + +GO_IMPORT = "import" + +inherit systemd +inherit go +inherit goarch + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOOS="${TARGET_GOOS}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + export GOPATH="${S}/src/import:${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/import + # Build the host tools first, using the host compiler + export GOARCH="${BUILD_GOARCH}" + make generated_files KUBE_BUILD_PLATFORMS="${HOST_GOOS}/${BUILD_GOARCH}" + + # Reset GOARCH to the target one + export GOARCH="${TARGET_GOARCH}" + # to limit what is built, use 'WHAT', i.e. make WHAT=cmd/kubelet + make cross KUBE_BUILD_PLATFORMS=${GOOS}/${GOARCH} +} + +do_install() { + install -d ${D}${bindir} + install -d ${D}${systemd_unitdir}/system/ + install -d ${D}${systemd_unitdir}/system/kubelet.service.d/ + + install -d ${D}${sysconfdir}/kubernetes/manifests/ + + install -m 755 -D ${S}/src/import/_output/local/bin/${TARGET_GOOS}/${TARGET_GOARCH}/* ${D}/${bindir} + + install -m 0644 ${S}/src/import/build/debs/kubelet.service ${D}${systemd_unitdir}/system/ + install -m 0644 ${S}/src/import/build/debs/10-kubeadm.conf ${D}${systemd_unitdir}/system/kubelet.service.d/ +} + +PACKAGES =+ "kubeadm kubectl kubelet kube-proxy ${PN}-misc" + +ALLOW_EMPTY_${PN} = "1" +INSANE_SKIP_${PN} += "ldflags already-stripped" +INSANE_SKIP_${PN}-misc += "ldflags already-stripped" + +# Note: we are explicitly *not* adding docker to the rdepends, since we allow +# backends like cri-o to be used. +RDEPENDS_${PN} += "kubeadm \ + kubectl \ + kubelet \ + cni" + +RDEPENDS_kubeadm = "kubelet kubectl" +FILES_kubeadm = "${bindir}/kubeadm ${systemd_unitdir}/system/kubelet.service.d/*" + +RDEPENDS_kubelet = "iptables socat util-linux ethtool iproute2 ebtables iproute2-tc" +FILES_kubelet = "${bindir}/kubelet ${systemd_unitdir}/system/kubelet.service ${sysconfdir}/kubernetes/manifests/" + +SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','kubelet','',d)}" +SYSTEMD_SERVICE_kubelet = "${@bb.utils.contains('DISTRO_FEATURES','systemd','kubelet.service','',d)}" +SYSTEMD_AUTO_ENABLE_kubelet = "enable" + +FILES_kubectl = "${bindir}/kubectl" +FILES_kube-proxy = "${bindir}/kube-proxy" +FILES_${PN}-misc = "${bindir}" + +INHIBIT_PACKAGE_STRIP = "1" + +deltask compile_ptest_base diff --git a/external/meta-virtualization/recipes-containers/lxc/files/dnsmasq.conf b/external/meta-virtualization/recipes-containers/lxc/files/dnsmasq.conf new file mode 100644 index 00000000..124f7ebe --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/dnsmasq.conf @@ -0,0 +1,2 @@ +bind-interfaces +except-interface=lxcbr0 diff --git a/external/meta-virtualization/recipes-containers/lxc/files/logs-optionally-use-base-filenames-to-report-src-fil.patch b/external/meta-virtualization/recipes-containers/lxc/files/logs-optionally-use-base-filenames-to-report-src-fil.patch new file mode 100644 index 00000000..648193b4 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/logs-optionally-use-base-filenames-to-report-src-fil.patch @@ -0,0 +1,69 @@ +From c50ddb2b2cf22a29e4c671b1efbd338eeba694aa Mon Sep 17 00:00:00 2001 +From: Jim Somerville <Jim.Somerville@windriver.com> +Date: Fri, 25 Sep 2015 15:08:17 -0400 +Subject: [PATCH] logs: optionally use base filenames to report src files + +Message-Id: <4729d0f4c4d1dacd150ddfd7061dda875eb94e34.1443216870.git.Jim.Somerville@windriver.com> + +Problem: Logs are nice in that they report the source file, +routine, and line number where an issue occurs. But the +file is printed as the absolute filename. Users do not +need to see a long spew of path directory names where the package +was built. It just confuses things. + +Solution: Optionally chop off all leading directories so that just +the source filename ie. basename is printed. This is done by +setting a #ifdef LXC_LOG_USE_BASENAME check in the code. That +define is done via the optional --enable-log-src-basename provided +at configure time. + +Using __BASE_FILE__ instead of __FILE__ did not work. It +refers to the file name as presented to the compile +machinery, and that may still be the absolute pathname to +the file. + +Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> + +--- + configure.ac | 9 +++++++++ + src/lxc/log.h | 5 +++++ + 2 files changed, 14 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 74b976a..9c561f7 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -356,6 +356,15 @@ AC_ARG_ENABLE([examples], + [], [enable_examples=yes]) + AM_CONDITIONAL([ENABLE_EXAMPLES], [test "x$enable_examples" = "xyes"]) + ++# Enable basenames in the logs for source files ++AC_ARG_ENABLE([log-src-basename], ++ [AC_HELP_STRING([--enable-log-src-basename], [Use the shorter source file basename in the logs [default=no]])], ++ [], [enable_log_src_basename=no]) ++ ++if test "x$enable_log_src_basename" = "xyes"; then ++ AC_DEFINE([LXC_LOG_USE_BASENAME], 1, [Enabling shorter src filenames in the logs]) ++fi ++ + # Enable dumping stack traces + AC_ARG_ENABLE([mutex-debugging], + [AC_HELP_STRING([--enable-mutex-debugging], [Makes mutexes to report error and provide stack trace [default=no]])], +diff --git a/src/lxc/log.h b/src/lxc/log.h +index 4654fd9..6885d78 100644 +--- a/src/lxc/log.h ++++ b/src/lxc/log.h +@@ -77,8 +77,13 @@ struct lxc_log_locinfo { + int line; + }; + ++#ifdef LXC_LOG_USE_BASENAME ++#define LXC_LOG_LOCINFO_INIT \ ++ { .file = (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__), .func = __func__, .line = __LINE__ } ++#else + #define LXC_LOG_LOCINFO_INIT \ + { .file = __FILE__, .func = __func__, .line = __LINE__ } ++#endif + + /* brief logging event object */ + struct lxc_log_event { diff --git a/external/meta-virtualization/recipes-containers/lxc/files/lxc-1.0.0-disable-udhcp-from-busybox-template.patch b/external/meta-virtualization/recipes-containers/lxc/files/lxc-1.0.0-disable-udhcp-from-busybox-template.patch new file mode 100644 index 00000000..85177c8f --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/lxc-1.0.0-disable-udhcp-from-busybox-template.patch @@ -0,0 +1,21 @@ +From 74efbe7f47379375c51948dd0f86248fb9429a1b Mon Sep 17 00:00:00 2001 +From: Bogdan Purcareata <bogdan.purcareata@freescale.com> +Date: Mon, 8 Apr 2013 18:30:19 +0300 +Subject: [PATCH] lxc-0.9.0-disable-udhcp-from-busybox-template + +--- + templates/lxc-busybox.in | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/templates/lxc-busybox.in b/templates/lxc-busybox.in +index 7243b36..9637a71 100644 +--- a/templates/lxc-busybox.in ++++ b/templates/lxc-busybox.in +@@ -111,7 +111,6 @@ EOF + #!/bin/sh + /bin/syslogd + /bin/mount -a +-/bin/udhcpc + EOF + + # executable diff --git a/external/meta-virtualization/recipes-containers/lxc/files/lxc-doc-upgrade-to-use-docbook-3.1-DTD.patch b/external/meta-virtualization/recipes-containers/lxc/files/lxc-doc-upgrade-to-use-docbook-3.1-DTD.patch new file mode 100644 index 00000000..085ffe80 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/lxc-doc-upgrade-to-use-docbook-3.1-DTD.patch @@ -0,0 +1,29 @@ +From 5190dce1a675dfcdf88e3b94bd48070ac180bacc Mon Sep 17 00:00:00 2001 +From: Jim Somerville <Jim.Somerville@windriver.com> +Date: Tue, 11 Aug 2015 14:05:00 -0400 +Subject: [PATCH] lxc: doc: upgrade to use docbook 3.1 DTD + +docbook2man fails to build the man pages in poky +due to missing the ancient Davenport 3.0 DTD. +Poky meta has the Oasis 3.1 version so upgrade +to use that instead. + +Signed-off-by: Jim Somerville <Jim.Somerville@windriver.com> + +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 1acc461..74b976a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -213,7 +213,7 @@ AM_CONDITIONAL([ENABLE_DOCBOOK], [test "x$db2xman" != "x"]) + AM_CONDITIONAL([USE_DOCBOOK2X], [test "x$db2xman" != "xdocbook2man"]) + + if test "x$db2xman" = "xdocbook2man"; then +- docdtd="\"-//Davenport//DTD DocBook V3.0//EN\"" ++ docdtd="\"-//OASIS//DTD DocBook V3.1//EN\"" + else + docdtd="\"-//OASIS//DTD DocBook XML\" \"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\"" + fi diff --git a/external/meta-virtualization/recipes-containers/lxc/files/lxc-fix-B-S.patch b/external/meta-virtualization/recipes-containers/lxc/files/lxc-fix-B-S.patch new file mode 100644 index 00000000..6b09193a --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/lxc-fix-B-S.patch @@ -0,0 +1,24 @@ +From 2fa77a1803939de2d155a14cf680b53140b92f06 Mon Sep 17 00:00:00 2001 +From: Dmitry Eremin-Solenikov <dmitry_eremin@mentor.com> +Date: Thu, 9 Apr 2015 23:01:48 +0300 + +--- + config/init/upstart/Makefile.am | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/config/init/upstart/Makefile.am b/config/init/upstart/Makefile.am +index 5552d32..186ae3d 100644 +--- a/config/init/upstart/Makefile.am ++++ b/config/init/upstart/Makefile.am +@@ -3,9 +3,9 @@ EXTRA_DIST = lxc.conf lxc-instance.conf lxc-net.conf.in + if INIT_SCRIPT_UPSTART + install-upstart: lxc.conf lxc-instance.conf lxc-net.conf + $(MKDIR_P) $(DESTDIR)$(sysconfdir)/init/ +- $(INSTALL_DATA) lxc.conf $(DESTDIR)$(sysconfdir)/init/ ++ $(INSTALL_DATA) $(srcdir)/lxc.conf $(DESTDIR)$(sysconfdir)/init/ + $(INSTALL_DATA) $(srcdir)/lxc-instance.conf $(DESTDIR)$(sysconfdir)/init/ +- $(INSTALL_DATA) lxc-net.conf $(DESTDIR)$(sysconfdir)/init/ ++ $(INSTALL_DATA) $(srcdir)/lxc-net.conf $(DESTDIR)$(sysconfdir)/init/ + + uninstall-upstart: + rm -f $(DESTDIR)$(sysconfdir)/init/lxc.conf diff --git a/external/meta-virtualization/recipes-containers/lxc/files/lxc-net b/external/meta-virtualization/recipes-containers/lxc/files/lxc-net new file mode 100644 index 00000000..1c59b705 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/lxc-net @@ -0,0 +1,9 @@ +USE_LXC_BRIDGE="true" +LXC_BRIDGE="lxcbr0" +LXC_ADDR="10.0.3.1" +LXC_NETMASK="255.255.255.0" +LXC_NETWORK="10.0.3.0/24" +LXC_DHCP_RANGE="10.0.3.2,10.0.3.254" +LXC_DHCP_MAX="253" +LXC_DHCP_CONFILE="" +LXC_DOMAIN="" diff --git a/external/meta-virtualization/recipes-containers/lxc/files/run-ptest b/external/meta-virtualization/recipes-containers/lxc/files/run-ptest new file mode 100644 index 00000000..3f3a75f2 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/run-ptest @@ -0,0 +1,57 @@ +#!/bin/bash + +# Network interfaces come up and down and can be quite noisy +# and since we are often on the console when running ptests +# let's just quiet things some +dmesg -n 1 + +# Blacklisted test will be skipped +blacklist="" +# Not applicable +blacklist="$blacklist lxc-test-apparmor" +# These currently hang so skip them until someone fixes them up +blacklist="$blacklist lxc-test-shutdowntest" +blacklist="$blacklist lxc-test-state-server" + +passed=0 +failed=0 +skipped=0 + +# Create logs dir and clear old logs if any +mkdir logs 2> /dev/null +rm -f logs/* + +echo "### Starting LXC ptest ###" + +for test in ./tests/* +do + if [[ ! $blacklist = *$(basename $test)* ]] + then + $test >logs/$(basename $test).log 2>&1 + else + echo "SKIPPED: $(basename $test)" + skipped=$((skipped+1)) + continue + fi + + if [ $? -eq 0 ] + then + echo "PASS: $(basename $test)" + passed=$((passed+1)) + else + echo "FAIL: $(basename $test)" + failed=$((failed+1)) + fi +done + +echo "" +echo "Results:" +echo " PASSED = $passed" +echo " FAILED = $failed" +echo " SKIPPED = $skipped" +echo "(for details check individual test log in ./logs directory)" +echo "" +echo "### LXC ptest complete ###" + +# restore dmesg to console +dmesg -n 6 diff --git a/external/meta-virtualization/recipes-containers/lxc/files/template-make-busybox-template-compatible-with-core-.patch b/external/meta-virtualization/recipes-containers/lxc/files/template-make-busybox-template-compatible-with-core-.patch new file mode 100644 index 00000000..e4bb72a0 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/template-make-busybox-template-compatible-with-core-.patch @@ -0,0 +1,58 @@ +From 3a7112a38d2c44b6fa49e0da1dc4765defd88dbb Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Thu, 31 May 2018 11:44:44 -0400 +Subject: [PATCH] template: make busybox template compatible with + + core-image-minimal + +The busybox template makes a lot of assumptions about how the busybox +binary found on the host was configured. Building core-image-minimal +"out of the box" does not configure busybox's 'passwd' or 'init' +applets so we need to work around this. + +Chances are if you attempt to use the busybox template with a host +which is note core-image-minimal it will fail but we are making these +changes here to at least have the template work with +core-image-minimal to be able to demonstrate that it can work as well +as to have it available for the ptests. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + templates/lxc-busybox.in | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +diff --git a/templates/lxc-busybox.in b/templates/lxc-busybox.in +index 9637a71..45b386f 100644 +--- a/templates/lxc-busybox.in ++++ b/templates/lxc-busybox.in +@@ -181,6 +181,19 @@ configure_busybox() + return 1 + fi + ++ # copy host passwd ++ if ! cp "$(which passwd)" "${rootfs}/bin"; then ++ echo "ERROR: Failed to copy passwd binary" ++ return 1 ++ fi ++ ++ # copy bash binary as the container init ++ if ! cp "$(which bash)" "${rootfs}/sbin/init"; then ++ echo "ERROR: Failed to copy bash binary" ++ return 1 ++ fi ++ ++ + # symlink busybox for the commands it supports + # it would be nice to just use "chroot $rootfs busybox --install -s /bin" + # but that only works right in a chroot with busybox >= 1.19.0 +@@ -189,9 +202,6 @@ configure_busybox() + ./busybox --list | grep -v busybox | xargs -n1 ln -s busybox + ) + +- # relink /sbin/init +- ln "${rootfs}/bin/busybox" "${rootfs}/sbin/init" +- + # /etc/fstab must exist for "mount -a" + touch "${rootfs}/etc/fstab" + diff --git a/external/meta-virtualization/recipes-containers/lxc/files/templates-actually-create-DOWNLOAD_TEMP-directory.patch b/external/meta-virtualization/recipes-containers/lxc/files/templates-actually-create-DOWNLOAD_TEMP-directory.patch new file mode 100644 index 00000000..756cddc3 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/templates-actually-create-DOWNLOAD_TEMP-directory.patch @@ -0,0 +1,37 @@ +From 68b0dd97130ffc5776de9219a42188b4a140d446 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Thu, 31 May 2018 16:21:45 -0400 +Subject: [PATCH] templates: actually create DOWNLOAD_TEMP directory + +The way 'mktemp' is currently used you will get a temp directory in +$TMPDIR or '/tmp' and DOWNLOAD_TEMP will not be pointing to an actual +directory. This will result in the wget operations failing and the +container will fail to create: + + ERROR: Failed to download http://.... + +Instead we want to use the '-p' option for mktemp to set the base path +and this will ensure that the temp directory is created in the correct +location and DOWNLOAD_TEMP will be consistent with this location. + +Upstream-Status: Pending + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + templates/lxc-download.in | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/templates/lxc-download.in b/templates/lxc-download.in +index 973783b..015a679 100644 +--- a/templates/lxc-download.in ++++ b/templates/lxc-download.in +@@ -323,7 +323,7 @@ elif [ -n "${DOWNLOAD_TEMP}" ]; then + mkdir -p "${DOWNLOAD_TEMP}" + DOWNLOAD_TEMP="$(mktemp -p ${DOWNLOAD_TEMP} -d)" + else +- DOWNLOAD_TEMP="${DOWNLOAD_TEMP}$(mktemp -d)" ++ DOWNLOAD_TEMP="$(mktemp -p ${DOWNLOAD_TEMP} -d)" + fi + + # Simply list images diff --git a/external/meta-virtualization/recipes-containers/lxc/files/tests-add-no-validate-when-using-download-template.patch b/external/meta-virtualization/recipes-containers/lxc/files/tests-add-no-validate-when-using-download-template.patch new file mode 100644 index 00000000..abddef6e --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/tests-add-no-validate-when-using-download-template.patch @@ -0,0 +1,85 @@ +From 1b334bdaf598600314a678509a702728721001a2 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Thu, 31 May 2018 15:14:26 -0400 +Subject: [PATCH] tests: add '--no-validate' when using download template + +We are usually running the ptests with core-image-minimal which has no +mechanism to validate the downloads. Validation isn't really of +interest to this test at any rate so simply add '--no-validate' to +avoid failing due to no GPG validation. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + src/tests/lxc-test-apparmor-mount | 2 +- + src/tests/lxc-test-autostart | 2 +- + src/tests/lxc-test-no-new-privs | 2 +- + src/tests/lxc-test-unpriv | 2 +- + src/tests/lxc-test-usernic.in | 2 +- + 5 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/tests/lxc-test-apparmor-mount b/src/tests/lxc-test-apparmor-mount +index 56d598f..573cff8 100755 +--- a/src/tests/lxc-test-apparmor-mount ++++ b/src/tests/lxc-test-apparmor-mount +@@ -169,7 +169,7 @@ if [ -f /etc/lsb-release ]; then + done + fi + +-run_cmd lxc-create -t download -n $cname -- -d ubuntu -r $release -a $ARCH ++run_cmd lxc-create -t download -n $cname -- --no-validate -d ubuntu -r $release -a $ARCH + + echo "test default confined container" + run_cmd lxc-start -n $cname -d -lDEBUG -o "$logfile" +diff --git a/src/tests/lxc-test-autostart b/src/tests/lxc-test-autostart +index e5b651b..d15b79b 100755 +--- a/src/tests/lxc-test-autostart ++++ b/src/tests/lxc-test-autostart +@@ -55,7 +55,7 @@ if [ -f /etc/lsb-release ]; then + done + fi + +-lxc-create -t download -n $CONTAINER_NAME -B dir -- -d ubuntu -r $release -a $ARCH ++lxc-create -t download -n $CONTAINER_NAME -B dir -- --no-validate -d ubuntu -r $release -a $ARCH + CONTAINER_PATH=$(dirname $(lxc-info -n $CONTAINER_NAME -c lxc.rootfs.path -H) | sed -e 's/dir://') + cp $CONTAINER_PATH/config $CONTAINER_PATH/config.bak + +diff --git a/src/tests/lxc-test-no-new-privs b/src/tests/lxc-test-no-new-privs +index 8642992..e72bdf0 100755 +--- a/src/tests/lxc-test-no-new-privs ++++ b/src/tests/lxc-test-no-new-privs +@@ -47,7 +47,7 @@ if type dpkg >/dev/null 2>&1; then + ARCH=$(dpkg --print-architecture) + fi + +-lxc-create -t download -n c1 -- -d ubuntu -r xenial -a $ARCH ++lxc-create -t download -n c1 -- --no-validate -d ubuntu -r xenial -a $ARCH + echo "lxc.no_new_privs = 1" >> /var/lib/lxc/c1/config + + lxc-start -n c1 +diff --git a/src/tests/lxc-test-unpriv b/src/tests/lxc-test-unpriv +index 16ff12d..0958d48 100755 +--- a/src/tests/lxc-test-unpriv ++++ b/src/tests/lxc-test-unpriv +@@ -173,7 +173,7 @@ run_cmd mkdir -p $HDIR/.cache/lxc + cp -R /var/cache/lxc/download $HDIR/.cache/lxc && \ + chown -R $TUSER: $HDIR/.cache/lxc + +-run_cmd lxc-create -t download -n c1 -- -d ubuntu -r $release -a $ARCH ++run_cmd lxc-create -t download -n c1 -- --no-validate -d ubuntu -r $release -a $ARCH + + # Make sure we can start it - twice + +diff --git a/src/tests/lxc-test-usernic.in b/src/tests/lxc-test-usernic.in +index 3e35008..f489286 100755 +--- a/src/tests/lxc-test-usernic.in ++++ b/src/tests/lxc-test-usernic.in +@@ -146,7 +146,7 @@ if [ -f /etc/lsb-release ]; then + fi + + # Create three containers +-run_cmd "lxc-create -t download -n b1 -- -d ubuntu -r $release -a $ARCH" ++run_cmd "lxc-create -t download -n b1 -- --no-validate -d ubuntu -r $release -a $ARCH" + run_cmd "lxc-start -n b1 -d" + p1=$(run_cmd "lxc-info -n b1 -p -H") + diff --git a/external/meta-virtualization/recipes-containers/lxc/files/tests-our-init-is-not-busybox.patch b/external/meta-virtualization/recipes-containers/lxc/files/tests-our-init-is-not-busybox.patch new file mode 100644 index 00000000..e6c71d3d --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/files/tests-our-init-is-not-busybox.patch @@ -0,0 +1,29 @@ +From 51d88d9741c30ff4a798698514cac831ae61680b Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Thu, 31 May 2018 15:00:34 -0400 +Subject: [PATCH] tests: our init is not busybox + +Since we are using 'bash' as the init (see our updates to the busybox +template) we can't compare '/sbin/init' and 'busybox'. Actually we are +really only interested in the fact 'cmp' is being run and not the +result, so simplify by comparing '/sbin/init' to itself. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + src/tests/attach.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tests/attach.c b/src/tests/attach.c +index 07e641d..aac609f 100644 +--- a/src/tests/attach.c ++++ b/src/tests/attach.c +@@ -248,7 +248,7 @@ static int test_attach_cmd(struct lxc_container *ct) + { + int ret; + pid_t pid; +- char *argv[] = {"cmp", "-s", "/sbin/init", "/bin/busybox", NULL}; ++ char *argv[] = {"cmp", "-s", "/sbin/init", "/sbin/init", NULL}; + lxc_attach_command_t command = {"cmp", argv}; + lxc_attach_options_t attach_options = LXC_ATTACH_OPTIONS_DEFAULT; + diff --git a/external/meta-virtualization/recipes-containers/lxc/lxc_3.1.0.bb b/external/meta-virtualization/recipes-containers/lxc/lxc_3.1.0.bb new file mode 100644 index 00000000..977583f2 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxc/lxc_3.1.0.bb @@ -0,0 +1,196 @@ +DESCRIPTION = "lxc aims to use these new functionnalities to provide an userspace container object" +SECTION = "console/utils" +LICENSE = "LGPLv2.1" +LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c" +DEPENDS = "libxml2 libcap" +RDEPENDS_${PN} = " \ + rsync \ + gzip \ + xz \ + tar \ + wget \ + libcap-bin \ + bridge-utils \ + dnsmasq \ + perl-module-strict \ + perl-module-getopt-long \ + perl-module-vars \ + perl-module-exporter \ + perl-module-constant \ + perl-module-overload \ + perl-module-exporter-heavy \ + gmp \ + libidn \ + gnutls \ + nettle \ + util-linux-mountpoint \ + util-linux-getopt \ +" + +RDEPENDS_${PN}_append_libc-glibc = " glibc-utils" + +RDEPENDS_${PN}-ptest += "file make gmp nettle gnutls bash libgcc" + +RDEPENDS_${PN}-networking += "iptables" + +SRC_URI = "http://linuxcontainers.org/downloads/${BPN}-${PV}.tar.gz \ + file://lxc-1.0.0-disable-udhcp-from-busybox-template.patch \ + file://run-ptest \ + file://lxc-fix-B-S.patch \ + file://lxc-doc-upgrade-to-use-docbook-3.1-DTD.patch \ + file://logs-optionally-use-base-filenames-to-report-src-fil.patch \ + file://templates-actually-create-DOWNLOAD_TEMP-directory.patch \ + file://template-make-busybox-template-compatible-with-core-.patch \ + file://tests-our-init-is-not-busybox.patch \ + file://tests-add-no-validate-when-using-download-template.patch \ + file://dnsmasq.conf \ + file://lxc-net \ + " + +SRC_URI[md5sum] = "e83e302a801494276f3772e687a3b8b0" +SRC_URI[sha256sum] = "4d8772c25baeaea2c37a954902b88c05d1454c91c887cb6a0997258cfac3fdc5" + +S = "${WORKDIR}/${BPN}-${PV}" + +# Let's not configure for the host distro. +# +PTEST_CONF = "${@bb.utils.contains('DISTRO_FEATURES', 'ptest', '--enable-tests', '', d)}" +EXTRA_OECONF += "--with-distro=${DISTRO} ${PTEST_CONF}" + +EXTRA_OECONF += "--with-init-script=\ +${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'sysvinit,', '', d)}\ +${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)}" + +EXTRA_OECONF += "--enable-log-src-basename" + +CFLAGS_append = " -Wno-error=deprecated-declarations" + +PACKAGECONFIG ??= "templates \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \ +" +PACKAGECONFIG[doc] = "--enable-doc --enable-api-docs,--disable-doc --disable-api-docs,," +PACKAGECONFIG[rpath] = "--enable-rpath,--disable-rpath,," +PACKAGECONFIG[apparmor] = "--enable-apparmor,--disable-apparmor,apparmor,apparmor" +PACKAGECONFIG[templates] = ",,, ${PN}-templates" +PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux,libselinux" +PACKAGECONFIG[seccomp] ="--enable-seccomp,--disable-seccomp,libseccomp,libseccomp" +PACKAGECONFIG[systemd] = "--with-systemdsystemunitdir=${systemd_unitdir}/system/,--without-systemdsystemunitdir,systemd," + +# required by python3 to run setup.py +export BUILD_SYS +export HOST_SYS +export STAGING_INCDIR +export STAGING_LIBDIR + +inherit autotools pkgconfig ptest update-rc.d systemd python3native + +SYSTEMD_PACKAGES = "${PN} ${PN}-networking" +SYSTEMD_SERVICE_${PN} = "lxc.service" +SYSTEMD_AUTO_ENABLE_${PN} = "disable" +SYSTEMD_SERVICE_${PN}-networking = "lxc-net.service" +SYSTEMD_AUTO_ENABLE_${PN}-networking = "enable" + +INITSCRIPT_PACKAGES = "${PN} ${PN}-networking" +INITSCRIPT_NAME_${PN} = "lxc-containers" +INITSCRIPT_PARAMS_${PN} = "defaults" +INITSCRIPT_NAME_${PN}-networking = "lxc-net" +INITSCRIPT_PARAMS_${PN}-networking = "defaults" + +FILES_${PN}-doc = "${mandir} ${infodir}" +# For LXC the docdir only contains example configuration files and should be included in the lxc package +FILES_${PN} += "${docdir}" +FILES_${PN} += "${libdir}/python3*" +FILES_${PN} += "${datadir}/bash-completion" +FILES_${PN}-dbg += "${libexecdir}/lxc/.debug" +FILES_${PN}-dbg += "${libexecdir}/lxc/hooks/.debug" +PACKAGES =+ "${PN}-templates ${PN}-networking ${PN}-lua" +FILES_lua-${PN} = "${datadir}/lua ${libdir}/lua" +FILES_lua-${PN}-dbg += "${libdir}/lua/lxc/.debug" +FILES_${PN}-templates += "${datadir}/lxc/templates" +RDEPENDS_${PN}-templates += "bash" + +FILES_${PN}-networking += " \ + ${sysconfdir}/init.d/lxc-net \ + ${sysconfdir}/default/lxc-net \ +" + +CACHED_CONFIGUREVARS += " \ + ac_cv_path_PYTHON='${STAGING_BINDIR_NATIVE}/python3-native/python3' \ + am_cv_python_pyexecdir='${exec_prefix}/${libdir}/python3.5/site-packages' \ + am_cv_python_pythondir='${prefix}/${libdir}/python3.5/site-packages' \ +" + +do_install_append() { + # The /var/cache/lxc directory created by the Makefile + # is wiped out in volatile, we need to create this at boot. + rm -rf ${D}${localstatedir}/cache + install -d ${D}${sysconfdir}/default/volatiles + echo "d root root 0755 ${localstatedir}/cache/lxc none" \ + > ${D}${sysconfdir}/default/volatiles/99_lxc + + for i in `grep -l "#! */bin/bash" ${D}${datadir}/lxc/hooks/*`; do \ + sed -e 's|#! */bin/bash|#!/bin/sh|' -i $i; done + + install -d ${D}${sysconfdir}/init.d + install -m 755 config/init/sysvinit/lxc* ${D}${sysconfdir}/init.d + + # since python3-native is used for install location this will not be + # suitable for the target and we will have to correct the package install + if ${@bb.utils.contains('PACKAGECONFIG', 'python', 'true', 'false', d)}; then + if [ -d ${D}${exec_prefix}/lib/python* ]; then mv ${D}${exec_prefix}/lib/python* ${D}${libdir}/; fi + rmdir --ignore-fail-on-non-empty ${D}${exec_prefix}/lib + fi + + # /etc/default/lxc sources lxc-net, this allows lxc bridge when lxc-networking + # is not installed this results in no lxcbr0, but when lxc-networking is installed + # lxcbr0 will be fully configured. + install -m 644 ${WORKDIR}/lxc-net ${D}${sysconfdir}/default/ + + # Force the main dnsmasq instance to bind only to specified interfaces and + # to not bind to virbr0. Libvirt will run its own instance on this interface. + install -d ${D}/${sysconfdir}/dnsmasq.d + install -m 644 ${WORKDIR}/dnsmasq.conf ${D}/${sysconfdir}/dnsmasq.d/lxc +} + +EXTRA_OEMAKE += "TEST_DIR=${D}${PTEST_PATH}/src/tests" + +do_install_ptest() { + # Move tests to the "ptest directory" + install -d ${D}/${PTEST_PATH}/tests + mv ${D}/usr/bin/lxc-test-* ${D}/${PTEST_PATH}/tests/. +} + +pkg_postinst_${PN}() { + if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then + /etc/init.d/populate-volatile.sh update + fi +} + +pkg_postinst_ontarget_${PN}-networking() { +if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then +cat >> /etc/network/interfaces << EOF + +auto lxcbr0 +iface lxcbr0 inet dhcp + bridge_ports eth0 + bridge_fd 0 + bridge_maxwait 0 +EOF + +cat<<EOF>/etc/network/if-pre-up.d/lxcbr0 +#! /bin/sh + +if test "x\$IFACE" = xlxcbr0 ; then + brctl show |grep lxcbr0 > /dev/null 2>/dev/null + if [ \$? != 0 ] ; then + brctl addbr lxcbr0 + brctl addif lxcbr0 eth0 + ip addr flush eth0 + ifconfig eth0 up + fi +fi +EOF +chmod 755 /etc/network/if-pre-up.d/lxcbr0 +fi +} diff --git a/external/meta-virtualization/recipes-containers/lxcfs/files/systemd-allow-for-distinct-build-directory.patch b/external/meta-virtualization/recipes-containers/lxcfs/files/systemd-allow-for-distinct-build-directory.patch new file mode 100644 index 00000000..14228d65 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxcfs/files/systemd-allow-for-distinct-build-directory.patch @@ -0,0 +1,47 @@ +From 66a71fbf94020651880f1dbb6e4663d93391b47c Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Mon, 10 Sep 2018 13:14:07 -0400 +Subject: [PATCH] systemd: allow for distinct build directory + +The Makefile.am is currently written in a way that doesn't allow for a +distinct build directory. As such we get the error: + + install: cannot stat 'lxcfs.service': No such file or directory + +Make use of $(srcdir) to correct this. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + config/init/systemd/Makefile.am | 2 +- + config/init/systemd/Makefile.in | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/config/init/systemd/Makefile.am b/config/init/systemd/Makefile.am +index 79e96f5..d6933f9 100644 +--- a/config/init/systemd/Makefile.am ++++ b/config/init/systemd/Makefile.am +@@ -5,7 +5,7 @@ SYSTEMD_UNIT_DIR = /lib/systemd/system + + install-systemd: lxcfs.service + $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR) +- $(INSTALL_DATA) lxcfs.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/ ++ $(INSTALL_DATA) $(srcdir)/lxcfs.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/ + + uninstall-systemd: + rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/lxcfs.service +diff --git a/config/init/systemd/Makefile.in b/config/init/systemd/Makefile.in +index d433e8a..430190c 100644 +--- a/config/init/systemd/Makefile.in ++++ b/config/init/systemd/Makefile.in +@@ -450,7 +450,7 @@ uninstall-am: uninstall-local + + @INIT_SCRIPT_SYSTEMD_TRUE@install-systemd: lxcfs.service + @INIT_SCRIPT_SYSTEMD_TRUE@ $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNIT_DIR) +-@INIT_SCRIPT_SYSTEMD_TRUE@ $(INSTALL_DATA) lxcfs.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/ ++@INIT_SCRIPT_SYSTEMD_TRUE@ $(INSTALL_DATA) $(srcdir)/lxcfs.service $(DESTDIR)$(SYSTEMD_UNIT_DIR)/ + + @INIT_SCRIPT_SYSTEMD_TRUE@uninstall-systemd: + @INIT_SCRIPT_SYSTEMD_TRUE@ rm -f $(DESTDIR)$(SYSTEMD_UNIT_DIR)/lxcfs.service +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-containers/lxcfs/files/systemd-ensure-var-lib-lxcfs-exists.patch b/external/meta-virtualization/recipes-containers/lxcfs/files/systemd-ensure-var-lib-lxcfs-exists.patch new file mode 100644 index 00000000..5e5673ac --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxcfs/files/systemd-ensure-var-lib-lxcfs-exists.patch @@ -0,0 +1,27 @@ +From 89bf4b64e810e174068e7861490e6d6ab2d14854 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Mon, 10 Sep 2018 15:01:54 -0400 +Subject: [PATCH] systemd: ensure /var/lib/lxcfs exists + +If the directory doesn't exist the service will fail to start. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + config/init/systemd/lxcfs.service | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/config/init/systemd/lxcfs.service b/config/init/systemd/lxcfs.service +index 95e3ee9..d887203 100644 +--- a/config/init/systemd/lxcfs.service ++++ b/config/init/systemd/lxcfs.service +@@ -5,6 +5,7 @@ Before=lxc.service + Documentation=man:lxcfs(1) + + [Service] ++ExecStartPre=-/bin/mkdir /var/lib/lxcfs + ExecStart=/usr/bin/lxcfs /var/lib/lxcfs/ + KillMode=process + Restart=on-failure +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-containers/lxcfs/lxcfs_3.0.1.bb b/external/meta-virtualization/recipes-containers/lxcfs/lxcfs_3.0.1.bb new file mode 100644 index 00000000..576027fd --- /dev/null +++ b/external/meta-virtualization/recipes-containers/lxcfs/lxcfs_3.0.1.bb @@ -0,0 +1,25 @@ +SUMMARY = "LXCFS is a userspace filesystem created to avoid kernel limitations" +LICENSE = "Apache-2.0" + +inherit autotools pkgconfig systemd + +SRC_URI = " \ + https://linuxcontainers.org/downloads/lxcfs/lxcfs-${PV}.tar.gz \ + file://systemd-allow-for-distinct-build-directory.patch \ + file://systemd-ensure-var-lib-lxcfs-exists.patch \ +" + +LIC_FILES_CHKSUM = "file://COPYING;md5=3b83ef96387f14655fc854ddc3c6bd57" +SRC_URI[md5sum] = "fa49872fc45846125455199a2cce18f1" +SRC_URI[sha256sum] = "016c317f13392bebccba338511f537332fb2fdbaf62a5f6d77307b38a348f41f" + +DEPENDS += "fuse" +RDEPENDS_${PN} += "fuse" + +FILES_${PN} += "${datadir}/lxc/config/common.conf.d/*" + +CACHED_CONFIGUREVARS += "ac_cv_path_HELP2MAN='false // No help2man //'" +EXTRA_OECONF += "--with-distro=unknown --with-init-script=${VIRTUAL-RUNTIME_init_manager}" + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "lxcfs.service" diff --git a/external/meta-virtualization/recipes-containers/oci-image-spec/oci-image-spec_git.bb b/external/meta-virtualization/recipes-containers/oci-image-spec/oci-image-spec_git.bb new file mode 100644 index 00000000..92a83998 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-image-spec/oci-image-spec_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "The OCI Image Format project creates and maintains the software shipping container image format spec" +HOMEPAGE = "https://github.com/opencontainers/image-spec" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=27ef03aa2da6e424307f102e8b42621d" + +SRCNAME = "image-spec" + +PKG_NAME = "github.com/opencontainers/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "91d3eaabebcdc329edd9b4ff0f28f8f90022201f" +PV = "v1.0.0-rc4+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "image_spec_file_sysroot_preprocess" + +image_spec_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-containers/oci-image-tools/files/0001-config-make-Config.User-mapping-errors-a-warning.patch b/external/meta-virtualization/recipes-containers/oci-image-tools/files/0001-config-make-Config.User-mapping-errors-a-warning.patch new file mode 100644 index 00000000..78d2b9d0 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-image-tools/files/0001-config-make-Config.User-mapping-errors-a-warning.patch @@ -0,0 +1,30 @@ +From fbd62eff9ff2f447c2eb4634398110609fbf9d59 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Thu, 16 Nov 2017 23:40:17 -0500 +Subject: [PATCH] config: make Config.User mapping errors a warning + +Rather than throwing an error if we can't map a user to a uid, +output a warning. We aren't actually running the code, but are +just extracting it .. so the user not existing isn't an issue. + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + image/config.go | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/import/image/config.go b/src/import/image/config.go +index d28b1bc4fe5f..37dfd1f14ef7 100644 +--- a/src/import/image/config.go ++++ b/src/import/image/config.go +@@ -106,7 +106,7 @@ func (c *config) runtimeSpec(rootfs string) (*specs.Spec, error) { + s.Process.User.UID = uint32(uid) + s.Process.User.GID = uint32(gid) + } else if c.Config.User != "" { +- return nil, errors.New("config.User: unsupported format") ++ fmt.Println("Warning: could not map UID for user:", c.Config.User) + } + + s.Linux = &specs.Linux{} +-- +2.4.0.53.g8440f74 + diff --git a/external/meta-virtualization/recipes-containers/oci-image-tools/files/0001-image-manifest-Recursively-remove-pre-existing-entri.patch b/external/meta-virtualization/recipes-containers/oci-image-tools/files/0001-image-manifest-Recursively-remove-pre-existing-entri.patch new file mode 100644 index 00000000..5594f976 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-image-tools/files/0001-image-manifest-Recursively-remove-pre-existing-entri.patch @@ -0,0 +1,78 @@ +From 1f205c0aec5ea9e983d61a64e7ce871ae416bebd Mon Sep 17 00:00:00 2001 +From: "W. Trevor King" <wking@tremily.us> +Date: Tue, 18 Oct 2016 02:16:46 -0700 +Subject: [PATCH 1/2] image/manifest: Recursively remove pre-existing entries + when unpacking + +Implementing the logic that is in-flight with [1], but using recursive +removal [2]. GNU tar has a --recursive-unlink option that's not +enabled by default, with the motivation being something like "folks +would be mad if we blew away a full tree and replaced it with a broken +symlink" [3]. That makes sense for working filesystems, but we're +building the rootfs from scratch here so losing information is not a +concern. This commit always uses recursive removal to get that old +thing off the filesystem (whatever it takes ;). + +The exception to the removal is if both the tar entry and existing +path occupant are directories. In this case we want to use GNU tar's +default --overwrite-dir behavior, but unpackLayer's metadata handling +is currently very weak so I've left it at "don't delete the old +directory". + +The reworked directory case also fixes a minor bug from 44210d05 +(cmd/oci-image-tool: fix unpacking..., 2016-07-22, #177) where the: + + if fi, err := os.Lstat(path); !(err == nil && fi.IsDir()) { + +block would not error out if the Lstat failed for a reason besides the +acceptable IsNotExist. Instead, it would attempt to call MkdirAll, +which would probably fail for the same reason that Lstat failed +(e.g. ENOTDIR). But it's better to handle the Lstat errors directly. + +[1]: https://github.com/opencontainers/image-spec/pull/317 +[2]: https://github.com/opencontainers/image-spec/pull/317/files#r79214718 +[3]: https://www.gnu.org/software/tar/manual/html_node/Dealing-with-Old-Files.html + +Signed-off-by: W. Trevor King <wking@tremily.us> +--- + image/manifest.go | 22 +++++++++++++++++++--- + 1 file changed, 19 insertions(+), 3 deletions(-) + +diff --git a/image/manifest.go b/image/manifest.go +index 8834c1e5f2f0..144bd4f62219 100644 +--- a/src/import/image/manifest.go ++++ b/src/import/image/manifest.go +@@ -253,11 +253,27 @@ loop: + continue loop + } + ++ if hdr.Typeflag != tar.TypeDir { ++ err = os.RemoveAll(path) ++ if err != nil && !os.IsNotExist(err) { ++ return err ++ } ++ } ++ + switch hdr.Typeflag { + case tar.TypeDir: +- if fi, err := os.Lstat(path); !(err == nil && fi.IsDir()) { +- if err2 := os.MkdirAll(path, info.Mode()); err2 != nil { +- return errors.Wrap(err2, "error creating directory") ++ fi, err := os.Lstat(path) ++ if err != nil && !os.IsNotExist(err) { ++ return err ++ } ++ if os.IsNotExist(err) || !fi.IsDir() { ++ err = os.RemoveAll(path) ++ if err != nil && !os.IsNotExist(err) { ++ return err ++ } ++ err = os.MkdirAll(path, info.Mode()) ++ if err != nil { ++ return err + } + } + +-- +2.4.0.53.g8440f74 + diff --git a/external/meta-virtualization/recipes-containers/oci-image-tools/files/0002-image-manifest-Split-unpackLayerEntry-into-its-own-f.patch b/external/meta-virtualization/recipes-containers/oci-image-tools/files/0002-image-manifest-Split-unpackLayerEntry-into-its-own-f.patch new file mode 100644 index 00000000..69bdcdb5 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-image-tools/files/0002-image-manifest-Split-unpackLayerEntry-into-its-own-f.patch @@ -0,0 +1,242 @@ +From 1e55f2a83b1f644803b640b72171b4ae0d95217b Mon Sep 17 00:00:00 2001 +From: "W. Trevor King" <wking@tremily.us> +Date: Thu, 20 Oct 2016 23:30:22 -0700 +Subject: [PATCH 2/2] image/manifest: Split unpackLayerEntry into its own + function + +To help address: + + $ make lint + checking lint + image/manifest.go:140::warning: cyclomatic complexity 39 of function unpackLayer() is high (> 35) (gocyclo) + ... + +Signed-off-by: W. Trevor King <wking@tremily.us> +--- + image/manifest.go | 185 +++++++++++++++++++++++++++++------------------------- + 1 file changed, 100 insertions(+), 85 deletions(-) + +diff --git a/image/manifest.go b/image/manifest.go +index 144bd4f62219..dfd5a83f70e4 100644 +--- a/src/import/image/manifest.go ++++ b/src/import/image/manifest.go +@@ -218,116 +218,131 @@ loop: + return errors.Wrapf(err, "error advancing tar stream") + } + +- hdr.Name = filepath.Clean(hdr.Name) +- if !strings.HasSuffix(hdr.Name, string(os.PathSeparator)) { +- // Not the root directory, ensure that the parent directory exists +- parent := filepath.Dir(hdr.Name) +- parentPath := filepath.Join(dest, parent) +- if _, err2 := os.Lstat(parentPath); err2 != nil && os.IsNotExist(err2) { +- if err3 := os.MkdirAll(parentPath, 0755); err3 != nil { +- return err3 +- } +- } +- } +- path := filepath.Join(dest, hdr.Name) +- if entries[path] { +- return fmt.Errorf("duplicate entry for %s", path) +- } +- entries[path] = true +- rel, err := filepath.Rel(dest, path) ++ var whiteout bool ++ whiteout, err = unpackLayerEntry(dest, hdr, tr, &entries) + if err != nil { + return err + } +- info := hdr.FileInfo() +- if strings.HasPrefix(rel, ".."+string(os.PathSeparator)) { +- return fmt.Errorf("%q is outside of %q", hdr.Name, dest) ++ if whiteout { ++ continue loop + } + +- if strings.HasPrefix(info.Name(), ".wh.") { +- path = strings.Replace(path, ".wh.", "", 1) ++ // Directory mtimes must be handled at the end to avoid further ++ // file creation in them to modify the directory mtime ++ if hdr.Typeflag == tar.TypeDir { ++ dirs = append(dirs, hdr) ++ } ++ } ++ for _, hdr := range dirs { ++ path := filepath.Join(dest, hdr.Name) + +- if err := os.RemoveAll(path); err != nil { +- return errors.Wrap(err, "unable to delete whiteout path") ++ finfo := hdr.FileInfo() ++ // I believe the old version was using time.Now().UTC() to overcome an ++ // invalid error from chtimes.....but here we lose hdr.AccessTime like this... ++ if err := os.Chtimes(path, time.Now().UTC(), finfo.ModTime()); err != nil { ++ return errors.Wrap(err, "error changing time") ++ } ++ } ++ return nil ++} ++ ++// unpackLayerEntry unpacks a single entry from a layer. ++func unpackLayerEntry(dest string, header *tar.Header, reader io.Reader, entries *map[string]bool) (whiteout bool, err error) { ++ header.Name = filepath.Clean(header.Name) ++ if !strings.HasSuffix(header.Name, string(os.PathSeparator)) { ++ // Not the root directory, ensure that the parent directory exists ++ parent := filepath.Dir(header.Name) ++ parentPath := filepath.Join(dest, parent) ++ if _, err2 := os.Lstat(parentPath); err2 != nil && os.IsNotExist(err2) { ++ if err3 := os.MkdirAll(parentPath, 0755); err3 != nil { ++ return false, err3 + } ++ } ++ } ++ path := filepath.Join(dest, header.Name) ++ if (*entries)[path] { ++ return false, fmt.Errorf("duplicate entry for %s", path) ++ } ++ (*entries)[path] = true ++ rel, err := filepath.Rel(dest, path) ++ if err != nil { ++ return false, err ++ } ++ info := header.FileInfo() ++ if strings.HasPrefix(rel, ".."+string(os.PathSeparator)) { ++ return false, fmt.Errorf("%q is outside of %q", header.Name, dest) ++ } + +- continue loop ++ if strings.HasPrefix(info.Name(), ".wh.") { ++ path = strings.Replace(path, ".wh.", "", 1) ++ ++ if err = os.RemoveAll(path); err != nil { ++ return true, errors.Wrap(err, "unable to delete whiteout path") + } + +- if hdr.Typeflag != tar.TypeDir { +- err = os.RemoveAll(path) +- if err != nil && !os.IsNotExist(err) { +- return err +- } ++ return true, nil ++ } ++ ++ if header.Typeflag != tar.TypeDir { ++ err = os.RemoveAll(path) ++ if err != nil && !os.IsNotExist(err) { ++ return false, err + } ++ } + +- switch hdr.Typeflag { +- case tar.TypeDir: +- fi, err := os.Lstat(path) ++ switch header.Typeflag { ++ case tar.TypeDir: ++ fi, err := os.Lstat(path) ++ if err != nil && !os.IsNotExist(err) { ++ return false, err ++ } ++ if os.IsNotExist(err) || !fi.IsDir() { ++ err = os.RemoveAll(path) + if err != nil && !os.IsNotExist(err) { +- return err +- } +- if os.IsNotExist(err) || !fi.IsDir() { +- err = os.RemoveAll(path) +- if err != nil && !os.IsNotExist(err) { +- return err +- } +- err = os.MkdirAll(path, info.Mode()) +- if err != nil { +- return err +- } ++ return false, err + } +- +- case tar.TypeReg, tar.TypeRegA: +- f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, info.Mode()) ++ err = os.MkdirAll(path, info.Mode()) + if err != nil { +- return errors.Wrap(err, "unable to open file") ++ return false, err + } ++ } + +- if _, err := io.Copy(f, tr); err != nil { +- f.Close() +- return errors.Wrap(err, "unable to copy") +- } +- f.Close() ++ case tar.TypeReg, tar.TypeRegA: ++ f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY, info.Mode()) ++ if err != nil { ++ return false, errors.Wrap(err, "unable to open file") ++ } + +- case tar.TypeLink: +- target := filepath.Join(dest, hdr.Linkname) ++ if _, err := io.Copy(f, reader); err != nil { ++ f.Close() ++ return false, errors.Wrap(err, "unable to copy") ++ } ++ f.Close() + +- if !strings.HasPrefix(target, dest) { +- return fmt.Errorf("invalid hardlink %q -> %q", target, hdr.Linkname) +- } ++ case tar.TypeLink: ++ target := filepath.Join(dest, header.Linkname) + +- if err := os.Link(target, path); err != nil { +- return err +- } ++ if !strings.HasPrefix(target, dest) { ++ return false, fmt.Errorf("invalid hardlink %q -> %q", target, header.Linkname) ++ } + +- case tar.TypeSymlink: +- target := filepath.Join(filepath.Dir(path), hdr.Linkname) ++ if err := os.Link(target, path); err != nil { ++ return false, err ++ } + +- if !strings.HasPrefix(target, dest) { +- return fmt.Errorf("invalid symlink %q -> %q", path, hdr.Linkname) +- } ++ case tar.TypeSymlink: ++ target := filepath.Join(filepath.Dir(path), header.Linkname) + +- if err := os.Symlink(hdr.Linkname, path); err != nil { +- return err +- } +- case tar.TypeXGlobalHeader: +- return nil ++ if !strings.HasPrefix(target, dest) { ++ return false, fmt.Errorf("invalid symlink %q -> %q", path, header.Linkname) + } +- // Directory mtimes must be handled at the end to avoid further +- // file creation in them to modify the directory mtime +- if hdr.Typeflag == tar.TypeDir { +- dirs = append(dirs, hdr) +- } +- } +- for _, hdr := range dirs { +- path := filepath.Join(dest, hdr.Name) + +- finfo := hdr.FileInfo() +- // I believe the old version was using time.Now().UTC() to overcome an +- // invalid error from chtimes.....but here we lose hdr.AccessTime like this... +- if err := os.Chtimes(path, time.Now().UTC(), finfo.ModTime()); err != nil { +- return errors.Wrap(err, "error changing time") ++ if err := os.Symlink(header.Linkname, path); err != nil { ++ return false, err + } ++ case tar.TypeXGlobalHeader: ++ return false, nil + } +- return nil ++ ++ return false, nil + } +-- +2.4.0.53.g8440f74 + diff --git a/external/meta-virtualization/recipes-containers/oci-image-tools/oci-image-tools_git.bb b/external/meta-virtualization/recipes-containers/oci-image-tools/oci-image-tools_git.bb new file mode 100644 index 00000000..8c41b6e0 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-image-tools/oci-image-tools_git.bb @@ -0,0 +1,64 @@ +HOMEPAGE = "https://github.com/opencontainers/image-tools" +SUMMARY = "A collection of tools for working with the OCI image format specification" +LICENSE = "Apache-2" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" + +DEPENDS = "\ + oci-image-spec \ + oci-runtime-spec \ + go-digest \ + go-errors \ + spf13-cobra \ + spf13-pflag \ + " + +SRC_URI = "git://github.com/opencontainers/image-tools.git \ + file://0001-image-manifest-Recursively-remove-pre-existing-entri.patch \ + file://0002-image-manifest-Split-unpackLayerEntry-into-its-own-f.patch \ + file://0001-config-make-Config.User-mapping-errors-a-warning.patch" + +SRCREV = "4abe1a166f9be97e8e71b1bb4d7599cc29323011" +PV = "0.2.0-dev+git${SRCPV}" +GO_IMPORT = "import" + +inherit goarch +inherit go + +# This disables seccomp and apparmor, which are on by default in the +# go package. +EXTRA_OEMAKE="BUILDTAGS=''" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + # Setup vendor directory so that it can be used in GOPATH. + # + # Go looks in a src directory under any directory in GOPATH but riddler + # uses 'vendor' instead of 'vendor/src'. We can fix this with a symlink. + # + # We also need to link in the ipallocator directory as that is not under + # a src directory. + ln -sfn . "${S}/src/import/vendor/src" + mkdir -p "${S}/src/import/vendor/src/github.com/opencontainers/image-tools/" + ln -sfn "${S}/src/import/image" "${S}/src/import/vendor/src/github.com/opencontainers/image-tools/image" + ln -sfn "${S}/src/import/version" "${S}/src/import/vendor/src/github.com/opencontainers/image-tools/version" + export GOPATH="${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + cd ${S}/src/import + + oe_runmake tool +} + +do_install() { + install -d ${D}/${sbindir} + install ${S}/src/import/oci-image-tool ${D}/${sbindir}/ +} + +INSANE_SKIP_${PN} += "ldflags textrel" diff --git a/external/meta-virtualization/recipes-containers/oci-runtime-spec/oci-runtime-spec_git.bb b/external/meta-virtualization/recipes-containers/oci-runtime-spec/oci-runtime-spec_git.bb new file mode 100644 index 00000000..deba7b3e --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-runtime-spec/oci-runtime-spec_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "The Open Container Initiative develops specifications for standards on Operating System process and application containers" +HOMEPAGE = "https://github.com/opencontainers/runtime-spec" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=b355a61a394a504dacde901c958f662c" + +SRCNAME = "runtime-spec" + +PKG_NAME = "github.com/opencontainers/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "a39b1cd4fdf7743ab721cc9da58abbee2f8624d1" +PV = "v1.0.0-rc6+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go" -not -path "*/.tool/*"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "runtime_spec_file_sysroot_preprocess" + +runtime_spec_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1" diff --git a/external/meta-virtualization/recipes-containers/oci-runtime-tools/files/0001-Revert-implement-add-set-function-for-hooks-items.patch b/external/meta-virtualization/recipes-containers/oci-runtime-tools/files/0001-Revert-implement-add-set-function-for-hooks-items.patch new file mode 100644 index 00000000..99a9310b --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-runtime-tools/files/0001-Revert-implement-add-set-function-for-hooks-items.patch @@ -0,0 +1,202 @@ +From 2911eaabab92ec2cdea2b173c3429db4a52bee2f Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Wed, 20 Sep 2017 23:28:52 -0400 +Subject: [PATCH] Revert "implement add/set function for hooks items" + +This reverts commit df3a46feb971386f922c7c2c2822b88301f87cb0. +--- + cmd/oci-runtime-tool/generate.go | 12 ++++++------ + generate/generate.go | 42 ++++++---------------------------------- + 2 files changed, 12 insertions(+), 42 deletions(-) + +diff --git a/src/import/cmd/oci-runtime-tool/generate.go b/src/import/cmd/oci-runtime-tool/generate.go +index ed11fe8f3729..7121ce5fe07e 100644 +--- a/src/import/cmd/oci-runtime-tool/generate.go ++++ b/src/import/cmd/oci-runtime-tool/generate.go +@@ -354,7 +354,7 @@ func setupSpec(g *generate.Generator, context *cli.Context) error { + for _, postStartEnv := range postStartEnvs { + path, env, err := parseHookEnv(postStartEnv) + if err != nil { +- return err ++ return nil + } + g.AddPostStartHookEnv(path, env) + } +@@ -387,7 +387,7 @@ func setupSpec(g *generate.Generator, context *cli.Context) error { + for _, postStopEnv := range postStopEnvs { + path, env, err := parseHookEnv(postStopEnv) + if err != nil { +- return err ++ return nil + } + g.AddPostStopHookEnv(path, env) + } +@@ -398,7 +398,7 @@ func setupSpec(g *generate.Generator, context *cli.Context) error { + for _, postStopTimeout := range postStopTimeouts { + path, timeout, err := parseHookTimeout(postStopTimeout) + if err != nil { +- return err ++ return nil + } + g.AddPostStopHookTimeout(path, timeout) + } +@@ -409,7 +409,7 @@ func setupSpec(g *generate.Generator, context *cli.Context) error { + for _, hook := range preStartHooks { + path, args, err := parseHook(hook) + if err != nil { +- return err ++ return nil + } + g.AddPreStartHook(path, args) + } +@@ -420,7 +420,7 @@ func setupSpec(g *generate.Generator, context *cli.Context) error { + for _, preStartEnv := range preStartEnvs { + path, env, err := parseHookEnv(preStartEnv) + if err != nil { +- return err ++ return nil + } + g.AddPreStartHookEnv(path, env) + } +@@ -431,7 +431,7 @@ func setupSpec(g *generate.Generator, context *cli.Context) error { + for _, preStartTimeout := range preStartTimeouts { + path, timeout, err := parseHookTimeout(preStartTimeout) + if err != nil { +- return err ++ return nil + } + g.AddPreStartHookTimeout(path, timeout) + } +diff --git a/src/import/generate/generate.go b/src/import/generate/generate.go +index 84762c3cbd05..ef5d2cc95b3c 100644 +--- a/src/import/generate/generate.go ++++ b/src/import/generate/generate.go +@@ -744,39 +744,29 @@ func (g *Generator) ClearPreStartHooks() { + func (g *Generator) AddPreStartHook(path string, args []string) { + g.initSpecHooks() + hook := rspec.Hook{Path: path, Args: args} +- for i, hook := range g.spec.Hooks.Prestart { +- if hook.Path == path { +- g.spec.Hooks.Prestart[i] = hook +- return +- } +- } + g.spec.Hooks.Prestart = append(g.spec.Hooks.Prestart, hook) + } + + // AddPreStartHookEnv adds envs of a prestart hook into g.spec.Hooks.Prestart. + func (g *Generator) AddPreStartHookEnv(path string, envs []string) { +- g.initSpecHooks() ++ g.initSpec() + for i, hook := range g.spec.Hooks.Prestart { + if hook.Path == path { + g.spec.Hooks.Prestart[i].Env = envs + return + } + } +- hook := rspec.Hook{Path: path, Env: envs} +- g.spec.Hooks.Prestart = append(g.spec.Hooks.Prestart, hook) + } + + // AddPreStartHookTimeout adds timeout of a prestart hook into g.spec.Hooks.Prestart. + func (g *Generator) AddPreStartHookTimeout(path string, timeout int) { +- g.initSpecHooks() ++ g.initSpec() + for i, hook := range g.spec.Hooks.Prestart { + if hook.Path == path { + g.spec.Hooks.Prestart[i].Timeout = &timeout + return + } + } +- hook := rspec.Hook{Path: path, Timeout: &timeout} +- g.spec.Hooks.Prestart = append(g.spec.Hooks.Prestart, hook) + } + + // ClearPostStopHooks clear g.spec.Hooks.Poststop. +@@ -794,39 +784,29 @@ func (g *Generator) ClearPostStopHooks() { + func (g *Generator) AddPostStopHook(path string, args []string) { + g.initSpecHooks() + hook := rspec.Hook{Path: path, Args: args} +- for i, hook := range g.spec.Hooks.Poststop { +- if hook.Path == path { +- g.spec.Hooks.Poststop[i] = hook +- return +- } +- } + g.spec.Hooks.Poststop = append(g.spec.Hooks.Poststop, hook) + } + + // AddPostStopHookEnv adds envs of a poststop hook into g.spec.Hooks.Poststop. + func (g *Generator) AddPostStopHookEnv(path string, envs []string) { +- g.initSpecHooks() ++ g.initSpec() + for i, hook := range g.spec.Hooks.Poststop { + if hook.Path == path { + g.spec.Hooks.Poststop[i].Env = envs + return + } + } +- hook := rspec.Hook{Path: path, Env: envs} +- g.spec.Hooks.Poststop = append(g.spec.Hooks.Poststop, hook) + } + + // AddPostStopHookTimeout adds timeout of a poststop hook into g.spec.Hooks.Poststop. + func (g *Generator) AddPostStopHookTimeout(path string, timeout int) { +- g.initSpecHooks() ++ g.initSpec() + for i, hook := range g.spec.Hooks.Poststop { + if hook.Path == path { + g.spec.Hooks.Poststop[i].Timeout = &timeout + return + } + } +- hook := rspec.Hook{Path: path, Timeout: &timeout} +- g.spec.Hooks.Poststop = append(g.spec.Hooks.Poststop, hook) + } + + // ClearPostStartHooks clear g.spec.Hooks.Poststart. +@@ -844,39 +824,29 @@ func (g *Generator) ClearPostStartHooks() { + func (g *Generator) AddPostStartHook(path string, args []string) { + g.initSpecHooks() + hook := rspec.Hook{Path: path, Args: args} +- for i, hook := range g.spec.Hooks.Poststart { +- if hook.Path == path { +- g.spec.Hooks.Poststart[i] = hook +- return +- } +- } + g.spec.Hooks.Poststart = append(g.spec.Hooks.Poststart, hook) + } + + // AddPostStartHookEnv adds envs of a poststart hook into g.spec.Hooks.Poststart. + func (g *Generator) AddPostStartHookEnv(path string, envs []string) { +- g.initSpecHooks() ++ g.initSpec() + for i, hook := range g.spec.Hooks.Poststart { + if hook.Path == path { + g.spec.Hooks.Poststart[i].Env = envs + return + } + } +- hook := rspec.Hook{Path: path, Env: envs} +- g.spec.Hooks.Poststart = append(g.spec.Hooks.Poststart, hook) + } + + // AddPostStartHookTimeout adds timeout of a poststart hook into g.spec.Hooks.Poststart. + func (g *Generator) AddPostStartHookTimeout(path string, timeout int) { +- g.initSpecHooks() ++ g.initSpec() + for i, hook := range g.spec.Hooks.Poststart { + if hook.Path == path { + g.spec.Hooks.Poststart[i].Timeout = &timeout + return + } + } +- hook := rspec.Hook{Path: path, Timeout: &timeout} +- g.spec.Hooks.Poststart = append(g.spec.Hooks.Poststart, hook) + } + + // AddTmpfsMount adds a tmpfs mount into g.spec.Mounts. +-- +2.4.0.53.g8440f74 + diff --git a/external/meta-virtualization/recipes-containers/oci-runtime-tools/oci-runtime-tools_git.bb b/external/meta-virtualization/recipes-containers/oci-runtime-tools/oci-runtime-tools_git.bb new file mode 100644 index 00000000..adbfc1ef --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-runtime-tools/oci-runtime-tools_git.bb @@ -0,0 +1,52 @@ +HOMEPAGE = "https://github.com/opencontainers/runtime-tools" +SUMMARY = "oci-runtime-tool is a collection of tools for working with the OCI runtime specification" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=b355a61a394a504dacde901c958f662c" + +SRC_URI = "git://github.com/opencontainers/runtime-tools.git \ + file://0001-Revert-implement-add-set-function-for-hooks-items.patch \ + " + +SRCREV = "6e7da8148f4de2c9e9c9d3b345576898d4f412cb" +PV = "0.1.0+git${SRCPV}" +GO_IMPORT = "import" + +INSANE_SKIP_${PN} += "ldflags textrel" + +inherit goarch +inherit go + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + export GOPATH="${S}/src/import:${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + mkdir -p ${S}/src/import/vendor/github.com/opencontainers/runtime-tools + ln -sf ../../../../generate ${S}/src/import/vendor/github.com/opencontainers/runtime-tools/generate + ln -sf ../../../../validate ${S}/src/import/vendor/github.com/opencontainers/runtime-tools/validate + ln -sf ../../../../cmd ${S}/src/import/vendor/github.com/opencontainers/runtime-tools/cmd + ln -sf ../../../../error ${S}/src/import/vendor/github.com/opencontainers/runtime-tools/error + ln -sf ../../../../specerror ${S}/src/import/vendor/github.com/opencontainers/runtime-tools/specerror + cd ${S}/src/import + + oe_runmake +} + +do_install() { + install -d ${D}/${sbindir} + install ${S}/src/import/oci-runtime-tool ${D}/${sbindir}/oci-runtime-tool +} + +deltask compile_ptest_base + diff --git a/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-Add-additional-cgroup-mounts-from-root-NS-automatica.patch b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-Add-additional-cgroup-mounts-from-root-NS-automatica.patch new file mode 100644 index 00000000..753a77d1 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-Add-additional-cgroup-mounts-from-root-NS-automatica.patch @@ -0,0 +1,76 @@ +From f59cddcedd6535e0b809ec9b4e95672d34b41a16 Mon Sep 17 00:00:00 2001 +From: Jason Wessel <jason.wessel@windriver.com> +Date: Tue, 14 Nov 2017 07:41:41 -0800 +Subject: [PATCH] Add additional cgroup mounts from root NS automatically + +Signed-off-by: Jason Wessel <jason.wessel@windriver.com> +--- + src/systemdhook.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/src/systemdhook.c b/src/systemdhook.c +index 78575ef..f735484 100644 +--- a/src/systemdhook.c ++++ b/src/systemdhook.c +@@ -238,6 +238,11 @@ static char *get_process_cgroup_subsystem_path(int pid, const char *subsystem) { + static int mount_cgroup(const char *rootfs, const char *options, char *systemd_path) + { + _cleanup_free_ char *cgroup_path = NULL; ++ char *spath, *dpath; ++ DIR *dir; ++ struct dirent *d; ++ char link[80]; ++ int got; + + if (asprintf(&cgroup_path, "%s/%s", rootfs, CGROUP_ROOT) < 0) { + pr_perror("Failed to create path for %s", CGROUP_ROOT); +@@ -256,6 +261,46 @@ static int mount_cgroup(const char *rootfs, const char *options, char *systemd_p + pr_perror("Failed to mkdir new dest: %s", systemd_path); + return -1; + } ++ /* Create all additional cgroup mounts which are in the root namespace */ ++ dir = opendir(CGROUP_ROOT); ++ if (!dir) { ++ pr_perror("Failed to open %s", CGROUP_ROOT); ++ return -1; ++ } ++ /* Skip "." and ".." */ ++ readdir(dir); ++ readdir(dir); ++ while ((d = readdir(dir))) { ++ /* Systemd is already handled above */ ++ if (strcmp(d->d_name, "systemd") == 0) { ++ continue; ++ } ++ if (asprintf(&spath, "%s/%s", CGROUP_ROOT, d->d_name) < 0) { ++ pr_perror("Failed to create path for %s", d->d_name); ++ return -1; ++ } ++ if (asprintf(&dpath, "%s%s/%s", rootfs, CGROUP_ROOT, d->d_name) < 0) { ++ pr_perror("Failed to create path for %s", d->d_name); ++ return -1; ++ } ++ got = readlink(spath, link, sizeof(link) - 1); ++ if (got > 0) { ++ link[got] = '\0'; ++ symlink(link, dpath); ++ } else { ++ if ((makepath(dpath, 0755) == -1) && (errno != EEXIST)) { ++ pr_perror("Failed to mkdir new dest: %s", dpath); ++ return -1; ++ } ++ if (bind_mount(spath, dpath, false)) { ++ pr_perror("Failed to bind mount %s on %s", spath, dpath); ++ return -1; ++ } ++ } ++ free(spath); ++ free(dpath); ++ } ++ closedir(dir); + if (mount(cgroup_path, cgroup_path, "bind", MS_REMOUNT|MS_BIND|MS_RDONLY, "") == -1) { + pr_perror("Failed to remount %s readonly", cgroup_path); + return -1; +-- +2.11.0 + diff --git a/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-configure-drop-selinux-support.patch b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-configure-drop-selinux-support.patch new file mode 100644 index 00000000..510126e4 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-configure-drop-selinux-support.patch @@ -0,0 +1,25 @@ +From 12c263703a0b0ae92566de7e5440fce7b59cd9be Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Tue, 8 Nov 2016 13:16:19 -0500 +Subject: [PATCH] configure: drop selinux support + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + configure.ac | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index c1275acb253d..eaba7fbb57e2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -8,7 +8,6 @@ AC_USE_SYSTEM_EXTENSIONS + AC_SYS_LARGEFILE + + PKG_CHECK_MODULES([YAJL], [yajl >= 2.0.0]) +-PKG_CHECK_MODULES([SELINUX], [libselinux >= 2.0.0]) + PKG_CHECK_MODULES([LIBMOUNT], [mount >= 2.23.0]) + + AC_MSG_CHECKING([whether to disable argument checking]) +-- +2.4.0.53.g8440f74 + diff --git a/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-selinux-drop-selinux-support.patch b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-selinux-drop-selinux-support.patch new file mode 100644 index 00000000..5016f6e7 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook/0001-selinux-drop-selinux-support.patch @@ -0,0 +1,45 @@ +From 9b66394c712ec0d0fcb2052baa7f590621a53461 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Tue, 8 Nov 2016 13:15:46 -0500 +Subject: [PATCH] selinux: drop selinux support + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + src/systemdhook.c | 12 ------------ + 1 file changed, 12 deletions(-) + +--- a/src/systemdhook.c ++++ b/src/systemdhook.c +@@ -16,7 +16,6 @@ + #include <errno.h> + #include <inttypes.h> + #include <linux/limits.h> +-#include <selinux/selinux.h> + #include <yajl/yajl_tree.h> + #include <stdbool.h> + +@@ -129,9 +128,6 @@ static int chperm(const char *path, cons + closedir(dir); + return -1; + } +- if (setfilecon (full_path, label) < 0) { +- pr_perror("Failed to set context %s on %s", label, full_path); +- } + + if (doChown) { + /* Change uid and gid to something the container can handle */ +@@ -496,14 +492,6 @@ static int prestart(const char *rootfs, + return -1; + } + } +- +- if (strcmp("", mount_label)) { +- rc = setfilecon(journal_dir, (security_context_t)mount_label); +- if (rc < 0) { +- pr_perror("Failed to set journal dir selinux context"); +- return -1; +- } +- } + + /* Attempt to creare /var/log/journal inside of rootfs, + if successful, or directory exists, mount tmpfs on top of diff --git a/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook_git.bb b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook_git.bb new file mode 100644 index 00000000..e07b7410 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/oci-systemd-hook/oci-systemd-hook_git.bb @@ -0,0 +1,36 @@ +DESCRIPTION = "OCI systemd hook enables users to run systemd in docker and OCI" +SECTION = "console/utils" +LICENSE = "GPLv3" +LIC_FILES_CHKSUM = "file://LICENSE;md5=d32239bcb673463ab874e80d47fae504" +PRIORITY = "optional" + +DEPENDS = "yajl util-linux" + +SRCREV = "1ac958a4197a9ea52174812fc7d7d036af8140d3" +SRC_URI = "git://github.com/projectatomic/oci-systemd-hook \ + file://0001-selinux-drop-selinux-support.patch \ + file://0001-configure-drop-selinux-support.patch \ + file://0001-Add-additional-cgroup-mounts-from-root-NS-automatica.patch \ +" + +PV = "0.0.1+git${SRCPV}" +S = "${WORKDIR}/git" + +inherit autotools pkgconfig + +PACKAGECONFIG ??= "" +PACKAGECONFIG[selinux] = ",,libselinux" + +EXTRA_OECONF += "--libexecdir=${libexecdir}/oci/hooks.d" + +# nothing to compile, we do it all in the install task +do_compile[noexec] = "1" + +do_install() { + # Avoid building docs, and other artifacts by surgically calling the + # semi-internal target of "install-exec-am" + oe_runmake 'DESTDIR=${D}' install-exec-am +} + +FILES_${PN} += "${libexecdir}/oci/hooks.d/" + diff --git a/external/meta-virtualization/recipes-containers/riddler/riddler_git.bb b/external/meta-virtualization/recipes-containers/riddler/riddler_git.bb new file mode 100644 index 00000000..9f7fe6b4 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/riddler/riddler_git.bb @@ -0,0 +1,50 @@ +HOMEPAGE = "https://github.com/jfrazelle/riddler" +SUMMARY = "Convert `docker inspect` to opencontainers (OCI compatible) runc spec." +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=20ce4c6a4f32d6ee4a68e3a7506db3f1" + +SRC_URI = "git://github.com/jfrazelle/riddler;branch=master" +SRCREV = "23befa0b232877b5b502b828e24161d801bd67f6" +PV = "0.1.0+git${SRCPV}" +GO_IMPORT = "import" + +S = "${WORKDIR}/git" + +inherit goarch +inherit go + +# This disables seccomp and apparmor, which are on by default in the +# go package. +EXTRA_OEMAKE="BUILDTAGS=''" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + # Setup vendor directory so that it can be used in GOPATH. + # + # Go looks in a src directory under any directory in GOPATH but riddler + # uses 'vendor' instead of 'vendor/src'. We can fix this with a symlink. + # + # We also need to link in the ipallocator directory as that is not under + # a src directory. + ln -sfn . "${S}/src/import/vendor/src" + mkdir -p "${S}/src/import/vendor/src/github.com/jessfraz/riddler" + ln -sfn "${S}/src/import/parse" "${S}/src/import/vendor/src/github.com/jessfraz/riddler/parse" + export GOPATH="${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + cd ${S}/src/import + + oe_runmake static +} + +do_install() { + install -d ${D}/${sbindir} + install ${S}/src/import/riddler ${D}/${sbindir}/riddler +} diff --git a/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-build-drop-recvtty-and-use-GOBUILDFLAGS.patch b/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-build-drop-recvtty-and-use-GOBUILDFLAGS.patch new file mode 100644 index 00000000..faeac46f --- /dev/null +++ b/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-build-drop-recvtty-and-use-GOBUILDFLAGS.patch @@ -0,0 +1,22 @@ +From a9a2b9e72027d0b2357f6dfe8b154762aaa8dd02 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Thu, 19 Apr 2018 16:39:41 -0400 +Subject: [PATCH] build: drop recvtty and use GOBUILDFLAGS + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + Makefile | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +Index: git/src/import/Makefile +=================================================================== +--- git.orig/src/import/Makefile ++++ git/src/import/Makefile +@@ -41,7 +41,6 @@ + + static: $(SOURCES) + CGO_ENABLED=1 $(GO) build $(EXTRA_FLAGS) -tags "$(BUILDTAGS) netgo osusergo cgo static_build" -installsuffix netgo -ldflags "-w -extldflags -static -X main.gitCommit=${COMMIT} -X main.version=${VERSION} $(EXTRA_LDFLAGS)" -o runc . +- CGO_ENABLED=1 $(GO) build $(EXTRA_FLAGS) -tags "$(BUILDTAGS) netgo osusergo cgo static_build" -installsuffix netgo -ldflags "-w -extldflags -static -X main.gitCommit=${COMMIT} -X main.version=${VERSION} $(EXTRA_LDFLAGS)" -o contrib/cmd/recvtty/recvtty ./contrib/cmd/recvtty + + release: + script/release.sh -r release/$(VERSION) -v $(VERSION) diff --git a/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch b/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch new file mode 100644 index 00000000..48c1250d --- /dev/null +++ b/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch @@ -0,0 +1,33 @@ +From 3fff2a3505fba1d1ff0074edff15708a77f6cfa9 Mon Sep 17 00:00:00 2001 +From: Jason Wessel <jason.wessel@windriver.com> +Date: Wed, 12 Jul 2017 13:35:03 -0700 +Subject: [PATCH] runc: Add --console-socket=/dev/null + +This allows for setting up a detached session where you do not want to +set the terminal to false in the config.json. More or less this is a +runtime override. + +Signed-off-by: Jason Wessel <jason.wessel@windriver.com> +--- + utils_linux.go | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/utils_linux.go b/utils_linux.go +index 8085f7fe..e6d31b35 100644 +--- a/src/import/utils_linux.go ++++ b/src/import/utils_linux.go +@@ -227,6 +227,11 @@ type runner struct { + } + + func (r *runner) run(config *specs.Process) (int, error) { ++ if (r.consoleSocket == "/dev/null") { ++ r.detach = false ++ r.consoleSocket = "" ++ config.Terminal = false ++ } + if err := r.checkTerminal(config); err != nil { + r.destroy() + return -1, err +-- +2.11.0 + diff --git a/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch b/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch new file mode 100644 index 00000000..9ccbccb2 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch @@ -0,0 +1,129 @@ +From cd7d76a6d1ecb1856f6ed666fb5c30dc105aa94e Mon Sep 17 00:00:00 2001 +From: Jason Wessel <jason.wessel@windriver.com> +Date: Tue, 5 Dec 2017 18:28:28 -0800 +Subject: [PATCH] runc-docker: Allow "run start ..." to daemonize with $SIGUSR1_PARENT_PID + +The runc-docker has all the code in it to properly run a stop hook if +you use it in the foreground. It doesn't work in the back ground +because there is no way for a golang application to fork a child exit +out of the parent process because all the golang threads stay with the +parent. + +This patch has three parts that happen ONLY when $SIGUSR1_PARENT_PID +is set. + +1) The code was copied which performs the normal the signal handling + block which is used for the foreground operation of runc. + +2) At the point where runc start would normally exit, it closes + stdin/stdout/stderr so it would be possible to daemonize "runc start ...". + +3) The code to send a SIGUSR1 to the parent process was added. The + idea being that a parent process would simply exit at that point + because it was blocking until runc performed everything it was + required to perform. + +Signed-off-by: Jason Wessel <jason.wessel@windriver.com> +--- + signals.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- + utils_linux.go | 2 +- + 2 files changed, 51 insertions(+), 5 deletions(-) + +Index: git/src/import/signals.go +=================================================================== +--- git.orig/src/import/signals.go ++++ git/src/import/signals.go +@@ -6,6 +6,7 @@ + "os" + "os/signal" + "syscall" // only for Signal ++ "strconv" + + "github.com/opencontainers/runc/libcontainer" + "github.com/opencontainers/runc/libcontainer/system" +@@ -56,9 +57,6 @@ + func (h *signalHandler) forward(process *libcontainer.Process, tty *tty, detach bool) (int, error) { + // make sure we know the pid of our main process so that we can return + // after it dies. +- if detach && h.notifySocket == nil { +- return 0, nil +- } + + pid1, err := process.Pid() + if err != nil { +@@ -68,12 +66,61 @@ + if h.notifySocket != nil { + if detach { + h.notifySocket.run(pid1) +- return 0, nil + } else { + go h.notifySocket.run(0) + } + } + ++ if (detach) { ++ // This allows the parent process to daemonize this process ++ // so long as stdin/stderr/stdout are closed ++ if envVal := os.Getenv("SIGUSR1_PARENT_PID"); envVal != "" { ++ // Close stdin/stdout/stderr ++ os.Stdin.Close() ++ os.Stdout.Close() ++ os.Stderr.Close() ++ // Notify parent to detach ++ i, err := strconv.Atoi(envVal) ++ if (err != nil) { ++ return 0, nil ++ } ++ unix.Kill(i, unix.SIGUSR1) ++ // Loop waiting on the child to signal or exit, ++ // after which all stop hooks will be run ++ for s := range h.signals { ++ switch s { ++ case unix.SIGCHLD: ++ exits, err := h.reap() ++ if err != nil { ++ logrus.Error(err) ++ } ++ for _, e := range exits { ++ logrus.WithFields(logrus.Fields{ ++ "pid": e.pid, ++ "status": e.status, ++ }).Debug("process exited") ++ if e.pid == pid1 { ++ // call Wait() on the process even though we already have the exit ++ // status because we must ensure that any of the go specific process ++ // fun such as flushing pipes are complete before we return. ++ process.Wait() ++ if h.notifySocket != nil { ++ h.notifySocket.Close() ++ } ++ return e.status, nil ++ } ++ } ++ default: ++ logrus.Debugf("sending signal to process %s", s) ++ if err := unix.Kill(pid1, s.(syscall.Signal)); err != nil { ++ logrus.Error(err) ++ } ++ } ++ } ++ } ++ return 0, nil ++ } ++ + // Perform the initial tty resize. Always ignore errors resizing because + // stdout might have disappeared (due to races with when SIGHUP is sent). + _ = tty.resize() +Index: git/src/import/utils_linux.go +=================================================================== +--- git.orig/src/import/utils_linux.go ++++ git/src/import/utils_linux.go +@@ -338,7 +338,7 @@ + if err != nil { + r.terminate(process) + } +- if detach { ++ if (detach && os.Getenv("SIGUSR1_PARENT_PID") == "") { + return 0, nil + } + r.destroy() diff --git a/external/meta-virtualization/recipes-containers/runc/runc-docker_git.bb b/external/meta-virtualization/recipes-containers/runc/runc-docker_git.bb new file mode 100644 index 00000000..02bda318 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/runc/runc-docker_git.bb @@ -0,0 +1,12 @@ +include runc.inc + +# Note: this rev is before the required protocol field, update when all components +# have been updated to match. +SRCREV_runc-docker = "6a2c15596845f6ff5182e2022f38a65e5dfa88eb" +SRC_URI = "git://github.com/opencontainers/runc;nobranch=1;name=runc-docker \ + file://0001-runc-Add-console-socket-dev-null.patch \ + file://0001-build-drop-recvtty-and-use-GOBUILDFLAGS.patch \ + file://0001-runc-docker-SIGUSR1-daemonize.patch \ + " + +RUNC_VERSION = "1.0.0-rc5" diff --git a/external/meta-virtualization/recipes-containers/runc/runc-opencontainers_git.bb b/external/meta-virtualization/recipes-containers/runc/runc-opencontainers_git.bb new file mode 100644 index 00000000..eaee8efa --- /dev/null +++ b/external/meta-virtualization/recipes-containers/runc/runc-opencontainers_git.bb @@ -0,0 +1,7 @@ +include runc.inc + +SRCREV = "6a2c15596845f6ff5182e2022f38a65e5dfa88eb" +SRC_URI = " \ + git://github.com/opencontainers/runc;branch=master \ + " +RUNC_VERSION = "1.0.0-rc5" diff --git a/external/meta-virtualization/recipes-containers/runc/runc.inc b/external/meta-virtualization/recipes-containers/runc/runc.inc new file mode 100644 index 00000000..6d11a6ef --- /dev/null +++ b/external/meta-virtualization/recipes-containers/runc/runc.inc @@ -0,0 +1,68 @@ +HOMEPAGE = "https://github.com/opencontainers/runc" +SUMMARY = "runc container cli tools" +DESCRIPTION = "runc is a CLI tool for spawning and running containers according to the OCI specification." + +# Apache-2.0 for containerd +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=435b266b3899aa8a959f17d41c56def8" + +S = "${WORKDIR}/git" + +PV = "${RUNC_VERSION}+git${SRCPV}" + +inherit go +inherit goarch +inherit pkgconfig + +PACKAGECONFIG ??= "" +PACKAGECONFIG[seccomp] = "seccomp,,libseccomp" + +RRECOMMENDS_${PN} = "lxc docker" +PROVIDES += "virtual/runc" +RPROVIDES_${PN} = "virtual/runc" + +GO_IMPORT = "import" + +LIBCONTAINER_PACKAGE="github.com/opencontainers/runc/libcontainer" + +do_configure[noexec] = "1" +EXTRA_OEMAKE="BUILDTAGS='${PACKAGECONFIG_CONFARGS}' GO=${GO}" + +do_compile() { + # Set GOPATH. See 'PACKAGERS.md'. Don't rely on + # docker to download its dependencies but rather + # use dependencies packaged independently. + cd ${S}/src/import + rm -rf .gopath + dname=`dirname "${LIBCONTAINER_PACKAGE}"` + bname=`basename "${LIBCONTAINER_PACKAGE}"` + mkdir -p .gopath/src/${dname} + + (cd .gopath/src/${dname}; ln -sf ../../../../../${bname} ${bname}) + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + + # Fix up symlink for go-cross compiler + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export GO=${GO} + + export CFLAGS="" + export LDFLAGS="" + + oe_runmake static +} + +do_install() { + mkdir -p ${D}/${bindir} + + cp ${S}/src/import/runc ${D}/${bindir}/runc + ln -sf runc ${D}/${bindir}/docker-runc +} + +INHIBIT_PACKAGE_STRIP = "1" diff --git a/external/meta-virtualization/recipes-containers/singularity/README b/external/meta-virtualization/recipes-containers/singularity/README new file mode 100644 index 00000000..582480f8 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/singularity/README @@ -0,0 +1,46 @@ +Singularity is a container platform based on the principle of mobility of +compute, and it is designed for use within HPC clusters. For more info see +singularity.lbl.gov. + +To test whether the software functions correctly, you can use `singularity +selftest`. This is what you would expect to see: + +~# singularity selftest + + sh -c test -f /etc/singularity/singularity.conf (retval=0) OK + + test -u /usr/libexec/singularity/bin/action-suid (retval=0) OK + + test -u /usr/libexec/singularity/bin/create-suid (retval=0) OK + + test -u /usr/libexec/singularity/bin/expand-suid (retval=0) OK + + test -u /usr/libexec/singularity/bin/export-suid (retval=0) OK + + test -u /usr/libexec/singularity/bin/import-suid (retval=0) OK + + test -u /usr/libexec/singularity/bin/mount-suid (retval=0) OK + +You can also pull a container from Docker Hub to prove full functionality +(Test was performed on a Raspberry Pi 3, hence the arm32v7 part of the Docker +link. Make sure you pull an image which is compatible with your hardware.) +For instance: + +~# singularity pull docker://arm32v7/debian:latest +Initializing Singularity image subsystem +Opening image file: debian-latest.img +Creating 200MiB image +Binding image to loop +Creating file system within image +Image is done: debian-latest.img +Docker image path: index.docker.io/arm32v7/debian:latest +Cache folder set to /home/root/.singularity/docker +[1/1] |===================================| 100.0% +Importing: base Singularity environment +Importing: /home/root/.singularity/docker/sha256:ed4f1f0d0a0457e7f76ffb25a8d6a193007709dd312b7647cb44fc6979ec4a53.tar.gz +Importing: /home/root/.singularity/metadata/sha256:89997b2c16b29c5a3a316e314172ef21b36f67cc3200b1c4d95927f716dbee83.tar.gz +Done. Container is at: debian-latest.img +~# singularity shell debian-latest.img +Singularity: Invoking an interactive shell within container... + +Singularity debian-latest.img:~> echo "Hello from within the container!" +Hello from within the container! +Singularity debian-latest.img:~> ls / +bin dev home lost+found mnt proc run singularity sys usr +boot etc lib media opt root sbin srv tmp var +Singularity debian-latest.img:~> exit +exit +~# diff --git a/external/meta-virtualization/recipes-containers/singularity/singularity_git.bb b/external/meta-virtualization/recipes-containers/singularity/singularity_git.bb new file mode 100644 index 00000000..6fee8f35 --- /dev/null +++ b/external/meta-virtualization/recipes-containers/singularity/singularity_git.bb @@ -0,0 +1,35 @@ +# Skip QA check for library symbolic links (core issue is a packaging problem within +# Singularity build / config: read up on the dev-so test for more info) +INSANE_SKIP_${PN} += "dev-so" + +RDEPENDS_${PN} += "glibc python3 ca-certificates openssl bash e2fsprogs-mke2fs" +# Singularity expects to find python3 under the name python, therefore both +# cannot be installed at the same time. +RCONFLICTS_${PN} = "python" + +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYRIGHT.md;md5=be78c34e483dd7d8439358b1e024b294 \ + file://LICENSE-LBNL.md;md5=45a007b527e1a9507aa7fa869f8d7ede \ + file://LICENSE.md;md5=df4326b473db6424033f1d98a5645e30 \ + file://debian/copyright;md5=ed267cf386d9b75ab1f27f407e935b10" + +SRC_URI = "git://github.com/singularityware/singularity.git;protocol=https" +PV = "2.3.1+git${SRCPV}" +SRCREV = "e214d4ebf0a1274b1c63b095fd55ae61c7e92947" + +S = "${WORKDIR}/git" + +inherit pythonnative autotools-brokensep +EXTRA_OECONF = "--prefix=/usr/local" + +pkg_postinst_${PN}() { + # Singularity requires "python" to resolve to "python3" within the commandline. + # This creates a symbolic link from python3 to python. A side-effect of this is + # that scripts which expect Python 2 may fail to run correctly. + ln -sr $D${bindir}/python3 $D${bindir}/python + + # python3 expects CA certificates to be installed in a different place to where + # they are actually installed. These lines link the two locations. + rm -r $D${libdir}/ssl-1.1/certs + ln -sr $D${sysconfdir}/ssl/certs $D${libdir}/ssl-1.1 +} diff --git a/external/meta-virtualization/recipes-containers/tini/tini/0001-Do-not-strip-the-output-binary-allow-yocto-to-do-thi.patch b/external/meta-virtualization/recipes-containers/tini/tini/0001-Do-not-strip-the-output-binary-allow-yocto-to-do-thi.patch new file mode 100644 index 00000000..6797720c --- /dev/null +++ b/external/meta-virtualization/recipes-containers/tini/tini/0001-Do-not-strip-the-output-binary-allow-yocto-to-do-thi.patch @@ -0,0 +1,28 @@ +From b99ef9954a34cffd85a5cc09922b201ae11b494d Mon Sep 17 00:00:00 2001 +From: Theodor Gherzan <theodor@resin.io> +Date: Mon, 5 Jun 2017 18:16:56 +0200 +Subject: [PATCH] Do not strip the output binary, allow yocto to do this + +Upstream-Status: Inappropriate [configuration specific] + +Signed-off-by: Theodor Gherzan <theodor@resin.io> +--- + CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b5b93ba..c2907e2 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -54,7 +54,7 @@ if(NOT HAS_BUILTIN_FORTIFY) + endif() + + set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Werror -Wextra -Wall -pedantic-errors -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat") +-set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-s") ++set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Bsymbolic-functions -Wl,-z,relro") + + # Build + +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-containers/tini/tini_0.18.0.bb b/external/meta-virtualization/recipes-containers/tini/tini_0.18.0.bb new file mode 100644 index 00000000..373d886a --- /dev/null +++ b/external/meta-virtualization/recipes-containers/tini/tini_0.18.0.bb @@ -0,0 +1,32 @@ +HOMEPAGE = "http://github.com/krallin/tini" +SUMMARY = "Minimal init for containers" +DESCRIPTION = "Tini is the simplest init you could think of. All Tini does is \ +spawn a single child (Tini is meant to be run in a container), and wait for \ +it to exit all the while reaping zombies and performing signal forwarding. " + +SRCREV = "fec3683b971d9c3ef73f284f176672c44b448662" +SRC_URI = " \ + git://github.com/krallin/tini.git \ + file://0001-Do-not-strip-the-output-binary-allow-yocto-to-do-thi.patch \ + " + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=ffc9091894702bc5dcf4cc0085561ef5" + +S = "${WORKDIR}/git" + +BBCLASSEXTEND = "native" + +# tini links with -static, so no PIE for us +SECURITY_CFLAGS_pn-${PN} = "${SECURITY_NO_PIE_CFLAGS}" + +inherit cmake + +do_install() { + mkdir -p ${D}/${bindir} + install -m 0755 ${B}/tini-static ${D}/${bindir}/docker-init +} + +# Tini is the currently the provider for docker-init +PROVIDES += "docker-init" +RPROVIDES_${PN} = "docker-init" diff --git a/external/meta-virtualization/recipes-core/bind/bind_%.bbappend b/external/meta-virtualization/recipes-core/bind/bind_%.bbappend new file mode 100644 index 00000000..617caccb --- /dev/null +++ b/external/meta-virtualization/recipes-core/bind/bind_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', '${BPN}_virtualization.inc', '', d)} diff --git a/external/meta-virtualization/recipes-core/bind/bind_virtualization.inc b/external/meta-virtualization/recipes-core/bind/bind_virtualization.inc new file mode 100644 index 00000000..b8f0b3ff --- /dev/null +++ b/external/meta-virtualization/recipes-core/bind/bind_virtualization.inc @@ -0,0 +1,4 @@ +# Tell named not to bother listening on the IP address that lxc handles itself. +do_install_append() { + sed -i -e 's,^\( *options *{\)$,\1\n\t// lxc would take care of this address itself\n\tlisten-on { ! 10.0.3.1; any;};\n,' ${D}${sysconfdir}/bind/named.conf.options +} diff --git a/external/meta-virtualization/recipes-core/busybox/busybox/getopt.cfg b/external/meta-virtualization/recipes-core/busybox/busybox/getopt.cfg new file mode 100644 index 00000000..8dcd3504 --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox/getopt.cfg @@ -0,0 +1,2 @@ +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y diff --git a/external/meta-virtualization/recipes-core/busybox/busybox/lspci.cfg b/external/meta-virtualization/recipes-core/busybox/busybox/lspci.cfg new file mode 100644 index 00000000..6458af84 --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox/lspci.cfg @@ -0,0 +1 @@ +CONFIG_LSPCI=y diff --git a/external/meta-virtualization/recipes-core/busybox/busybox/lsusb.cfg b/external/meta-virtualization/recipes-core/busybox/busybox/lsusb.cfg new file mode 100644 index 00000000..2aba6ef6 --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox/lsusb.cfg @@ -0,0 +1 @@ +CONFIG_LSUSB=y diff --git a/external/meta-virtualization/recipes-core/busybox/busybox/mdev.cfg b/external/meta-virtualization/recipes-core/busybox/busybox/mdev.cfg new file mode 100644 index 00000000..f8d6da82 --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox/mdev.cfg @@ -0,0 +1,6 @@ +CONFIG_MDEV=y +CONFIG_FEATURE_MDEV_CONF=y +CONFIG_FEATURE_MDEV_RENAME=y +CONFIG_FEATURE_MDEV_RENAME_REGEXP=y +CONFIG_FEATURE_MDEV_EXEC=y +CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y diff --git a/external/meta-virtualization/recipes-core/busybox/busybox/mount-cifs.cfg b/external/meta-virtualization/recipes-core/busybox/busybox/mount-cifs.cfg new file mode 100644 index 00000000..88f0404f --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox/mount-cifs.cfg @@ -0,0 +1 @@ +CONFIG_FEATURE_MOUNT_CIFS=y diff --git a/external/meta-virtualization/recipes-core/busybox/busybox/ps-extras.cfg b/external/meta-virtualization/recipes-core/busybox/busybox/ps-extras.cfg new file mode 100644 index 00000000..74346355 --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox/ps-extras.cfg @@ -0,0 +1,3 @@ +CONFIG_DESKTOP=y +CONFIG_FEATURE_PS_TIME=y +CONFIG_FEATURE_PS_ADDITIONAL_COLUMNS=y diff --git a/external/meta-virtualization/recipes-core/busybox/busybox_%.bbappend b/external/meta-virtualization/recipes-core/busybox/busybox_%.bbappend new file mode 100644 index 00000000..617caccb --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox_%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', '${BPN}_virtualization.inc', '', d)} diff --git a/external/meta-virtualization/recipes-core/busybox/busybox_virtualization.inc b/external/meta-virtualization/recipes-core/busybox/busybox_virtualization.inc new file mode 100644 index 00000000..d9c4e677 --- /dev/null +++ b/external/meta-virtualization/recipes-core/busybox/busybox_virtualization.inc @@ -0,0 +1,10 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/busybox:" + +SRC_URI += " \ + file://lspci.cfg \ + file://lsusb.cfg \ + file://mdev.cfg \ + file://mount-cifs.cfg \ + file://ps-extras.cfg \ + file://getopt.cfg \ + " diff --git a/external/meta-virtualization/recipes-core/initscripts/initscripts_1.%.bbappend b/external/meta-virtualization/recipes-core/initscripts/initscripts_1.%.bbappend new file mode 100644 index 00000000..0600ab2a --- /dev/null +++ b/external/meta-virtualization/recipes-core/initscripts/initscripts_1.%.bbappend @@ -0,0 +1,16 @@ +do_install_append() { + + echo >> ${D}${sysconfdir}/init.d/functions + echo success \(\) \{ >> ${D}${sysconfdir}/init.d/functions + echo \ \ \ \ echo \$* >> ${D}${sysconfdir}/init.d/functions + echo \} >> ${D}${sysconfdir}/init.d/functions + echo failure \(\) \{ >> ${D}${sysconfdir}/init.d/functions + echo \ \ \ \ echo \$* >> ${D}${sysconfdir}/init.d/functions + echo \} >> ${D}${sysconfdir}/init.d/functions + echo warning \(\) \{ >> ${D}${sysconfdir}/init.d/functions + echo \ \ \ \ echo \$* >> ${D}${sysconfdir}/init.d/functions + echo \} >> ${D}${sysconfdir}/init.d/functions + echo begin \(\) \{ >> ${D}${sysconfdir}/init.d/functions + echo \ \ \ \ echo \$* >> ${D}${sysconfdir}/init.d/functions + echo \} >> ${D}${sysconfdir}/init.d/functions +} diff --git a/external/meta-virtualization/recipes-core/kata-containers/kata-agent_git.bb b/external/meta-virtualization/recipes-core/kata-containers/kata-agent_git.bb new file mode 100644 index 00000000..3632ee52 --- /dev/null +++ b/external/meta-virtualization/recipes-core/kata-containers/kata-agent_git.bb @@ -0,0 +1,39 @@ +DESCRIPTION = "Agent run inside a virtual machine, which spawns containers and processes" +HOMEPAGE = "https://github.com/kata-containers/agent" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/github.com/kata-containers/agent/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +GO_IMPORT = "github.com/kata-containers/agent" +SRCREV = "e03f7d7453fabffb17e1540f28666c26178d3cbf" +SRC_URI = "git://${GO_IMPORT}.git \ + " + +RDEPENDS_${PN}-dev_append = "bash" + +S = "${WORKDIR}/git" + +inherit go + +do_compile() { + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/${GO_IMPORT} + oe_runmake kata-agent +} + +do_install() { + mkdir -p ${D}/${bindir}/ + cp ${WORKDIR}/git/src/${GO_IMPORT}/kata-agent ${D}/${bindir} + + mkdir -p ${D}/${systemd_unitdir}/system + cp ${WORKDIR}/git/src/${GO_IMPORT}/kata-agent.service ${D}/${systemd_unitdir}/system +} + +deltask compile_ptest_base + +FILES_${PN} += "${systemd_unitdir}/*"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-core/kata-containers/kata-proxy_git.bb b/external/meta-virtualization/recipes-core/kata-containers/kata-proxy_git.bb new file mode 100644 index 00000000..8de0bfcf --- /dev/null +++ b/external/meta-virtualization/recipes-core/kata-containers/kata-proxy_git.bb @@ -0,0 +1,34 @@ +DESCRIPTION = " Kata Containers stdio proxy component" +HOMEPAGE = "https://github.com/kata-containers/proxy" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/github.com/kata-containers/proxy/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +GO_IMPORT = "github.com/kata-containers/proxy" +SRCREV = "1148847739f9a9f47b92e34e4f309dc109d4dba9" +SRC_URI = "git://${GO_IMPORT}.git \ + " + +RDEPENDS_${PN}-dev_append = "bash" + +S = "${WORKDIR}/git" + +inherit go + +do_compile() { + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/${GO_IMPORT} + oe_runmake kata-proxy +} + +do_install() { + mkdir -p ${D}/${libexecdir}/kata-containers + cp ${WORKDIR}/git/src/${GO_IMPORT}/kata-proxy ${D}/${libexecdir}/kata-containers +} + +deltask compile_ptest_base diff --git a/external/meta-virtualization/recipes-core/kata-containers/kata-runtime_git.bb b/external/meta-virtualization/recipes-core/kata-containers/kata-runtime_git.bb new file mode 100644 index 00000000..4f250f19 --- /dev/null +++ b/external/meta-virtualization/recipes-core/kata-containers/kata-runtime_git.bb @@ -0,0 +1,59 @@ +DESCRIPTION = " The Command-Line Interface (CLI) part of the Kata Containers runtime component" +HOMEPAGE = "https://github.com/kata-containers/runtime" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/github.com/kata-containers/runtime/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +GO_IMPORT = "github.com/kata-containers/runtime" +SRCREV = "f4cf2137be58c3778d87a8ee8e258e68d1ede888" +SRC_URI = "git://${GO_IMPORT}.git \ + " +RDEPENDS_${PN}-dev_append = "bash" +RDEPENDS_${PN} = " \ + qemu \ + hyperstart \ + " + +# grpc + +S = "${WORKDIR}/git" + +inherit go + +do_compile() { + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/${GO_IMPORT} + oe_runmake runtime +} + +do_install() { + mkdir -p ${D}/${bindir} + cp ${WORKDIR}/git/src/${GO_IMPORT}/kata-runtime ${D}/${bindir} + + mkdir -p ${D}/${datadir}/defaults/kata-containers/ + cp ${WORKDIR}/git/src/${GO_IMPORT}/cli/config/configuration.toml ${D}/${datadir}/defaults/kata-containers/ + + sed -e 's|/usr/bin/qemu-lite-system-x86_64|/usr/bin/qemu-system-x86_64|' -i ${D}/${datadir}/defaults/kata-containers/configuration.toml + sed -e 's|/usr/share/kata-containers/vmlinuz.container|/var/lib/hyper/kernel|' -i ${D}/${datadir}/defaults/kata-containers/configuration.toml + sed -e 's|/usr/share/kata-containers/kata-containers-initrd.img|/var/lib/hyper/hyper-initrd.img|' -i ${D}/${datadir}/defaults/kata-containers/configuration.toml + sed -e 's/^\(image =.*\)/# \1/g' -i ${D}/${datadir}/defaults/kata-containers/configuration.toml + + # TODO: modify the config file for the configured kernel and fix the location of the qemu-system-binary + + # /usr/share/defaults/kata-containers/configuration.toml: file /usr/libexec/kata-containers/kata-shim does not exist + # fork/exec /usr/libexec/kata-containers/kata-proxy: no such file or directory + + #64 mknod /dev/kvm c 10 232 + #68 kata-runtime --log=/dev/stdout run --bundle /opt/container/cube-server foo + + +} + +FILES_${PN} += "${datadir}/defaults/kata-containers/*" + +deltask compile_ptest_base diff --git a/external/meta-virtualization/recipes-core/kata-containers/kata-shim_git.bb b/external/meta-virtualization/recipes-core/kata-containers/kata-shim_git.bb new file mode 100644 index 00000000..fb55a8e7 --- /dev/null +++ b/external/meta-virtualization/recipes-core/kata-containers/kata-shim_git.bb @@ -0,0 +1,34 @@ +DESCRIPTION = " Handle stdio and signals of the container process" +HOMEPAGE = "https://github.com/kata-containers/shim" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/github.com/kata-containers/shim/LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" + +GO_IMPORT = "github.com/kata-containers/shim" +SRCREV = "bcc35aeca3ef6fa0976005c9e93525906aefed2f" +SRC_URI = "git://${GO_IMPORT}.git \ + " + +RDEPENDS_${PN}-dev_append = "bash" + +S = "${WORKDIR}/git" + +inherit go + +do_compile() { + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/${GO_IMPORT} + oe_runmake kata-shim +} + +do_install() { + mkdir -p ${D}/${libexecdir}/kata-containers + cp ${WORKDIR}/git/src/${GO_IMPORT}/kata-shim ${D}/${libexecdir}/kata-containers +} + +deltask compile_ptest_base diff --git a/external/meta-virtualization/recipes-core/runv/runv_git.bb b/external/meta-virtualization/recipes-core/runv/runv_git.bb new file mode 100644 index 00000000..0301dd28 --- /dev/null +++ b/external/meta-virtualization/recipes-core/runv/runv_git.bb @@ -0,0 +1,82 @@ +HOMEPAGE = "https://github.com/hyperhq/runv" +SUMMARY = "Hypervisor-based Runtime for OCI" +DESCRIPTION = "Hypervisor-based Runtime for OCI" + +SRCREV_runv = "b360a686abc6c6e896382990ef1b93ef07c7a677" +SRC_URI = "\ + git://github.com/hyperhq/runv.git;nobranch=1;name=runv \ + " + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=4106a50540bdec3b9734f9c70882d382" + +GO_IMPORT = "import" + +PV = "0.4.0+git${SRCREV_runv}" + +inherit go +inherit goarch +inherit pkgconfig +inherit autotools-brokensep + +PACKAGECONFIG[xen] = "--with-xen,--without-xen," +AUTOTOOLS_SCRIPT_PATH = "${S}/src/import/" + +RDEPENDS_${PN} += " qemu hyperstart" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + export GOPATH="${S}/src/import:${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + mkdir -p ${S}/src/import/vendor/github.com/hyperhq/runv + + echo fff + pwd + ln -sf src/import/cli + ln -sf ../../../../api ${S}/src/import/vendor/github.com/hyperhq/runv/api + ln -sf ../../../../cli ${S}/src/import/vendor/github.com/hyperhq/runv/cli + ln -sf ../../../../lib ${S}/src/import/vendor/github.com/hyperhq/runv/lib + ln -sf ../../../../driverloader ${S}/src/import/vendor/github.com/hyperhq/runv/driverloader + ln -sf ../../../../factory ${S}/src/import/vendor/github.com/hyperhq/runv/factory + ln -sf ../../../../hyperstart ${S}/src/import/vendor/github.com/hyperhq/runv/hyperstart + ln -sf ../../../../hypervisor ${S}/src/import/vendor/github.com/hyperhq/runv/hypervisor + ln -sf ../../../../template ${S}/src/import/vendor/github.com/hyperhq/runv/template + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + oe_runmake build-runv +} + +do_install() { + localbindir="/usr/local/bin" + + install -d ${D}${localbindir} + install -m 755 ${S}/runv ${D}/${localbindir} +} + +deltask compile_ptest_base + +FILES_${PN} += "/usr/local/bin/*" + +INHIBIT_PACKAGE_STRIP = "1" +INSANE_SKIP_${PN} += "ldflags already-stripped" diff --git a/external/meta-virtualization/recipes-core/sysvinit/sysvinit-inittab_2.%.bbappend b/external/meta-virtualization/recipes-core/sysvinit/sysvinit-inittab_2.%.bbappend new file mode 100644 index 00000000..8c088325 --- /dev/null +++ b/external/meta-virtualization/recipes-core/sysvinit/sysvinit-inittab_2.%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('DISTRO_FEATURES', 'xen', 'sysvinit-inittab_xen.inc', '', d)} diff --git a/external/meta-virtualization/recipes-core/sysvinit/sysvinit-inittab_xen.inc b/external/meta-virtualization/recipes-core/sysvinit/sysvinit-inittab_xen.inc new file mode 100644 index 00000000..9d0589ce --- /dev/null +++ b/external/meta-virtualization/recipes-core/sysvinit/sysvinit-inittab_xen.inc @@ -0,0 +1,4 @@ +do_install_append() { + echo "" >> ${D}${sysconfdir}/inittab + echo "X0:12345:respawn:/sbin/getty 115200 hvc0" >> ${D}${sysconfdir}/inittab +} diff --git a/external/meta-virtualization/recipes-devtools/go/compose-file_git.bb b/external/meta-virtualization/recipes-devtools/go/compose-file_git.bb new file mode 100644 index 00000000..bcf8c3d2 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/compose-file_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "Parser for the Compose file format (version 3)" +HOMEPAGE = "https://github.com/aanand/compose-file" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=9cd86830b557232ce55e2a6b47387471" + +SRCNAME = "compose-file" + +PKG_NAME = "github.com/aanand/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "a3e58764f50597b6217fec07e9bff7225c4a1719" +PV = "3.0+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_compose_file_sysroot_preprocess" + +go_compose_file_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" + +CLEANBROKEN = "1"
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-devtools/go/go-capability_git.bb b/external/meta-virtualization/recipes-devtools/go/go-capability_git.bb new file mode 100644 index 00000000..8524af62 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-capability_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "Utilities for manipulating POSIX capabilities in Go." +HOMEPAGE = "https://github.com/syndtr/gocapability" +SECTION = "devel/go" +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=a7304f5073e7be4ba7bffabbf9f2bbca" + +SRCNAME = "gocapability" + +PKG_NAME = "github.com/syndtr/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "2c00daeb6c3b45114c80ac44119e7b8801fdd852" +PV = "0.0+git${SRCPV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_capability_sysroot_preprocess" + +go_capability_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-cli_git.bb b/external/meta-virtualization/recipes-devtools/go/go-cli_git.bb new file mode 100644 index 00000000..21d01ac3 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-cli_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "A small package for building command line apps in Go" +HOMEPAGE = "https://github.com/codegangsta/cli" +SECTION = "devel/go" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=ed9b539ed65d73926f30ff1f1587dc44" + +SRCNAME = "cli" + +PKG_NAME = "github.com/codegangsta/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "27ecc97192df1bf053a22b04463f2b51b8b8373e" +PV = "1.1.0+git${SRCREV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_cli_sysroot_preprocess" + +go_cli_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-connections_git.bb b/external/meta-virtualization/recipes-devtools/go/go-connections_git.bb new file mode 100644 index 00000000..5d071b0a --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-connections_git.bb @@ -0,0 +1,39 @@ +DESCRIPTION = "Utility package to work with network connections" +HOMEPAGE = "https://github.com/docker/connections" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=04424bc6f5a5be60691b9824d65c2ad8" + +SRCNAME = "go-connections" + +PKG_NAME = "github.com/docker/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "4ccf312bf1d35e5dbda654e57a9be4c3f3cd0366" +PV = "0.2.1+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_connections_sysroot_preprocess" + +go_connections_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-context_git.bb b/external/meta-virtualization/recipes-devtools/go/go-context_git.bb new file mode 100644 index 00000000..15f6a8dd --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-context_git.bb @@ -0,0 +1,28 @@ +DESCRIPTION = "A golang registry for global request variables." +HOMEPAGE = "https://github.com/gorilla/context" +SECTION = "devel/go" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=c50f6bd9c1e15ed0bad3bea18e3c1b7f" + +SRCNAME = "context" + +PKG_NAME = "github.com/gorilla/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "14f550f51af52180c2eefed15e5fd18d63c0a64a" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_context_sysroot_preprocess" + +go_context_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-dbus_git.bb b/external/meta-virtualization/recipes-devtools/go/go-dbus_git.bb new file mode 100644 index 00000000..9b206a1e --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-dbus_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "Native Go bindings for D-Bus" +HOMEPAGE = "https://github.com/godbus/dbus" +SECTION = "devel/go" +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=09042bd5c6c96a2b9e45ddf1bc517eed" + +SRCNAME = "dbus" + +PKG_NAME = "github.com/godbus/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "5f6efc7ef2759c81b7ba876593971bfce311eab3" +PV = "4.0.0+git${SRCREV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_dbus_sysroot_preprocess" + +go_dbus_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-distribution_git.bb b/external/meta-virtualization/recipes-devtools/go/go-distribution_git.bb new file mode 100644 index 00000000..9e3f2093 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-distribution_git.bb @@ -0,0 +1,39 @@ +DESCRIPTION = "The Docker toolset to pack, ship, store, and deliver content" +HOMEPAGE = "https://github.com/docker/distribution" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=d2794c0df5b907fdace235a619d80314" + +SRCNAME = "distribution" + +PKG_NAME = "github.com/docker/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;branch=docker/1.13;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "28602af35aceda2f8d571bad7ca37a54cf0250bc" +PV = "2.6.0+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_distribution_digeset_sysroot_preprocess" + +go_distribution_digeset_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-fsnotify_git.bb b/external/meta-virtualization/recipes-devtools/go/go-fsnotify_git.bb new file mode 100644 index 00000000..1d9fbdc7 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-fsnotify_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "A golang registry for global request variables." +HOMEPAGE = "https://github.com/go-fsnotify/fsnotify" +SECTION = "devel/go" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=c38914c9a7ab03bb2b96d4baaee10769" + +SRCNAME = "fsnotify" + +PKG_NAME = "github.com/fsnotify/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "836bfd95fecc0f1511dd66bdbf2b5b61ab8b00b6" +PV = "1.2.11+git${SRCREV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_fsnotify_sysroot_preprocess" + +go_fsnotify_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-libtrust_git.bb b/external/meta-virtualization/recipes-devtools/go/go-libtrust_git.bb new file mode 100644 index 00000000..55659464 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-libtrust_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "Primitives for identity and authorization" +HOMEPAGE = "https://github.com/docker/libtrust" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=435b266b3899aa8a959f17d41c56def8" + +SRCNAME = "libtrust" + +PKG_NAME = "github.com/docker/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "9cbd2a1374f46905c68a4eb3694a130610adc62a" +PV = "0.0+git${SRCPV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_libtrust_sysroot_preprocess" + +go_libtrust_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-logrus_git.bb b/external/meta-virtualization/recipes-devtools/go/go-logrus_git.bb new file mode 100644 index 00000000..5c0c3595 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-logrus_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "A golang registry for global request variables." +HOMEPAGE = "https://github.com/Sirupsen/logrus" +SECTION = "devel/go" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=8dadfef729c08ec4e631c4f6fc5d43a0" + +SRCNAME = "logrus" + +PKG_NAME = "github.com/Sirupsen/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "d26492970760ca5d33129d2d799e34be5c4782eb" +PV = "0.11.0+git${SRCREV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_logrus_sysroot_preprocess" + +go_logrus_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-mux_git.bb b/external/meta-virtualization/recipes-devtools/go/go-mux_git.bb new file mode 100644 index 00000000..7a2025a0 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-mux_git.bb @@ -0,0 +1,28 @@ +DESCRIPTION = "A powerful URL router and dispatcher for golang." +HOMEPAGE = "https://github.com/gorilla/mux" +SECTION = "devel/go" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=c50f6bd9c1e15ed0bad3bea18e3c1b7f" + +SRCNAME = "mux" + +PKG_NAME = "github.com/gorilla/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "136d54f81f00414c45c3c68dd47e98cc97519c5e" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_mux_sysroot_preprocess" + +go_mux_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-patricia_git.bb b/external/meta-virtualization/recipes-devtools/go/go-patricia_git.bb new file mode 100644 index 00000000..8c1e10d9 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-patricia_git.bb @@ -0,0 +1,29 @@ +DESCRIPTION = "A generic patricia trie (also called radix tree) implemented in Go (Golang)" +HOMEPAGE = "https://github.com/gorilla/context" +SECTION = "devel/go" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=9949b99212edd6b1e24ce702376c3baf" + +SRCNAME = "go-patricia" + +PKG_NAME = "github.com/tchap/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "666120de432aea38ab06bd5c818f04f4129882c9" +PV = "2.2.6+git${SRCPV}" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_patricia_sysroot_preprocess" + +go_patricia_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-pty_git.bb b/external/meta-virtualization/recipes-devtools/go/go-pty_git.bb new file mode 100644 index 00000000..bc94b317 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-pty_git.bb @@ -0,0 +1,28 @@ +DESCRIPTION = "PTY interface for Go" +HOMEPAGE = "https://github.com/kr/pty" +SECTION = "devel/go" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://License;md5=93958070863d769117fa33b129020050" + +SRCNAME = "pty" + +PKG_NAME = "github.com/kr/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "05017fcccf23c823bfdea560dcc958a136e54fb7" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_pty_sysroot_preprocess" + +go_pty_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/go-systemd_git.bb b/external/meta-virtualization/recipes-devtools/go/go-systemd_git.bb new file mode 100644 index 00000000..b61c97a6 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/go-systemd_git.bb @@ -0,0 +1,31 @@ +DESCRIPTION = "Go bindings to systemd socket activation, journal, D-Bus, and unit files" +HOMEPAGE = "https://github.com/coreos/go-systemd" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=19cbd64715b51267a47bf3750cc6a8a5" + +SRCNAME = "systemd" + +PKG_NAME = "github.com/coreos/go-${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git" + +SRCREV = "b4a58d95188dd092ae20072bac14cece0e67c388" +PV = "4+git${SRCREV}" + +RDEPENDS_${PN} += "bash" + +S = "${WORKDIR}/git" + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_systemd_sysroot_preprocess" + +go_systemd_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/go/grpc-go_git.bb b/external/meta-virtualization/recipes-devtools/go/grpc-go_git.bb new file mode 100644 index 00000000..48c42499 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/grpc-go_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "The Go language implementation of gRPC. HTTP/2 based RPC" +HOMEPAGE = "https://github.com/grpc/grpc-go" +SECTION = "devel/go" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=a4bad33881612090c6035d8393175996" + +SRCNAME = "grpc-go" + +PKG_NAME = "google.golang.org/grpc" +SRC_URI = "git://github.com/grpc/${SRCNAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "777daa17ff9b5daef1cfdf915088a2ada3332bf0" +PV = "1.4.0+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_grpc_sysroot_preprocess" + +go_grpc_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += " \ + ${prefix}/local/go/src/${PKG_NAME}/* \ +" diff --git a/external/meta-virtualization/recipes-devtools/go/notary_git.bb b/external/meta-virtualization/recipes-devtools/go/notary_git.bb new file mode 100644 index 00000000..d638dc1c --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/go/notary_git.bb @@ -0,0 +1,39 @@ +DESCRIPTION = "Notary is a Docker project that allows anyone to have trust over arbitrary collections of data" +HOMEPAGE = "https://github.com/docker/notary" +SECTION = "devel/go" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/${PKG_NAME}/LICENSE;md5=771ddb425ba03c8fab49e5bd9854a4a2" + +SRCNAME = "notary" + +PKG_NAME = "github.com/docker/${SRCNAME}" +SRC_URI = "git://${PKG_NAME}.git;destsuffix=git/src/${PKG_NAME}" + +SRCREV = "c8aa8cf53cbcda2e92def0c9291e25d770493494" +PV = "0.4.2+git${SRCPV}" + +S = "${WORKDIR}/git" + +# NO-OP the do compile rule because this recipe is source only. +do_compile() { +} + +do_install() { + install -d ${D}${prefix}/local/go/src/${PKG_NAME} + for j in $(cd ${S} && find src/${PKG_NAME} -name "*.go"); do + if [ ! -d ${D}${prefix}/local/go/$(dirname $j) ]; then + mkdir -p ${D}${prefix}/local/go/$(dirname $j) + fi + cp $j ${D}${prefix}/local/go/$j + done + cp -r ${S}/src/${PKG_NAME}/LICENSE ${D}${prefix}/local/go/src/${PKG_NAME}/ +} + +SYSROOT_PREPROCESS_FUNCS += "go_notary_sysroot_preprocess" + +go_notary_sysroot_preprocess () { + install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME} + cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME}) +} + +FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*" diff --git a/external/meta-virtualization/recipes-devtools/python/gunicorn_19.1.1.bb b/external/meta-virtualization/recipes-devtools/python/gunicorn_19.1.1.bb new file mode 100644 index 00000000..5c8ea484 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/gunicorn_19.1.1.bb @@ -0,0 +1,15 @@ +SUMMARY = "WSGI HTTP Server for UNIX" +DESCRIPTION = "\ + Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP Server for UNIX. It’s \ + a pre-fork worker model ported from Ruby’s Unicorn project. The \ + Gunicorn server is broadly compatible with various web frameworks, \ + simply implemented, light on server resource usage, and fairly speedy. \ + " +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=19a2e253a273e390cd1b91d19b6ee236" + +SRC_URI = "https://pypi.python.org/packages/source/g/gunicorn/${BPN}-${PV}.tar.gz" +SRC_URI[md5sum] = "eaa72bff5341c05169b76ce3dcbb8140" +SRC_URI[sha256sum] = "82715511fb6246fad4ba66d812eb93416ae8371b464fa88bf3867c9c177daa14" + +inherit setuptools diff --git a/external/meta-virtualization/recipes-devtools/python/python-backports-lzma/fix_paths.patch b/external/meta-virtualization/recipes-devtools/python/python-backports-lzma/fix_paths.patch new file mode 100644 index 00000000..c2b374f6 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-backports-lzma/fix_paths.patch @@ -0,0 +1,17 @@ +--- + setup.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/setup.py ++++ b/setup.py +@@ -32,8 +32,8 @@ + extens = [Extension('backports/lzma/_lzma', + ['backports/lzma/_lzmamodule.c'], + libraries = ['lzma'], +- include_dirs = [os.path.join(home, 'include'), '/opt/local/include', '/usr/local/include'], +- library_dirs = [os.path.join(home, 'lib'), '/opt/local/lib', '/usr/local/lib'] ++ include_dirs = [], ++ library_dirs = [] + )] + + descr = "Backport of Python 3.3's 'lzma' module for XZ/LZMA compressed files." diff --git a/external/meta-virtualization/recipes-devtools/python/python-backports-lzma_0.0.3.bb b/external/meta-virtualization/recipes-devtools/python/python-backports-lzma_0.0.3.bb new file mode 100644 index 00000000..a3586c04 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-backports-lzma_0.0.3.bb @@ -0,0 +1,32 @@ +HOMEPAGE = "https://github.com/peterjc/backports.lzma" +SUMMARY = "\ + Backport of Python 3.3's 'lzma' module for XZ/LZMA compressed files." +DESCRIPTION = "\ + This is a backport of the 'lzma' module included in Python 3.3 or later \ + by Nadeem Vawda and Per Oyvind Karlsen, which provides a Python wrapper \ + for XZ Utils (aka LZMA Utils v2) by Igor Pavlov. \ + . \ + In order to compile this, you will need to install XZ Utils from \ + http://tukaani.org/xz/ \ + " +SECTION = "devel/python" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://PKG-INFO;md5=db4345b3b9524aabc8fe8c65f235c6b2" + +SRC_URI[md5sum] = "c3d109746aefa86268e500c07d7e8e0f" +SRC_URI[sha256sum] = "bac58aec8d39ac3d22250840fb24830d0e4a0ef05ad8f3f09172dc0cc80cdbca" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools + +DEPENDS += "xz" + +SRCNAME = "backports.lzma" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI = "\ + https://pypi.python.org/packages/source/b/backports.lzma/${SRCNAME}-${PV}.tar.gz \ + file://fix_paths.patch \ + " diff --git a/external/meta-virtualization/recipes-devtools/python/python-blinker_1.3.bb b/external/meta-virtualization/recipes-devtools/python/python-blinker_1.3.bb new file mode 100644 index 00000000..8abb9c07 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-blinker_1.3.bb @@ -0,0 +1,24 @@ +HOMEPAGE = "https://pypi.python.org/pypi/blinker" +SUMMARY = "Fast, simple object-to-object and broadcast signaling" +DESCRIPTION = " \ + Blinker provides a fast dispatching system that allows any number of \ + interested parties to subscribe to events, or “signals”. \ + . \ + Signal receivers can subscribe to specific senders or receive signals \ + sent by any sender. \ + " +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=8baf1d53a00de619f60052e4752a89af" + +SRCNAME = "blinker" +SRC_URI = "https://pypi.python.org/packages/source/b/blinker/${SRCNAME}-${PV}.tar.gz" +SRC_URI[md5sum] = "66e9688f2d287593a0e698cd8a5fbc57" +SRC_URI[sha256sum] = "6811010809262261e41ab7b92f3f6d23f35cf816fbec2bc05077992eebec6e2f" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +DEFAULT_PREFERENCE = "-1" + +inherit setuptools + diff --git a/external/meta-virtualization/recipes-devtools/python/python-boto_2.34.0.bb b/external/meta-virtualization/recipes-devtools/python/python-boto_2.34.0.bb new file mode 100644 index 00000000..f94f3244 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-boto_2.34.0.bb @@ -0,0 +1,25 @@ +HOMEPAGE = "https://github.com/boto/boto" +SUMMARY = "Amazon Web Services API" +DESCRIPTION = "\ + Boto is a Python package that provides interfaces to Amazon Web Services. \ + Currently, all features work with Python 2.6 and 2.7. Work is under way to \ + support Python 3.3+ in the same codebase. Modules are being ported one at \ + a time with the help of the open source community, so please check below \ + for compatibility with Python 3.3+. \ + " +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://setup.py;md5=182ef81236d3fac2c6ed8e8d3c988ec8" + +PR = "r0" +SRCNAME = "boto" + +SRC_URI = "https://pypi.python.org/packages/source/b/boto/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "5556223d2d0cc4d06dd4829e671dcecd" +SRC_URI[sha256sum] = "33baab022ecb803414ad0d6cf4041d010cfc2755ff8acc3bea7b32e77ba98be0" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools + diff --git a/external/meta-virtualization/recipes-devtools/python/python-bugsnag_2.0.2.bb b/external/meta-virtualization/recipes-devtools/python/python-bugsnag_2.0.2.bb new file mode 100644 index 00000000..edf880fb --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-bugsnag_2.0.2.bb @@ -0,0 +1,26 @@ +HOMEPAGE = "https://bugsnag.com/" +SUMMARY = "Automatic error monitoring for django, flask, etc." +DESCRIPTION = "\ + The official Python notifier for `Bugsnag <https://bugsnag.com/>`_. \ + Provides support for automatically capturing and sending exceptions \ + in your Django and other Python apps to Bugsnag, to help you find \ + and solve your bugs as fast as possible. \ + " +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://PKG-INFO;md5=f6df6ab9f1b615a140ebb2a48f61bddc" + +PR = "r0" +SRCNAME = "bugsnag" + +SRC_URI = "https://pypi.python.org/packages/source/b/bugsnag/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "e16360d86979890892cd388635f213e7" +SRC_URI[sha256sum] = "093934b3cd1d36ba2b89cfe1673b14ba59043417fe500a02dbf6de0df43ea962" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools + +DEPENDS += "python-webob python-flask python-blinker" + diff --git a/external/meta-virtualization/recipes-devtools/python/python-docker-registry-core_2.0.3.bb b/external/meta-virtualization/recipes-devtools/python/python-docker-registry-core_2.0.3.bb new file mode 100644 index 00000000..7aa6825e --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-docker-registry-core_2.0.3.bb @@ -0,0 +1,29 @@ +HOMEPAGE = "https://pypi.python.org/pypi/docker-registry-core" +SUMMARY = "Docker registry core package" +DESCRIPTION = "core package for docker-registry (drivers) developers" +SECTION = "devel/python" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" + +SRCNAME = "docker-registry-core" + +SRC_URI = "https://pypi.python.org/packages/source/d/docker-registry-core/${SRCNAME}-${PV}.tar.gz" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +SRC_URI[md5sum] = "610ef9395f2e9a2f91c68d13325fce7b" +SRC_URI[sha256sum] = "347e804f1f35b28dbe27bf8d7a0b630fca29d684032139bf26e3940572360360" + +inherit setuptools + +DEPENDS += "\ + python-distribute \ + python-boto (= 2.34.0) \ + python-redis (= 2.10.3) \ + python-simplejson (= 3.6.2) \ + " + +# boto 2.34.0 +# redis 2.10.3 +# simplejson 3.6.2 +# setuptools 5.8 diff --git a/external/meta-virtualization/recipes-devtools/python/python-docopt.inc b/external/meta-virtualization/recipes-devtools/python/python-docopt.inc new file mode 100644 index 00000000..4f464c13 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-docopt.inc @@ -0,0 +1,9 @@ +SUMMARY = "Pythonic argument parser, that will make you smile" +HOMEPAGE = "http://docopt.org/" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE-MIT;md5=09b77fb74986791a3d4a0e746a37d88f" + +inherit pypi + +SRC_URI[md5sum] = "4bc74561b37fad5d3e7d037f82a4c3b1" +SRC_URI[sha256sum] = "49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491" diff --git a/external/meta-virtualization/recipes-devtools/python/python-flask-cors_1.10.3.bb b/external/meta-virtualization/recipes-devtools/python/python-flask-cors_1.10.3.bb new file mode 100644 index 00000000..c39e9b26 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-flask-cors_1.10.3.bb @@ -0,0 +1,22 @@ +HOMEPAGE = "https://pypi.python.org/pypi/Flask-Cors/1.10.3" +SUMMARY = "A Flask extension adding a decorator for CORS support" +DESCRIPTION = "\ + A Flask extension for handling Cross Origin Resource Sharing (CORS), making cross-origin AJAX possible \ + " +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=4784781a5ee9fed9c50272e733e07685" + +DEPENDS += "python-six python-flask" + +PR = "r0" +SRCNAME = "Flask-Cors" + +SRC_URI = "https://pypi.python.org/packages/source/F/Flask-Cors/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "4f3c75ace0f724d1de167bd73745c965" +SRC_URI[sha256sum] = "9e6927aa0a46f314bca0ec63eb871cee898a162adfdd5b65224db7a008287423" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools diff --git a/external/meta-virtualization/recipes-devtools/python/python-flask_0.10.1.bb b/external/meta-virtualization/recipes-devtools/python/python-flask_0.10.1.bb new file mode 100644 index 00000000..263e53d0 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-flask_0.10.1.bb @@ -0,0 +1,20 @@ +DESCRIPTION = "A microframework based on Werkzeug, Jinja2 and good intentions" +HOMEPAGE = "https://pypi.python.org/pypi/Flask/" +SECTION = "devel/python" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=79aa8b7bc4f781210d6b5c06d6424cb0" + +PR = "r0" +SRCNAME = "Flask" + +SRC_URI = "https://pypi.python.org/packages/source/F/${SRCNAME}/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "378670fe456957eb3c27ddaef60b2b24" +SRC_URI[sha256sum] = "4c83829ff83d408b5e1d4995472265411d2c414112298f2eb4b359d9e4563373" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools + +CLEANBROKEN = "1" + diff --git a/external/meta-virtualization/recipes-devtools/python/python-gevent/gevent-allow-ssl-v2-or-v3-certificates.patch b/external/meta-virtualization/recipes-devtools/python/python-gevent/gevent-allow-ssl-v2-or-v3-certificates.patch new file mode 100644 index 00000000..623d04f0 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-gevent/gevent-allow-ssl-v2-or-v3-certificates.patch @@ -0,0 +1,29 @@ +From c2dc97478fcc3757e09d5d2997391960a8351d53 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Sun, 29 Mar 2015 22:34:28 -0400 +Subject: [PATCH] gevent: allow ssl v2 or v3 certificates + +Work around an issue with python 2.7 not always having SSLv3 available +by allowing v2 or v3 certificates. + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +--- + gevent/ssl.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gevent/ssl.py b/gevent/ssl.py +index ce6434718d1b..93c0d642da5f 100644 +--- a/gevent/ssl.py ++++ b/gevent/ssl.py +@@ -383,7 +383,7 @@ def wrap_socket(sock, keyfile=None, certfile=None, + ciphers=ciphers) + + +-def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None): ++def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None): + """Retrieve the certificate from the server at the specified address, + and return it as a PEM-encoded string. + If 'ca_certs' is specified, validate the server cert against it. +-- +1.9.1 + diff --git a/external/meta-virtualization/recipes-devtools/python/python-gevent/libev-conf.patch b/external/meta-virtualization/recipes-devtools/python/python-gevent/libev-conf.patch new file mode 100644 index 00000000..283705f8 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-gevent/libev-conf.patch @@ -0,0 +1,19 @@ +Due to differences in library locations, the cross compile test can fail because it can't run +the conftest binary (dynamically linked). Building it statically instead. + +Signed-off-by: Amy Fong <amy.fong@windriver.com> +--- + libev/configure | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/libev/configure ++++ b/libev/configure +@@ -2730,7 +2730,7 @@ + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ++ac_link='$CC -static -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. diff --git a/external/meta-virtualization/recipes-devtools/python/python-gevent_1.0.1.bb b/external/meta-virtualization/recipes-devtools/python/python-gevent_1.0.1.bb new file mode 100644 index 00000000..8cd1388a --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-gevent_1.0.1.bb @@ -0,0 +1,30 @@ +HOMEPAGE = "http://www.gevent.org" +SUMMARY = "A coroutine-based Python networking library" +DESCRIPTION = "\ + gevent is a coroutine-based Python networking library that uses greenlet \ + to provide a high-level synchronous API on top of the libevent event \ + loop. \ + " +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=2dbb33d00e1fd31c7041460a81ac0bd2" +DEPENDS += "python-greenlet libevent" +RDEPENDS_${PN} += "python-greenlet python-mime python-pprint python-re" + +SRC_URI[md5sum] = "7b952591d1a0174d6eb6ac47bd975ab6" +SRC_URI[sha256sum] = "4627e215d058f71d95e6b26d9e7be4c263788a4756bd2858a93775f6c072df43" + +inherit setuptools pypi + +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +SRC_URI += "file://libev-conf.patch" +SRC_URI += "file://gevent-allow-ssl-v2-or-v3-certificates.patch" + +# The python-gevent has no autoreconf ability +# and the logic for detecting a cross compile is flawed +# so always force a cross compile +do_configure_append() { + sed -i -e 's/^cross_compiling=no/cross_compiling=yes/' ${S}/libev/configure +} + +DEFAULT_PREFERENCE = "-1" diff --git a/external/meta-virtualization/recipes-devtools/python/python-m2crypto/m2crypto-Fix-build-with-SWIG-3.0.5.patch b/external/meta-virtualization/recipes-devtools/python/python-m2crypto/m2crypto-Fix-build-with-SWIG-3.0.5.patch new file mode 100644 index 00000000..c4085952 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-m2crypto/m2crypto-Fix-build-with-SWIG-3.0.5.patch @@ -0,0 +1,158 @@ +From 8430e7202407fb1a0a104b0decdcc9da9e41a52b Mon Sep 17 00:00:00 2001 +From: Jackie Huang <jackie.huang@windriver.com> +Date: Mon, 4 Apr 2016 23:28:15 -0400 +Subject: [PATCH] Fix build with SWIG 3.0.5 + +See analysis and previous patches in +https://github.com/martinpaljak/M2Crypto/issues/60 and +https://github.com/swig/swig/issues/344, in particular this adds the +build machinery to patch +https://github.com/martinpaljak/M2Crypto/issues/60#issuecomment-75735489 + +Fixes #47 + +Author: Miloslav Trmac <mitr@redhat.com> + +Upstream-Status: Backport + +Signed-off-by: Jackie Huang <jackie.huang@windriver.com> +--- + M2Crypto/__init__.py | 4 ++-- + M2Crypto/m2.py | 2 +- + SWIG/_lib.i | 4 ++++ + SWIG/_pkcs7.i | 1 + + setup.py | 24 ++++++++++++++++++++++++ + 5 files changed, 32 insertions(+), 3 deletions(-) + +diff --git a/M2Crypto/__init__.py b/M2Crypto/__init__.py +index 647e057..280af94 100644 +--- a/M2Crypto/__init__.py ++++ b/M2Crypto/__init__.py +@@ -19,7 +19,7 @@ Copyright 2008-2011 Heikki Toivonen. All rights reserved. + version_info = (0, 22) + version = '.'.join([str(_v) for _v in version_info]) + +-import __m2crypto ++import _m2crypto + import m2 + import ASN1 + import AuthCookie +@@ -47,4 +47,4 @@ import m2xmlrpclib + import threading + import util + +-__m2crypto.lib_init() ++_m2crypto.lib_init() +diff --git a/M2Crypto/m2.py b/M2Crypto/m2.py +index e4bb695..822143f 100644 +--- a/M2Crypto/m2.py ++++ b/M2Crypto/m2.py +@@ -25,7 +25,7 @@ Portions created by Open Source Applications Foundation (OSAF) are + Copyright (C) 2004 OSAF. All Rights Reserved. + """ + +-from __m2crypto import * ++from _m2crypto import * + lib_init() + + +diff --git a/SWIG/_lib.i b/SWIG/_lib.i +index 0d40698..6cc1a44 100644 +--- a/SWIG/_lib.i ++++ b/SWIG/_lib.i +@@ -66,6 +66,7 @@ int ssl_verify_callback(int ok, X509_STORE_CTX *ctx) { + int cret; + int new_style_callback = 0, warning_raised_exception=0; + PyGILState_STATE gilstate; ++ PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */ + + ssl = (SSL *)X509_STORE_CTX_get_app_data(ctx); + +@@ -151,6 +152,7 @@ int ssl_verify_callback(int ok, X509_STORE_CTX *ctx) { + void ssl_info_callback(const SSL *s, int where, int ret) { + PyObject *argv, *retval, *_SSL; + PyGILState_STATE gilstate; ++ PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */ + + gilstate = PyGILState_Ensure(); + +@@ -170,6 +172,7 @@ DH *ssl_set_tmp_dh_callback(SSL *ssl, int is_export, int keylength) { + PyObject *argv, *ret, *_ssl; + DH *dh; + PyGILState_STATE gilstate; ++ PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */ + + gilstate = PyGILState_Ensure(); + +@@ -193,6 +196,7 @@ RSA *ssl_set_tmp_rsa_callback(SSL *ssl, int is_export, int keylength) { + PyObject *argv, *ret, *_ssl; + RSA *rsa; + PyGILState_STATE gilstate; ++ PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */ + + gilstate = PyGILState_Ensure(); + +diff --git a/SWIG/_pkcs7.i b/SWIG/_pkcs7.i +index 22d791a..20dfbaf 100644 +--- a/SWIG/_pkcs7.i ++++ b/SWIG/_pkcs7.i +@@ -157,6 +157,7 @@ PyObject *smime_read_pkcs7(BIO *bio) { + BIO *bcont = NULL; + PKCS7 *p7; + PyObject *tuple, *_p7, *_BIO; ++ PyObject *self = NULL; /* bug in SWIG_NewPointerObj as of 3.0.5 */ + + if (BIO_method_type(bio) == BIO_TYPE_MEM) { + /* OpenSSL FAQ explains that this is needed for mem BIO to return EOF, +diff --git a/setup.py b/setup.py +index bac6f9f..f59dc18 100644 +--- a/setup.py ++++ b/setup.py +@@ -19,6 +19,7 @@ from setuptools.command import build_ext + + from distutils.core import Extension + from distutils.spawn import find_executable ++from distutils.file_util import copy_file + + + class _M2CryptoBuildExt(build_ext.build_ext): +@@ -77,6 +78,15 @@ class _M2CryptoBuildExt(build_ext.build_ext): + [opensslIncludeDir, os.path.join(opensslIncludeDir, "openssl")]] + self.swig_opts.append('-includeall') + self.swig_opts.append('-modern') ++ self.swig_opts.append('-builtin') ++ ++ # These two lines are a workaround for ++ # http://bugs.python.org/issue2624 , hard-coding that we are only ++ # building a single extension with a known path; a proper patch to ++ # distutils would be in the run phase, when extension name and path are ++ # known. ++ self.swig_opts.append('-outdir') ++ self.swig_opts.append(os.path.join(self.build_lib, 'M2Crypto')) + + # Fedora does hat tricks. + if platform.linux_distribution()[0] in ['Fedora', 'CentOS']: +@@ -98,6 +108,20 @@ class _M2CryptoBuildExt(build_ext.build_ext): + + self.library_dirs += [os.path.join(self.openssl, opensslLibraryDir)] + ++ def run(self): ++ '''Overloaded build_ext implementation to allow inplace=1 to work, ++ which is needed for (python setup.py test).''' ++ # This is another workaround for http://bugs.python.org/issue2624 + the ++ # corresponding lack of support in setuptools' test command. Note that ++ # just using self.inplace in finalize_options() above does not work ++ # because swig is not rerun if the __m2crypto.so extension exists. ++ # Again, hard-coding our extension name and location. ++ build_ext.build_ext.run(self) ++ if self.inplace: ++ copy_file(os.path.join(self.build_lib, 'M2Crypto', '_m2crypto.py'), ++ os.path.join('M2Crypto', '_m2crypto.py'), ++ verbose=self.verbose, dry_run=self.dry_run) ++ + if sys.platform == 'darwin': + my_extra_compile_args = ["-Wno-deprecated-declarations"] + else: +-- +1.9.1 + diff --git a/external/meta-virtualization/recipes-devtools/python/python-m2crypto_0.22.3.bb b/external/meta-virtualization/recipes-devtools/python/python-m2crypto_0.22.3.bb new file mode 100644 index 00000000..e151dcc4 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-m2crypto_0.22.3.bb @@ -0,0 +1,63 @@ +HOMEPAGE = "http://chandlerproject.org/bin/view/Projects/MeTooCrypto" +SUMMARY = "A Python crypto and SSL toolkit" +DESCRIPTION = "\ + M2Crypto is the most complete Python wrapper for OpenSSL featuring RSA, \ + DSA, DH, EC, HMACs, message digests, symmetric ciphers (including \ + AES); SSL functionality to implement clients and servers; HTTPS \ + extensions to Python's httplib, urllib, and xmlrpclib; unforgeable \ + HMAC'ing AuthCookies for web session management; FTP/TLS client and \ + server; S/MIME; ZServerSSL: A HTTPS server for Zope and ZSmime: An \ + S/MIME messenger for Zope. M2Crypto can also be used to provide SSL \ + for Twisted. \ + " +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://PKG-INFO;md5=0ccca7097c1d29fa42e75e9c15c6ff2e" + +PYPI_PACKAGE = "M2Crypto" + +SRC_URI += " \ + file://m2crypto-Fix-build-with-SWIG-3.0.5.patch \ +" + +SRC_URI[md5sum] = "573f21aaac7d5c9549798e72ffcefedd" +SRC_URI[sha256sum] = "6071bfc817d94723e9b458a010d565365104f84aa73f7fe11919871f7562ff72" + +DEFAULT_PREFERENCE = "-1" + +inherit setuptools pypi + +DEPENDS += "openssl swig-native" + +DISTUTILS_BUILD_ARGS += "build_ext -I${STAGING_INCDIR}" + +inherit setuptools pypi + +SWIG_FEATURES_x86-64 = "-D__x86_64__" +SWIG_FEATURES ?= "" +export SWIG_FEATURES + +# Get around a problem with swig, but only if the +# multilib header file exists. +# +do_compile_prepend() { + sed -i -e 's/self.add_multiarch_paths.*$/# &/;' ${S}/setup.py + sed -i -e 's/opensslIncludeDir = .*$/opensslIncludeDir = os.getenv("STAGING_INCDIR")/;' ${S}/setup.py + sed -i -e 's/opensslLibraryDir = .*$/opensslLibraryDir = os.getenv("STAGING_LIBDIR")/;' ${S}/setup.py + + if [ "${SITEINFO_BITS}" = "64" ];then + bit="64" + else + bit="32" + fi + + if [ -e ${STAGING_INCDIR}/openssl/opensslconf-${bit}.h ]; then + for i in SWIG/_ec.i SWIG/_evp.i; do + sed -i -e "s/opensslconf.*\./opensslconf-${bit}\./" "$i" + done + elif [ -e ${STAGING_INCDIR}/openssl/opensslconf-n${bit}.h ] ;then + for i in SWIG/_ec.i SWIG/_evp.i; do + sed -i -e "s/opensslconf.*\./opensslconf-n${bit}\./" "$i" + done + fi +} + diff --git a/external/meta-virtualization/recipes-devtools/python/python-newrelic_2.22.0.19.bb b/external/meta-virtualization/recipes-devtools/python/python-newrelic_2.22.0.19.bb new file mode 100644 index 00000000..38918249 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-newrelic_2.22.0.19.bb @@ -0,0 +1,26 @@ +HOMEPAGE = "http://www.newrelic.com" +SUMMARY = "New Relic Python Agent" +DESCRIPTION = "\ + Python agent for the New Relic web application performance monitoring \ + service. Check the release notes for what has changed in this version. \ + " +SECTION = "devel/python" +LICENSE = "BSD-3-Clause & MIT & Python-2.0 & BSD-2-Clause & NewRelic" +LIC_FILES_CHKSUM = "file://newrelic/LICENSE;md5=0f6cc160a8ed6759faa408a30b6ac978" + +PR = "r0" +SRCNAME = "newrelic" + +SRC_URI = "https://pypi.python.org/packages/source/n/newrelic/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "f8c9bf996d040a11847d14682b290eff" +SRC_URI[sha256sum] = "aa8869413c21aff441a77582df1e0fdc0f67342760eb7560d33ed3bbed7edf7b" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools + +FILES_${PN}-dbg += "\ + ${PYTHON_SITEPACKAGES_DIR}/newrelic-${PV}/newrelic/*/.debug \ + ${PYTHON_SITEPACKAGES_DIR}/newrelic-${PV}/newrelic/packages/*/.debug/ \ + " diff --git a/external/meta-virtualization/recipes-devtools/python/python-pyyaml_3.11.bb b/external/meta-virtualization/recipes-devtools/python/python-pyyaml_3.11.bb new file mode 100644 index 00000000..ecb1719a --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-pyyaml_3.11.bb @@ -0,0 +1,32 @@ +HOMEPAGE = "http://www.pyyaml.org" +SUMMARY = "Python support for YAML" +DESCRIPTION = "\ + YAML is a data serialization format designed for human readability \ + and interaction with scripting languages. PyYAML is a YAML parser \ + and emitter for Python. \ + . \ + PyYAML features a complete YAML 1.1 parser, Unicode support, pickle \ + support, capable extension API, and sensible error messages. PyYAML \ + supports standard YAML tags and provides Python-specific tags that \ + allow to represent an arbitrary Python object. \ + . \ + PyYAML is applicable for a broad range of tasks from complex \ + configuration files to object serialization and persistance. \ + " +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=6015f088759b10e0bc2bf64898d4ae17" + +SRCNAME = "PyYAML" +SRC_URI = "http://pyyaml.org/download/pyyaml/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "f50e08ef0fe55178479d3a618efe21db" +SRC_URI[sha256sum] = "c36c938a872e5ff494938b33b14aaa156cb439ec67548fcab3535bb78b0846e8" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +DEFAULT_PREFERENCE = "-1" + +inherit setuptools + +DEPENDS += "libyaml python-cython-native" diff --git a/external/meta-virtualization/recipes-devtools/python/python-redis_2.10.3.bb b/external/meta-virtualization/recipes-devtools/python/python-redis_2.10.3.bb new file mode 100644 index 00000000..2ef2b6b7 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-redis_2.10.3.bb @@ -0,0 +1,22 @@ +HOMEPAGE = "https://pypi.python.org/pypi/redis/" +SUMMARY = "Python client for Redis key-value store" +DESCRIPTION = "The Python interface to the Redis key-value store." +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=51d9ad56299ab60ba7be65a621004f27" + +PR = "r0" +SRCNAME = "redis" + +SRC_URI = "https://pypi.python.org/packages/source/r/redis/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "7619221ad0cbd124a5687458ea3f5289" +SRC_URI[sha256sum] = "a4fb37b02860f6b1617f6469487471fd086dd2d38bbce640c2055862b9c4019c" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +DEFAULT_PREFERENCE = "-1" + +inherit setuptools + +RDEPENDS_${PN} = "redis" diff --git a/external/meta-virtualization/recipes-devtools/python/python-sphinx_1.7.8.bb b/external/meta-virtualization/recipes-devtools/python/python-sphinx_1.7.8.bb new file mode 100644 index 00000000..23fa3fe4 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-sphinx_1.7.8.bb @@ -0,0 +1,12 @@ +DESCRIPTION = "Python documentation generator" +HOMEPAGE = "http://sphinx-doc.org/" +SECTION = "devel/python" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://LICENSE;md5=89cbefcd0a80481e8b26a9a7d25be749" + +PYPI_PACKAGE = "Sphinx" + +SRC_URI[md5sum] = "7dfb075d8bd6a53b652bce1e4394c6a1" +SRC_URI[sha256sum] = "a07050845cc9a2f4026a6035cc8ed795a5ce7be6528bbc82032385c10807dfe7" + +inherit setuptools pypi diff --git a/external/meta-virtualization/recipes-devtools/python/python-sqlalchemy_1.0.16.bb b/external/meta-virtualization/recipes-devtools/python/python-sqlalchemy_1.0.16.bb new file mode 100644 index 00000000..5eb60b5b --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-sqlalchemy_1.0.16.bb @@ -0,0 +1,16 @@ +DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \ +application developers the full power and flexibility of SQL" +HOMEPAGE = "http://www.sqlalchemy.org/" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=d7dba1721bc8ce05d421f7279cb87971" +RDEPENDS_${PN} += "python-numbers" + +SRCNAME = "SQLAlchemy" +SRC_URI = "https://pypi.io/packages/source/S/${SRCNAME}/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "42c81726e7e145c206dac46964b4a167" +SRC_URI[sha256sum] = "e2dfdaa0983931ac1b0522dd637f08a52cf3081746513ac79c50843277ebe463" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit setuptools diff --git a/external/meta-virtualization/recipes-devtools/python/python-sqlalchemy_1.1.5.bb b/external/meta-virtualization/recipes-devtools/python/python-sqlalchemy_1.1.5.bb new file mode 100644 index 00000000..f22d2728 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-sqlalchemy_1.1.5.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "Python SQL toolkit and Object Relational Mapper that gives \ +application developers the full power and flexibility of SQL" +HOMEPAGE = "http://www.sqlalchemy.org/" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=452f4b8adb0feba42e5be5f1fbfbf538" +RDEPENDS_${PN} += "python-numbers" + +SRCNAME = "SQLAlchemy" +SRC_URI = "https://pypi.python.org/packages/da/04/8048a5075d6e29235bbd6f1ea092a38dbe2630c670e73d4aa923a4e5521c/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "50685d97dca4b91945ae6309d03ab8c9" +SRC_URI[sha256sum] = "68fb40049690e567ebda7b270176f5abf0d53d9fbd515fec4e43326f601119b6" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +DEFAULT_PREFERENCE = "-1" + +inherit setuptools diff --git a/external/meta-virtualization/recipes-devtools/python/python-webob_1.8.2.bb b/external/meta-virtualization/recipes-devtools/python/python-webob_1.8.2.bb new file mode 100644 index 00000000..6fdfbd5d --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-webob_1.8.2.bb @@ -0,0 +1,18 @@ +DESCRIPTION = "WSGI request and response object" +HOMEPAGE = "http://webob.org/" +SECTION = "devel/python" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://docs/license.txt;md5=8ed3584bcc78c16da363747ccabc5af5" + +PYPI_PACKAGE = "WebOb" + +SRC_URI[md5sum] = "d04756e6683fedddba52eafbe9adf404" +SRC_URI[sha256sum] = "1fe722f2ab857685fc96edec567dc40b1875b21219b3b348e58cd8c4d5ea7df3" + +inherit setuptools pypi + +RDEPENDS_${PN} += " \ + python-sphinx \ + python-nose \ + " + diff --git a/external/meta-virtualization/recipes-devtools/python/python-websocket-client.inc b/external/meta-virtualization/recipes-devtools/python/python-websocket-client.inc new file mode 100644 index 00000000..31778c68 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-websocket-client.inc @@ -0,0 +1,11 @@ +SUMMARY = "WebSocket client for python. hybi13 is supported." +HOMEPAGE = "https://github.com/websocket-client/websocket-client.git" +LICENSE = "LGPL-3.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=18b09a20dd186af4fd60f1a08311628c" + +inherit pypi + +PYPI_PACKAGE = "websocket_client" + +SRC_URI[md5sum] = "73d87aa16a2212da448b30aca9c5bf3b" +SRC_URI[sha256sum] = "15f585566e2ea7459136a632b9785aa081093064391878a448c382415e948d72" diff --git a/external/meta-virtualization/recipes-devtools/python/python-websocket-client_0.44.0.bb b/external/meta-virtualization/recipes-devtools/python/python-websocket-client_0.44.0.bb new file mode 100644 index 00000000..11eeb04a --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-websocket-client_0.44.0.bb @@ -0,0 +1,2 @@ +require python-websocket-client.inc +inherit setuptools
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-devtools/python/python-werkzeug_0.10.4.bb b/external/meta-virtualization/recipes-devtools/python/python-werkzeug_0.10.4.bb new file mode 100644 index 00000000..5f3e01fd --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python-werkzeug_0.10.4.bb @@ -0,0 +1,33 @@ +DESCRIPTION = "The Swiss Army knife of Python web development" +HOMEPAGE = "https://pypi.python.org/pypi/Werkzeug/" +SECTION = "devel/python" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=a68f5361a2b2ca9fdf26b38aaecb6faa" + +PR = "r0" +SRCNAME = "Werkzeug" + +SRC_URI = "https://pypi.python.org/packages/source/W/${SRCNAME}/${SRCNAME}-${PV}.tar.gz" + +SRC_URI[md5sum] = "66a488e0ac50a9ec326fe020b3083450" +SRC_URI[sha256sum] = "9d2771e4c89be127bc4bac056ab7ceaf0e0064c723d6b6e195739c3af4fd5c1d" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +DEFAULT_PREFERENCE = "-1" + +inherit setuptools + +RDEPENDS_${PN} += "python-io \ + python-datetime \ + python-email \ + python-zlib \ + python-pkgutil \ + python-html \ + python-shell \ + python-pprint \ + python-subprocess \ + python-netserver" + +CLEANBROKEN = "1" + diff --git a/external/meta-virtualization/recipes-devtools/python/python3-cached-property_1.3.0.bb b/external/meta-virtualization/recipes-devtools/python/python3-cached-property_1.3.0.bb new file mode 100644 index 00000000..f01aabd0 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-cached-property_1.3.0.bb @@ -0,0 +1,9 @@ +SUMMARY = "A decorator for caching properties in classes." +HOMEPAGE = "https://github.com/pydanny/cached-property" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=db7ff60c4e14f58534201242803d8abc" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "4a6039f7418007275505e355359396a8" +SRC_URI[sha256sum] = "458e78b1c7286ece887d92c9bee829da85717994c5e3ddd253a40467f488bc81" diff --git a/external/meta-virtualization/recipes-devtools/python/python3-colorama_0.3.9.bb b/external/meta-virtualization/recipes-devtools/python/python3-colorama_0.3.9.bb new file mode 100644 index 00000000..458b0dbd --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-colorama_0.3.9.bb @@ -0,0 +1,9 @@ +SUMMARY = "Cross-platform colored terminal text." +HOMEPAGE = "https://github.com/tartley/colorama" +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=14d0b64047ed8f510b51ce0495995358" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "3a0e415259690f4dd7455c2683ee5850" +SRC_URI[sha256sum] = "48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1" diff --git a/external/meta-virtualization/recipes-devtools/python/python3-docker-pycreds_0.3.0.bb b/external/meta-virtualization/recipes-devtools/python/python3-docker-pycreds_0.3.0.bb new file mode 100644 index 00000000..4d39f529 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-docker-pycreds_0.3.0.bb @@ -0,0 +1,9 @@ +SUMMARY = "Python bindings for the docker credentials store API" +HOMEPAGE = "https://github.com/shin-/dockerpy-creds" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "2370ea3b62198b788a26231ab58844af" +SRC_URI[sha256sum] = "8b0e956c8d206f832b06aa93a710ba2c3bcbacb5a314449c040b0b814355bbff" diff --git a/external/meta-virtualization/recipes-devtools/python/python3-docker_3.4.0.bb b/external/meta-virtualization/recipes-devtools/python/python3-docker_3.4.0.bb new file mode 100644 index 00000000..6e813025 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-docker_3.4.0.bb @@ -0,0 +1,17 @@ +SUMMARY = "A Python library for the Docker Engine API." +HOMEPAGE = "https://github.com/docker/docker-py" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=34f3846f940453127309b920eeb89660" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "02491d168c048cdb99cc20d0b352ea0f" +SRC_URI[sha256sum] = "e9cc39e24905e67ba9e2df14c94488f5cf030fb72ae1c60de505ce5ea90503f7" + +DEPENDS += "${PYTHON_PN}-pip-native" + +RDEPENDS_${PN} += " \ + python3-docker-pycreds \ + python3-requests \ + python3-websocket-client \ +" diff --git a/external/meta-virtualization/recipes-devtools/python/python3-dockerpty_0.4.1.bb b/external/meta-virtualization/recipes-devtools/python/python3-dockerpty_0.4.1.bb new file mode 100644 index 00000000..31a864a5 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-dockerpty_0.4.1.bb @@ -0,0 +1,9 @@ +SUMMARY = "Python library to use the pseudo-tty of a docker container" +HOMEPAGE = "https://github.com/d11wtq/dockerpty" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "028bacb34536f3ee6a2ccd668c27e8e4" +SRC_URI[sha256sum] = "69a9d69d573a0daa31bcd1c0774eeed5c15c295fe719c61aca550ed1393156ce" diff --git a/external/meta-virtualization/recipes-devtools/python/python3-docopt_0.6.2.bb b/external/meta-virtualization/recipes-devtools/python/python3-docopt_0.6.2.bb new file mode 100644 index 00000000..4637448a --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-docopt_0.6.2.bb @@ -0,0 +1,2 @@ +inherit setuptools3 +require python-docopt.inc diff --git a/external/meta-virtualization/recipes-devtools/python/python3-texttable_0.9.1.bb b/external/meta-virtualization/recipes-devtools/python/python3-texttable_0.9.1.bb new file mode 100644 index 00000000..25e402f1 --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-texttable_0.9.1.bb @@ -0,0 +1,9 @@ +SUMMARY = "module for creating simple ASCII tables" +HOMEPAGE = "https://github.com/foutaise/texttable/" +LICENSE = "LGPL-3.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=e6a600fd5e1d9cbde2d983680233ad02" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "a712b5a5464d51c5fc43c64d9d2cd0de" +SRC_URI[sha256sum] = "119041773ff03596b56392532f9315cb3a3116e404fd6f36e76a7dc088d95c79" diff --git a/external/meta-virtualization/recipes-devtools/python/python3-websocket-client_0.44.0.bb b/external/meta-virtualization/recipes-devtools/python/python3-websocket-client_0.44.0.bb new file mode 100644 index 00000000..473e31ff --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python3-websocket-client_0.44.0.bb @@ -0,0 +1,2 @@ +require python-websocket-client.inc +inherit setuptools3
\ No newline at end of file diff --git a/external/meta-virtualization/recipes-devtools/python/python_2.%.bbappend b/external/meta-virtualization/recipes-devtools/python/python_2.%.bbappend new file mode 100644 index 00000000..55301c7e --- /dev/null +++ b/external/meta-virtualization/recipes-devtools/python/python_2.%.bbappend @@ -0,0 +1,8 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +DEPENDS += " ncurses" + +do_compile_prepend() { + export LIBRARY_PATH=${STAGING_DIR_TARGET}/lib +} + diff --git a/external/meta-virtualization/recipes-extended/ceph/ceph/0001-Correct-the-path-to-find-version.h-in-rocksdb.patch b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-Correct-the-path-to-find-version.h-in-rocksdb.patch new file mode 100644 index 00000000..788505b2 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-Correct-the-path-to-find-version.h-in-rocksdb.patch @@ -0,0 +1,40 @@ +From a53605694d5301b7bb543464b17f74bbbd35d372 Mon Sep 17 00:00:00 2001 +From: Dengke Du <dengke.du@windriver.com> +Date: Tue, 28 Aug 2018 10:04:40 +0800 +Subject: [PATCH] Correct the path to find version.h in rocksdb + +Signed-off-by: Dengke Du <dengke.du@windriver.com> +--- + cmake/modules/Findrocksdb.cmake | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/cmake/modules/Findrocksdb.cmake b/cmake/modules/Findrocksdb.cmake +index f8369f7..36b67ea 100644 +--- a/cmake/modules/Findrocksdb.cmake ++++ b/cmake/modules/Findrocksdb.cmake +@@ -9,17 +9,17 @@ + # ROCKSDB_VERSION_MINOR + # ROCKSDB_VERSION_PATCH + +-find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h) ++find_path(ROCKSDB_INCLUDE_DIR rocksdb/db.h ${CMAKE_SYSROOT}) + +-find_library(ROCKSDB_LIBRARIES rocksdb) ++find_library(ROCKSDB_LIBRARIES rocksdb ${CMAKE_SYSROOT}) + + if(ROCKSDB_INCLUDE_DIR AND EXISTS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h") + foreach(ver "MAJOR" "MINOR" "PATCH") +- file(STRINGS "${ROCKSDB_INCLUDE_DIR}/version.h" ROCKSDB_VER_${ver}_LINE ++ file(STRINGS "${ROCKSDB_INCLUDE_DIR}/rocksdb/version.h" ROCKSDB_VER_${ver}_LINE + REGEX "^#define[ \t]+ROCKSDB_${ver}[ \t]+[0-9]+$") + string(REGEX REPLACE "^#define[ \t]+ROCKSDB_${ver}[ \t]+([0-9]+)$" +- "\\1" ROCKSDB_VERSION_${ver} "${ROCKDB_VER_${ver}_LINE}") +- unset(${ROCKDB_VER_${ver}_LINE}) ++ "\\1" ROCKSDB_VERSION_${ver} "${ROCKSDB_VER_${ver}_LINE}") ++ unset(ROCKSDB_VER_${ver}_LINE) + endforeach() + set(ROCKSDB_VERSION_STRING + "${ROCKSDB_VERSION_MAJOR}.${ROCKSDB_VERSION_MINOR}.${ROCKSDB_VERSION_PATCH}") +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/ceph/ceph/0001-ceph-add-pybind-support-in-OE.patch b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-ceph-add-pybind-support-in-OE.patch new file mode 100644 index 00000000..f9c53406 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-ceph-add-pybind-support-in-OE.patch @@ -0,0 +1,129 @@ +From 00d44940c2e83bf73101a05d2aa8f88c2e2fca58 Mon Sep 17 00:00:00 2001 +From: Dengke Du <dengke.du@windriver.com> +Date: Tue, 23 Oct 2018 15:34:53 +0800 +Subject: [PATCH] ceph: add pybind support in OE + +1. add sysroot to CFLAGS when cross compiling pybind +2. change the pybind's INSTALL path to OE's INSTALL path +3. delete the check for header files, because the check method using + host compiler. + +Signed-off-by: Dengke Du <dengke.du@windriver.com> +Upstream-Status: Inappropriate [oe specific] +--- + cmake/modules/Distutils.cmake | 12 +++--------- + src/pybind/cephfs/setup.py | 8 -------- + src/pybind/rados/setup.py | 8 -------- + src/pybind/rbd/setup.py | 8 -------- + src/pybind/rgw/setup.py | 8 -------- + 5 files changed, 3 insertions(+), 41 deletions(-) + +diff --git a/cmake/modules/Distutils.cmake b/cmake/modules/Distutils.cmake +index d6e9f38..3091d97 100644 +--- a/cmake/modules/Distutils.cmake ++++ b/cmake/modules/Distutils.cmake +@@ -47,7 +47,7 @@ function(distutils_add_cython_module name src) + LDFLAGS=-L${CMAKE_LIBRARY_OUTPUT_DIRECTORY} + CYTHON_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR} + CEPH_LIBDIR=${CMAKE_LIBRARY_OUTPUT_DIRECTORY} +- CFLAGS=\"-iquote${CMAKE_SOURCE_DIR}/src/include -w\" ++ CFLAGS=\"-iquote${CMAKE_SOURCE_DIR}/src/include -w --sysroot=${CMAKE_SYSROOT}\" + ${PYTHON${PYTHON_VERSION}_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/setup.py + build --verbose --build-base ${CYTHON_MODULE_DIR} + --build-platlib ${CYTHON_MODULE_DIR}/lib.${PYTHON${PYTHON_VERSION}_VERSION_MAJOR} +@@ -69,14 +69,8 @@ function(distutils_install_cython_module name) + set(ENV{CEPH_LIBDIR} \"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}\") + + set(options --prefix=${CMAKE_INSTALL_PREFIX}) +- if(DEFINED ENV{DESTDIR}) +- if(EXISTS /etc/debian_version) +- list(APPEND options --install-layout=deb) +- endif() +- list(APPEND options --root=\$ENV{DESTDIR}) +- else() +- list(APPEND options --root=/) +- endif() ++ list(APPEND options --root=${CMAKE_DESTDIR}) ++ list(APPEND options --install-lib=${PYTHON_SITEPACKAGES_DIR}) + execute_process( + COMMAND + ${PYTHON${PYTHON_VERSION}_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/setup.py +diff --git a/src/pybind/cephfs/setup.py b/src/pybind/cephfs/setup.py +index 6533f41..1ee4a59 100755 +--- a/src/pybind/cephfs/setup.py ++++ b/src/pybind/cephfs/setup.py +@@ -121,14 +121,6 @@ def check_sanity(): + finally: + shutil.rmtree(tmp_dir) + +- +-if 'BUILD_DOC' in os.environ.keys(): +- pass +-elif check_sanity(): +- pass +-else: +- sys.exit(1) +- + cmdclass = {} + try: + from Cython.Build import cythonize +diff --git a/src/pybind/rados/setup.py b/src/pybind/rados/setup.py +index ef7c307..5204017 100755 +--- a/src/pybind/rados/setup.py ++++ b/src/pybind/rados/setup.py +@@ -117,14 +117,6 @@ def check_sanity(): + finally: + shutil.rmtree(tmp_dir) + +- +-if 'BUILD_DOC' in os.environ.keys(): +- pass +-elif check_sanity(): +- pass +-else: +- sys.exit(1) +- + cmdclass = {} + try: + from Cython.Build import cythonize +diff --git a/src/pybind/rbd/setup.py b/src/pybind/rbd/setup.py +index bcf96f2..d4cbbeb 100755 +--- a/src/pybind/rbd/setup.py ++++ b/src/pybind/rbd/setup.py +@@ -120,14 +120,6 @@ def check_sanity(): + finally: + shutil.rmtree(tmp_dir) + +- +-if 'BUILD_DOC' in os.environ.keys(): +- pass +-elif check_sanity(): +- pass +-else: +- sys.exit(1) +- + cmdclass = {} + try: + from Cython.Build import cythonize +diff --git a/src/pybind/rgw/setup.py b/src/pybind/rgw/setup.py +index f14f30c..ee7570b 100755 +--- a/src/pybind/rgw/setup.py ++++ b/src/pybind/rgw/setup.py +@@ -120,14 +120,6 @@ def check_sanity(): + finally: + shutil.rmtree(tmp_dir) + +- +-if 'BUILD_DOC' in os.environ.keys(): +- pass +-elif check_sanity(): +- pass +-else: +- sys.exit(1) +- + cmdclass = {} + try: + from Cython.Build import cythonize +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/ceph/ceph/0001-ceph-detect-init-correct-the-installation-for-OE.patch b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-ceph-detect-init-correct-the-installation-for-OE.patch new file mode 100644 index 00000000..875501bf --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-ceph-detect-init-correct-the-installation-for-OE.patch @@ -0,0 +1,36 @@ +From 6aaf04036f0affbeddda123bff111990c4d5fd72 Mon Sep 17 00:00:00 2001 +From: Dengke Du <dengke.du@windriver.com> +Date: Fri, 26 Oct 2018 14:31:10 +0800 +Subject: [PATCH] ceph-detect-init: correct the installation for OE + +Signed-off-by: Dengke Du <dengke.du@windriver.com> +Upstream-Status: Inappropriate [oe specific] +--- + cmake/modules/Distutils.cmake | 11 ++--------- + 1 file changed, 2 insertions(+), 9 deletions(-) + +diff --git a/cmake/modules/Distutils.cmake b/cmake/modules/Distutils.cmake +index 3091d97..c50fe77 100644 +--- a/cmake/modules/Distutils.cmake ++++ b/cmake/modules/Distutils.cmake +@@ -16,15 +16,8 @@ function(distutils_install_module name) + cmake_parse_arguments(DU "" INSTALL_SCRIPT "" ${ARGN}) + install(CODE " + set(options --prefix=${CMAKE_INSTALL_PREFIX}) +- if(DEFINED ENV{DESTDIR}) +- if(EXISTS /etc/debian_version) +- list(APPEND options --install-layout=deb) +- endif() +- list(APPEND options --root=\$ENV{DESTDIR}) +- if(NOT \"${DU_INSTALL_SCRIPT}\" STREQUAL \"\") +- list(APPEND options --install-script=${DU_INSTALL_SCRIPT}) +- endif() +- endif() ++ list(APPEND options --root=${CMAKE_DESTDIR}) ++ list(APPEND options --install-lib=${PYTHON_SITEPACKAGES_DIR}) + execute_process( + COMMAND ${PYTHON${PYTHON_VERSION}_EXECUTABLE} + setup.py install \${options} +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/ceph/ceph/0001-zstd-fix-error-for-cross-compile.patch b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-zstd-fix-error-for-cross-compile.patch new file mode 100644 index 00000000..66b5f0a5 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ceph/ceph/0001-zstd-fix-error-for-cross-compile.patch @@ -0,0 +1,26 @@ +From 3e86b6d9db2682b123839e38e9bf45060e2bb2ab Mon Sep 17 00:00:00 2001 +From: Dengke Du <dengke.du@windriver.com> +Date: Wed, 29 Aug 2018 16:57:52 +0800 +Subject: [PATCH] zstd: fix error for cross compile + +Signed-off-by: Dengke Du <dengke.du@windriver.com> +--- + src/compressor/zstd/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/compressor/zstd/CMakeLists.txt b/src/compressor/zstd/CMakeLists.txt +index e30cb89..b298a3d 100644 +--- a/src/compressor/zstd/CMakeLists.txt ++++ b/src/compressor/zstd/CMakeLists.txt +@@ -9,7 +9,7 @@ ExternalProject_Add(zstd_ext + CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} + -DCMAKE_C_FLAGS=${ZSTD_C_FLAGS} +- -DCMAKE_AR=${CMAKE_AR} ++ -DCMAKE_SYSROOT=${CMAKE_SYSROOT} + BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libzstd + BUILD_COMMAND $(MAKE) libzstd_static + INSTALL_COMMAND "true") +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/ceph/ceph/ceph.conf b/external/meta-virtualization/recipes-extended/ceph/ceph/ceph.conf new file mode 100644 index 00000000..fd9de6ce --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ceph/ceph/ceph.conf @@ -0,0 +1,70 @@ +[global] + # Unique ID for the cluster. Run uuidgen to get this string. + fsid = %CLUSTER_UUID% + # Initial monitor + mon initial members = node1 + # IP address of the initial monitor, i.e. 128.224.149.xx + mon host = %PUBLIC_IP% + # Public network where the monitor is connected to, i.e, 128.224.0.0/16 + public network = %PUBLIC_DOMAIN% + # For version 0.55 and beyond, you must explicitly enable + # or disable authentication with "auth" entries in [global]. + auth cluster required = cephx + auth service required = cephx + auth client required = cephx + osd journal size = 1024 + + # Uncomment the following line if you are mounting with ext4 + # filestore xattr use omap = true + + # Number of replicas of objects. Write an object 2 times. + # Cluster cannot reach an active + clean state until there's enough OSDs + # to handle the number of copies of an object. In this case, it requires + # at least 2 OSDs + osd pool default size = 2 + + # Allow writing one copy in a degraded state. + osd pool default min size = 1 + + # Ensure you have a realistic number of placement groups. We recommend + # approximately 100 per OSD. E.g., total number of OSDs multiplied by 100 + # divided by the number of replicas (i.e., osd pool default size). So for + # 10 OSDs and osd pool default size = 2, we'd recommend approximately + # (100 * 10) / 2 = 500. + osd pool default pg num = 500 + osd pool default pgp num = 500 + osd crush chooseleaf type = 1 + +[osd] + osd mkfs type = xfs + osd mkfs options xfs = "-f" + osd mount options xfs = "rw,noatime,inode64,logbufs=8,logbsize=256k" + +# All port numbers below are not hard-coded, but expected by ceph, so please +# do not change the numbers. +[mon.node1] + host = node1 + mon addr = %PUBLIC_IP%:6789 + +[osd.0] + host = node1 + public addr = %PUBLIC_IP%:6800 + cluster addr = %PRIVATE_IP%:6800 + devs = /dev/sda1 + +[osd.1] + host = node1 + public addr = %PUBLIC_IP%:6801 + cluster addr = %PRIVATE_IP%:6801 + devs = /dev/sda2 + +[osd.2] + host = node1 + public addr = %PUBLIC_IP%:6802 + cluster addr = %PRIVATE_IP%:6802 + devs = /dev/sda3 + +[mds.a] + host = node1 + devs = /dev/sda4 + diff --git a/external/meta-virtualization/recipes-extended/ceph/ceph_13.2.2.bb b/external/meta-virtualization/recipes-extended/ceph/ceph_13.2.2.bb new file mode 100644 index 00000000..08021cf7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ceph/ceph_13.2.2.bb @@ -0,0 +1,103 @@ +SUMMARY = "User space components of the Ceph file system" +LICENSE = "LGPLv2.1 & GPLv2 & Apache-2.0 & MIT" +LIC_FILES_CHKSUM = "file://COPYING-LGPL2.1;md5=fbc093901857fcd118f065f900982c24 \ + file://COPYING-GPL2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING;md5=92d301c8fccd296f2221a68a8dd53828 \ +" +inherit cmake pythonnative python-dir systemd +# Disable python pybind support for ceph temporary, when corss compiling pybind, +# pybind mix cmake and python setup environment, would case a lot of errors. + +SRC_URI = "http://download.ceph.com/tarballs/ceph-${PV}.tar.gz \ + file://0001-Correct-the-path-to-find-version.h-in-rocksdb.patch \ + file://0001-zstd-fix-error-for-cross-compile.patch \ + file://0001-ceph-add-pybind-support-in-OE.patch \ + file://0001-ceph-detect-init-correct-the-installation-for-OE.patch \ + file://ceph.conf \ +" +SRC_URI[md5sum] = "ce118be451dcb6b89e9e0a45057827dd" +SRC_URI[sha256sum] = "f3a61db4c90e00c38a2dac7239b956ec367ef56f601e07335ed3011f931d8840" + +DEPENDS = "boost bzip2 curl expat gperf-native \ + keyutils libaio libibverbs lz4 \ + nspr nss \ + oath openldap openssl \ + python python-cython-native rocksdb snappy udev \ + valgrind xfsprogs zlib \ +" +SYSTEMD_SERVICE_${PN} = " \ + ceph-radosgw@.service \ + ceph-radosgw.target \ + ceph-mon@.service \ + ceph-mon.target \ + ceph-mds@.service \ + ceph-mds.target \ + ceph-disk@.service \ + ceph-osd@.service \ + ceph-osd.target \ + ceph.target \ + ceph-fuse@.service \ + ceph-fuse.target \ + ceph-rbd-mirror@.service \ + ceph-rbd-mirror.target \ + ceph-volume@.service \ + ceph-mgr@.service \ + ceph-mgr.target \ + rbdmap.service \ +" +OECMAKE_GENERATOR = "Unix Makefiles" + +EXTRA_OECMAKE = "-DWITH_MANPAGE=OFF \ + -DWITH_FUSE=OFF \ + -DWITH_SPDK=OFF \ + -DWITH_LEVELDB=OFF \ + -DWITH_LTTNG=OFF \ + -DWITH_BABELTRACE=OFF \ + -DWITH_TESTS=OFF \ + -DWITH_MGR=OFF \ + -DWITH_MGR_DASHBOARD_FRONTEND=OFF \ + -DWITH_SYSTEM_BOOST=ON \ + -DWITH_SYSTEM_ROCKSDB=ON \ +" + +do_configure_prepend () { + echo "set( CMAKE_SYSROOT \"${RECIPE_SYSROOT}\" )" >> ${WORKDIR}/toolchain.cmake + echo "set( CMAKE_DESTDIR \"${D}\" )" >> ${WORKDIR}/toolchain.cmake + echo "set( PYTHON_SITEPACKAGES_DIR \"${PYTHON_SITEPACKAGES_DIR}\" )" >> ${WORKDIR}/toolchain.cmake +} + +do_install_append () { + sed -i -e 's:${WORKDIR}.*python2:${bindir}/python:' ${D}${bindir}/ceph + sed -i -e 's:${WORKDIR}.*python2:${bindir}/python:' ${D}${bindir}/ceph-disk + sed -i -e 's:${WORKDIR}.*python2:${bindir}/python:' ${D}${bindir}/ceph-detect-init + find ${D} -name SOURCES.txt | xargs sed -i -e 's:${WORKDIR}::' + install -d ${D}${sysconfdir}/ceph + install -m 644 ${WORKDIR}/ceph.conf ${D}${sysconfdir}/ceph/ + install -d ${D}${systemd_unitdir} + mv ${D}${libexecdir}/systemd/system ${D}${systemd_unitdir} + mv ${D}${libexecdir}/ceph/ceph-osd-prestart.sh ${D}${libdir}/ceph + mv ${D}${libexecdir}/ceph/ceph_common.sh ${D}${libdir}/ceph +} + +FILES_${PN} += "\ + ${libdir}/rados-classes/*.so.* \ + ${libdir}/ceph/compressor/*.so \ + ${libdir}/rados-classes/*.so \ + ${libdir}/ceph/*.so \ +" +FILES_${PN}-python = "\ + ${PYTHON_SITEPACKAGES_DIR}/* \ +" +RDEPENDS_${PN} += "\ + python \ + python-misc \ + python-modules \ + python-prettytable \ + ${PN}-python \ +" +COMPATIBLE_HOST = "(x86_64).*" +PACKAGES += " \ + ${PN}-python \ +" +INSANE_SKIP_${PN}-python += "ldflags" +INSANE_SKIP_${PN} += "dev-so" diff --git a/external/meta-virtualization/recipes-extended/dev86/dev86_0.16.20.bb b/external/meta-virtualization/recipes-extended/dev86/dev86_0.16.20.bb new file mode 100644 index 00000000..38dbf8d4 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/dev86/dev86_0.16.20.bb @@ -0,0 +1,38 @@ +DESCRIPTION = "This is a cross development C compiler, assembler and linker environment for the production of 8086 executables (Optionally MSDOS COM)" +HOMEPAGE = "http://www.debath.co.uk/dev86/" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b" +SECTION = "console/tools" +PR="r0" + +SRC_URI="http://v3.sk/~lkundrak/dev86/archive/Dev86src-${PV}.tar.gz" + +SRC_URI[md5sum] = "567cf460d132f9d8775dd95f9208e49a" +SRC_URI[sha256sum] = "61817a378c8c8ba65f36c6792d457a305dc4eedae8cdc8b6233bf2bb28e5fe8d" + +S = "${WORKDIR}/dev86-${PV}" + +BBCLASSEXTEND = "native" +EXTRA_OEMAKE = "VERSION=${PV} PREFIX=${prefix} DIST=${D}" + +do_compile() { + + oe_runmake make.fil + oe_runmake -f make.fil bcc86 as86 ld86 + +} + +do_install() { + + if [ "${prefix}"=="" ] ; then + export prefix=/usr + fi + + oe_runmake install-bcc + ln -s ../lib/bcc/bcc-cpp ${D}${prefix}/bin/bcc-cpp + ln -s ../lib/bcc/bcc-cc1 ${D}${prefix}/bin/bcc-cc1 + +} +COMPATIBLE_HOST = "(i.86|x86_64).*-linux" +FILES_${PN} += "${libdir}/bcc" +INSANE_SKIP_${PN} = "already-stripped" diff --git a/external/meta-virtualization/recipes-extended/diod/diod_1.0.24.bb b/external/meta-virtualization/recipes-extended/diod/diod_1.0.24.bb new file mode 100644 index 00000000..bb5707e5 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/diod/diod_1.0.24.bb @@ -0,0 +1,33 @@ +SUMMARY = "Diod is a user space server for the kernel v9fs client." +DESCRIPTION = "\ +Diod is a user space server for the kernel v9fs client (9p.ko, 9pnet.ko). \ +Although the kernel client supports several 9P variants, diod only supports \ +9P2000.L, and only in its feature-complete form, as it appeared in 2.6.38." +SECTION = "console/network" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=59530bdf33659b29e73d4adb9f9f6552" + +PV = "1.0.24+git${SRCPV}" +SRCREV = "0ea3fe3d829b5085307cd27a512708d99ef48199" +SRC_URI = "git://github.com/chaos/diod.git;protocol=git \ + file://diod \ + file://diod.conf \ + file://0001-build-allow-builds-to-work-with-separate-build-dir.patch \ + file://0002-auto.diod.in-remove-bashisms.patch \ + file://0001-diod-ops.c-add-header-file-for-makedev.patch \ + " +DEPENDS = "libcap ncurses tcp-wrappers lua" + +S = "${WORKDIR}/git" + +inherit autotools systemd + +do_install_append () { + # install our init based on start-stop-daemon + install -D -m 0755 ${WORKDIR}/diod ${D}${sysconfdir}/init.d/diod + # install a real(not commented) configuration file for diod + install -m 0644 ${WORKDIR}/diod.conf ${D}${sysconfdir}/diod.conf +} + +FILES_${PN} += "${systemd_unitdir}" diff --git a/external/meta-virtualization/recipes-extended/diod/files/0001-build-allow-builds-to-work-with-separate-build-dir.patch b/external/meta-virtualization/recipes-extended/diod/files/0001-build-allow-builds-to-work-with-separate-build-dir.patch new file mode 100644 index 00000000..f40e0eb5 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/diod/files/0001-build-allow-builds-to-work-with-separate-build-dir.patch @@ -0,0 +1,126 @@ +From 43403468298ef4167baa5d84de2ee2eaf7f4007a Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Fri, 9 Jan 2015 18:34:04 +0000 +Subject: [PATCH 1/2] build: allow builds to work with separate build dir + +Remove assumptions in include paths that assume the build +is happening in the source directories. + +Upstream-Status: Inappropriate [embedded specific] + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + diod/Makefile.am | 2 +- + libdiod/Makefile.am | 2 +- + liblsd/Makefile.am | 2 +- + libnpclient/Makefile.am | 2 +- + scripts/Makefile.am | 6 +++--- + tests/kern/dbench/Makefile.am | 4 ++-- + utils/Makefile.am | 2 +- + 7 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/diod/Makefile.am b/diod/Makefile.am +index 7644be7..fdaf130 100644 +--- a/diod/Makefile.am ++++ b/diod/Makefile.am +@@ -1,7 +1,7 @@ + AM_CFLAGS = @GCCWARN@ + + AM_CPPFLAGS = \ +- -I../libnpfs -I../liblsd -I../libdiod ++ -I$(srcdir)/../libnpfs -I$(srcdir)/../liblsd -I$(srcdir)/../libdiod + + sbin_PROGRAMS = diod + +diff --git a/libdiod/Makefile.am b/libdiod/Makefile.am +index 4810e14..6905cdd 100644 +--- a/libdiod/Makefile.am ++++ b/libdiod/Makefile.am +@@ -1,7 +1,7 @@ + AM_CFLAGS = @GCCWARN@ + + AM_CPPFLAGS = \ +- -I../libnpfs -I../libnpclient -I../liblsd ++ -I$(srcdir)/../libnpfs -I$(srcdir)/../libnpclient -I$(srcdir)/../liblsd + + noinst_LIBRARIES = libdiod.a + +diff --git a/liblsd/Makefile.am b/liblsd/Makefile.am +index c3e5658..7e18bf8 100644 +--- a/liblsd/Makefile.am ++++ b/liblsd/Makefile.am +@@ -1,6 +1,6 @@ + AM_CFLAGS = @GCCWARN@ + +-AM_CPPFLAGS = -I../libdiod ++AM_CPPFLAGS = -I$(srcdir)/../libdiod + + noinst_LIBRARIES = liblsd.a + +diff --git a/libnpclient/Makefile.am b/libnpclient/Makefile.am +index 5305df9..cbaf266 100644 +--- a/libnpclient/Makefile.am ++++ b/libnpclient/Makefile.am +@@ -1,7 +1,7 @@ + AM_CFLAGS = @GCCWARN@ + + AM_CPPFLAGS = \ +- -I../libnpfs ++ -I$(srcdir)/../libnpfs + + noinst_LIBRARIES = libnpclient.a + +diff --git a/scripts/Makefile.am b/scripts/Makefile.am +index 51c24a3..2aba728 100644 +--- a/scripts/Makefile.am ++++ b/scripts/Makefile.am +@@ -1,9 +1,9 @@ +-systemddir=$(sysconfdir)/systemd/system ++systemddir=/lib/systemd/system + + install-data-local: +- $(top_srcdir)/config/install-sh -m 755 $(srcdir)/auto.diod \ ++ $(top_srcdir)/config/install-sh -m 755 ./auto.diod \ + $(DESTDIR)$(sysconfdir)/auto.diod +- $(top_srcdir)/config/install-sh -m 755 $(srcdir)/diod.service \ ++ $(top_srcdir)/config/install-sh -m 644 ./diod.service \ + $(DESTDIR)$(systemddir)/diod.service + + uninstall-local: +diff --git a/tests/kern/dbench/Makefile.am b/tests/kern/dbench/Makefile.am +index e0cdefa..1704f9f 100644 +--- a/tests/kern/dbench/Makefile.am ++++ b/tests/kern/dbench/Makefile.am +@@ -2,7 +2,7 @@ AM_CFLAGS = -w + + # VERSION=4.00 + +-AM_CPPFLAGS = -DDATADIR=\"$(X_DATADIR)\" ++AM_CPPFLAGS = -I. -DDATADIR=\"$(X_DATADIR)\" + + LDADD = $(LIBPOPT) + +@@ -25,6 +25,6 @@ BUILT_SOURCES = proto.h + CLEANFILES = proto.h + + proto.h: $(dbench_SOURCES) mkproto.pl +- perl mkproto.pl $(dbench_SOURCES) > proto.h ++ $(srcdir)/mkproto.pl $(patsubst %,$(srcdir),$(dbench_SOURCES)) > proto.h + + EXTRA_DIST = mkproto.pl +diff --git a/utils/Makefile.am b/utils/Makefile.am +index 169b6c4..91d571d 100644 +--- a/utils/Makefile.am ++++ b/utils/Makefile.am +@@ -1,7 +1,7 @@ + AM_CFLAGS = @GCCWARN@ + + AM_CPPFLAGS = \ +- -I../libnpfs -I../liblsd -I../libdiod -I../libnpclient ++ -I$(srcdir)/../libnpfs -I$(srcdir)/../liblsd -I$(srcdir)/../libdiod -I$(srcdir)/../libnpclient + + sbin_PROGRAMS = diodmount diodcat dtop diodload diodls diodshowmount dioddate + +-- +2.11.0 + diff --git a/external/meta-virtualization/recipes-extended/diod/files/0001-diod-ops.c-add-header-file-for-makedev.patch b/external/meta-virtualization/recipes-extended/diod/files/0001-diod-ops.c-add-header-file-for-makedev.patch new file mode 100644 index 00000000..e6f7ece2 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/diod/files/0001-diod-ops.c-add-header-file-for-makedev.patch @@ -0,0 +1,40 @@ +From f75836731d6051d85e6317eb4c12465bafb4973e Mon Sep 17 00:00:00 2001 +From: "Hongzhi.Song" <hongzhi.song@windriver.com> +Date: Fri, 31 Aug 2018 05:47:02 -0400 +Subject: [PATCH] diod/ops.c: add header file for makedev + +Error: +diod/ops.c:845: undefined reference to `makedev' + +Fixed: +Glibc removes sys/sysmacros.h which defines makedev from sys/types.h +since v2.28. [Commit ID: e16deca62e16f] + +And then glibc suggestions us to include <sys/sysmacros.h> directly if +code needs it. + +Upstream-Status: Submitted +[diod: +mail: v9fs-developer@lists.sourceforge.net +author: hongzhi.song@windriver.com] + +Signed-off-by: Hongzhi.Song <hongzhi.song@windriver.com> +--- + diod/ops.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/diod/ops.c b/diod/ops.c +index c6c8291..469a502 100644 +--- a/diod/ops.c ++++ b/diod/ops.c +@@ -74,6 +74,7 @@ + #include <pthread.h> + #include <errno.h> + #include <sys/types.h> ++#include <sys/sysmacros.h> + + #ifdef __FreeBSD__ + #if !__BSD_VISIBLE +-- +2.8.1 + diff --git a/external/meta-virtualization/recipes-extended/diod/files/0002-auto.diod.in-remove-bashisms.patch b/external/meta-virtualization/recipes-extended/diod/files/0002-auto.diod.in-remove-bashisms.patch new file mode 100644 index 00000000..65d6ff6b --- /dev/null +++ b/external/meta-virtualization/recipes-extended/diod/files/0002-auto.diod.in-remove-bashisms.patch @@ -0,0 +1,47 @@ +From 5a9e09dc5de833db11607530351cd87cecbfd17e Mon Sep 17 00:00:00 2001 +From: Roy Li <rongqing.li@windriver.com> +Date: Thu, 22 Jun 2017 06:32:30 +0000 +Subject: [PATCH 2/2] auto.diod.in: remove bashisms + +Upstream-Status: Pending + +Signed-off-by: Roy Li <rongqing.li@windriver.com> +--- + scripts/auto.diod.in | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/scripts/auto.diod.in b/scripts/auto.diod.in +index f63e004..4d5fc3a 100755 +--- a/scripts/auto.diod.in ++++ b/scripts/auto.diod.in +@@ -1,4 +1,4 @@ +-#!/bin/bash ++#!/bin/sh + # + # auto.diod - executable automounter map for diod file systems + # +@@ -41,15 +41,15 @@ dcatopts="${DIOD_TIMEOUT:+-t $DIOD_TIMEOUT}" + for server in $DIOD_SERVERS; do + $DIOD_DIODCAT -s $server $dcatopts exports | awk '{print $1}' |\ + while read path; do +- if [ "$path" == "/" ]; then +- if [ "$key" == "ROOT" ]; then ++ if [ "$path" = "/" ]; then ++ if [ "$key" = "ROOT" ]; then + echo "$prefix $server:$path" + exit 0 + fi +- elif [ "$key" == "$(echo $path|sed -e's/^\///' -e's/\//./g')" ] \ +- || [ "$key" == "$(echo $path|sed -e's/^\///' -e's/\//_/g')" ] \ +- || [ "$key" == "$(echo $path|sed -e's/^\///' -e's/\//-/g')" ] \ +- || [ "$key" == "$(basename $path)" ]; then ++ elif [ "$key" = "$(echo $path|sed -e's/^\///' -e's/\//./g')" ] \ ++ || [ "$key" = "$(echo $path|sed -e's/^\///' -e's/\//_/g')" ] \ ++ || [ "$key" = "$(echo $path|sed -e's/^\///' -e's/\//-/g')" ] \ ++ || [ "$key" = "$(basename $path)" ]; then + echo "$prefix $server:$path" + exit 0 + fi +-- +2.11.0 + diff --git a/external/meta-virtualization/recipes-extended/diod/files/diod b/external/meta-virtualization/recipes-extended/diod/files/diod new file mode 100644 index 00000000..cd0bf987 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/diod/files/diod @@ -0,0 +1,75 @@ +#!/bin/sh +# +# chkconfig: 35 20 80 +# description: Distributed Input Output Daemon +# + +# Get function from functions library +. /etc/init.d/functions + +BASE=diod +PIDFILE=/var/run/$BASE.pid +PID=`test -f $PIDFILE && cat $PIDFILE` +DIOD_BIN=/usr/sbin/$BASE +DIOD_CONF=/etc/$BASE.conf +DIOD_OPTS="-c $DIOD_CONF" +DIOD="$DIOD_BIN $DIOD_OPTS" +RETVAL=0 + +# Start the service $BASE +start() +{ + # Force creation of the log directory even on a tmpfs /var/log. + mkdir -p /var/log/diod + + start-stop-daemon --stop --test --quiet --pidfile $PIDFILE + status=$? + if [ $status -eq 0 ]; then + echo "diod service is already running with pid $PID" + exit 1 + else + echo -n "Starting $BASE:" + start-stop-daemon --start --pidfile $PIDFILE \ + --exec $DIOD_BIN -- $DIOD_OPTS + RETVAL=$? + echo + [ $RETVAL -ne 0 ] && exit $RETVAL + fi +} + +# Stop the service $BASE +stop() +{ + echo -n "Stopping $BASE:" + start-stop-daemon --stop --test --quiet --pidfile $PIDFILE + status=$? + if [ $status -eq 0 ]; then + start-stop-daemon --stop --quiet --pidfile $PIDFILE + [ -w $PIDFILE ] && rm -f $PIDFILE + else + start-stop-daemon --stop --quiet --name $BASE + fi +} + + +### service arguments ### +case $1 in + start) + start + ;; + stop) + stop + ;; + status) + status $BASE + ;; + restart | force-reload) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|status|restart}." + exit 1 +esac + +exit 0 diff --git a/external/meta-virtualization/recipes-extended/diod/files/diod.conf b/external/meta-virtualization/recipes-extended/diod/files/diod.conf new file mode 100644 index 00000000..e97743a0 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/diod/files/diod.conf @@ -0,0 +1,15 @@ +-- +-- /etc/diod.conf - config file for diod distributed I/O daemon +-- +-- NOTE: This config file is a lua script that diod runs, then extracts +-- the value of certain globally defined variables. See diod.conf(5). + +listen = { "0.0.0.0:564" } +nwthreads = 16 +auth_required = 1 +logdest = "syslog:daemon:err" + +exports = { "/g/g0", "/g/g10" } + +allsquash = 0 +squashuser = "nobody" diff --git a/external/meta-virtualization/recipes-extended/hyperstart/hyperstart/0001-container.c-Fix-compiler-errors-that-gcc-8.1.0-repor.patch b/external/meta-virtualization/recipes-extended/hyperstart/hyperstart/0001-container.c-Fix-compiler-errors-that-gcc-8.1.0-repor.patch new file mode 100644 index 00000000..4a01de5b --- /dev/null +++ b/external/meta-virtualization/recipes-extended/hyperstart/hyperstart/0001-container.c-Fix-compiler-errors-that-gcc-8.1.0-repor.patch @@ -0,0 +1,230 @@ +From 11f5089300c1c368d896c95890827dc85a67f132 Mon Sep 17 00:00:00 2001 +From: Jason Wessel <jason.wessel@windriver.com> +Date: Fri, 15 Jun 2018 08:04:35 -0700 +Subject: [PATCH] container.c: Fix compiler errors that gcc 8.1.0 reports + +gcc 8.1.0 reports the following compiler errors/warnings. They can be +fixed by using snprintf and checking the result for truncation. This +patch also uses a named constant instead of inserting the value 512 in +many locations. + +container.c: In function 'hyper_setup_container_rootfs': +container.c:630:24: error: '/' directive writing 1 byte into a region of size between 0 and 511 [-Werror=format-overflow=] + sprintf(rootfs, "%s/%s/", root, container->rootfs); + ^ +container.c:630:2: note: 'sprintf' output 3 or more bytes (assuming 514) into a destination of size 512 + sprintf(rootfs, "%s/%s/", root, container->rootfs); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +container.c:262:18: error: '%s' directive writing up to 511 bytes into a region of size 510 [-Werror=format-overflow=] + sprintf(dst, "./%s", src); + ^~ ~~~ +container.c:262:2: note: 'sprintf' output between 3 and 514 bytes into a destination of size 512 + sprintf(dst, "./%s", src); + ^~~~~~~~~~~~~~~~~~~~~~~~~ +container.c:218:24: error: '/_data' directive writing 6 bytes into a region of size between 1 and 512 [-Werror=format-overflow=] + sprintf(volume, "%s/_data", path); + ^~~~~~ +container.c:218:5: note: 'sprintf' output between 7 and 518 bytes into a destination of size 512 + sprintf(volume, "%s/_data", path); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +container.c:149:24: error: '/_data' directive writing 6 bytes into a region of size between 0 and 511 [-Werror=format-overflow=] + sprintf(volume, "/%s/_data", path); + ^~~~~~ +container.c:149:4: note: 'sprintf' output between 8 and 519 bytes into a destination of size 512 + sprintf(volume, "/%s/_data", path); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +container.c:131:24: error: '/' directive writing 1 byte into a region of size between 0 and 511 [-Werror=format-overflow=] + sprintf(volume, "/%s/", path); + ^ +container.c:131:4: note: 'sprintf' output between 3 and 514 bytes into a destination of size 512 + sprintf(volume, "/%s/", path); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +container.c:176:24: error: '/_data/' directive writing 7 bytes into a region of size between 0 and 511 [-Werror=format-overflow=] + sprintf(volume, "/%s/_data/%s", path, filevolume); + ^~~~~~~ +container.c:176:4: note: 'sprintf' output 9 or more bytes (assuming 520) into a destination of size 512 + sprintf(volume, "/%s/_data/%s", path, filevolume); + ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Signed-off-by: Jason Wessel <jason.wessel@windriver.com> +--- + src/container.c | 47 ++++++++++++++++++++++++++++------------------- + 1 file changed, 28 insertions(+), 19 deletions(-) + +diff --git a/src/container.c b/src/container.c +index 0938d82..b1c52d4 100644 +--- a/src/container.c ++++ b/src/container.c +@@ -22,6 +22,8 @@ + #include "syscall.h" + #include "netlink.h" + ++#define MAX_PBUF 512 ++ + static int container_populate_volume(char *src, char *dest) + { + struct stat st; +@@ -99,12 +101,12 @@ static int container_setup_volume(struct hyper_pod *pod, + struct hyper_container *container) + { + int i; +- char dev[512], path[512]; ++ char dev[MAX_PBUF], path[MAX_PBUF]; + struct volume *vol; + + for (i = 0; i < container->vols_num; i++) { +- char volume[512]; +- char mountpoint[512]; ++ char volume[MAX_PBUF]; ++ char mountpoint[MAX_PBUF]; + char *options = NULL; + const char *filevolume = NULL; + vol = &container->vols[i]; +@@ -128,7 +130,8 @@ static int container_setup_volume(struct hyper_pod *pod, + if (hyper_mount_nfs(vol->device, path) < 0) + return -1; + /* nfs export has implicitly included _data part of the volume */ +- sprintf(volume, "/%s/", path); ++ if (snprintf(volume, MAX_PBUF, "/%s/", path) >= MAX_PBUF) ++ return -1; + } else { + fprintf(stdout, "mount %s to %s, tmp path %s\n", + dev, vol->mountpoint, path); +@@ -137,7 +140,7 @@ static int container_setup_volume(struct hyper_pod *pod, + options = "nouuid"; + + if (access(dev, R_OK) < 0) { +- char device[512]; ++ char device[MAX_PBUF]; + sprintf(device, "/block/%s", vol->device); + hyper_netlink_wait_dev(pod->ueventfd, device); + } +@@ -146,7 +149,8 @@ static int container_setup_volume(struct hyper_pod *pod, + perror("mount volume device failed"); + return -1; + } +- sprintf(volume, "/%s/_data", path); ++ if (snprintf(volume, MAX_PBUF, "/%s/_data", path) >= MAX_PBUF) ++ return -1; + } + + if (container_check_file_volume(volume, &filevolume) < 0) +@@ -173,7 +177,8 @@ static int container_setup_volume(struct hyper_pod *pod, + perror("create volume file failed"); + return -1; + } +- sprintf(volume, "/%s/_data/%s", path, filevolume); ++ if (snprintf(volume, MAX_PBUF, "/%s/_data/%s", path, filevolume) >= MAX_PBUF) ++ return -1; + /* 0777 so that any user can read/write the new file volume */ + if (chmod(volume, 0777) < 0) { + fprintf(stderr, "fail to chmod directory %s\n", volume); +@@ -197,9 +202,9 @@ static int container_setup_volume(struct hyper_pod *pod, + + for (i = 0; i < container->maps_num; i++) { + struct stat st; +- char *src, path[512], volume[512]; ++ char *src, path[MAX_PBUF], volume[MAX_PBUF]; + struct fsmap *map = &container->maps[i]; +- char mountpoint[512]; ++ char mountpoint[MAX_PBUF]; + + sprintf(path, "%s/%s", SHARED_DIR, map->source); + sprintf(mountpoint, "./%s", map->path); +@@ -215,7 +220,8 @@ static int container_setup_volume(struct hyper_pod *pod, + } + if (map->docker) { + /* converted from volume */ +- sprintf(volume, "%s/_data", path); ++ if (snprintf(volume, MAX_PBUF, "%s/_data", path) >= MAX_PBUF) ++ return -1; + src = volume; + if (container->initialize && + (container_populate_volume(mountpoint, volume) < 0)) { +@@ -251,7 +257,7 @@ static int container_setup_modules(struct hyper_container *container) + { + struct stat st; + struct utsname uts; +- char src[512], dst[512]; ++ char src[MAX_PBUF], dst[MAX_PBUF]; + + if (uname(&uts) < 0) { + perror("fail to call uname"); +@@ -259,7 +265,8 @@ static int container_setup_modules(struct hyper_container *container) + } + + sprintf(src, "/lib/modules/%s", uts.release); +- sprintf(dst, "./%s", src); ++ if (snprintf(dst, MAX_PBUF, "./%s", src) >= MAX_PBUF) ++ return -1; + + if (stat(dst, &st) == 0) { + struct dirent **list; +@@ -291,7 +298,7 @@ static int container_setup_modules(struct hyper_container *container) + + static int container_setup_mount(struct hyper_container *container) + { +- char src[512]; ++ char src[MAX_PBUF]; + + // current dir is container rootfs, the operations on "./PATH" are the operations on container's "/PATH" + if (!container->readonly) { +@@ -546,7 +553,7 @@ static int hyper_setup_container_rootfs(void *data) + { + struct hyper_container_arg *arg = data; + struct hyper_container *container = arg->c; +- char root[512], rootfs[512]; ++ char root[MAX_PBUF], rootfs[MAX_PBUF]; + int setup_dns; + + /* wait for ns-opened ready message */ +@@ -609,7 +616,7 @@ static int hyper_setup_container_rootfs(void *data) + goto fail; + } + } else { +- char path[512]; ++ char path[MAX_PBUF]; + + sprintf(path, "%s/%s/", SHARED_DIR, container->image); + fprintf(stdout, "src directory %s\n", path); +@@ -627,7 +634,9 @@ static int hyper_setup_container_rootfs(void *data) + fprintf(stdout, "root directory for container is %s/%s, init task %s\n", + root, container->rootfs, container->exec.argv[0]); + +- sprintf(rootfs, "%s/%s/", root, container->rootfs); ++ if (snprintf(rootfs, MAX_PBUF, "%s/%s/", root, container->rootfs) >= MAX_PBUF) ++ goto fail; ++ + if (mount(rootfs, rootfs, NULL, MS_BIND|MS_REC, NULL) < 0) { + perror("failed to bind rootfs"); + goto fail; +@@ -710,7 +719,7 @@ fail: + + static int hyper_setup_pty(struct hyper_container *c) + { +- char root[512]; ++ char root[MAX_PBUF]; + + sprintf(root, "/tmp/hyper/%s/devpts/", c->id); + +@@ -730,7 +739,7 @@ static int hyper_setup_pty(struct hyper_container *c) + + static void hyper_cleanup_pty(struct hyper_container *c) + { +- char path[512]; ++ char path[MAX_PBUF]; + + sprintf(path, "/tmp/hyper/%s/devpts/", c->id); + if (umount(path) < 0) +@@ -739,7 +748,7 @@ static void hyper_cleanup_pty(struct hyper_container *c) + + int container_prepare_rootfs_dev(struct hyper_container *container, struct hyper_pod *pod) + { +- char dev[512]; ++ char dev[MAX_PBUF]; + + if (container->fstype == NULL) + return 0; +-- +2.17.1 + diff --git a/external/meta-virtualization/recipes-extended/hyperstart/hyperstart_git.bb b/external/meta-virtualization/recipes-extended/hyperstart/hyperstart_git.bb new file mode 100644 index 00000000..3c64f24e --- /dev/null +++ b/external/meta-virtualization/recipes-extended/hyperstart/hyperstart_git.bb @@ -0,0 +1,26 @@ +SUMMARY = "The tiny Init service for HyperContainer" +DESCRIPTION = "The init Task for HyperContainer" + +LICENSE = "Apache-2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=fa818a259cbed7ce8bc2a22d35a464fc" + +inherit autotools-brokensep + +SRC_URI = "git://github.com/hyperhq/hyperstart.git" +SRC_URI += "file://0001-container.c-Fix-compiler-errors-that-gcc-8.1.0-repor.patch" + +SRCREV = "15bb718ad34045aa1962a8204f602c6afe9a76ab" +PV = "v0.2+git${SRCREV}" + +S = "${WORKDIR}/git" + +CACHED_CONFIGUREVARS = "ac_cv_file__usr_include_linux_vm_sockets_h=true" + +do_install() { + install -d ${D}/var/lib/hyper/ + + install -m644 ${S}/build/hyper-initrd.img ${D}/var/lib/hyper/ + install -m644 ${S}/build/arch/x86_64/kernel ${D}/var/lib/hyper/ +} + +FILES_${PN} += "/var/lib/hyper" diff --git a/external/meta-virtualization/recipes-extended/images/cloud-image-compute.bb b/external/meta-virtualization/recipes-extended/images/cloud-image-compute.bb new file mode 100644 index 00000000..197624f9 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/images/cloud-image-compute.bb @@ -0,0 +1,14 @@ +IMAGE_FEATURES += "ssh-server-openssh" +EXTRA_IMAGE_FEATURES = "tools-debug debug-tweaks" + +IMAGE_INSTALL = "\ + ${CORE_IMAGE_BASE_INSTALL} \ + packagegroup-core-basic \ + openvswitch \ + libvirt \ + openflow \ + " + +inherit core-image + +IMAGE_FSTYPES = "tar.gz" diff --git a/external/meta-virtualization/recipes-extended/images/cloud-image-controller.bb b/external/meta-virtualization/recipes-extended/images/cloud-image-controller.bb new file mode 100644 index 00000000..c816545f --- /dev/null +++ b/external/meta-virtualization/recipes-extended/images/cloud-image-controller.bb @@ -0,0 +1,32 @@ +IMAGE_FEATURES += "ssh-server-openssh package-management" +EXTRA_IMAGE_FEATURES = "tools-debug debug-tweaks" + +IMAGE_INSTALL = "\ + ${CORE_IMAGE_BASE_INSTALL} \ + packagegroup-core-basic \ + openvswitch \ + openvswitch-controller \ + openvswitch-switch \ + openvswitch-brcompat \ + criu \ + libvirt \ + libvirt-libvirtd \ + libvirt-python \ + libvirt-virsh \ + openflow \ + qemu \ + kernel-modules \ + dhcp-client \ + perl-modules \ + grub \ + mysql5 \ + python-twisted \ + python-lxml \ + " + +inherit core-image + +IMAGE_FSTYPES = "wic.vmdk tar.gz" + +# Ensure extra space for guest images +#IMAGE_ROOTFS_EXTRA_SPACE = "41943040" diff --git a/external/meta-virtualization/recipes-extended/images/cloud-image-guest.bb b/external/meta-virtualization/recipes-extended/images/cloud-image-guest.bb new file mode 100644 index 00000000..2957506d --- /dev/null +++ b/external/meta-virtualization/recipes-extended/images/cloud-image-guest.bb @@ -0,0 +1,16 @@ +IMAGE_FEATURES += "ssh-server-openssh package-management" +EXTRA_IMAGE_FEATURES = "tools-debug debug-tweaks" + +IMAGE_INSTALL = "\ + ${CORE_IMAGE_BASE_INSTALL} \ + packagegroup-core-basic \ + openflow \ + qemu \ + kernel-modules \ + tcpdump \ + dhcp-client \ + " + +inherit core-image + +IMAGE_FSTYPES += "wic.vmdk" diff --git a/external/meta-virtualization/recipes-extended/images/kvm-image-minimal.bb b/external/meta-virtualization/recipes-extended/images/kvm-image-minimal.bb new file mode 100644 index 00000000..b28cc309 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/images/kvm-image-minimal.bb @@ -0,0 +1,22 @@ +DESCRIPTION = "A minimal kvm image" + +IMAGE_INSTALL = " \ + packagegroup-core-boot \ + qemu \ + libvirt \ + libvirt-libvirtd \ + libvirt-virsh \ + kernel-module-kvm \ + kernel-module-kvm-intel \ + kernel-module-kvm-amd \ + " + +IMAGE_FEATURES += "ssh-server-openssh" + +IMAGE_LINGUAS = " " + +LICENSE = "MIT" + +inherit core-image + +IMAGE_ROOTFS_SIZE = "8192" diff --git a/external/meta-virtualization/recipes-extended/images/xen-guest-image-minimal.bb b/external/meta-virtualization/recipes-extended/images/xen-guest-image-minimal.bb new file mode 100644 index 00000000..d311eaef --- /dev/null +++ b/external/meta-virtualization/recipes-extended/images/xen-guest-image-minimal.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "A Xen guest image." + +inherit core-image distro_features_check + +IMAGE_INSTALL += " \ + packagegroup-core-boot \ + ${@bb.utils.contains('MACHINE_FEATURES', 'acpi', 'kernel-module-xen-acpi-processor', '', d)} \ + " + +IMAGE_INSTALL += "${@bb.utils.contains('IMAGE_FEATURES', 'x11', ' xf86-video-fbdev', '', d)}" + +# Install xf86-video-vesa on x86 platforms. +IMAGE_INSTALL_append_x86-64 = "${@bb.utils.contains('IMAGE_FEATURES', 'x11', ' xf86-video-vesa', '', d)}" +IMAGE_INSTALL_append_x86 = "${@bb.utils.contains('IMAGE_FEATURES', 'x11', ' xf86-video-vesa', '', d)}" + +REQUIRED_DISTRO_FEATURES += "${@bb.utils.contains('IMAGE_FEATURES', 'x11', ' x11', '', d)} xen" + +LICENSE = "MIT" + +# Send console messages to xen console +APPEND += "console=hvc0" diff --git a/external/meta-virtualization/recipes-extended/images/xen-image-minimal.bb b/external/meta-virtualization/recipes-extended/images/xen-image-minimal.bb new file mode 100644 index 00000000..c39d3782 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/images/xen-image-minimal.bb @@ -0,0 +1,66 @@ +DESCRIPTION = "A minimal xen image" + +INITRD_IMAGE = "core-image-minimal-initramfs" + +IMAGE_INSTALL += " \ + packagegroup-core-boot \ + packagegroup-core-ssh-openssh \ + ${@bb.utils.contains('MACHINE_FEATURES', 'acpi', 'kernel-module-xen-acpi-processor', '', d)} \ + kernel-module-xen-blkback \ + kernel-module-xen-gntalloc \ + kernel-module-xen-gntdev \ + kernel-module-xen-netback \ + ${@bb.utils.contains('MACHINE_FEATURES', 'pci', "${XEN_PCIBACK_MODULE}", '', d)} \ + kernel-module-xen-wdt \ + xen-base \ + qemu \ + " + +# Linux kernel option CONFIG_XEN_PCIDEV_BACKEND depends on X86 +XEN_PCIBACK_MODULE = "" +XEN_PCIBACK_MODULE_x86 = "kernel-module-xen-pciback" +XEN_PCIBACK_MODULE_x86-64 = "kernel-module-xen-pciback" + +LICENSE = "MIT" + +inherit core-image + +do_check_xen_state() { + if [ "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ' yes', 'no', d)}" = "no" ]; then + die "DISTRO_FEATURES does not contain 'xen'" + fi +} + +addtask check_xen_state before do_rootfs + +syslinux_iso_populate_append() { + install -m 0444 ${STAGING_DATADIR}/syslinux/libcom32.c32 ${ISODIR}${ISOLINUXDIR} + install -m 0444 ${STAGING_DATADIR}/syslinux/mboot.c32 ${ISODIR}${ISOLINUXDIR} +} + +syslinux_hddimg_populate_append() { + install -m 0444 ${STAGING_DATADIR}/syslinux/libcom32.c32 ${HDDDIR}${SYSLINUXDIR} + 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 +} + +syslinux_populate_append() { + install -m 0644 ${DEPLOY_DIR_IMAGE}/xen-${MACHINE}.gz ${DEST}/xen.gz +} + +SYSLINUX_XEN_ARGS ?= "loglvl=all guest_loglvl=all console=com1,vga com1=115200,8n1" +SYSLINUX_KERNEL_ARGS ?= "ramdisk_size=32768 root=/dev/ram0 rw console=hvc0 earlyprintk=xen console=tty0 panic=10 LABEL=boot debugshell=5" + +build_syslinux_cfg () { + echo "ALLOWOPTIONS 1" > ${SYSLINUX_CFG} + echo "DEFAULT boot" >> ${SYSLINUX_CFG} + echo "TIMEOUT 10" >> ${SYSLINUX_CFG} + echo "PROMPT 1" >> ${SYSLINUX_CFG} + echo "LABEL boot" >> ${SYSLINUX_CFG} + echo " KERNEL mboot.c32" >> ${SYSLINUX_CFG} + echo " APPEND /xen.gz ${SYSLINUX_XEN_ARGS} --- /vmlinuz ${SYSLINUX_KERNEL_ARGS} --- /initrd" >> ${SYSLINUX_CFG} +} + diff --git a/external/meta-virtualization/recipes-extended/iptables/iptables-meta-virtualization.inc b/external/meta-virtualization/recipes-extended/iptables/iptables-meta-virtualization.inc new file mode 100644 index 00000000..8fd521c9 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/iptables/iptables-meta-virtualization.inc @@ -0,0 +1,19 @@ +RRECOMMENDS_${PN} += "kernel-module-ip6-tables \ + kernel-module-ip-tables \ + kernel-module-ip6table-filter \ + kernel-module-iptable-filter \ + kernel-module-ip6table-raw \ + kernel-module-iptable-raw \ + kernel-module-ip6table-nat \ + kernel-module-iptable-nat \ + kernel-module-ip6table-mangle \ + kernel-module-iptable-magle \ + kernel-module-ip6table-security \ + kernel-module-iptable-security \ + kernel-module-ipt-reject \ + kernel-module-iptable-mangle \ + kernel-module-xt-checksum \ + kernel-module-xt-conntrack \ + kernel-module-xt-state \ + kernel-module-xt-tcpudp \ + " diff --git a/external/meta-virtualization/recipes-extended/iptables/iptables_1.%.bbappend b/external/meta-virtualization/recipes-extended/iptables/iptables_1.%.bbappend new file mode 100644 index 00000000..9a15e60c --- /dev/null +++ b/external/meta-virtualization/recipes-extended/iptables/iptables_1.%.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', '${BPN}-meta-virtualization.inc', '', d)} diff --git a/external/meta-virtualization/recipes-extended/ipxe/files/ipxe-fix-hostcc-nopie-cflags.patch b/external/meta-virtualization/recipes-extended/ipxe/files/ipxe-fix-hostcc-nopie-cflags.patch new file mode 100644 index 00000000..da154a6f --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ipxe/files/ipxe-fix-hostcc-nopie-cflags.patch @@ -0,0 +1,68 @@ +Fix detection of host compiler "no-pie"/"nopie" and link flags. + +Detection of the "no-pie" vs "nopie" flag needs to be performed for both +the host and target compilers; cannot assume that one works for the other. + +Use EXTRA_HOST_CFLAGS and EXTRA_HOST_LDFLAGS variables for passing +host tool parameters if required. Removes previous hardcoded "-O2 -g". + +Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> +diff --git a/Makefile.housekeeping b/Makefile.housekeeping +index f833492..5451c39 100644 +--- a/Makefile.housekeeping ++++ b/Makefile.housekeeping +@@ -133,6 +133,7 @@ eval : + WORKAROUND_CFLAGS := + WORKAROUND_ASFLAGS := + WORKAROUND_LDFLAGS := ++WORKAROUND_HOST_CFLAGS := + + # Make syntax does not allow use of comma or space in certain places. + # This ugly workaround is suggested in the manual. +@@ -445,7 +446,7 @@ endif + CFLAGS += $(WORKAROUND_CFLAGS) $(EXTRA_CFLAGS) + ASFLAGS += $(WORKAROUND_ASFLAGS) $(EXTRA_ASFLAGS) + LDFLAGS += $(WORKAROUND_LDFLAGS) $(EXTRA_LDFLAGS) +-HOST_CFLAGS += $(WORKAROUND_CFLAGS) -O2 -g ++HOST_CFLAGS += $(WORKAROUND_HOST_CFLAGS) $(EXTRA_HOST_CFLAGS) + + # Inhibit -Werror if NO_WERROR is specified on make command line + # +@@ -1375,7 +1376,7 @@ endif # defined(BIN) + # The compression utilities + # + +-ZBIN_LDFLAGS := -llzma ++ZBIN_LDFLAGS := -llzma $(EXTRA_HOST_LDFLAGS) + + $(ZBIN) : util/zbin.c $(MAKEDEPS) + $(QM)$(ECHO) " [HOSTCC] $@" +diff --git a/arch/i386/Makefile b/arch/i386/Makefile +index b7c2792..4a637ad 100644 +--- a/arch/i386/Makefile ++++ b/arch/i386/Makefile +@@ -78,11 +78,20 @@ CFLAGS += -Ui386 + # -nopie. We therefore test for both. + # + ifeq ($(CCTYPE),gcc) +-PIE_TEST = [ -z "`$(CC) -fno-PIE -no-pie -x c -c /dev/null -o /dev/null 2>&1`" ] +-PIE_FLAGS := $(shell $(PIE_TEST) && $(ECHO) '-fno-PIE -no-pie') +-PIE_TEST2 = [ -z "`$(CC) -fno-PIE -nopie -x c -c /dev/null -o /dev/null 2>&1`" ] ++PIE_TEST1_FLAGS = "-fno-PIE -no-pie -x c -c /dev/null -o /dev/null 2>&1" ++PIE_TEST2_FLAGS = "-fno-PIE -nopie -x c -c /dev/null -o /dev/null 2>&1" ++ ++PIE_TEST1 = [ -z "`$(CC) "$(PIE_TEST1_FLAGS)"`" ] ++PIE_TEST2 = [ -z "`$(CC) "$(PIE_TEST2_FLAGS)"`" ] ++PIE_FLAGS1 := $(shell $(PIE_TEST1) && $(ECHO) '-fno-PIE -no-pie') + PIE_FLAGS2 := $(shell $(PIE_TEST2) && $(ECHO) '-fno-PIE -nopie') +-WORKAROUND_CFLAGS += $(PIE_FLAGS) $(PIE_FLAGS2) ++WORKAROUND_CFLAGS += $(PIE_FLAGS1) $(PIE_FLAGS2) ++ ++HOST_PIE_TEST1 = [ -z "`$(HOSTCC) "$(PIE_TEST1_FLAGS)"`" ] ++HOST_PIE_TEST2 = [ -z "`$(HOSTCC) "$(PIE_TEST2_FLAGS)"`" ] ++HOST_PIE_FLAGS1 := $(shell $(HOST_PIE_TEST1) && $(ECHO) '-fno-PIE -no-pie') ++HOST_PIE_FLAGS2 := $(shell $(HOST_PIE_TEST2) && $(ECHO) '-fno-PIE -nopie') ++WORKAROUND_HOST_CFLAGS += $(HOST_PIE_FLAGS1) $(HOST_PIE_FLAGS2) + endif + + # i386-specific directories containing source files diff --git a/external/meta-virtualization/recipes-extended/ipxe/ipxe_git.bb b/external/meta-virtualization/recipes-extended/ipxe/ipxe_git.bb new file mode 100644 index 00000000..1de0f21e --- /dev/null +++ b/external/meta-virtualization/recipes-extended/ipxe/ipxe_git.bb @@ -0,0 +1,35 @@ +DESCRIPTION = "Open source network boot firmware" +HOMEPAGE = "http://ipxe.org" +LICENSE = "GPLv2" +DEPENDS = "binutils-native perl-native syslinux mtools-native cdrtools-native xz" +LIC_FILES_CHKSUM = "file://../COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +SRCREV = "64b4452bca04af433f1c98ab782c0e93cd5c88c0" +PV = "gitr${SRCPV}" +PR = "r0" + +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" + +SRC_URI = " \ + git://git.ipxe.org/ipxe.git;protocol=https \ + file://ipxe-fix-hostcc-nopie-cflags.patch \ + " + +FILES_${PN} = "/usr/share/firmware/*.rom" + +EXTRA_OEMAKE = " \ + ISOLINUX_BIN="${STAGING_DIR_TARGET}/usr/share/syslinux/isolinux.bin" \ + CROSS_COMPILE="${TARGET_PREFIX}" \ + EXTRA_HOST_CFLAGS="${BUILD_CFLAGS}" \ + EXTRA_HOST_LDFLAGS="${BUILD_LDFLAGS}"" + +S = "${WORKDIR}/git/src" + +do_compile() { + oe_runmake +} + +do_install() { + install -d ${D}/usr/share/firmware + install ${S}/bin/*.rom ${D}/usr/share/firmware/ +} diff --git a/external/meta-virtualization/recipes-extended/irqbalance/irqbalance.inc b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance.inc new file mode 100644 index 00000000..53275d12 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance.inc @@ -0,0 +1,47 @@ +# +# Copyright (C) 2013 Wind River Systems, Inc. +# +SUMMARY = "IRQ allocation daemon" +DESCRIPTION = "A daemon to balance interrupts across multiple CPUs, \ +which can lead to better performance and IO balance on SMP systems." + +HOMEPAGE = "http://code.google.com/p/irqbalance/" +BUGTRACKER = "http://code.google.com/p/irqbalance/issues/list" + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f \ + file://irqbalance.c;beginline=6;endline=8;md5=b94e153694672307b503b1bc87dc9e24 \ + " + +DEPENDS = "glib-2.0" + +INITSCRIPT_NAME = "irqbalanced" +INITSCRIPT_PARAMS = "defaults" + +inherit autotools update-rc.d pkgconfig systemd + +SYSTEMD_PACKAGES = "irqbalance" +SYSTEMD_SERVICE_irqbalance = "irqbalanced.service" + +EXTRA_OECONF = "--program-transform-name= \ + " + +# let the recipes or appends define options +# +PACKAGECONFIG ?= "" + +# enable,disable,depends,rdepends +# +PACKAGECONFIG[numa] = "--enable-numa,--disable-numa,numactl," +PACKAGECONFIG[libcap-ng] = "--with-libcap-ng,--without-libcap-ng,libcap-ng," + +do_install () { + oe_runmake 'DESTDIR=${D}' install + install -d ${D}${sysconfdir}/init.d + cat ${S}/irqbalance.init | sed -e's,/usr/sbin,${sbindir},g' > ${D}${sysconfdir}/init.d/irqbalanced + chmod 755 ${D}${sysconfdir}/init.d/irqbalanced + + install -d ${D}${systemd_unitdir}/system + install -m 0644 ${WORKDIR}/irqbalanced.service ${D}${systemd_unitdir}/system + sed -i -e 's,@SBINDIR@,${sbindir},g' ${D}${systemd_unitdir}/system/irqbalanced.service +} diff --git a/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/add-initscript.patch b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/add-initscript.patch new file mode 100644 index 00000000..b0e608e6 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/add-initscript.patch @@ -0,0 +1,56 @@ +From 80c45eecc193c6c13430ddeb40b9b0fd1841ceee Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Thu, 14 Mar 2013 23:31:38 -0700 +Subject: [PATCH] irqbalance: add basic init script + +The upstream irqbalance release package does not contain an +init script so we create a basic one here. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + irqbalance.init | 35 +++++++++++++++++++++++++++++++++++ + 1 file changed, 35 insertions(+) + create mode 100644 irqbalance.init + +diff --git a/irqbalance.init b/irqbalance.init +new file mode 100644 +index 0000000..d12d62c +--- /dev/null ++++ b/irqbalance.init +@@ -0,0 +1,35 @@ ++#!/bin/sh ++# ++# Copyright (c) 2012 Wind River Systems, Inc. ++# ++### BEGIN INIT INFO ++# Provides: irqbalance ++# Required-Start: ++# Required-Stop: ++# Default-Start: 2 3 4 5 ++# Default-Stop: 0 1 6 ++# Short-Description: IRQ allocation daemon ++### END INIT INFO ++ ++case "$1" in ++ start) ++ echo -n "Starting irqbalance: " ++ start-stop-daemon -S -b -n irqbalance -a /usr/sbin/irqbalance ++ echo "done" ++ ;; ++ stop) ++ echo -n "Shutting down irqbalance: " ++ start-stop-daemon -K -n irqbalance ++ echo "done" ++ ;; ++ restart) ++ $0 stop ++ $0 start ++ ;; ++ *) ++ echo "Usage: $0 {start | stop | restart}" >&2 ++ exit 1 ++ ;; ++esac ++ ++exit 0 diff --git a/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/fix-configure-libcap-ng.patch b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/fix-configure-libcap-ng.patch new file mode 100644 index 00000000..fb22d7a2 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/fix-configure-libcap-ng.patch @@ -0,0 +1,29 @@ +From 20a1b2ff2e6d80924824983c363c80f66e05c0d0 Mon Sep 17 00:00:00 2001 +From: Ming Liu <ming.liu@windriver.com> +Date: Sun, 6 Sep 2015 14:43:24 +0800 +Subject: [PATCH] grasp withval for libcap-ng + +Upstream-Status: Pending + +Signed-off-by: Ming Liu <ming.liu@windriver.com> + +--- + configure.ac | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 38a1bee..95f1488 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -62,7 +62,10 @@ AS_IF( + ]) + + AC_ARG_WITH([libcap-ng], +- AS_HELP_STRING([libcap-ng], [Add libcap-ng-support @<:@default=auto@:>@])) ++ [AS_HELP_STRING([libcap-ng], [Add libcap-ng-support @<:@default=auto@:>@])], ++ [libcap_ng=$withval], ++ [libcap_ng=$withval] ++) + + AS_IF( + [test "x$libcap_ng" != "xno"], diff --git a/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/irqbalance-Add-status-and-reload-commands.patch b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/irqbalance-Add-status-and-reload-commands.patch new file mode 100644 index 00000000..ec01448f --- /dev/null +++ b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/irqbalance-Add-status-and-reload-commands.patch @@ -0,0 +1,53 @@ +From 9a16da2628cc4fddf37fe0368b4f6424270f0b2d Mon Sep 17 00:00:00 2001 +From: Yang Shi <yang.shi@windriver.com> +Date: Mon, 26 Aug 2013 10:58:02 -0700 +Subject: [PATCH] irqbalance: Add status and reload commands + +Add status and reload commands for irqbalanced init script + +Signed-off-by: Yang Shi <yang.shi@windriver.com> + +--- + irqbalance.init | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +diff --git a/irqbalance.init b/irqbalance.init +index d12d62c..f58bf55 100644 +--- a/irqbalance.init ++++ b/irqbalance.init +@@ -1,6 +1,6 @@ + #!/bin/sh + # +-# Copyright (c) 2012 Wind River Systems, Inc. ++# Copyright (c) 2013 Wind River Systems, Inc. + # + ### BEGIN INIT INFO + # Provides: irqbalance +@@ -11,6 +11,8 @@ + # Short-Description: IRQ allocation daemon + ### END INIT INFO + ++. /etc/init.d/functions ++ + case "$1" in + start) + echo -n "Starting irqbalance: " +@@ -22,12 +24,16 @@ case "$1" in + start-stop-daemon -K -n irqbalance + echo "done" + ;; +- restart) ++ restart|reload) + $0 stop + $0 start + ;; ++ status) ++ status irqbalance ++ echo "done" ++ ;; + *) +- echo "Usage: $0 {start | stop | restart}" >&2 ++ echo "Usage: $0 {start | stop | restart | reload | status}" >&2 + exit 1 + ;; + esac diff --git a/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/irqbalanced.service b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/irqbalanced.service new file mode 100644 index 00000000..5b284faa --- /dev/null +++ b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance/irqbalanced.service @@ -0,0 +1,9 @@ +[Unit] +Description=irqbalance daemon +After=syslog.target + +[Service] +ExecStart=@SBINDIR@/irqbalance --foreground + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-extended/irqbalance/irqbalance_1.4.0.bb b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance_1.4.0.bb new file mode 100644 index 00000000..1aee7cab --- /dev/null +++ b/external/meta-virtualization/recipes-extended/irqbalance/irqbalance_1.4.0.bb @@ -0,0 +1,15 @@ +# +# Copyright (C) 2015 Wind River Systems, Inc. +# + +require irqbalance.inc + +SRC_URI[md5sum] = "26ee6db57c4509737e541e98773a39f5" +SRC_URI[sha256sum] = "62de71510a2496fcf027efb0b288dd48e53e9efc931fa573c95580cad6264d07" + +SRC_URI = "https://github.com/Irqbalance/irqbalance/archive/v${PV}.tar.gz;downloadfilename=irqbalance-${PV}.tar.gz \ + file://add-initscript.patch \ + file://irqbalance-Add-status-and-reload-commands.patch \ + file://fix-configure-libcap-ng.patch \ + file://irqbalanced.service \ + " diff --git a/external/meta-virtualization/recipes-extended/kvmtool/files/0001-Avoid-pointers-for-address-of-packed-members.patch b/external/meta-virtualization/recipes-extended/kvmtool/files/0001-Avoid-pointers-for-address-of-packed-members.patch new file mode 100644 index 00000000..863e86a8 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/kvmtool/files/0001-Avoid-pointers-for-address-of-packed-members.patch @@ -0,0 +1,39 @@ +From 2e22df7c24dadf5e16004cd832cabca76a699d4d Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Tue, 21 Mar 2017 23:32:39 -0700 +Subject: [PATCH] Avoid pointers for address of packed members + +Fixes Clang warning due to -Waddress-of-packed-member + +virtio/blk.c:161:37: error: taking address of packed member 'geometry' of class or structure 'virtio_blk_config' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member] + struct virtio_blk_geometry *geo = &conf->geometry; + +Signed-off-by: Khem Raj <raj.khem@gmail.com> +--- + virtio/blk.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/virtio/blk.c b/virtio/blk.c +index c485e4f..1f7365d 100644 +--- a/virtio/blk.c ++++ b/virtio/blk.c +@@ -158,7 +158,6 @@ static void set_guest_features(struct kvm *kvm, void *dev, u32 features) + { + struct blk_dev *bdev = dev; + struct virtio_blk_config *conf = &bdev->blk_config; +- struct virtio_blk_geometry *geo = &conf->geometry; + + bdev->features = features; + +@@ -167,7 +166,7 @@ static void set_guest_features(struct kvm *kvm, void *dev, u32 features) + conf->seg_max = virtio_host_to_guest_u32(&bdev->vdev, conf->seg_max); + + /* Geometry */ +- geo->cylinders = virtio_host_to_guest_u16(&bdev->vdev, geo->cylinders); ++ conf->geometry.cylinders = virtio_host_to_guest_u16(&bdev->vdev, conf->geometry.cylinders); + + conf->blk_size = virtio_host_to_guest_u32(&bdev->vdev, conf->blk_size); + conf->min_io_size = virtio_host_to_guest_u16(&bdev->vdev, conf->min_io_size); +-- +2.12.0 + diff --git a/external/meta-virtualization/recipes-extended/kvmtool/files/0001-kvmtool-9p-fixed-compilation-error.patch b/external/meta-virtualization/recipes-extended/kvmtool/files/0001-kvmtool-9p-fixed-compilation-error.patch new file mode 100644 index 00000000..63911fc2 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/kvmtool/files/0001-kvmtool-9p-fixed-compilation-error.patch @@ -0,0 +1,27 @@ +From bcd954ffdb9383030e02d356b51e09e4e2a7105a Mon Sep 17 00:00:00 2001 +From: Dariusz Pelowski <dariusz.pelowski@gmail.com> +Date: Sun, 5 Nov 2017 12:39:52 +0100 +Subject: [PATCH 1/2] kvmtool: 9p: fixed compilation error + +makedev is defined in sys/sysmacros.h + +Signed-off-by: Dariusz Pelowski <dariusz.pelowski@gmail.com> +--- + virtio/9p.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/virtio/9p.c b/virtio/9p.c +index 6acbfdd..1dee2c2 100644 +--- a/virtio/9p.c ++++ b/virtio/9p.c +@@ -15,6 +15,7 @@ + #include <string.h> + #include <errno.h> + #include <sys/vfs.h> ++#include <sys/sysmacros.h> + + #include <linux/virtio_ring.h> + #include <linux/virtio_9p.h> +-- +2.15.0 + diff --git a/external/meta-virtualization/recipes-extended/kvmtool/files/0002-kvmtool-add-EXTRA_CFLAGS-variable.patch b/external/meta-virtualization/recipes-extended/kvmtool/files/0002-kvmtool-add-EXTRA_CFLAGS-variable.patch new file mode 100644 index 00000000..262531ca --- /dev/null +++ b/external/meta-virtualization/recipes-extended/kvmtool/files/0002-kvmtool-add-EXTRA_CFLAGS-variable.patch @@ -0,0 +1,29 @@ +From 977a4d41012d1814f5a5330cacc2e4944de387cc Mon Sep 17 00:00:00 2001 +From: Dariusz Pelowski <dariusz.pelowski@gmail.com> +Date: Sun, 5 Nov 2017 12:39:21 +0100 +Subject: [PATCH 2/2] kvmtool: add EXTRA_CFLAGS variable + +to avoid CFLAGS overriding introduce new EXTRA_CFLAGS variable +for setting via command argument + +Signed-off-by: Dariusz Pelowski <dariusz.pelowski@gmail.com> +--- + Makefile | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/Makefile b/Makefile +index 64a0a16..bca1b26 100644 +--- a/Makefile ++++ b/Makefile +@@ -2,6 +2,8 @@ + # Define WERROR=0 to disable -Werror. + # + ++CFLAGS += $(EXTRA_CFLAGS) ++ + ifeq ($(strip $(V)),) + E = @echo + Q = @ +-- +2.15.0 + diff --git a/external/meta-virtualization/recipes-extended/kvmtool/files/external-crosscompiler.patch b/external/meta-virtualization/recipes-extended/kvmtool/files/external-crosscompiler.patch new file mode 100644 index 00000000..75cef3b1 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/kvmtool/files/external-crosscompiler.patch @@ -0,0 +1,31 @@ +Upstream-Status: Inappropriate [embedded specific] + +This allows OpenEmbedded to pass in cross compiler configuration using +the default envirnment variables. It is required so that kvmtool can +be linked against the cross-compiled libfdt library. + +diff --git a/Makefile b/Makefile +index 1f0196f..8bfb068 100644 +--- a/Makefile ++++ b/Makefile +@@ -14,11 +14,6 @@ export E Q + include config/utilities.mak + include config/feature-tests.mak + +-CC := $(CROSS_COMPILE)gcc +-CFLAGS := +-LD := $(CROSS_COMPILE)ld +-LDFLAGS := +- + FIND := find + CSCOPE := cscope + TAGS := ctags +@@ -297,7 +292,7 @@ $(warning No static libc found. Skipping guest init) + endif + + ifeq (y,$(ARCH_WANT_LIBFDT)) +- ifneq ($(call try-build,$(SOURCE_LIBFDT),$(CFLAGS),-lfdt),y) ++ ifneq ($(call try-build,$(SOURCE_LIBFDT),$(CPPFLAGS) $(CFLAGS),-lfdt),y) + $(error No libfdt found. Please install libfdt-dev package) + else + CFLAGS_DYNOPT += -DCONFIG_HAS_LIBFDT diff --git a/external/meta-virtualization/recipes-extended/kvmtool/kvmtool.bb b/external/meta-virtualization/recipes-extended/kvmtool/kvmtool.bb new file mode 100644 index 00000000..d487ee27 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/kvmtool/kvmtool.bb @@ -0,0 +1,29 @@ +SUMMARY = "Native Linux KVM tool" +DESCRIPTION = "kvmtool is a lightweight tool for hosting KVM guests." + +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=fcb02dc552a041dee27e4b85c7396067" + +DEPENDS = "dtc libaio zlib" +do_configure[depends] += "virtual/kernel:do_shared_workdir" + +inherit kernel-arch + +SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/will/kvmtool.git \ + file://external-crosscompiler.patch \ + file://0001-Avoid-pointers-for-address-of-packed-members.patch \ + file://0001-kvmtool-9p-fixed-compilation-error.patch \ + file://0002-kvmtool-add-EXTRA_CFLAGS-variable.patch \ + " + +SRCREV = "0e1882a49f81cb15d328ef83a78849c0ea26eecc" +PV = "4.14.0+git${SRCREV}" + +S = "${WORKDIR}/git" + +EXTRA_OEMAKE='V=1 EXTRA_CFLAGS="-I${STAGING_KERNEL_BUILDDIR}/include/generated -I${STAGING_KERNEL_BUILDDIR}/arch/${ARCH}/include/generated"' + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${S}/lkvm ${D}${bindir}/ +} diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt-python.inc b/external/meta-virtualization/recipes-extended/libvirt/libvirt-python.inc new file mode 100644 index 00000000..be9079d7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt-python.inc @@ -0,0 +1,55 @@ +inherit pythonnative python-dir + +export STAGING_INCDIR +export STAGING_LIBDIR +export BUILD_SYS +export HOST_SYS + +RDEPENDS_${PN}-python += "python" +PACKAGECONFIG_${PN}-python[xen] = ",,,xen-python" + +PACKAGES += "${PN}-python-staticdev ${PN}-python-dev ${PN}-python-dbg ${PN}-python" + +FILES_${PN}-python-staticdev += "${PYTHON_SITEPACKAGES_DIR}/*.a" +FILES_${PN}-python-dev += "${PYTHON_SITEPACKAGES_DIR}/*.la" +FILES_${PN}-python-dbg += "${PYTHON_SITEPACKAGES_DIR}/.debug/" +FILES_${PN}-python = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}/*" + +SRC_URI += "http://libvirt.org/sources/python/libvirt-python-${PV}.tar.gz;name=libvirt_python" +SRC_URI += "file://libvirt_api_xml_path.patch;patchdir=../libvirt-python-${PV}" + +SRC_URI[libvirt_python.md5sum] = "32cf281199367aec2881c96d1bd80dc6" +SRC_URI[libvirt_python.sha256sum] = "e36fee5898de3550ed7e63d5d0a8447f9d78f06574634855dee59eae27930908" + +export LIBVIRT_API_PATH = "${S}/docs/libvirt-api.xml" +export LIBVIRT_CFLAGS = "-I${S}/include" +export LIBVIRT_LIBS = "-L${B}/src/.libs -lvirt -ldl" +export LDFLAGS="-L${B}/src/.libs" + +LIBVIRT_INSTALL_ARGS = "--root=${D} \ + --prefix=${prefix} \ + --install-lib=${PYTHON_SITEPACKAGES_DIR} \ + --install-data=${datadir}" + +python __anonymous () { + pkgconfig = d.getVar('PACKAGECONFIG') + if ('python') in pkgconfig.split(): + d.setVar('LIBVIRT_PYTHON_ENABLE', '1') + else: + d.setVar('LIBVIRT_PYTHON_ENABLE', '0') +} + +do_compile_append() { + if [ "${LIBVIRT_PYTHON_ENABLE}" = "1" ]; then + cd ${WORKDIR}/${BPN}-python-${PV} && \ + ${STAGING_BINDIR_NATIVE}/python-native/python setup.py build + fi +} + +do_install_append() { + if [ "${LIBVIRT_PYTHON_ENABLE}" = "1" ]; then + cd ${WORKDIR}/${BPN}-python-${PV} && \ + ${STAGING_BINDIR_NATIVE}/python-native/python setup.py install \ + --install-lib=${D}/${PYTHON_SITEPACKAGES_DIR} ${LIBVIRT_INSTALL_ARGS} + fi +} diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/0001-ptest-Remove-Windows-1252-check-from-esxutilstest.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/0001-ptest-Remove-Windows-1252-check-from-esxutilstest.patch new file mode 100644 index 00000000..217bdbc5 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/0001-ptest-Remove-Windows-1252-check-from-esxutilstest.patch @@ -0,0 +1,28 @@ +From ffc71da15c3da068f85d16617b6e0c0175fc0110 Mon Sep 17 00:00:00 2001 +From: He Zhe <zhe.he@windriver.com> +Date: Tue, 23 Aug 2016 02:28:47 -0400 +Subject: [PATCH] ptest: Remove Windows-1252 check from esxutilstest + +Currently we use iconv from glibc-locale and it does not support +Windows-1252 and we don't need support windows character encoding. + +Signed-off-by: He Zhe <zhe.he@windriver.com> +--- + tests/esxutilstest.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/tests/esxutilstest.c b/tests/esxutilstest.c +index 44bdc84..3223de3 100644 +--- a/tests/esxutilstest.c ++++ b/tests/esxutilstest.c +@@ -258,7 +258,6 @@ mymain(void) + DO_TEST(ParseDatastorePath); + DO_TEST(ConvertDateTimeToCalendarTime); + DO_TEST(EscapeDatastoreItem); +- DO_TEST(ConvertWindows1252ToUTF8); + + return result == 0 ? EXIT_SUCCESS : EXIT_FAILURE; + } +-- +2.8.1 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/0001-to-fix-build-error.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/0001-to-fix-build-error.patch new file mode 100644 index 00000000..c920139e --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/0001-to-fix-build-error.patch @@ -0,0 +1,49 @@ +From 8353dc1e642011199c3b3ba057d51d8768e4cd54 Mon Sep 17 00:00:00 2001 +From: Lei Maohui <leimaohui@cn.fujitsu.com> +Date: Fri, 31 Jul 2015 03:17:07 +0900 +Subject: [PATCH] to fix build error + +The error likes as following + +| Generating internals/command.html.tmp +| /bin/sh: line 3: internals/command.html.tmp: No such file or directory +| rm: Generating internals/locking.html.tmp +| cannot remove `internals/command.html.tmp': No such file or directory +| make[3]: *** [internals/command.html.tmp] Error 1 +| make[3]: *** Waiting for unfinished jobs.... + +Signed-off-by: Lei Maohui <leimaohui@cn.fujitsu.com> +[ywei: rebased to libvirt-1.3.2] +Signed-off-by: Yunguo Wei <yunguo.wei@windriver.com> +[MA: rebase to v4.3.0] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + docs/Makefile.am | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/docs/Makefile.am b/docs/Makefile.am +index 9620587..060a82b 100644 +--- a/docs/Makefile.am ++++ b/docs/Makefile.am +@@ -183,7 +183,7 @@ EXTRA_DIST= \ + hvsupport.pl \ + $(schema_DATA) + +-acl_generated = aclperms.htmlinc ++acl.html:: $(srcdir)/aclperms.htmlinc + + $(srcdir)/aclperms.htmlinc: $(top_srcdir)/src/access/viraccessperm.h \ + $(srcdir)/genaclperms.pl Makefile.am +@@ -247,8 +247,7 @@ MAINTAINERCLEANFILES += \ + %.png: %.fig + convert -rotate 90 $< $@ + +-%.html.tmp: %.html.in site.xsl subsite.xsl page.xsl \ +- $(acl_generated) ++%.html.tmp: %.html.in site.xsl subsite.xsl page.xsl + $(AM_V_GEN)name=`echo $@ | sed -e 's/.tmp//'`; \ + dir=`dirname $@` ; \ + if test "$$dir" = "."; \ +-- +1.9.1 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/CVE-2019-3840.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/CVE-2019-3840.patch new file mode 100644 index 00000000..8cca8216 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/CVE-2019-3840.patch @@ -0,0 +1,39 @@ +From 9ed175fbc2deecfdaeabca7bc77c7e7ae33a3377 Mon Sep 17 00:00:00 2001 +From: John Ferlan <jferlan@redhat.com> +Date: Fri, 7 Sep 2018 16:01:27 -0400 +Subject: [PATCH] qemu: Remove duplicated qemuAgentCheckError + +Commit 5b3492fadb moved qemuAgentCheckError calls into +qemuAgentCommand for various reasons; however, subsequent +commit 0977b8aa0 adding a new command made call again +So let's just remove the duplicitous call from +qemuAgentGetInterfaces. + +Signed-off-by: John Ferlan <jferlan@redhat.com> +ACKed-by: Michal Privoznik <mprivozn@redhat.com> + +Upstream-Status: Backport +CVE: CVE-2019-3840 +Signed-off-by: Armin Kuster <akuster@mvista.com> + +--- + src/qemu/qemu_agent.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +Index: libvirt-4.7.0/src/qemu/qemu_agent.c +=================================================================== +--- libvirt-4.7.0.orig/src/qemu/qemu_agent.c ++++ libvirt-4.7.0/src/qemu/qemu_agent.c +@@ -1987,10 +1987,9 @@ qemuAgentGetInterfaces(qemuAgentPtr mon, + if (!(cmd = qemuAgentMakeCommand("guest-network-get-interfaces", NULL))) + goto cleanup; + +- if (qemuAgentCommand(mon, cmd, &reply, false, VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK) < 0 || +- qemuAgentCheckError(cmd, reply) < 0) { ++ if (qemuAgentCommand(mon, cmd, &reply, false, ++ VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK) < 0) + goto cleanup; +- } + + if (!(ret_array = virJSONValueObjectGet(reply, "return"))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/configure.ac-search-for-rpc-rpc.h-in-the-sysroot.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/configure.ac-search-for-rpc-rpc.h-in-the-sysroot.patch new file mode 100644 index 00000000..0a9d5f48 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/configure.ac-search-for-rpc-rpc.h-in-the-sysroot.patch @@ -0,0 +1,36 @@ +From f10477f0fe5e4b7487a4a41faa216d10cd2bc7c3 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Thu, 10 May 2018 12:05:04 -0400 +Subject: [PATCH] configure.ac: search for rpc/rpc.h in the sysroot + +We want to avoid host contamination and use the sysroot as the base +directory for our search so add the '=' the the '-I' when searching +for libtirpc's rpc.h header. + +Upstream-Status: Inappropriate [old release] + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + m4/virt-xdr.m4 | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/m4/virt-xdr.m4 b/m4/virt-xdr.m4 +index 5a6408c..6c19f6d 100644 +--- a/m4/virt-xdr.m4 ++++ b/m4/virt-xdr.m4 +@@ -33,10 +33,10 @@ if test x"$with_remote" = x"yes" || test x"$with_libvirtd" = x"yes"; then + dnl check for cygwin's variation in xdr function names + AC_CHECK_FUNCS([xdr_u_int64_t],[],[],[#include <rpc/xdr.h>]) + +- dnl Cygwin/recent glibc requires -I/usr/include/tirpc for <rpc/rpc.h> ++ dnl Cygwin/recent glibc requires -I=/usr/include/tirpc for <rpc/rpc.h> + old_CFLAGS=$CFLAGS + AC_CACHE_CHECK([where to find <rpc/rpc.h>], [lv_cv_xdr_cflags], [ +- for add_CFLAGS in '' '-I/usr/include/tirpc' 'missing'; do ++ for add_CFLAGS in '' '-I=/usr/include/tirpc' 'missing'; do + if test x"$add_CFLAGS" = xmissing; then + lv_cv_xdr_cflags=missing; break + fi +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/dnsmasq.conf b/external/meta-virtualization/recipes-extended/libvirt/libvirt/dnsmasq.conf new file mode 100644 index 00000000..a7c30598 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/dnsmasq.conf @@ -0,0 +1,2 @@ +bind-interfaces +except-interface=virbr0 diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/install-missing-file.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/install-missing-file.patch new file mode 100644 index 00000000..cb5a20e3 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/install-missing-file.patch @@ -0,0 +1,51 @@ +From 0780181a3285511f166487a54ebc231fc657edfe Mon Sep 17 00:00:00 2001 +From: Catalin Enache <catalin.enache@windriver.com> +Date: Mon, 25 Jul 2016 16:38:51 +0300 +Subject: [PATCH] Install missing conf file + +openvzutilstest.conf file is needed by openvzutilstest test. + +Upstream-Status: Inapproriate + +Signed-off-by: Catalin Enache <catalin.enache@windriver.com> +[KK: Update context for 1.3.5.] +Signed-off-by: Kai Kang <kai.kang@windriver.com> +[MA: Update context for v4.3.0] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + tests/Makefile.am | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 65f776e..8a6fd44 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -173,6 +173,7 @@ EXTRA_DIST = \ + $(NULL) + + test_helpers = commandhelper ssh ++test_misc = + test_programs = virshtest sockettest \ + virhostcputest virbuftest \ + commandtest seclabeltest \ +@@ -305,6 +306,7 @@ endif WITH_LXC + + if WITH_OPENVZ + test_programs += openvzutilstest ++test_misc += openvzutilstest.conf + endif WITH_OPENVZ + + if WITH_ESX +@@ -1488,7 +1490,7 @@ endif ! WITH_CIL + + buildtest-TESTS: $(TESTS) $(test_libraries) $(test_helpers) + +-PTESTS = $(TESTS) $(test_helpers) test-lib.sh virschematest ++PTESTS = $(TESTS) $(test_helpers) $(test_misc) test-lib.sh virschematest + + install-ptest: + list='$(TESTS) $(test_helpers) test-lib.sh virschematest' + +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt-1.0.3-fix-thread-safety-in-lxc-callback-handling.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt-1.0.3-fix-thread-safety-in-lxc-callback-handling.patch new file mode 100644 index 00000000..558d5ef6 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt-1.0.3-fix-thread-safety-in-lxc-callback-handling.patch @@ -0,0 +1,63 @@ +From ad5d9cee87357f9f38f62583119606ef95ba10df Mon Sep 17 00:00:00 2001 +From: Bogdan Purcareata <bogdan.purcareata@freescale.com> +Date: Fri, 24 May 2013 16:46:00 +0300 +Subject: [PATCH] Fix thread safety in LXC callback handling + +Signed-off-by: Bogdan Purcareata <bogdan.purcareata@freescale.com> +--- + src/lxc/lxc_process.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c +index aaa81a7..0eadc67 100644 +--- a/src/lxc/lxc_process.c ++++ b/src/lxc/lxc_process.c +@@ -609,8 +609,13 @@ static void virLXCProcessMonitorExitNotify(virLXCMonitorPtr mon ATTRIBUTE_UNUSED + virLXCProtocolExitStatus status, + virDomainObjPtr vm) + { ++ virLXCDriverPtr driver = lxc_driver; + virLXCDomainObjPrivatePtr priv = vm->privateData; + ++ lxcDriverLock(driver); ++ virObjectLock(vm); ++ lxcDriverUnlock(driver); ++ + switch (status) { + case VIR_LXC_PROTOCOL_EXIT_STATUS_SHUTDOWN: + priv->stopReason = VIR_DOMAIN_EVENT_STOPPED_SHUTDOWN; +@@ -628,6 +633,8 @@ static void virLXCProcessMonitorExitNotify(virLXCMonitorPtr mon ATTRIBUTE_UNUSED + } + VIR_DEBUG("Domain shutoff reason %d (from status %d)", + priv->stopReason, status); ++ ++ virObjectUnlock(vm); + } + + /* XXX a little evil */ +@@ -636,12 +643,21 @@ static void virLXCProcessMonitorInitNotify(virLXCMonitorPtr mon ATTRIBUTE_UNUSED + pid_t initpid, + virDomainObjPtr vm) + { +- virLXCDomainObjPrivatePtr priv = vm->privateData; ++ virLXCDriverPtr driver = lxc_driver; ++ virLXCDomainObjPrivatePtr priv; ++ ++ lxcDriverLock(driver); ++ virObjectLock(vm); ++ lxcDriverUnlock(driver); ++ ++ priv = vm->privateData; + priv->initpid = initpid; + virDomainAuditInit(vm, initpid); + + if (virDomainSaveStatus(lxc_driver->caps, lxc_driver->stateDir, vm) < 0) + VIR_WARN("Cannot update XML with PID for LXC %s", vm->def->name); ++ ++ virObjectUnlock(vm); + } + + static virLXCMonitorCallbacks monitorCallbacks = { +-- +1.7.11.7 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt-use-pkg-config-to-locate-libcap.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt-use-pkg-config-to-locate-libcap.patch new file mode 100644 index 00000000..635d1e81 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt-use-pkg-config-to-locate-libcap.patch @@ -0,0 +1,45 @@ +From 3e271f6db12ffe34843428ec2f0bca7a8fe3aa65 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Wed, 8 Apr 2015 13:03:03 -0400 +Subject: [PATCH] libvirt: use pkg-config to locate libcap + +libvirt wants to use pcap-config to locate the exisence and location +of libpcap. oe-core stubs this script and replaces it with pkg-config, +which can lead to the host pcap-config triggering and either breaking +the build or introducing host contamination. + +To fix this issue, we patch configure to use 'pkg-config libcap' to +locate the correct libraries. + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +[MA: Update to apply agains v4.3.0] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + m4/virt-libpcap.m4 | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/m4/virt-libpcap.m4 b/m4/virt-libpcap.m4 +index 8fa4889..08b2f53 100644 +--- a/m4/virt-libpcap.m4 ++++ b/m4/virt-libpcap.m4 +@@ -23,14 +23,14 @@ AC_DEFUN([LIBVIRT_ARG_LIBPCAP], [ + + AC_DEFUN([LIBVIRT_CHECK_LIBPCAP], [ + LIBPCAP_REQUIRED="1.0.0" +- LIBPCAP_CONFIG="pcap-config" ++ LIBPCAP_CONFIG="pkg-config libpcap" + LIBPCAP_CFLAGS="" + LIBPCAP_LIBS="" + + if test "x$with_libpcap" != "xno"; then + case $with_libpcap in +- ''|yes|check) LIBPCAP_CONFIG="pcap-config" ;; +- *) LIBPCAP_CONFIG="$with_libpcap/bin/pcap-config" ;; ++ ''|yes|check) LIBPCAP_CONFIG="pkg-config libpcap" ;; ++ *) LIBPCAP_CONFIG="$with_libpcap/bin/pkg-config libpcap" ;; + esac + AS_IF([test "x$LIBPCAP_CONFIG" != "x"], [ + AC_MSG_CHECKING(libpcap $LIBPCAP_CONFIG >= $LIBPCAP_REQUIRED ) +-- +2.1.0 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt_api_xml_path.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt_api_xml_path.patch new file mode 100644 index 00000000..30c30e88 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirt_api_xml_path.patch @@ -0,0 +1,87 @@ +Adding support for LIBVIRT_CFLAGS and LIBVIRT_LIBS + +Signed-off-by: Amy Fong <amy.fong@windriver.com> + + +Adding a support for LIBVIRT_API_PATH evironment variable, which can +control where the script should look for the 'libvirt-api.xml' file. +This allows building libvirt-python against different libvirt than the +one installed in the system. This may be used for example in autotest +or by packagers without the need to install libvirt into the system. + +Signed-off-by: Martin Kletzander <mkletzan redhat com> +[ywei: rebased to 1.3.2] +Signed-off-by: Yunguo Wei <yunguo.wei@windriver.com> +--- + setup.py | 35 ++++++++++++++++++++++++----------- + 1 file changed, 24 insertions(+), 11 deletions(-) + +diff --git a/setup.py b/setup.py +index eff9d54..48ec4fe 100755 +--- a/setup.py ++++ b/setup.py +@@ -43,13 +43,7 @@ def check_minimum_libvirt_version(): + "libvirt"]) + + def have_libvirt_lxc(): +- try: +- spawn([get_pkgcfg(), +- "--atleast-version=%s" % MIN_LIBVIRT_LXC, +- "libvirt"]) +- return True +- except DistutilsExecError: +- return False ++ return True + + def have_libvirtaio(): + # This depends on asyncio, which in turn depends on "yield from" syntax. +@@ -77,7 +71,17 @@ def get_api_xml_files(): + """Check with pkg-config that libvirt is present and extract + the API XML file paths we need from it""" + +- libvirt_api = get_pkgconfig_data(["--variable", "libvirt_api"], "libvirt") ++ libvirt_api = os.getenv("LIBVIRT_API_PATH") ++ ++ if libvirt_api: ++ if not libvirt_api.endswith("-api.xml"): ++ raise ValueError("Invalid path '%s' for API XML" % libvirt_api) ++ if not os.path.exists(libvirt_api): ++ raise ValueError("API XML '%s' does not exist, " ++ "have you built libvirt?" % libvirt_api) ++ else: ++ libvirt_api = get_pkgconfig_data(["--variable", "libvirt_api"], ++ "libvirt") + + offset = libvirt_api.index("-api.xml") + libvirt_qemu_api = libvirt_api[0:offset] + "-qemu-api.xml" +@@ -97,8 +101,17 @@ def get_module_lists(): + + c_modules = [] + py_modules = [] +- ldflags = get_pkgconfig_data(["--libs-only-L"], "libvirt", False).split() +- cflags = get_pkgconfig_data(["--cflags"], "libvirt", False).split() ++ libvirt_cflags = os.getenv("LIBVIRT_CFLAGS") ++ if libvirt_cflags: ++ cflags = libvirt_cflags.split() ++ else: ++ cflags = get_pkgconfig_data(["--cflags"], "libvirt", False).split() ++ ++ libvirt_libs = os.getenv("LIBVIRT_LIBS") ++ if libvirt_libs: ++ ldflags = libvirt_libs.split() ++ else: ++ ldflags = get_pkgconfig_data(["--libs-only-L"], "libvirt", False).split() + + module = Extension('libvirtmod', + sources = ['libvirt-override.c', 'build/libvirt.c', 'typewrappers.c', 'libvirt-utils.c'], +@@ -144,7 +157,7 @@ def get_module_lists(): + class my_build(build): + + def run(self): +- check_minimum_libvirt_version() ++# check_minimum_libvirt_version() + apis = get_api_xml_files() + + self.spawn([sys.executable, "generator.py", "libvirt", apis[0]]) +-- +2.17.0 diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirtd.conf b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirtd.conf new file mode 100644 index 00000000..c0462b47 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirtd.conf @@ -0,0 +1,393 @@ +# Master libvirt daemon configuration file +# +# For further information consult http://libvirt.org/format.html +# +# NOTE: the tests/daemon-conf regression test script requires +# that each "PARAMETER = VALUE" line in this file have the parameter +# name just after a leading "#". + +################################################################# +# +# Network connectivity controls +# + +# Flag listening for secure TLS connections on the public TCP/IP port. +# NB, must pass the --listen flag to the libvirtd process for this to +# have any effect. +# +# It is necessary to setup a CA and issue server certificates before +# using this capability. +# +# This is enabled by default, uncomment this to disable it +listen_tls = 0 + +# Listen for unencrypted TCP connections on the public TCP/IP port. +# NB, must pass the --listen flag to the libvirtd process for this to +# have any effect. +# +# Using the TCP socket requires SASL authentication by default. Only +# SASL mechanisms which support data encryption are allowed. This is +# DIGEST_MD5 and GSSAPI (Kerberos5) +# +# This is disabled by default, uncomment this to enable it. +listen_tcp = 1 + + + +# Override the port for accepting secure TLS connections +# This can be a port number, or service name +# +#tls_port = "16514" + +# Override the port for accepting insecure TCP connections +# This can be a port number, or service name +# +#tcp_port = "16509" + + +# Override the default configuration which binds to all network +# interfaces. This can be a numeric IPv4/6 address, or hostname +# +#listen_addr = "192.168.0.1" + + +# Flag toggling mDNS advertizement of the libvirt service. +# +# Alternatively can disable for all services on a host by +# stopping the Avahi daemon +# +# This is enabled by default, uncomment this to disable it +#mdns_adv = 0 + +# Override the default mDNS advertizement name. This must be +# unique on the immediate broadcast network. +# +# The default is "Virtualization Host HOSTNAME", where HOSTNAME +# is subsituted for the short hostname of the machine (without domain) +# +#mdns_name = "Virtualization Host Joe Demo" + + +################################################################# +# +# UNIX socket access controls +# + +# Set the UNIX domain socket group ownership. This can be used to +# allow a 'trusted' set of users access to management capabilities +# without becoming root. +# +# This is restricted to 'root' by default. +#unix_sock_group = "libvirt" + +# Set the UNIX socket permissions for the R/O socket. This is used +# for monitoring VM status only +# +# Default allows any user. If setting group ownership may want to +# restrict this to: +#unix_sock_ro_perms = "0777" + +# Set the UNIX socket permissions for the R/W socket. This is used +# for full management of VMs +# +# Default allows only root. If PolicyKit is enabled on the socket, +# the default will change to allow everyone (eg, 0777) +# +# If not using PolicyKit and setting group ownership for access +# control then you may want to relax this to: +#unix_sock_rw_perms = "0770" + +# Set the name of the directory in which sockets will be found/created. +#unix_sock_dir = "/var/run/libvirt" + +################################################################# +# +# Authentication. +# +# - none: do not perform auth checks. If you can connect to the +# socket you are allowed. This is suitable if there are +# restrictions on connecting to the socket (eg, UNIX +# socket permissions), or if there is a lower layer in +# the network providing auth (eg, TLS/x509 certificates) +# +# - sasl: use SASL infrastructure. The actual auth scheme is then +# controlled from /etc/sasl2/libvirt.conf. For the TCP +# socket only GSSAPI & DIGEST-MD5 mechanisms will be used. +# For non-TCP or TLS sockets, any scheme is allowed. +# +# - polkit: use PolicyKit to authenticate. This is only suitable +# for use on the UNIX sockets. The default policy will +# require a user to supply their own password to gain +# full read/write access (aka sudo like), while anyone +# is allowed read/only access. +# +# Set an authentication scheme for UNIX read-only sockets +# By default socket permissions allow anyone to connect +# +# To restrict monitoring of domains you may wish to enable +# an authentication mechanism here +#auth_unix_ro = "none" + +# Set an authentication scheme for UNIX read-write sockets +# By default socket permissions only allow root. If PolicyKit +# support was compiled into libvirt, the default will be to +# use 'polkit' auth. +# +# If the unix_sock_rw_perms are changed you may wish to enable +# an authentication mechanism here +#auth_unix_rw = "none" + +# Change the authentication scheme for TCP sockets. +# +# If you don't enable SASL, then all TCP traffic is cleartext. +# Don't do this outside of a dev/test scenario. For real world +# use, always enable SASL and use the GSSAPI or DIGEST-MD5 +# mechanism in /etc/sasl2/libvirt.conf +#auth_tcp = "sasl" + +# Change the authentication scheme for TLS sockets. +# +# TLS sockets already have encryption provided by the TLS +# layer, and limited authentication is done by certificates +# +# It is possible to make use of any SASL authentication +# mechanism as well, by using 'sasl' for this option +#auth_tls = "none" + + + +################################################################# +# +# TLS x509 certificate configuration +# + + +# Override the default server key file path +# +#key_file = "/etc/pki/libvirt/private/serverkey.pem" + +# Override the default server certificate file path +# +#cert_file = "/etc/pki/libvirt/servercert.pem" + +# Override the default CA certificate path +# +#ca_file = "/etc/pki/CA/cacert.pem" + +# Specify a certificate revocation list. +# +# Defaults to not using a CRL, uncomment to enable it +#crl_file = "/etc/pki/CA/crl.pem" + + + +################################################################# +# +# Authorization controls +# + + +# Flag to disable verification of our own server certificates +# +# When libvirtd starts it performs some sanity checks against +# its own certificates. +# +# Default is to always run sanity checks. Uncommenting this +# will disable sanity checks which is not a good idea +#tls_no_sanity_certificate = 1 + +# Flag to disable verification of client certificates +# +# Client certificate verification is the primary authentication mechanism. +# Any client which does not present a certificate signed by the CA +# will be rejected. +# +# Default is to always verify. Uncommenting this will disable +# verification - make sure an IP whitelist is set +#tls_no_verify_certificate = 1 + + +# A whitelist of allowed x509 Distinguished Names +# This list may contain wildcards such as +# +# "C=GB,ST=London,L=London,O=Red Hat,CN=*" +# +# See the POSIX fnmatch function for the format of the wildcards. +# +# NB If this is an empty list, no client can connect, so comment out +# entirely rather than using empty list to disable these checks +# +# By default, no DN's are checked +#tls_allowed_dn_list = ["DN1", "DN2"] + + +# A whitelist of allowed SASL usernames. The format for usernames +# depends on the SASL authentication mechanism. Kerberos usernames +# look like username@REALM +# +# This list may contain wildcards such as +# +# "*@EXAMPLE.COM" +# +# See the POSIX fnmatch function for the format of the wildcards. +# +# NB If this is an empty list, no client can connect, so comment out +# entirely rather than using empty list to disable these checks +# +# By default, no Username's are checked +#sasl_allowed_username_list = ["joe@EXAMPLE.COM", "fred@EXAMPLE.COM" ] + + + +################################################################# +# +# Processing controls +# + +# The maximum number of concurrent client connections to allow +# over all sockets combined. +#max_clients = 20 + + +# The minimum limit sets the number of workers to start up +# initially. If the number of active clients exceeds this, +# then more threads are spawned, upto max_workers limit. +# Typically you'd want max_workers to equal maximum number +# of clients allowed +#min_workers = 5 +#max_workers = 20 + + +# The number of priority workers. If all workers from above +# pool will stuck, some calls marked as high priority +# (notably domainDestroy) can be executed in this pool. +#prio_workers = 5 + +# Total global limit on concurrent RPC calls. Should be +# at least as large as max_workers. Beyond this, RPC requests +# will be read into memory and queued. This directly impact +# memory usage, currently each request requires 256 KB of +# memory. So by default upto 5 MB of memory is used +# +# XXX this isn't actually enforced yet, only the per-client +# limit is used so far +#max_requests = 20 + +# Limit on concurrent requests from a single client +# connection. To avoid one client monopolizing the server +# this should be a small fraction of the global max_requests +# and max_workers parameter +#max_client_requests = 5 + +################################################################# +# +# Logging controls +# + +# Logging level: 4 errors, 3 warnings, 2 information, 1 debug +# basically 1 will log everything possible +#log_level = 3 + +# Logging filters: +# A filter allows to select a different logging level for a given category +# of logs +# The format for a filter is: +# x:name +# where name is a match string e.g. remote or qemu +# the x prefix is the minimal level where matching messages should be logged +# 1: DEBUG +# 2: INFO +# 3: WARNING +# 4: ERROR +# +# Multiple filter can be defined in a single @filters, they just need to be +# separated by spaces. +# +# e.g: +# log_filters="3:remote 4:event" +# to only get warning or errors from the remote layer and only errors from +# the event layer. + +# Logging outputs: +# An output is one of the places to save logging information +# The format for an output can be: +# x:stderr +# output goes to stderr +# x:syslog:name +# use syslog for the output and use the given name as the ident +# x:file:file_path +# output to a file, with the given filepath +# In all case the x prefix is the minimal level, acting as a filter +# 1: DEBUG +# 2: INFO +# 3: WARNING +# 4: ERROR +# +# Multiple output can be defined, they just need to be separated by spaces. +# e.g.: +# log_outputs="3:syslog:libvirtd" +# to log all warnings and errors to syslog under the libvirtd ident + +# Log debug buffer size: default 64 +# The daemon keeps an internal debug log buffer which will be dumped in case +# of crash or upon receiving a SIGUSR2 signal. This setting allows to override +# the default buffer size in kilobytes. +# If value is 0 or less the debug log buffer is deactivated +#log_buffer_size = 64 + + +################################################################## +# +# Auditing +# +# This setting allows usage of the auditing subsystem to be altered: +# +# audit_level == 0 -> disable all auditing +# audit_level == 1 -> enable auditing, only if enabled on host (default) +# audit_level == 2 -> enable auditing, and exit if disabled on host +# +#audit_level = 2 +# +# If set to 1, then audit messages will also be sent +# via libvirt logging infrastructure. Defaults to 0 +# +#audit_logging = 1 + +################################################################### +# UUID of the host: +# Provide the UUID of the host here in case the command +# 'dmidecode -s system-uuid' does not provide a valid uuid. In case +# 'dmidecode' does not provide a valid UUID and none is provided here, a +# temporary UUID will be generated. +# Keep the format of the example UUID below. UUID must not have all digits +# be the same. + +# NB This default all-zeros UUID will not work. Replace +# it with the output of the 'uuidgen' command and then +# uncomment this entry +#host_uuid = "00000000-0000-0000-0000-000000000000" + +################################################################### +# Keepalive protocol: +# This allows libvirtd to detect broken client connections or even +# dead client. A keepalive message is sent to a client after +# keepalive_interval seconds of inactivity to check if the client is +# still responding; keepalive_count is a maximum number of keepalive +# messages that are allowed to be sent to the client without getting +# any response before the connection is considered broken. In other +# words, the connection is automatically closed approximately after +# keepalive_interval * (keepalive_count + 1) seconds since the last +# message received from the client. If keepalive_interval is set to +# -1, libvirtd will never send keepalive requests; however clients +# can still send them and the deamon will send responses. When +# keepalive_count is set to 0, connections will be automatically +# closed after keepalive_interval seconds of inactivity without +# sending any keepalive messages. +# +#keepalive_interval = 5 +#keepalive_count = 5 +# +# If set to 1, libvirtd will refuse to talk to clients that do not +# support keepalive protocol. Defaults to 0. +# +#keepalive_required = 1 diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirtd.sh b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirtd.sh new file mode 100755 index 00000000..29dbf391 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/libvirtd.sh @@ -0,0 +1,103 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: libvirtd +# Required-Start: $local_fs $network dbus +# Required-Stop: $local_fs $network dbus +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +### END INIT INFO + +if [ -f /lib/lsb/init-functions ] +then + . /lib/lsb/init-functions +else + # int log_begin_message (char *message) + log_begin_msg () { + if [ -z "$1" ]; then + return 1 + fi + echo " * $@" + } + + # int log_end_message (int exitstatus) + log_end_msg () { + + # If no arguments were passed, return + [ -z "$1" ] && return 1 + + # Only do the fancy stuff if we have an appropriate terminal + # and if /usr is already mounted + TPUT=/usr/bin/tput + EXPR=/usr/bin/expr + if [ -x $TPUT ] && [ -x $EXPR ] && $TPUT hpa 60 >/dev/null 2>&1; then + COLS=`$TPUT cols` + if [ -n "$COLS" ]; then + COL=`$EXPR $COLS - 7` + else + COL=73 + fi + UP=`$TPUT cuu1` + END=`$TPUT hpa $COL` + START=`$TPUT hpa 0` + RED=`$TPUT setaf 1` + NORMAL=`$TPUT op` + if [ $1 -eq 0 ]; then + echo "$UP$END[ ok ]" + else + echo -e "$UP$START $RED*$NORMAL$END[${RED}fail${NORMAL}]" + fi + else + if [ $1 -eq 0 ]; then + echo " ...done." + else + echo " ...fail!" + fi + fi + return $1 + } + + log_warning_msg () { + if log_use_fancy_output; then + YELLOW=`$TPUT setaf 3` + NORMAL=`$TPUT op` + echo "$YELLOW*$NORMAL $@" + else + echo "$@" + fi + } + +fi + +case "$1" in + start) + if [ -e /var/run/libvirtd.pid ]; then + if [ -d /proc/$(cat /var/run/libvirtd.pid) ]; then + echo "virtualization library already started; not starting." + else + echo "Removing stale PID file /var/run/libvirtd.pid." + rm -f /var/run/libvirtd.pid + fi + fi + log_begin_msg "Starting virtualization library daemon: libvirtd" + if [ ! -e /var/run/libvirtd.pid ]; then + start-stop-daemon -K -x /usr/bin/dnsmasq --pidfile /var/run/libvirt/network/default.pid + fi + start-stop-daemon --start --quiet --pidfile /var/run/libvirtd.pid --exec /usr/sbin/libvirtd -- --daemon --listen + log_end_msg $? + ;; + stop) + log_begin_msg "Stopping virtualization library daemon: libvirtd" + start-stop-daemon --stop --quiet --retry 3 --exec /usr/sbin/libvirtd --pidfile /var/run/libvirtd.pid + log_end_msg $? + rm -f /var/run/libvirtd.pid + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch new file mode 100644 index 00000000..fc3880fb --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/lxc_monitor-Avoid-AB-BA-lock-race.patch @@ -0,0 +1,106 @@ +From 7882c6eca53fe9abe253497a50f6c5ae062176d3 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Mon, 24 Sep 2018 11:11:35 -0400 +Subject: [PATCH] lxc_monitor: Avoid AB / BA lock race + +A deadlock situation can occur when autostarting a LXC domain 'guest' +due to two threads attempting to take opposing locks while holding +opposing locks (AB BA problem). Thread A takes and holds the 'vm' lock +while attempting to take the 'client' lock, meanwhile, thread B takes +and holds the 'client' lock while attempting to take the 'vm' lock. + +The potential for this can be seen as follows: + +Thread A: +virLXCProcessAutostartDomain (takes vm lock) + --> virLXCProcessStart + --> virLXCProcessConnectMonitor + --> virLXCMonitorNew + --> virNetClientSetCloseCallback (wants client lock) + +Thread B: +virNetClientIncomingEvent (takes client lock) + --> virNetClientIOHandleInput + --> virNetClientCallDispatch + --> virNetClientCallDispatchMessage + --> virNetClientProgramDispatch + --> virLXCMonitorHandleEventInit + --> virLXCProcessMonitorInitNotify (wants vm lock) + +Since these threads are scheduled independently and are preemptible it +is possible for the deadlock scenario to occur where each thread locks +their first lock but both will fail to get their second lock and just +spin forever. You get something like: + +virLXCProcessAutostartDomain (takes vm lock) + --> virLXCProcessStart + --> virLXCProcessConnectMonitor + --> virLXCMonitorNew +<...> +virNetClientIncomingEvent (takes client lock) + --> virNetClientIOHandleInput + --> virNetClientCallDispatch + --> virNetClientCallDispatchMessage + --> virNetClientProgramDispatch + --> virLXCMonitorHandleEventInit + --> virLXCProcessMonitorInitNotify (wants vm lock but spins) +<...> + --> virNetClientSetCloseCallback (wants client lock but spins) + +Neither thread ever gets the lock it needs to be able to continue +while holding the lock that the other thread needs. + +The actual window for preemption which can cause this deadlock is +rather small, between the calls to virNetClientProgramNew() and +execution of virNetClientSetCloseCallback(), both in +virLXCMonitorNew(). But it can be seen in real world use that this +small window is enough. + +By moving the call to virNetClientSetCloseCallback() ahead of +virNetClientProgramNew() we can close any possible chance of the +deadlock taking place. There should be no other implications to the +move since the close callback (in the unlikely event was called) will +spin on the vm lock. The remaining work that takes place between the +old call location of virNetClientSetCloseCallback() and the new +location is unaffected by the move. + +Upstream-Status: Backport commit 7882c6eca53f + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +Signed-off-by: Michal Privoznik <mprivozn@redhat.com> +--- + src/lxc/lxc_monitor.c | 11 +++++++---- + 1 file changed, 7 insertions(+), 4 deletions(-) + +diff --git a/src/lxc/lxc_monitor.c b/src/lxc/lxc_monitor.c +index e765c16..0b18a14 100644 +--- a/src/lxc/lxc_monitor.c ++++ b/src/lxc/lxc_monitor.c +@@ -161,6 +161,13 @@ virLXCMonitorPtr virLXCMonitorNew(virDomainObjPtr vm, + if (virNetClientRegisterAsyncIO(mon->client) < 0) + goto error; + ++ /* avoid deadlock by making this call before assigning virLXCMonitorEvents */ ++ virNetClientSetCloseCallback(mon->client, virLXCMonitorEOFNotify, mon, ++ virLXCMonitorCloseFreeCallback); ++ ++ /* close callback now has its own reference */ ++ virObjectRef(mon); ++ + if (!(mon->program = virNetClientProgramNew(VIR_LXC_MONITOR_PROGRAM, + VIR_LXC_MONITOR_PROGRAM_VERSION, + virLXCMonitorEvents, +@@ -175,10 +182,6 @@ virLXCMonitorPtr virLXCMonitorNew(virDomainObjPtr vm, + mon->vm = virObjectRef(vm); + memcpy(&mon->cb, cb, sizeof(mon->cb)); + +- virObjectRef(mon); +- virNetClientSetCloseCallback(mon->client, virLXCMonitorEOFNotify, mon, +- virLXCMonitorCloseFreeCallback); +- + cleanup: + VIR_FREE(sockpath); + return mon; +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/qemu-fix-crash-in-qemuOpen.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/qemu-fix-crash-in-qemuOpen.patch new file mode 100644 index 00000000..3cf9e839 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/qemu-fix-crash-in-qemuOpen.patch @@ -0,0 +1,39 @@ +From 74bff2509080912ea8abf1de8fd95fa2412b659a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com> +Date: Thu, 11 Apr 2013 11:37:25 +0200 +Subject: [PATCH] qemu: fix crash in qemuOpen + +commit 74bff2509080912ea8abf1de8fd95fa2412b659a from upsteam +git://libvirt.org/libvirt.git + +If the path part of connection URI is not present, cfg is used +unitialized. + +https://bugzilla.redhat.com/show_bug.cgi?id=950855 +--- + src/qemu/qemu_driver.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c +index 2c0d7d1..0d41e39 100644 +--- a/src/qemu/qemu_driver.c ++++ b/src/qemu/qemu_driver.c +@@ -1026,6 +1026,7 @@ static virDrvOpenStatus qemuOpen(virConnectPtr conn, + goto cleanup; + } + ++ cfg = virQEMUDriverGetConfig(qemu_driver); + if (conn->uri->path == NULL) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("no QEMU URI path given, try %s"), +@@ -1033,7 +1034,6 @@ static virDrvOpenStatus qemuOpen(virConnectPtr conn, + goto cleanup; + } + +- cfg = virQEMUDriverGetConfig(qemu_driver); + if (cfg->privileged) { + if (STRNEQ(conn->uri->path, "/system") && + STRNEQ(conn->uri->path, "/session")) { +-- +1.7.1 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/run-ptest b/external/meta-virtualization/recipes-extended/libvirt/libvirt/run-ptest new file mode 100644 index 00000000..a434b186 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/run-ptest @@ -0,0 +1,3 @@ +#!/bin/sh + +make -C tests -k check-TESTS diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/runptest.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/runptest.patch new file mode 100644 index 00000000..457e8218 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/runptest.patch @@ -0,0 +1,135 @@ +From 94478517c4f9950b28be3a348387db6ede3db812 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Mon, 4 Jun 2018 11:55:37 -0400 +Subject: [PATCH] Add 'install-ptest' rule. + +Change TESTS_ENVIRONMENT to allow running outside build dir. + +Upstream-status: Pending +Signed-off-by: Mihaela Sendrea <mihaela.sendrea@enea.com> +[KK: Update context for 1.3.5.] +Signed-off-by: Kai Kang <kai.kang@windriver.com> +[MA: Allow separate source and build dirs] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +[ZH: add missing test_helper files] +Signed-off-by: He Zhe <zhe.he@windriver.com> +[MA: Update context for v4.3.0] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + tests/Makefile.am | 74 +++++++++++++++++++++++++++++++++++++++++++++---------- + 1 file changed, 61 insertions(+), 13 deletions(-) + +diff --git a/tests/Makefile.am b/tests/Makefile.am +index 7b93fbd..edc1eb9 100644 +--- a/tests/Makefile.am ++++ b/tests/Makefile.am +@@ -35,11 +35,13 @@ INCLUDES = \ + + WARN_CFLAGS += $(RELAXED_FRAME_LIMIT_CFLAGS) + ++PTEST_DIR ?= $(libdir)/libvirt/ptest ++ + AM_CFLAGS = \ +- -Dabs_builddir="\"$(abs_builddir)\"" \ +- -Dabs_topbuilddir="\"$(abs_topbuilddir)\"" \ +- -Dabs_srcdir="\"$(abs_srcdir)\"" \ +- -Dabs_topsrcdir="\"$(abs_topsrcdir)\"" \ ++ -Dabs_builddir="\"$(PTEST_DIR)/tests\"" \ ++ -Dabs_topbuilddir="\"$(PTEST_DIR)\"" \ ++ -Dabs_srcdir="\"$(PTEST_DIR)/tests\"" \ ++ -Dabs_topsrcdir="\"$(PTEST_DIR)\"" \ + $(LIBXML_CFLAGS) \ + $(LIBNL_CFLAGS) \ + $(GNUTLS_CFLAGS) \ +@@ -64,7 +66,7 @@ QEMULIB_LDFLAGS = \ + $(MINGW_EXTRA_LDFLAGS) + + INCLUDES += \ +- -DTEST_DRIVER_DIR=\"$(top_builddir)/src/.libs\" ++ -DTEST_DRIVER_DIR=\"$(PTEST_DIR)/src/.libs\" + + PROBES_O = + if WITH_DTRACE_PROBES +@@ -466,17 +468,15 @@ TESTS = $(test_programs) \ + # Also, BSD sh doesn't like 'a=b b=$$a', so we can't use an + # intermediate shell variable, but must do all the expansion in make + +-lv_abs_top_builddir=$(shell cd '$(top_builddir)' && pwd) +- + VIR_TEST_EXPENSIVE ?= $(VIR_TEST_EXPENSIVE_DEFAULT) + TESTS_ENVIRONMENT = \ +- abs_top_builddir=$(lv_abs_top_builddir) \ +- abs_top_srcdir=`cd '$(top_srcdir)'; pwd` \ +- abs_builddir=$(abs_builddir) \ +- abs_srcdir=$(abs_srcdir) \ +- CONFIG_HEADER="$(lv_abs_top_builddir)/config.h" \ ++ abs_top_builddir="$(PTEST_DIR)" \ ++ abs_top_srcdir="$(PTEST_DIR)" \ ++ abs_builddir="$(PTEST_DIR)/tests" \ ++ abs_srcdir="$(PTEST_DIR)/tests" \ ++ CONFIG_HEADER="$(PTEST_DIR)/config.h" \ + SHELL="$(SHELL)" \ +- LIBVIRT_DRIVER_DIR="$(lv_abs_top_builddir)/src/.libs" \ ++ LIBVIRT_DRIVER_DIR="$(PTEST_DIR)/src/.libs" \ + LIBVIRT_AUTOSTART=0 \ + LC_ALL=C \ + VIR_TEST_EXPENSIVE=$(VIR_TEST_EXPENSIVE) \ +@@ -1486,5 +1486,55 @@ else ! WITH_CIL + EXTRA_DIST += objectlocking.ml + endif ! WITH_CIL + ++buildtest-TESTS: $(TESTS) $(test_libraries) $(test_helpers) ++ ++PTESTS = $(TESTS) $(test_helpers) test-lib.sh virschematest ++ ++install-ptest: ++ list='$(TESTS) $(test_helpers) test-lib.sh virschematest' ++ install -d $(DEST_DIR)/tools ++ @(if [ -d ../tools/.libs ] ; then cd ../tools/.libs; fi; \ ++ install * $(DEST_DIR)/tools) ++ install -d $(DEST_DIR)/src/network ++ cp $(top_srcdir)/src/network/*.xml $(DEST_DIR)/src/network ++ install -d $(DEST_DIR)/src/cpu_map ++ cp $(top_srcdir)/src/cpu_map/*.xml $(DEST_DIR)/src/cpu_map ++ install ../src/libvirt_iohelper $(DEST_DIR)/src ++ install -D ../src/libvirtd $(DEST_DIR)/src/libvirtd ++ install -d $(DEST_DIR)/src/remote ++ install -D $(top_srcdir)/src/remote/libvirtd.conf $(DEST_DIR)/src/remote/libvirtd.conf ++ install -d $(DEST_DIR)/src/remote/.libs ++ @(if [ -d ../src/remote/.libs ] ; then cd ../src/remote/.libs; fi; \ ++ install * $(DEST_DIR)/src/remote/.libs) ++ install -d $(DEST_DIR)/src/.libs ++ @(if [ -d ../src/.libs ] ; then cd ../src/.libs; fi; \ ++ install * $(DEST_DIR)/src/.libs) ++ install -d $(DEST_DIR)/docs/schemas ++ cp $(top_srcdir)/docs/schemas/*.rng $(DEST_DIR)/docs/schemas ++ cp -r $(top_srcdir)/build-aux $(DEST_DIR) ++ install -d $(DEST_DIR)/examples/xml ++ cp -r $(top_srcdir)/examples/xml/test $(DEST_DIR)/examples/xml ++ install -d $(DEST_DIR)/tests/.libs ++ find . -type d -name "*xml2xml*" -exec cp -r {} $(DEST_DIR)/tests \; ++ find . -type d -name "*data" -exec cp -r {} $(DEST_DIR)/tests \; ++ @(for file in $(PTESTS); do \ ++ if [ -f .libs/$$file ]; then \ ++ install .libs/$$file $(DEST_DIR)/tests; \ ++ elif [ -f $(srcdir)/$$file ]; then \ ++ install $(srcdir)/$$file $(DEST_DIR)/tests; \ ++ else \ ++ install $(builddir)/$$file $(DEST_DIR)/tests; \ ++ fi; \ ++ done;) ++ @(if [ -d .libs ]; then install .libs/*.so $(DEST_DIR)/tests/.libs; fi;) ++ cp ../config.h $(DEST_DIR) ++ cp Makefile $(DEST_DIR)/tests ++ sed -i -e 's/^Makefile:/_Makefile:/' $(DEST_DIR)/tests/Makefile ++ cp ../Makefile $(DEST_DIR) ++ sed -i -e 's|^Makefile:|_Makefile:|' $(DEST_DIR)/Makefile ++ sed -i -e 's|$(BUILD_DIR)|$(PTEST_DIR)|g' $(DEST_DIR)/tests/Makefile ++ sed -i -e 's|$(BUILD_DIR)|$(PTEST_DIR)|g' $(DEST_DIR)/Makefile ++ sed -i -e 's|^\(.*\.log:\) \(.*EXEEXT.*\)|\1|g' $(DEST_DIR)/tests/Makefile ++ + CLEANFILES = *.cov *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda *.cmi *.cmx \ + objectlocking-files.txt +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt/tools-add-libvirt-net-rpc-to-virt-host-validate-when.patch b/external/meta-virtualization/recipes-extended/libvirt/libvirt/tools-add-libvirt-net-rpc-to-virt-host-validate-when.patch new file mode 100644 index 00000000..5f6f9502 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt/tools-add-libvirt-net-rpc-to-virt-host-validate-when.patch @@ -0,0 +1,91 @@ +From f73c5c61c921bf773dcba5e4234e23afce5dbe7f Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield <bruce.ashfield@windriver.com> +Date: Fri, 2 Aug 2013 11:38:43 -0400 +Subject: [PATCH] tools: add libvirt-net-rpc to virt-host-validate when TLS is + enabled + +When gnu-tls is enabled for libvirt references to virNetTLSInit are +generated in libvirt. Any binaries linking against libvirt, must also +link against libvirt-net-rpc which provides the implementation. + +Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +[ywei: rebased to libvirt-1.3.2] +Signed-off-by: Yunguo Wei <yunguo.wei@windriver.com> +[MA: rebase to v4.3.0] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + examples/Makefile.am | 19 +++++++++++++++++++ + tools/Makefile.am | 13 +++++++++++++ + 2 files changed, 32 insertions(+) + +diff --git a/examples/Makefile.am b/examples/Makefile.am +index 7069d74..c8893e3 100644 +--- a/examples/Makefile.am ++++ b/examples/Makefile.am +@@ -39,6 +39,10 @@ LDADD = $(STATIC_BINARIES) $(WARN_CFLAGS) $(COVERAGE_LDFLAGS) \ + $(top_builddir)/src/libvirt.la $(top_builddir)/gnulib/lib/libgnu.la \ + $(top_builddir)/src/libvirt-admin.la + ++if WITH_GNUTLS ++LDADD += $(top_builddir)/src/libvirt-net-rpc.la ++endif ++ + noinst_PROGRAMS=dominfo/info1 dommigrate/dommigrate domsuspend/suspend \ + domtop/domtop hellolibvirt/hellolibvirt object-events/event-test \ + openauth/openauth rename/rename admin/list_servers admin/list_clients \ +@@ -70,6 +74,21 @@ admin_logging_SOURCES = admin/logging.c + INSTALL_DATA_LOCAL = + UNINSTALL_LOCAL = + ++if WITH_GNUTLS ++dominfo_info1_LDADD = $(top_builddir)/src/libvirt-net-rpc.la \ ++ $(LDADD) \ ++ $(NULL) ++domsuspend_suspend_LDADD = $(top_builddir)/src/libvirt-net-rpc.la \ ++ $(LDADD) \ ++ $(NULL) ++hellolibvirt_hellolibvirt_LDADD = $(top_builddir)/src/libvirt-net-rpc.la \ ++ $(LDADD) \ ++ $(NULL) ++openauth_openauth_LDADD = $(top_builddir)/src/libvirt-net-rpc.la \ ++ $(LDADD) \ ++ $(NULL) ++endif ++ + if WITH_APPARMOR_PROFILES + apparmordir = $(sysconfdir)/apparmor.d/ + apparmor_DATA = \ +diff --git a/tools/Makefile.am b/tools/Makefile.am +index 1452d98..204e772 100644 +--- a/tools/Makefile.am ++++ b/tools/Makefile.am +@@ -188,6 +188,13 @@ virt_host_validate_LDADD = \ + ../gnulib/lib/libgnu.la \ + $(NULL) + ++if WITH_GNUTLS ++virt_host_validate_LDADD += ../src/libvirt-net-rpc.la \ ++ ../gnulib/lib/libgnu.la \ ++ $(NULL) ++endif ++ ++ + virt_host_validate_CFLAGS = \ + $(AM_CFLAGS) \ + $(NULL) +@@ -268,6 +275,12 @@ virt_admin_CFLAGS = \ + $(READLINE_CFLAGS) + BUILT_SOURCES = + ++if WITH_GNUTLS ++virsh_LDADD += ../src/libvirt-net-rpc.la \ ++ ../gnulib/lib/libgnu.la \ ++ $(NULL) ++endif ++ + if WITH_WIN_ICON + virsh_LDADD += virsh_win_icon.$(OBJEXT) + +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/libvirt/libvirt_4.7.0.bb b/external/meta-virtualization/recipes-extended/libvirt/libvirt_4.7.0.bb new file mode 100644 index 00000000..270dc725 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvirt/libvirt_4.7.0.bb @@ -0,0 +1,328 @@ +DESCRIPTION = "A toolkit to interact with the virtualization capabilities of recent versions of Linux." +HOMEPAGE = "http://libvirt.org" +LICENSE = "LGPLv2.1+ & GPLv2+" +LICENSE_${PN}-ptest = "GPLv2+ & LGPLv2.1+" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING.LESSER;md5=4b54a1fd55a448865a0b32d41598759d" +SECTION = "console/tools" + +DEPENDS = "bridge-utils gnutls libxml2 lvm2 avahi parted curl libpcap util-linux e2fsprogs pm-utils \ + iptables dnsmasq readline libtasn1 libxslt-native acl libdevmapper libtirpc \ + ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'shadow-native', '', d)}" + +# libvirt-guests.sh needs gettext.sh +# +RDEPENDS_${PN} = "gettext-runtime" + +RDEPENDS_${PN}-ptest += "make gawk perl bash" + +RDEPENDS_libvirt-libvirtd += "bridge-utils iptables pm-utils dnsmasq netcat-openbsd" +RDEPENDS_libvirt-libvirtd_append_x86-64 = " dmidecode" +RDEPENDS_libvirt-libvirtd_append_x86 = " dmidecode" + +#connman blocks the 53 port and libvirtd can't start its DNS service +RCONFLICTS_${PN}_libvirtd = "connman" + +SRC_URI = "http://libvirt.org/sources/libvirt-${PV}.tar.xz;name=libvirt \ + file://tools-add-libvirt-net-rpc-to-virt-host-validate-when.patch \ + file://libvirtd.sh \ + file://libvirtd.conf \ + file://dnsmasq.conf \ + file://runptest.patch \ + file://run-ptest \ + file://libvirt-use-pkg-config-to-locate-libcap.patch \ + file://0001-to-fix-build-error.patch \ + file://install-missing-file.patch \ + file://0001-ptest-Remove-Windows-1252-check-from-esxutilstest.patch \ + file://configure.ac-search-for-rpc-rpc.h-in-the-sysroot.patch \ + file://lxc_monitor-Avoid-AB-BA-lock-race.patch \ + file://CVE-2019-3840.patch \ + " + +SRC_URI[libvirt.md5sum] = "38da6c33250dcbc0a6d68de5c758262b" +SRC_URI[libvirt.sha256sum] = "92c279f7321624ac5a37a81f8bbe8c8d2a16781da04c63c99c92d3de035767e4" + +inherit autotools gettext update-rc.d pkgconfig ptest systemd + +# Override the default set in autotools.bbclass so that we will use relative pathnames +# to our local m4 files. This prevents an "Argument list too long" error during configuration +# if our project is in a directory with an absolute pathname of more than about 125 characters. +# +acpaths = "-I ./m4" + +CACHED_CONFIGUREVARS += "\ +ac_cv_path_XMLCATLOG=/usr/bin/xmlcatalog \ +ac_cv_path_AUGPARSE=/usr/bin/augparse \ +ac_cv_path_DNSMASQ=/usr/bin/dnsmasq \ +ac_cv_path_BRCTL=/usr/sbin/brctl \ +ac_cv_path_TC=/sbin/tc \ +ac_cv_path_UDEVADM=/sbin/udevadm \ +ac_cv_path_MODPROBE=/sbin/modprobe \ +ac_cv_path_IP_PATH=/bin/ip \ +ac_cv_path_IPTABLES_PATH=/usr/sbin/iptables \ +ac_cv_path_IP6TABLES_PATH=/usr/sbin/ip6tables \ +ac_cv_path_MOUNT=/bin/mount \ +ac_cv_path_UMOUNT=/bin/umount \ +ac_cv_path_MKFS=/usr/sbin/mkfs \ +ac_cv_path_SHOWMOUNT=/usr/sbin/showmount \ +ac_cv_path_PVCREATE=/usr/sbin/pvcreate \ +ac_cv_path_VGCREATE=/usr/sbin/vgcreate \ +ac_cv_path_LVCREATE=/usr/sbin/lvcreate \ +ac_cv_path_PVREMOVE=/usr/sbin/pvremove \ +ac_cv_path_VGREMOVE=/usr/sbin/vgremove \ +ac_cv_path_LVREMOVE=/usr/sbin/lvremove \ +ac_cv_path_LVCHANGE=/usr/sbin/lvchange \ +ac_cv_path_VGCHANGE=/usr/sbin/vgchange \ +ac_cv_path_VGSCAN=/usr/sbin/vgscan \ +ac_cv_path_PVS=/usr/sbin/pvs \ +ac_cv_path_VGS=/usr/sbin/vgs \ +ac_cv_path_LVS=/usr/sbin/lvs \ +ac_cv_path_PARTED=/usr/sbin/parted \ +ac_cv_path_DMSETUP=/usr/sbin/dmsetup" + +# Ensure that libvirt uses polkit rather than policykit, whether the host has +# pkcheck installed or not, and ensure the path is correct per our config. +CACHED_CONFIGUREVARS += "ac_cv_path_PKCHECK_PATH=${bindir}/pkcheck" + +# Some other possible paths we are not yet setting +#ac_cv_path_RPCGEN= +#ac_cv_path_XSLTPROC= +#ac_cv_path_RADVD= +#ac_cv_path_UDEVSETTLE= +#ac_cv_path_EBTABLES_PATH= +#ac_cv_path_PKG_CONFIG= +#ac_cv_path_ac_pt_PKG_CONFIG +#ac_cv_path_POLKIT_AUTH= +#ac_cv_path_DTRACE= +#ac_cv_path_ISCSIADM= +#ac_cv_path_MSGFMT= +#ac_cv_path_GMSGFMT= +#ac_cv_path_XGETTEXT= +#ac_cv_path_MSGMERGE= +#ac_cv_path_SCRUB= +#ac_cv_path_PYTHON= + +ALLOW_EMPTY_${PN} = "1" + +PACKAGES =+ "${PN}-libvirtd ${PN}-virsh" + +ALLOW_EMPTY_${PN}-libvirtd = "1" + +FILES_${PN}-libvirtd = " \ + ${sysconfdir}/init.d \ + ${sysconfdir}/sysctl.d \ + ${sysconfdir}/logrotate.d \ + ${sysconfdir}/libvirt/libvirtd.conf \ + /usr/lib/sysctl.d/60-libvirtd.conf \ + ${sbindir}/libvirtd \ + ${systemd_unitdir}/system/* \ + ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', '', '${libexecdir}/libvirt-guests.sh', d)} \ + " + +FILES_${PN}-virsh = " \ + ${bindir}/virsh \ + ${datadir}/bash-completion/completions/virsh \ +" + +FILES_${PN} += "${libdir}/libvirt/connection-driver \ + ${datadir}/augeas \ + ${@bb.utils.contains('PACKAGECONFIG', 'polkit', '${datadir}/polkit-1', '', d)} \ + ${datadir}/bash-completion/completions/vsh \ + ${datadir}/bash-completion/completions/virt-admin \ + " + +FILES_${PN}-dbg += "${libdir}/libvirt/connection-driver/.debug ${libdir}/libvirt/lock-driver/.debug" +FILES_${PN}-staticdev += "${libdir}/*.a ${libdir}/libvirt/connection-driver/*.a ${libdir}/libvirt/lock-driver/*.a" + +CONFFILES_${PN} += "${sysconfdir}/libvirt/libvirt.conf \ + ${sysconfdir}/libvirt/lxc.conf \ + ${sysconfdir}/libvirt/qemu-lockd.conf \ + ${sysconfdir}/libvirt/qemu.conf \ + ${sysconfdir}/libvirt/virt-login-shell.conf \ + ${sysconfdir}/libvirt/virtlockd.conf" + +CONFFILES_${PN}-libvirtd = "${sysconfdir}/logrotate.d/libvirt ${sysconfdir}/logrotate.d/libvirt.lxc \ + ${sysconfdir}/logrotate.d/libvirt.qemu ${sysconfdir}/logrotate.d/libvirt.uml \ + ${sysconfdir}/libvirt/libvirtd.conf \ + /usr/lib/sysctl.d/libvirtd.conf" + +INITSCRIPT_PACKAGES = "${PN}-libvirtd" +INITSCRIPT_NAME_${PN}-libvirtd = "libvirtd" +INITSCRIPT_PARAMS_${PN}-libvirtd = "defaults 72" + +SYSTEMD_PACKAGES = "${PN}-libvirtd" +SYSTEMD_SERVICE_${PN}-libvirtd = " \ + libvirtd.service \ + virtlockd.service \ + libvirt-guests.service \ + virtlockd.socket \ + " + + +PRIVATE_LIBS_${PN}-ptest = " \ + libvirt-lxc.so.0 \ + libvirt.so.0 \ + libvirt-qemu.so.0 \ + lockd.so \ + libvirt_driver_secret.so \ + libvirt_driver_nodedev.so \ + libvirt_driver_vbox.so \ + libvirt_driver_interface.so \ + libvirt_driver_uml.so \ + libvirt_driver_network.so \ + libvirt_driver_nwfilter.so \ + libvirt_driver_qemu.so \ + libvirt_driver_storage.so \ + libvirt_driver_lxc.so \ + " + +# xen-minimal config +#PACKAGECONFIG ??= "xen libxl xen-inotify test remote libvirtd" + +# full config +PACKAGECONFIG ??= "qemu yajl uml openvz vmware vbox esx iproute2 lxc test \ + remote macvtap libvirtd netcf udev python ebtables \ + ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux audit libcap-ng', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'xen', 'libxl', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'polkit', '', d)} \ + " + +# qemu is NOT compatible with mips64 +PACKAGECONFIG_remove_mipsarchn32 = "qemu" +PACKAGECONFIG_remove_mipsarchn64 = "qemu" + +# enable,disable,depends,rdepends +# +PACKAGECONFIG[qemu] = "--with-qemu,--without-qemu,qemu," +PACKAGECONFIG[yajl] = "--with-yajl,--without-yajl,yajl,yajl" +PACKAGECONFIG[xenapi] = "--with-xenapi,--without-xenapi,," +PACKAGECONFIG[libxl] = "--with-libxl=${STAGING_DIR_TARGET}/lib,--without-libxl,libxl," +PACKAGECONFIG[uml] = "--with-uml, --without-uml,," +PACKAGECONFIG[openvz] = "--with-openvz,--without-openvz,," +PACKAGECONFIG[vmware] = "--with-vmware,--without-vmware,," +PACKAGECONFIG[phyp] = "--with-phyp,--without-phyp,," +PACKAGECONFIG[vbox] = "--with-vbox,--without-vbox,," +PACKAGECONFIG[esx] = "--with-esx,--without-esx,," +PACKAGECONFIG[hyperv] = "--with-hyperv,--without-hyperv,," +PACKAGECONFIG[polkit] = "--with-polkit,--without-polkit,polkit,polkit" +PACKAGECONFIG[lxc] = "--with-lxc,--without-lxc, lxc," +PACKAGECONFIG[test] = "--with-test=yes,--with-test=no,," +PACKAGECONFIG[remote] = "--with-remote,--without-remote,," +PACKAGECONFIG[macvtap] = "--with-macvtap=yes,--with-macvtap=no,libnl,libnl" +PACKAGECONFIG[libvirtd] = "--with-libvirtd,--without-libvirtd,," +PACKAGECONFIG[netcf] = "--with-netcf,--without-netcf,netcf,netcf" +PACKAGECONFIG[dtrace] = "--with-dtrace,--without-dtrace,," +PACKAGECONFIG[udev] = "--with-udev --with-pciaccess,--without-udev,udev libpciaccess," +PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux," +PACKAGECONFIG[ebtables] = "ac_cv_path_EBTABLES_PATH=/sbin/ebtables,ac_cv_path_EBTABLES_PATH=,ebtables,ebtables" +PACKAGECONFIG[python] = ",,python," +PACKAGECONFIG[sasl] = "--with-sasl,--without-sasl,cyrus-sasl,cyrus-sasl" +PACKAGECONFIG[iproute2] = "ac_cv_path_IP_PATH=/sbin/ip,ac_cv_path_IP_PATH=,iproute2,iproute2" +PACKAGECONFIG[numactl] = "--with-numactl,--without-numactl,numactl," +PACKAGECONFIG[fuse] = "--with-fuse,--without-fuse,fuse," +PACKAGECONFIG[audit] = "--with-audit,--without-audit,audit," +PACKAGECONFIG[libcap-ng] = "--with-capng,--without-capng,libcap-ng," +PACKAGECONFIG[wireshark] = "--with-wireshark-dissector,--without-wireshark-dissector,wireshark libwsutil," + +# Enable the Python tool support +require libvirt-python.inc + +do_install_append() { + install -d ${D}/etc/init.d + install -d ${D}/etc/libvirt + install -d ${D}/etc/dnsmasq.d + + install -m 0755 ${WORKDIR}/libvirtd.sh ${D}/etc/init.d/libvirtd + install -m 0644 ${WORKDIR}/libvirtd.conf ${D}/etc/libvirt/libvirtd.conf + + if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then + # This will wind up in the libvirtd package, but will NOT be invoked by default. + # + mv ${D}/${libexecdir}/libvirt-guests.sh ${D}/${sysconfdir}/init.d + fi + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + # This variable is used by libvirtd.service to start libvirtd in the right mode + sed -i '/#LIBVIRTD_ARGS="--listen"/a LIBVIRTD_ARGS="--listen --daemon"' ${D}/${sysconfdir}/sysconfig/libvirtd + + # We can't use 'notify' when we don't support 'sd_notify' dbus capabilities. + sed -i -e 's/Type=notify/Type=forking/' \ + -e '/Type=forking/a PIDFile=${localstatedir}/run/libvirtd.pid' \ + ${D}/${systemd_unitdir}/system/libvirtd.service + fi + + # The /var/run/libvirt directories created by the Makefile + # are wiped out in volatile, we need to create these at boot. + rm -rf ${D}${localstatedir}/run + install -d ${D}${sysconfdir}/default/volatiles + echo "d root root 0755 ${localstatedir}/run/libvirt none" \ + > ${D}${sysconfdir}/default/volatiles/99_libvirt + echo "d root root 0755 ${localstatedir}/run/libvirt/lockd none" \ + >> ${D}${sysconfdir}/default/volatiles/99_libvirt + echo "d root root 0755 ${localstatedir}/run/libvirt/lxc none" \ + >> ${D}${sysconfdir}/default/volatiles/99_libvirt + echo "d root root 0755 ${localstatedir}/run/libvirt/network none" \ + >> ${D}${sysconfdir}/default/volatiles/99_libvirt + echo "d root root 0755 ${localstatedir}/run/libvirt/qemu none" \ + >> ${D}${sysconfdir}/default/volatiles/99_libvirt + + # Manually set permissions and ownership to match polkit recipe + if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then + install -d -m 0700 ${D}/${datadir}/polkit-1/rules.d + chown polkitd ${D}/${datadir}/polkit-1/rules.d + chgrp root ${D}/${datadir}/polkit-1/rules.d + else + rm -rf ${D}/${datadir}/polkit-1 + fi + + # disable seccomp_sandbox + if [ -e ${D}${sysconfdir}/libvirt/qemu.conf ] ; then + sed -i '/^#seccomp_sandbox = 1/aseccomp_sandbox = 0' \ + ${D}${sysconfdir}/libvirt/qemu.conf + fi + + # Add hook support for libvirt + mkdir -p ${D}/etc/libvirt/hooks + + # Force the main dnsmasq instance to bind only to specified interfaces and + # to not bind to virbr0. Libvirt will run its own instance on this interface. + install -m 644 ${WORKDIR}/dnsmasq.conf ${D}/${sysconfdir}/dnsmasq.d/libvirt-daemon + + # remove .la references to our working diretory + for i in `find ${D}${libdir} -type f -name *.la`; do + sed -i -e 's#-L${B}/src/.libs##g' $i + done +} + +EXTRA_OECONF += " \ + --with-init-script=systemd \ + --with-test-suite \ + " + +EXTRA_OEMAKE = "BUILD_DIR=${B} DEST_DIR=${D}${PTEST_PATH} PTEST_DIR=${PTEST_PATH} SYSTEMD_UNIT_DIR=${systemd_system_unitdir}" + +do_compile_ptest() { + oe_runmake -C tests buildtest-TESTS +} + +do_install_ptest() { + oe_runmake -C tests install-ptest + + find ${S}/tests -maxdepth 1 -type d -exec cp -r {} ${D}${PTEST_PATH}/tests/ \; + + # remove .la files for ptest, they aren't required and can trigger QA errors + for i in `find ${D}${PTEST_PATH} -type f \( -name *.la -o -name *.o \)`; do + rm -f $i + done +} + +pkg_postinst_${PN}() { + if [ -z "$D" ] && [ -e /etc/init.d/populate-volatile.sh ] ; then + /etc/init.d/populate-volatile.sh update + fi +} + +python () { + if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): + d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") +} diff --git a/external/meta-virtualization/recipes-extended/libvmi/libvmi_git.bb b/external/meta-virtualization/recipes-extended/libvmi/libvmi_git.bb new file mode 100644 index 00000000..88fa5d30 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/libvmi/libvmi_git.bb @@ -0,0 +1,41 @@ +DESCRIPTION = "An introspection library, written in C, focused on reading \ + and writing memory from virtual machines (VM's)." +HOMEPAGE = "https://github.com/libvmi/libvmi" +LICENSE = "LGPLv3" +LIC_FILES_CHKSUM = "file://COPYING.LESSER;md5=e6a600fd5e1d9cbde2d983680233ad02" +SECTION = "console/tools" +PV = "0.12.0" + +DEPENDS = "libvirt libcheck bison fuse byacc-native" + +SRC_URI = "git://github.com/libvmi/libvmi.git \ +" + +SRCREV = "6934e8a4758018983ec53ec791dd14a7d6ac31a9" + +S = "${WORKDIR}/git" + +inherit autotools-brokensep pkgconfig + +# Noramlly dynamic libs would be of the form libXX.so.1.0.0 in which case +# bitbake should be able to properly populate the -dev package and the main +# packages. Since libvmi uses the form libXX.1.0.0.so it breaks this automatic +# packaging so we need to be more explicit about what goes where. +FILES_${PN} += "${libdir}/libvmi-0.9.so" +FILES_${PN}-dev = "${includedir} ${libdir}/${BPN}.so ${libdir}/*.la \ + ${libdir}/*.o ${libdir}/pkgconfig ${datadir}/pkgconfig \ + ${datadir}/aclocal ${base_libdir}/*.o \ + ${libdir}/${BPN}/*.la ${base_libdir}/*.la" + +PACKAGECONFIG ??= "json-c" +PACKAGECONFIG[xen] = "--enable-xen,--disable-xen,xen," +PACKAGECONFIG[json-c] = ",,json-c," + +# We include a sample conf file to which we have added +do_install_append () { + mkdir ${D}${sysconfdir} + cp etc/*.conf ${D}${sysconfdir} +} + +# Construction of grammar.h is not parallel safe. +PARALLEL_MAKE = "-j1" diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-common.inc b/external/meta-virtualization/recipes-extended/nagios/nagios-common.inc new file mode 100644 index 00000000..c173041c --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-common.inc @@ -0,0 +1,26 @@ +NAGIOS_CONF_DIR = "${sysconfdir}/nagios" +NAGIOS_PLUGIN_DIR = "${libdir}/nagios/plugins" +NAGIOS_PLUGIN_CONF_DIR = "${NAGIOS_CONF_DIR}/plugins" +NAGIOS_STATE_DIR = "${localstatedir}/nagios" + +NAGIOS_USER = "nagios" +NAGIOS_GROUP = "nagios" + +EXTRA_OECONF += "--sysconfdir=${NAGIOS_CONF_DIR} \ + --libexecdir=${NAGIOS_PLUGIN_DIR} \ + --localstatedir=${NAGIOS_STATE_DIR} \ +" + +FILES_${PN}-dbg += "${NAGIOS_PLUGIN_DIR}/.debug" + +DEPENDS = "nagios-core" + +COMPATIBLE_HOST_aarch64 = "null" + +inherit useradd + +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM_${PN} = "-r ${NAGIOS_GROUP}; -r nagcmd" +USERADD_PARAM_${PN} = "-r -M -g ${NAGIOS_GROUP} ${NAGIOS_USER}" + +FILESYSTEM_PERMS_TABLES_append = " files/fs-perms-nagios.txt" diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-autoheader-error.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-autoheader-error.patch new file mode 100644 index 00000000..014ed1d8 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-autoheader-error.patch @@ -0,0 +1,63 @@ +From 3c51d942f6da08045351ce61cc7f426fa0855489 Mon Sep 17 00:00:00 2001 +From: Chen Qi <Qi.Chen@windriver.com> +Date: Fri, 31 Aug 2018 10:51:36 +0800 +Subject: [PATCH] fix autoheader error + +Upstream-Status: Pending + +Signed-off-by: Chen Qi <Qi.Chen@windriver.com> +--- + configure.ac | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 17e436d..16b3e71 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -388,7 +388,7 @@ AC_ARG_WITH(iobroker, + case $IOBROKER_METHOD in + epoll*) + if test "$GLIBC_NEWER_2_4" -eq 1 -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then +- AC_DEFINE([IOBROKER_USES_EPOLL]) ++ AC_DEFINE([IOBROKER_USES_EPOLL], [1], [iobroker uses epoll]) + else + echo "\"epoll\" is not available as an iobroker method." + echo "Please use one of the other options." +@@ -397,7 +397,7 @@ epoll*) + ;; + poll*) + if test "x$ac_cv_header_sys_poll_h" = "xyes" -o "x$ac_cv_header_poll_h" = "xyes"; then +- AC_DEFINE([IOBROKER_USES_POLL]) ++ AC_DEFINE([IOBROKER_USES_POLL], [1], [iobroker uses poll]) + else + echo "\"poll\" is not available as an iobroker method." + echo "Please use one of the other options." +@@ -406,7 +406,7 @@ poll*) + ;; + select*) + if test "x$ac_cv_header_sys_select_h" = "xyes"; then +- AC_DEFINE([IOBROKER_USES_SELECT]) ++ AC_DEFINE([IOBROKER_USES_SELECT], [1], [iobroker uses select]) + else + echo "\"select\" is not available as an iobroker method." + echo "Please use one of the other options." +@@ -415,13 +415,13 @@ select*) + ;; + none*) + if test "$GLIBC_NEWER_2_4" -eq 1 -a "x$ac_cv_header_sys_epoll_h" = "xyes"; then +- AC_DEFINE([IOBROKER_USES_EPOLL]) ++ AC_DEFINE([IOBROKER_USES_EPOLL], [1], [iobroker uses epoll]) + IOBROKER_METHOD="epoll" + elif test "x$ac_cv_header_sys_poll_h" = "xyes" -o "x$ac_cv_header_poll_h" = "xyes"; then +- AC_DEFINE([IOBROKER_USES_POLL]) ++ AC_DEFINE([IOBROKER_USES_POLL], [1], [iobroker uses poll]) + IOBROKER_METHOD="poll" + elif test "x$ac_cv_header_sys_select_h" = "xyes"; then +- AC_DEFINE([IOBROKER_USES_SELECT]) ++ AC_DEFINE([IOBROKER_USES_SELECT], [1], [iobroker uses select]) + IOBROKER_METHOD="select" + else + echo "There are no available options for iobroker polling" +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-compile-error-of-missing-headers.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-compile-error-of-missing-headers.patch new file mode 100644 index 00000000..7f4cfbd7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-compile-error-of-missing-headers.patch @@ -0,0 +1,75 @@ +From a5e12350cb25b2f9289c0d27e26afc337652d42e Mon Sep 17 00:00:00 2001 +From: Chen Qi <Qi.Chen@windriver.com> +Date: Fri, 31 Aug 2018 13:33:31 +0800 +Subject: [PATCH] fix compile error of missing headers + +Upstream-Status: Pending + +Signed-off-by: Chen Qi <Qi.Chen@windriver.com> +--- + cgi/getcgi.c | 3 ++- + include/shared.h | 31 +++++++++++++++++++++++++++++++ + 2 files changed, 33 insertions(+), 1 deletion(-) + +diff --git a/cgi/getcgi.c b/cgi/getcgi.c +index 37b479f..1f83e11 100644 +--- a/cgi/getcgi.c ++++ b/cgi/getcgi.c +@@ -7,10 +7,11 @@ + + #include "../include/config.h" + #include "../include/getcgi.h" ++#include "../include/shared.h" ++ + #include <stdio.h> + #include <stdlib.h> + +- + #undef PARANOID_CGI_INPUT + + +diff --git a/include/shared.h b/include/shared.h +index 84836c7..1dfa0c7 100644 +--- a/include/shared.h ++++ b/include/shared.h +@@ -1,6 +1,37 @@ + #ifndef NAGIOS_SHARED_H_INCLUDED + #define NAGIOS_SHARED_H_INCLUDED + ++#include <stdio.h> ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <sys/socket.h> ++#include <sys/mman.h> ++#include <stdlib.h> ++#include <stddef.h> ++#include <stdlib.h> ++#include <memory.h> ++#include <string.h> ++#include <strings.h> ++#include <inttypes.h> ++#include <stdint.h> ++#include <unistd.h> ++#include <dirent.h> ++#include <math.h> ++#include <fcntl.h> ++#include <regex.h> ++#include <ctype.h> ++#include <sys/prctl.h> ++#include <stdarg.h> ++#include <dlfcn.h> ++#include <getopt.h> ++#include <syslog.h> ++#include <pwd.h> ++#include <grp.h> ++#include <netdb.h> ++#include <wchar.h> ++#include <locale.h> ++#include <limits.h> ++ + #include <time.h> + #include "lib/libnagios.h" + +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-segment-fault.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-segment-fault.patch new file mode 100644 index 00000000..1ea8da9c --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/0001-fix-segment-fault.patch @@ -0,0 +1,54 @@ +From 65e4539c6eca215d8d79ef8acc5c8842b886752a Mon Sep 17 00:00:00 2001 +From: Chen Qi <Qi.Chen@windriver.com> +Date: Mon, 3 Sep 2018 13:15:29 +0800 +Subject: [PATCH] fix segment fault + +When using strdup(dirname(cfgfile)) directly, we will have segment +fault. This happens at least for glibc 2.28. So we do it step by +step, and this would avoid the segment fault. + +Upstream-Status: Pending + +Signed-off-by: Chen Qi <Qi.Chen@windriver.com> +--- + include/shared.h | 1 + + xdata/xodtemplate.c | 4 +++- + 2 files changed, 4 insertions(+), 1 deletion(-) + +diff --git a/include/shared.h b/include/shared.h +index 1dfa0c7..0188c7d 100644 +--- a/include/shared.h ++++ b/include/shared.h +@@ -31,6 +31,7 @@ + #include <wchar.h> + #include <locale.h> + #include <limits.h> ++#include <libgen.h> + + #include <time.h> + #include "lib/libnagios.h" +diff --git a/xdata/xodtemplate.c b/xdata/xodtemplate.c +index 33d51f4..da32e69 100644 +--- a/xdata/xodtemplate.c ++++ b/xdata/xodtemplate.c +@@ -187,6 +187,7 @@ static void xodtemplate_free_template_skiplists(void) { + int xodtemplate_read_config_data(const char *main_config_file, int options) { + #ifdef NSCORE + char *cfgfile = NULL; ++ char *cfgfile_dir = NULL; + char *config_base_dir = NULL; + char *input = NULL; + char *var = NULL; +@@ -261,7 +262,8 @@ int xodtemplate_read_config_data(const char *main_config_file, int options) { + printf("Unable to allocate memory!\n"); + return ERROR; + } +- config_base_dir = (char *)strdup(dirname(cfgfile)); ++ cfgfile_dir = dirname(cfgfile); ++ config_base_dir = (char *)strdup(cfgfile_dir); + my_free(cfgfile); + + /* open the main config file for reading (we need to find all the config files to read) */ +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/eventhandlers_nagioscmd_path.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-core/eventhandlers_nagioscmd_path.patch new file mode 100644 index 00000000..c767162c --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/eventhandlers_nagioscmd_path.patch @@ -0,0 +1,73 @@ +change eventhandlers nagioscmd path + +Modify nagios.cmd path to the right location +at "/var/nagios/rw/nagios.cmd" + +Signed-off-by: Rickard Engberg <rickard.engberg@windriver.com> +Signed-off-by: Vu Tran <vu.tran@windriver.com> + +diff --git a/contrib/eventhandlers/disable_active_service_checks b/contrib/eventhandlers/disable_active_service_checks +index c01f2be..2c2880b 100755 +--- a/contrib/eventhandlers/disable_active_service_checks ++++ b/contrib/eventhandlers/disable_active_service_checks +@@ -16,7 +16,7 @@ + + printfcmd="/usr/bin/printf" + +-CommandFile="/usr/local/nagios/var/rw/nagios.cmd" ++CommandFile="/var/nagios/rw/nagios.cmd" + + # get the current date/time in seconds since UNIX epoch + datetime=`date +%s` +diff --git a/contrib/eventhandlers/disable_notifications b/contrib/eventhandlers/disable_notifications +index a92bb7a..b2c9c06 100755 +--- a/contrib/eventhandlers/disable_notifications ++++ b/contrib/eventhandlers/disable_notifications +@@ -14,7 +14,7 @@ + + printfcmd="/usr/bin/printf" + +-CommandFile="/usr/local/nagios/var/rw/nagios.cmd" ++CommandFile="/var/nagios/rw/nagios.cmd" + + # get the current date/time in seconds since UNIX epoch + datetime=`date +%s` +diff --git a/contrib/eventhandlers/enable_active_service_checks b/contrib/eventhandlers/enable_active_service_checks +index 423c8d9..631fa00 100755 +--- a/contrib/eventhandlers/enable_active_service_checks ++++ b/contrib/eventhandlers/enable_active_service_checks +@@ -16,7 +16,7 @@ + + printfcmd="/usr/bin/printf" + +-CommandFile="/usr/local/nagios/var/rw/nagios.cmd" ++CommandFile="/var/nagios/rw/nagios.cmd" + + # get the current date/time in seconds since UNIX epoch + datetime=`date +%s` +diff --git a/contrib/eventhandlers/enable_notifications b/contrib/eventhandlers/enable_notifications +index 0d3f13d..2cc0b47 100755 +--- a/contrib/eventhandlers/enable_notifications ++++ b/contrib/eventhandlers/enable_notifications +@@ -14,7 +14,7 @@ + + printfcmd="/usr/bin/printf" + +-CommandFile="/usr/local/nagios/var/rw/nagios.cmd" ++CommandFile="/var/nagios/rw/nagios.cmd" + + # get the current date/time in seconds since UNIX epoch + datetime=`date +%s` +diff --git a/contrib/eventhandlers/submit_check_result b/contrib/eventhandlers/submit_check_result +index 5d89f31..790a988 100755 +--- a/contrib/eventhandlers/submit_check_result ++++ b/contrib/eventhandlers/submit_check_result +@@ -24,7 +24,7 @@ + + echocmd="/bin/echo" + +-CommandFile="/usr/local/nagios/var/rw/nagios.cmd" ++CommandFile="/var/nagios/rw/nagios.cmd" + + # get the current date/time in seconds since UNIX epoch + datetime=`date +%s` diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/nagios-core-systemd-volatile.conf b/external/meta-virtualization/recipes-extended/nagios/nagios-core/nagios-core-systemd-volatile.conf new file mode 100644 index 00000000..134fb854 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/nagios-core-systemd-volatile.conf @@ -0,0 +1,2 @@ +d /var/nagios 0755 nagios nagios - +d /var/run/nagios 0755 nagios nagios - diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/nagios-core.service b/external/meta-virtualization/recipes-extended/nagios/nagios-core/nagios-core.service new file mode 100644 index 00000000..61fda3f7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/nagios-core.service @@ -0,0 +1,18 @@ +[Unit] +Description=Nagios core +After=network.target local-fs.target + +[Service] +Type=forking +User=nagios +Group=nagios +PIDFile=/var/run/nagios/nagios.pid +# Verify Nagios config before start as upstream suggested +ExecStartPre=/usr/bin/nagios -v /etc/nagios/nagios.cfg +ExecStart=/usr/bin/nagios -d /etc/nagios/nagios.cfg +ExecStop=/bin/kill -TERM ${MAINPID} +ExecStopPost=/bin/rm -f /var/spool/nagios/cmd/nagios.cmd +ExecReload=/bin/kill -HUP ${MAINPID} + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core/volatiles b/external/meta-virtualization/recipes-extended/nagios/nagios-core/volatiles new file mode 100644 index 00000000..e9bb7680 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core/volatiles @@ -0,0 +1,2 @@ +d nagios nagios 0755 /var/nagios none +d nagios nagios 0755 /var/run/nagios none diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-core_4.4.2.bb b/external/meta-virtualization/recipes-extended/nagios/nagios-core_4.4.2.bb new file mode 100644 index 00000000..b2196eb3 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-core_4.4.2.bb @@ -0,0 +1,151 @@ +require nagios-common.inc + +DESCRIPTION = "A host/service/network monitoring and management system core files" +HOMEPAGE = "http://www.nagios.org" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPLv2" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=4c4203caac58013115c9ca4b85f296ae" + +SRCNAME = "nagios" + +SRC_URI = "http://prdownloads.sourceforge.net/sourceforge/${SRCNAME}/${SRCNAME}-${PV}.tar.gz \ + file://eventhandlers_nagioscmd_path.patch \ + file://0001-fix-autoheader-error.patch \ + file://0001-fix-compile-error-of-missing-headers.patch \ + file://0001-fix-segment-fault.patch \ + file://volatiles \ + file://nagios-core.service \ + file://nagios-core-systemd-volatile.conf \ + " + +SRC_URI[md5sum] = "7a9736281d4e2ebe4f4569a782f733c5" +SRC_URI[sha256sum] = "3418923f326aa86dc8c84cfd0df788fa495a90d772f8071acf40fdbef0736853" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit autotools-brokensep update-rc.d systemd + +DEPENDS = "gd unzip-native" + +RDEPENDS_${PN} += "\ + gd \ + libpng \ + fontconfig \ + apache2 \ + php \ + nagios-base \ +" + +acpaths = "-I ${S}/autoconf-macros" + +# Set default password for the hardcoded Nagios admin user "nagiosadmin". +# If this variable is empty then will prompt user for password. +NAGIOS_DEFAULT_ADMINUSER_PASSWORD ??= "password" +NAGIOS_CGIBIN_DIR = "${libdir}/nagios/cgi-bin" + +EXTRA_OECONF += "--sbindir=${NAGIOS_CGIBIN_DIR} \ + --datadir=${datadir}/nagios/htdocs \ + --with-command-group=nagcmd \ + --with-httpd-conf=${sysconfdir}/apache2/conf.d \ + --with-lockfile=${localstatedir}/run/nagios/nagios.pid \ + --with-init-dir=${sysconfdir}/init.d \ +" + +# Prevent nagios from stripping binaries, bitbake will take care of that +EXTRA_OECONF += "ac_cv_path_STRIP=true" + +# Prevent nagios from using dynamic libtool library +EXTRA_OECONF += "ac_cv_header_ltdl_h=no" + +# Prevent nagios from suffering host contamination if host has /bin/perl +EXTRA_OECONF += "ac_cv_path_PERL=${bindir}/perl" + +# Set to "1" to allow nagios-core post-init to modify Apache configuration +NAGIOS_MODIFY_APACHE ??= "1" + +do_configure_prepend() { + # rename these macros to have .m4 suffix so that autoreconf could recognize them + for macro in `ls ${S}/autoconf-macros/ax_nagios_get_*`; do + mv $macro $macro.m4 + done +} + +do_compile() { + oe_runmake all +} + +do_install() { + oe_runmake 'DESTDIR=${D}' install + oe_runmake 'DESTDIR=${D}' install-init + oe_runmake 'DESTDIR=${D}' install-config + oe_runmake 'DESTDIR=${D}' install-commandmode + + install -d ${D}${sysconfdir}/apache2/conf.d + oe_runmake 'DESTDIR=${D}' install-webconf + + install -d ${D}${NAGIOS_PLUGIN_CONF_DIR} + + # There is no install target for the contributed eventhandlers so we + # just do it. + install -d ${D}${NAGIOS_PLUGIN_DIR}/eventhandlers + for f in ${S}/contrib/eventhandlers/* ; do + if ! [ -f $f ] ; then + continue; + fi + install $f ${D}${NAGIOS_PLUGIN_DIR}/eventhandlers/ + done + + echo "cfg_dir=${NAGIOS_PLUGIN_CONF_DIR}" >> ${D}${NAGIOS_CONF_DIR}/nagios.cfg + + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${WORKDIR}/nagios-core.service ${D}${systemd_unitdir}/system/ + # use our own service file + rm -f ${D}${systemd_unitdir}/system/nagios.service + install -d ${D}${sysconfdir}/tmpfiles.d + install -m 755 ${WORKDIR}/nagios-core-systemd-volatile.conf ${D}${sysconfdir}/tmpfiles.d/nagios-core-volatile.conf + else + install -d ${D}${sysconfdir}/default/volatiles + install -m 0644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/99_nagios + fi +} + +pkg_postinst_ontarget_${PN}-setup () { + # Set password for nagiosadmin user + if [ -z "${NAGIOS_DEFAULT_ADMINUSER_PASSWORD}" ]; then + htpasswd -c ${NAGIOS_CONF_DIR}/htpasswd.users nagiosadmin + else + htpasswd -b -c ${NAGIOS_CONF_DIR}/htpasswd.users nagiosadmin \ + "${NAGIOS_DEFAULT_ADMINUSER_PASSWORD}" + fi + + # Apache2 might by default turn off CGI + if [ "${NAGIOS_MODIFY_APACHE}" == "1" ] && [ -f "${sysconfdir}/apache2/httpd.conf" ]; then + sed -e 's/^#LoadModule cgid_module/LoadModule cgid_module/g' -i ${sysconfdir}/apache2/httpd.conf + fi +} + +PACKAGES += "${SRCNAME}-base ${PN}-setup" + +FILES_${PN} += "${datadir} \ + ${NAGIOS_PLUGIN_DIR} \ + ${NAGIOS_CGIBIN_DIR} \ +" + +FILES_${PN}-dbg += "${NAGIOS_CGIBIN_DIR}/.debug" + +ALLOW_EMPTY_${SRCNAME}-base = "1" +ALLOW_EMPTY_${PN}-setup = "1" + +SYSTEMD_PACKAGES = "${PN}" +SYSTEMD_SERVICE_${PN} = "nagios-core.service" +SYSTEMD_AUTO_ENABLE_${PN} = "enable" + +USERADD_PACKAGES += "${SRCNAME}-base" +GROUPADD_PARAM_${SRCNAME}-base = "-r ${NAGIOS_GROUP}" +USERADD_PARAM_${SRCNAME}-base = "-r -M -g ${NAGIOS_GROUP} ${NAGIOS_USER}" + +INITSCRIPT_NAME = "nagios" +INITSCRIPT_PARAMS = "defaults" diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/check_nrpe.cfg b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/check_nrpe.cfg new file mode 100644 index 00000000..48f3fa5a --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/check_nrpe.cfg @@ -0,0 +1,11 @@ +# this command runs a program $ARG1$ with arguments $ARG2$ +define command { + command_name check_nrpe + command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ +} + +# this command runs a program $ARG1$ with no arguments +define command { + command_name check_nrpe_1arg + command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ +} diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/fix-compile-without-openssl.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/fix-compile-without-openssl.patch new file mode 100644 index 00000000..ab913a8f --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/fix-compile-without-openssl.patch @@ -0,0 +1,43 @@ +fix compile without openssl + +Build with --disable-ssl causes the build to break with +this error: + +error: unknown type name 'SSL' + void complete_SSL_shutdown( SSL *); + +Signed-off-by: Rickard Engberg <rickard.engberg@windriver.com> +Signed-off-by: Vu Tran <vu.tran@windriver.com> + +Index: nrpe-2.15/src/nrpe.c +=================================================================== +--- nrpe-2.15.orig/src/nrpe.c 2013-09-06 17:27:13.000000000 +0200 ++++ nrpe-2.15/src/nrpe.c 2013-11-20 23:22:49.546791020 +0100 +@@ -99,9 +99,9 @@ + int debug=FALSE; + int use_src=FALSE; /* Define parameter for SRC option */ + +- ++#ifdef HAVE_SSL + void complete_SSL_shutdown( SSL *); +- ++#endif + + int main(int argc, char **argv){ + int result=OK; +@@ -1796,6 +1796,7 @@ + return OK; + } + ++#ifdef HAVE_SSL + void complete_SSL_shutdown( SSL *ssl) { + + /* +@@ -1816,6 +1817,7 @@ + if( SSL_shutdown( ssl)) break; + } + } ++#endif + + /* bail if daemon is running as root */ + int check_privileges(void){ diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/fix-configure-uses-host-openssl.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/fix-configure-uses-host-openssl.patch new file mode 100644 index 00000000..920aabfc --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/fix-configure-uses-host-openssl.patch @@ -0,0 +1,52 @@ +fix configure uses host openssl + +include/dh.h file is needed to be generated with command: + +openssl dhparam -C 512 + +just do not use openssl from host. + +Signed-off-by: Rickard Engberg <rickard.engberg@windriver.com> +Signed-off-by: Vu Tran <vu.tran@windriver.com> + +Index: nrpe-2.15/configure.in +=================================================================== +--- nrpe-2.15.orig/configure.in 2013-09-06 17:27:13.000000000 +0200 ++++ nrpe-2.15/configure.in 2013-11-21 14:09:31.798606782 +0100 +@@ -330,17 +330,6 @@ + + AC_DEFINE_UNQUOTED(HAVE_SSL,[1],[Have SSL support]) + AC_SUBST(HAVE_SSL) +- +- dnl Generate DH parameters +- echo "" +- echo "*** Generating DH Parameters for SSL/TLS ***" +- if test -f "$ssldir/sbin/openssl"; then +- sslbin=$ssldir/sbin/openssl +- else +- sslbin=$ssldir/bin/openssl +- fi +- # awk to strip off meta data at bottom of dhparam output +- $sslbin dhparam -C 512 | awk '/^-----/ {exit} {print}' > include/dh.h + fi + fi + +Index: nrpe-2.15/configure +=================================================================== +--- nrpe-2.15.orig/configure 2013-09-06 17:27:13.000000000 +0200 ++++ nrpe-2.15/configure 2013-11-21 14:11:45.491269701 +0100 +@@ -6738,14 +6738,6 @@ + + + echo "" +- echo "*** Generating DH Parameters for SSL/TLS ***" +- if test -f "$ssldir/sbin/openssl"; then +- sslbin=$ssldir/sbin/openssl +- else +- sslbin=$ssldir/bin/openssl +- fi +- # awk to strip off meta data at bottom of dhparam output +- $sslbin dhparam -C 512 | awk '/^-----/ {exit} {print}' > include/dh.h + fi + fi + diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/nagios-nrpe.service b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/nagios-nrpe.service new file mode 100644 index 00000000..c5a0bdac --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe/nagios-nrpe.service @@ -0,0 +1,10 @@ +[Unit] +Description=Nagios nrpe plugin +After=syslog.target network.target + +[Service] +ExecStart=/usr/bin/nrpe -c /etc/nagios/nrpe.cfg -f +TimeoutSec=60 + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe_3.2.1.bb b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe_3.2.1.bb new file mode 100644 index 00000000..94933367 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nrpe_3.2.1.bb @@ -0,0 +1,100 @@ +require nagios-common.inc + +DESCRIPTION = "Nagios Remote Plugin Executor" +HOMEPAGE = "http://exchange.nagios.org" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPLv2" + +LIC_FILES_CHKSUM = "file://src/nrpe.c;beginline=1;endline=35;md5=0dadd78599abbc737af81432702e9161" + +SRCNAME = "nrpe" + +SRC_URI = "https://github.com/NagiosEnterprises/nrpe/releases/download/${SRCNAME}-${PV}/${SRCNAME}-${PV}.tar.gz \ + file://check_nrpe.cfg \ + file://nagios-nrpe.service \ +" + +SRC_URI[md5sum] = "8997e195fea93cdceb8c7ed8ac1d43bc" +SRC_URI[sha256sum] = "8ad2d1846ab9011fdd2942b8fc0c99dfad9a97e57f4a3e6e394a4ead99c0f1f0" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit autotools-brokensep update-rc.d systemd + +# IP address of server which proxy should connect to +MONITORING_PROXY_SERVER_IP ??= "192.168.7.2" + +# IP address of server which agent should connect to +MONITORING_AGENT_SERVER_IP ??= "192.168.7.4" + +EXTRA_OECONF += "--with-nrpe-user=${NAGIOS_USER} \ + --with-nrpe-group=${NAGIOS_GROUP} \ + ac_cv_lib_wrap_main=no \ + ac_cv_path_PERL=${bindir}/perl \ +" + +EXTRA_OECONF_SSL = "--with-ssl=${STAGING_DIR_HOST} \ + --with-ssl-inc=${STAGING_DIR_HOST}${includedir} \ + --with-ssl-lib=${STAGING_DIR_HOST}${libdir} \ +" + +PACKAGECONFIG[ssl] = "${EXTRA_OECONF_SSL},--disable-ssl,openssl," +PACKAGECONFIG[cmdargs] = "--enable-command-args,--disable-command-args,," +PACKAGECONFIG[bashcomp] = "--enable-bash-command-substitution,--disable-bash-command-substitution,," + +PACKAGECONFIG ??= "cmdargs bashcomp" + +do_configure() { + oe_runconf || die "make failed" +} + +do_compile() { + oe_runmake all +} + +do_install_append() { + oe_runmake 'DESTDIR=${D}' install-daemon + oe_runmake 'DESTDIR=${D}' install-config + + install -d ${D}${sysconfdir}/init.d + install -m 755 ${B}/startup/debian-init ${D}${sysconfdir}/init.d/nrpe + + install -d ${D}${NAGIOS_CONF_DIR}/nrpe.d + echo "include_dir=${NAGIOS_CONF_DIR}/nrpe.d" >> ${D}${NAGIOS_CONF_DIR}/nrpe.cfg + + sed -e "s/^allowed_hosts=.*/allowed_hosts=${MONITORING_AGENT_SERVER_IP}/g" \ + -i ${D}${NAGIOS_CONF_DIR}/nrpe.cfg + + install -d ${D}${NAGIOS_PLUGIN_CONF_DIR} + install -m 664 ${WORKDIR}/check_nrpe.cfg ${D}${NAGIOS_PLUGIN_CONF_DIR} + + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${WORKDIR}/nagios-nrpe.service ${D}${systemd_unitdir}/system/ + fi + + rmdir -p --ignore-fail-on-non-empty ${D}${localstatedir}/nagios +} + +PACKAGES = "${PN}-dbg ${PN}-plugin ${PN}-daemon" + +FILES_${PN}-plugin = "${NAGIOS_PLUGIN_DIR} \ + ${NAGIOS_PLUGIN_CONF_DIR} \ +" + +FILES_${PN}-daemon = "${sysconfdir} \ + ${bindir} \ + ${nonarch_libdir}/tmpfiles.d/ \ +" + +RDEPENDS_${PN}-daemon = "nagios-base" +RDEPENDS_${PN}-plugin = "nagios-base" + +SYSTEMD_PACKAGES = "${PN}-daemon" +SYSTEMD_SERVICE_${PN}-daemon = "nagios-nrpe.service" +SYSTEMD_AUTO_ENABLE_${PN}-daemon = "enable" + +INITSCRIPT_PACKAGES = "${PN}-daemon" +INITSCRIPT_NAME_${PN}-daemon = "nrpe" +INITSCRIPT_PARAMS_${PN}-daemon = "defaults" diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/0001-Fix-missing-argument-in-open-calls.patch b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/0001-Fix-missing-argument-in-open-calls.patch new file mode 100644 index 00000000..6b39fec5 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/0001-Fix-missing-argument-in-open-calls.patch @@ -0,0 +1,52 @@ +From da37e6ce2a8cc315845440488cd2f8dab0a17bfe Mon Sep 17 00:00:00 2001 +From: "John C. Frickson" <jfrickson@nagios.com> +Date: Wed, 7 Oct 2015 14:06:58 -0500 +Subject: [PATCH] Fix missing argument in open calls + +Commit b9f2c08dfdf31430f972a48781fc115c4af13cfe +from https://github.com/NagiosEnterprises/nsca + +Fix for issue http://tracker.nagios.org/view.php?id=286 + +Upstream-Status: Backport + +Singed-off-by: John C. Frickson <jfrickson@nagios.com> +Signed-off-by: Chen Qi <Qi.Chen@windriver.com> +[MA: Context updated to allow application to older version] +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + Changelog | 4 ++++ + src/nsca.c | 2 +- + 2 files changed, 5 insertions(+), 1 deletion(-) + +diff --git a/Changelog b/Changelog +index 3a7edd4..00ea11e 100644 +--- a/Changelog ++++ b/Changelog +@@ -2,6 +2,10 @@ + NSCA Changelog + ************** + ++2.9.x - xx/xx/xxxx ++------------------ ++- Fix missing argument in open calls (Xavier Bachelot / John Frickson) ++ + 2.9.1 - 01/27/2012 + ------------------ + - Applied patch to allow packets arriving with a future time stamp (Daniel Wittenberg) +diff --git a/src/nsca.c b/src/nsca.c +index 6b0e436..0e70b8b 100644 +--- a/src/nsca.c ++++ b/src/nsca.c +@@ -477,7 +477,7 @@ static int read_config_file(char *filename){ + int checkresult_test_fd=-1; + char *checkresult_test=NULL; + asprintf(&checkresult_test,"%s/nsca.test.%i",check_result_path,getpid()); +- checkresult_test_fd=open(checkresult_test,O_WRONLY|O_CREAT); ++ checkresult_test_fd=open(checkresult_test,O_WRONLY|O_CREAT,S_IWUSR); + if (checkresult_test_fd>0){ + unlink(checkresult_test); + } +-- +2.11.0 + diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/init-script.in b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/init-script.in new file mode 100644 index 00000000..a76b34ed --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/init-script.in @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Last Modified 01-07-2003 Ethan Galstad (nagios@nagios.org) +# Notes +# This script takes care of starting and stopping the NSCA daemon. +# Modeled after init script for NRPE written by jaclu@grm.se +# +# chkconfig: 2345 80 30 +# description: nsca is a daemon for accepting service check results \ +# from applications running on other hosts. +# processname: nsca +# config: /usr/local/nagios/etc/nsca.cfg + +### BEGIN INIT INFO +# Provides: nsca +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop nagios nsca daemon +# Description: start and stop nagios nsca daemon +### END INIT INFO + + +# Source function library +if [ -f /etc/rc.d/init.d/functions ]; then +. /etc/rc.d/init.d/functions +elif [ -f /etc/init.d/functions ]; then +. /etc/init.d/functions +elif [ -f /etc/rc.d/functions ]; then +. /etc/rc.d/functions +fi + +NscaBin=@bindir@/nsca +NscaCfg=@sysconfdir@/nsca.cfg +LockFile=/var/lock/nsca + +# See how we were called. +case "$1" in + start) + # Start daemons. + echo -n "Starting nsca: " + start-stop-daemon --start --exec $NscaBin -- -s -c $NscaCfg + RETVAL=$? + echo + touch $LockFile + ;; + stop) + # Stop daemons. + echo -n "Shutting down nsca: " + start-stop-daemon --stop --exec $NscaBin + echo + rm -f $LockFile + ;; + restart) + $0 stop + $0 start + ;; + status) + status nsca + ;; + *) + echo "Usage: nsca {start|stop|restart|status}" + exit 1 +esac + +exit 0 diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/nagios-nsca.service b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/nagios-nsca.service new file mode 100644 index 00000000..aa38b7f2 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca/nagios-nsca.service @@ -0,0 +1,12 @@ +[Unit] +Description=Nagios nsca plugin +After=syslog.target network.target + +[Service] +Type=forking +ExecStart=/usr/bin/nsca -s -c /etc/nagios/nsca.cfg +PIDFile=/var/run/nsca.pid +TimeoutSec=60 + +[Install] +WantedBy=multi-user.target diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-nsca_2.9.1.bb b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca_2.9.1.bb new file mode 100644 index 00000000..f53a47a0 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-nsca_2.9.1.bb @@ -0,0 +1,85 @@ +require nagios-common.inc + +DESCRIPTION = "Nagios Service Check Acceptor" +HOMEPAGE = "http://exchange.nagios.org" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPLv2" + +LIC_FILES_CHKSUM = "file://src/nsca.c;beginline=1;endline=16;md5=c1bd17485c5c1dd42f664fe8b3528674" + +SRCNAME = "nsca" + +SRC_URI = "http://prdownloads.sourceforge.net/sourceforge/nagios/${SRCNAME}-${PV}.tar.gz \ + file://init-script.in \ + file://nagios-nsca.service \ + file://0001-Fix-missing-argument-in-open-calls.patch \ +" + +SRC_URI[md5sum] = "3fe2576a8cc5b252110a93f4c8d978c6" +SRC_URI[sha256sum] = "fb12349e50838c37954fe896ba6a026c09eaeff2f9408508ad7ede53e9ea9580" + +S = "${WORKDIR}/${SRCNAME}-${PV}" + +inherit update-rc.d autotools-brokensep systemd dos2unix + +DEPENDS = "libmcrypt" + +EXTRA_OECONF += "--with-nsca-user=${NAGIOS_USER} \ + --with-nsca-group=${NAGIOS_GROUP} \ + --with-libmcrypt-prefix=${STAGING_DIR_HOST} \ + ac_cv_path_LIBMCRYPT_CONFIG=${STAGING_BINDIR_CROSS}/libmcrypt-config \ + ac_cv_lib_wrap_main=no \ + ac_cv_path_PERL=${bindir}/perl \ +" + +do_configure() { + cp ${WORKDIR}/init-script.in ${S}/init-script.in + oe_runconf || die "make failed" +} + +do_install() { + CONF_DIR=${D}${NAGIOS_CONF_DIR} + + install -d ${CONF_DIR} + install -d ${D}${sysconfdir}/init.d + install -d ${D}${bindir} + + install -m 755 ${S}/sample-config/nsca.cfg ${CONF_DIR} + install -m 755 ${S}/sample-config/send_nsca.cfg ${CONF_DIR} + install -m 755 ${S}/init-script ${D}${sysconfdir}/init.d/nsca + + install -m 755 ${S}/src/nsca ${D}${bindir} + install -m 755 ${S}/src/send_nsca ${D}${bindir} + + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${WORKDIR}/nagios-nsca.service ${D}${systemd_unitdir}/system/ + fi +} + +PACKAGES = "${PN}-dbg ${PN}-daemon ${PN}-client" + +FILES_${PN}-daemon = "${sysconfdir}/init.d \ + ${NAGIOS_CONF_DIR}/nsca.cfg \ + ${bindir}/nsca \ +" + +FILES_${PN}-client = "${NAGIOS_CONF_DIR}/send_nsca.cfg \ + ${bindir}/send_nsca \ +" + +RDEPENDS_${PN}-daemon += "libmcrypt \ + nagios-base \ +" +RDEPENDS_${PN}-client += "libmcrypt \ + nagios-base \ +" + +SYSTEMD_PACKAGES = "${PN}-daemon" +SYSTEMD_SERVICE_${PN}-daemon = "nagios-nsca.service" +SYSTEMD_AUTO_ENABLE_${PN}-daemon = "enable" + +INITSCRIPT_PACKAGES = "${PN}-daemon" +INITSCRIPT_NAME_${PN}-daemon = "nsca" +INITSCRIPT_PARAMS_${PN}-daemon = "defaults" diff --git a/external/meta-virtualization/recipes-extended/nagios/nagios-plugins_2.2.1.bb b/external/meta-virtualization/recipes-extended/nagios/nagios-plugins_2.2.1.bb new file mode 100644 index 00000000..07933654 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/nagios/nagios-plugins_2.2.1.bb @@ -0,0 +1,73 @@ +require nagios-common.inc + +DESCRIPTION = "A host/service/network monitoring and management system plugins" +HOMEPAGE = "http://www.nagios-plugins.org" +SECTION = "console/network" +PRIORITY = "optional" +LICENSE = "GPLv3" + +LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504" + +SRC_URI = "https://www.nagios-plugins.org/download/${BPN}-${PV}.tar.gz \ +" + +SRC_URI[md5sum] = "fb521d5c05897f165b0b1862c1e5cb27" +SRC_URI[sha256sum] = "647c0ba4583d891c965fc29b77c4ccfeccc21f409fdf259cb8af52cb39c21e18" + +S = "${WORKDIR}/${BPN}-${PV}" + +inherit autotools gettext + +EXTRA_OECONF += "--with-sysroot=${STAGING_DIR_HOST} \ + --with-nagios-user=${NAGIOS_USER} \ + --with-nagios-group=${NAGIOS_GROUP} \ + --without-apt-get-command \ + --with-trusted-path=/bin:/sbin:/usr/bin:/usr/sbin \ + ac_cv_path_PERL=${bindir}/perl \ +" + +# IPv6 +PACKAGECONFIG[ipv6] = "--with-ipv6,--without-ipv6,," + +# Enable check_ldaps, check_http --ssl, check_tcp --ssl +PACKAGECONFIG[ssl] = "--with-openssl=${STAGING_DIR_HOST},--without-openssl,openssl,libssl" + +# Enable check_ldaps +PACKAGECONFIG[ldap] = "--with-ldap,--without-ldap,openldap" + +# Enable check_smtp --starttls +PACKAGECONFIG[gnutls] = "--with-gnutls=${STAGING_DIR_HOST},--without-gnutls,gnutls,gnutls" + +# Enable check_pgsql +PACKAGECONFIG[pgsql] = "--with-pgsql=${STAGING_DIR_HOST},--without-pgsql,postgresql,libpq" + +# Enable check_mysql, check_mysql_query +PACKAGECONFIG[mysql] = "--with-mysql=${STAGING_DIR_HOST},--without-mysql,mysql5,libmysqlclient" + +# Enable check_snmp +PACKAGECONFIG[snmp] = "\ + --with-snmpget-command=${bindir}/snmpget --with-snmpgetnext-command=${bindir}/snmpgetnext, \ + --without-snmpget-command --without-snmpgetnext-command, \ + , net-snmp-utils \ +" + +PACKAGECONFIG ??= "ssl gnutls" + +do_configure() { + oe_runconf || die "make failed" +} + +do_install_append() { + sed -i '1s,#! /usr/bin/perl -w.*,#! ${bindir}/env perl,' ${D}${libdir}/nagios/plugins/* +} + +RDEPENDS_${PN} += "\ + iputils \ + nagios-base \ + perl \ + bash \ +" + +FILES_${PN} += "${datadir} \ + ${NAGIOS_PLUGIN_DIR} \ +" diff --git a/external/meta-virtualization/recipes-extended/oath/oath/0001-oath-fix-macro-definition-error.patch b/external/meta-virtualization/recipes-extended/oath/oath/0001-oath-fix-macro-definition-error.patch new file mode 100644 index 00000000..37f9d753 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/oath/oath/0001-oath-fix-macro-definition-error.patch @@ -0,0 +1,32 @@ +From ba86973a3014caa9a4110611f470d4d9af5c2982 Mon Sep 17 00:00:00 2001 +From: Dengke Du <dengke.du@windriver.com> +Date: Thu, 27 Sep 2018 09:37:08 +0800 +Subject: [PATCH] oath: fix macro definition error + +Signed-off-by: Dengke Du <dengke.du@windriver.com> +--- + oathtool/gl/intprops.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/oathtool/gl/intprops.h b/oathtool/gl/intprops.h +index e1fce5c..cee4997 100644 +--- a/oathtool/gl/intprops.h ++++ b/oathtool/gl/intprops.h +@@ -230,11 +230,11 @@ verify (TYPE_MAXIMUM (long long int) == LLONG_MAX); + (e.g., A and B) have the same type as MIN and MAX. Instead, they assume + that the result (e.g., A + B) has that type. */ + #if _GL_HAS_BUILTIN_OVERFLOW_WITH_NULL +-# define _GL_ADD_OVERFLOW(a, b, min, max) ++# define _GL_ADD_OVERFLOW(a, b, min, max) \ + __builtin_add_overflow (a, b, (__typeof__ ((a) + (b)) *) 0) +-# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) ++# define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ + __builtin_sub_overflow (a, b, (__typeof__ ((a) - (b)) *) 0) +-# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) ++# define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ + __builtin_mul_overflow (a, b, (__typeof__ ((a) * (b)) *) 0) + #else + # define _GL_ADD_OVERFLOW(a, b, min, max) \ +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/oath/oath_2.6.2.bb b/external/meta-virtualization/recipes-extended/oath/oath_2.6.2.bb new file mode 100644 index 00000000..f4230449 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/oath/oath_2.6.2.bb @@ -0,0 +1,19 @@ +LICENSE = "GPLv3 & LGPLv2.1" +LIC_FILES_CHKSUM = "file://COPYING;md5=62e1e33aebac5b1bc9fc48a866e2f61b \ + file://oathtool/COPYING;md5=d32239bcb673463ab874e80d47fae504 \ + file://liboath/COPYING;md5=4fbd65380cdd255951079008b364516c \ + file://pam_oath/COPYING;md5=d32239bcb673463ab874e80d47fae504" + +SRC_URI = "http://download.savannah.nongnu.org/releases/oath-toolkit/oath-toolkit-${PV}.tar.gz \ + file://0001-oath-fix-macro-definition-error.patch \ +" + +S = "${WORKDIR}/${BPN}-toolkit-${PV}" +SRC_URI[md5sum] = "4a05cd4768764843bd5493609a6bdb17" +SRC_URI[sha256sum] = "b03446fa4b549af5ebe4d35d7aba51163442d255660558cd861ebce536824aa0" + +inherit autotools + +# Specify any options you want to pass to the configure script using EXTRA_OECONF: +EXTRA_OECONF = "" +DEPENDS = "gtk-doc-native" diff --git a/external/meta-virtualization/recipes-extended/seabios/seabios/hostcc.patch b/external/meta-virtualization/recipes-extended/seabios/seabios/hostcc.patch new file mode 100644 index 00000000..f665e1a3 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/seabios/seabios/hostcc.patch @@ -0,0 +1,21 @@ +diff -ur a/Makefile b/Makefile +--- a/Makefile 2015-02-02 22:02:58.651041951 -0500 ++++ b/Makefile 2015-02-02 23:08:13.884514003 -0500 +@@ -8,7 +8,7 @@ + OUT=out/ + + # Common command definitions +-export HOSTCC := $(CC) ++export HOSTCC ?= $(CC) + export CONFIG_SHELL := sh + export KCONFIG_AUTOHEADER := autoconf.h + export KCONFIG_CONFIG := $(CURDIR)/.config +@@ -22,7 +22,7 @@ + OBJDUMP=$(CROSS_PREFIX)objdump + STRIP=$(CROSS_PREFIX)strip + PYTHON=python +-CPP=cpp ++CPP=$(CROSS_PREFIX)cpp + IASL:=iasl + LD32BIT_FLAG:=-melf_i386 + diff --git a/external/meta-virtualization/recipes-extended/seabios/seabios_1.11.2.bb b/external/meta-virtualization/recipes-extended/seabios/seabios_1.11.2.bb new file mode 100644 index 00000000..81eaec96 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/seabios/seabios_1.11.2.bb @@ -0,0 +1,44 @@ +DESCRIPTION = "SeaBIOS" +HOMEPAGE = "http://www.coreboot.org/SeaBIOS" +LICENSE = "LGPLv3" +SECTION = "firmware" + +SRC_URI = " \ + https://github.com/qemu/seabios/archive/rel-${PV}.tar.gz \ + file://hostcc.patch \ + " +S = "${WORKDIR}/${PN}-rel-${PV}" + +LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING.LESSER;md5=6a6a8e020838b23406c81b19c1d46df6 \ + " + +SRC_URI[md5sum] = "3f78065837dbd8873513a1b7d5276e78" +SRC_URI[sha256sum] = "73e73c8e406d97265782f6c942b3c1d178ed4f4afc9f381b22336c3968291693" + +FILES_${PN} = "/usr/share/firmware" + +DEPENDS = "util-linux-native file-native bison-native flex-native gettext-native acpica-native python-native" + +TUNE_CCARGS = "" +EXTRA_OEMAKE += "HOSTCC='${BUILD_CC}'" +EXTRA_OEMAKE += "CROSS_PREFIX=${TARGET_PREFIX}" + +COMPATIBLE_HOST = "(i.86|x86_64).*-linux" + +do_configure() { + oe_runmake defconfig +} + +do_compile() { + unset CPP + unset CPPFLAGS + oe_runmake +} + +do_install() { + oe_runmake + install -d ${D}/usr/share/firmware + install -m 0644 out/bios.bin ${D}/usr/share/firmware/ +} + diff --git a/external/meta-virtualization/recipes-extended/vgabios/biossums_0.7a.bb b/external/meta-virtualization/recipes-extended/vgabios/biossums_0.7a.bb new file mode 100644 index 00000000..e66bade7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/vgabios/biossums_0.7a.bb @@ -0,0 +1,37 @@ +DESCRIPTION = "biossums tool for building Plex86/Bochs LGPL VGABios" +HOMEPAGE = "http://www.nongnu.org/vgabios/" +LICENSE = "LGPLv2.1" +SECTION = "firmware" + +LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589" + +SRC_URI = "http://savannah.gnu.org/download/vgabios/vgabios-${PV}.tgz" + +SRC_URI[md5sum] = "2c0fe5c0ca08082a9293e3a7b23dc900" +SRC_URI[sha256sum] = "9d24c33d4bfb7831e2069cf3644936a53ef3de21d467872b54ce2ea30881b865" + +BBCLASSEXTEND = "native" + +FILES_${PN} = "${bindir}/biossums" + +S = "${WORKDIR}/vgabios-${PV}" + +do_configure() { + # Don't override the compiler or its flags: + sed 's,^CC,DISABLED_CC,' -i Makefile + sed 's,^CFLAGS,DISABLED_CFLAGS,' -i Makefile + sed 's,^LDFLAGS,DISABLED_LDFLAGS,' -i Makefile + # Supply the C flags to the compiler: + sed 's,-o biossums,$(CFLAGS) -o biossums,' -i Makefile +} + +do_compile() { + # clean removes binaries distributed with source + oe_runmake clean + oe_runmake biossums +} + +do_install() { + mkdir -p "${D}${bindir}" + install -m 0755 biossums "${D}${bindir}" +} diff --git a/external/meta-virtualization/recipes-extended/vgabios/vgabios_0.7a.bb b/external/meta-virtualization/recipes-extended/vgabios/vgabios_0.7a.bb new file mode 100644 index 00000000..3394173c --- /dev/null +++ b/external/meta-virtualization/recipes-extended/vgabios/vgabios_0.7a.bb @@ -0,0 +1,33 @@ +DESCRIPTION = "Plex86/Bochs LGPL VGABios" +HOMEPAGE = "http://www.nongnu.org/vgabios/" +LICENSE = "LGPLv2.1" +SECTION = "firmware" + +DEPENDS = "dev86-native biossums-native" + +LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589" + +SRC_URI = "http://savannah.gnu.org/download/vgabios/${BPN}-${PV}.tgz" + +SRC_URI[md5sum] = "2c0fe5c0ca08082a9293e3a7b23dc900" +SRC_URI[sha256sum] = "9d24c33d4bfb7831e2069cf3644936a53ef3de21d467872b54ce2ea30881b865" + +PR = "r0" + +FILES_${PN} = "/usr/share/firmware/${PN}-${PV}*.bin" +FILES_${PN}-dbg = "/usr/share/firmware/${PN}-${PV}*.debug.bin" + +S = "${WORKDIR}/${PN}-${PV}" + +do_configure() { + # Override to use the native-built biossums tool: + sed 's,./biossums,biossums,' -i Makefile + sed 's,$(CC) -o biossums biossums.c,touch biossums,' -i Makefile +} + +do_install() { + install -d ${D}/usr/share/firmware + install -m 0644 VGABIOS-lgpl-latest.bin ${D}/usr/share/firmware/${PN}-${PV}.bin + install -m 0644 VGABIOS-lgpl-latest.cirrus.bin ${D}/usr/share/firmware/${PN}-${PV}.cirrus.bin +} + diff --git a/external/meta-virtualization/recipes-extended/xen/README b/external/meta-virtualization/recipes-extended/xen/README new file mode 100644 index 00000000..3686530c --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/README @@ -0,0 +1,24 @@ +Xen +--- + +For any issues with the xen recipes please make sure you CC cardoe@gentoo.org + +configuring the hypervisor +-------------------------- + +Since 4.7.0 Xen supports using Kconfig to configure the hypervisor. Similarly +to how the recipe for busybox works, you can provide a .config as a defconfig +to override the default configuration of the hypervisor. The easiest way +for you to take advantage of this is to create a .config for Xen and then +copy it to your Yocto layer as 'defconfig' inside of +'recipes-extended/xen/files/' and then create a bbappend adding +'file://defconfig' to your SRC_URI. + +security patches +---------------- + +The base recipe does not include security fixes that the Xen community releases +as XSAs (http://xenbits.xen.org/xsa/). The easiest way to include those is to +drop patches in 'recipes-extened/xen/files' and create a bbappend adding those +patches to SRC_URI and they will be applied. Alternatively, you can override +the SRC_URI to a git repo you provide that contains the patches. diff --git a/external/meta-virtualization/recipes-extended/xen/files/0001-python-pygrub-pass-DISTUTILS-env-vars-as-setup.py-ar.patch b/external/meta-virtualization/recipes-extended/xen/files/0001-python-pygrub-pass-DISTUTILS-env-vars-as-setup.py-ar.patch new file mode 100644 index 00000000..03c39fe7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/0001-python-pygrub-pass-DISTUTILS-env-vars-as-setup.py-ar.patch @@ -0,0 +1,63 @@ +From d79dcc2002008c58683de82f06c168d6eea57991 Mon Sep 17 00:00:00 2001 +From: Maciej Pijanowski <maciej.pijanowski@3mdeb.com> +Date: Fri, 19 Oct 2018 11:01:37 +0200 +Subject: [PATCH] python,pygrub: pass DISTUTILS env vars as setup.py args + +Allow to respect the target install dir (PYTHON_SITEPACKAGES_DIR) +as well as other parameters set by the OpenEmbedded build system. +This is especially useful when the target libdir is not the default one +(/usr/lib), but for example /usr/lib64. + +Signed-off-by: Maciej Pijanowski <maciej.pijanowski@3mdeb.com> +--- + tools/pygrub/Makefile | 5 +++-- + tools/python/Makefile | 4 ++-- + 2 files changed, 5 insertions(+), 4 deletions(-) + +diff --git a/tools/pygrub/Makefile b/tools/pygrub/Makefile +index 536af07932b4..e1c773101412 100644 +--- a/tools/pygrub/Makefile ++++ b/tools/pygrub/Makefile +@@ -10,14 +10,15 @@ INSTALL_LOG = build/installed_files.txt + all: build + .PHONY: build + build: +- CC="$(CC)" CFLAGS="$(PY_CFLAGS)" $(PYTHON) setup.py build ++ CC="$(CC)" CFLAGS="$(PY_CFLAGS)" $(PYTHON) setup.py build $(DISTUTILS_BUILD_ARGS) + + .PHONY: install + install: all + $(INSTALL_DIR) $(DESTDIR)/$(bindir) + CC="$(CC)" CFLAGS="$(PY_CFLAGS)" LDFLAGS="$(PY_LDFLAGS)" $(PYTHON) \ + setup.py install --record $(INSTALL_LOG) $(PYTHON_PREFIX_ARG) \ +- --root="$(DESTDIR)" --install-scripts=$(LIBEXEC_BIN) --force ++ --root="$(DESTDIR)" --install-scripts=$(LIBEXEC_BIN) --force \ ++ $(DISTUTILS_INSTALL_ARGS) + set -e; if [ $(bindir) != $(LIBEXEC_BIN) -a \ + "`readlink -f $(DESTDIR)/$(bindir)`" != \ + "`readlink -f $(LIBEXEC_BIN)`" ]; then \ +diff --git a/tools/python/Makefile b/tools/python/Makefile +index 541858e2f886..4d4a344f1d33 100644 +--- a/tools/python/Makefile ++++ b/tools/python/Makefile +@@ -10,7 +10,7 @@ INSTALL_LOG = build/installed_files.txt + + .PHONY: build + build: +- CC="$(CC)" CFLAGS="$(PY_CFLAGS)" $(PYTHON) setup.py build ++ CC="$(CC)" CFLAGS="$(PY_CFLAGS)" $(PYTHON) setup.py build $(DISTUTILS_BUILD_ARGS) + + .PHONY: install + install: +@@ -18,7 +18,7 @@ install: + + CC="$(CC)" CFLAGS="$(PY_CFLAGS)" LDFLAGS="$(PY_LDFLAGS)" $(PYTHON) \ + setup.py install --record $(INSTALL_LOG) $(PYTHON_PREFIX_ARG) \ +- --root="$(DESTDIR)" --force ++ --root="$(DESTDIR)" --force $(DISTUTILS_INSTALL_ARGS) + + $(INSTALL_PROG) scripts/convert-legacy-stream $(DESTDIR)$(LIBEXEC_BIN) + $(INSTALL_PROG) scripts/verify-stream-v2 $(DESTDIR)$(LIBEXEC_BIN) +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-extended/xen/files/lwip.dhcp_create_request-hwaddr_len.patch b/external/meta-virtualization/recipes-extended/xen/files/lwip.dhcp_create_request-hwaddr_len.patch new file mode 100644 index 00000000..4bbf21a1 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/lwip.dhcp_create_request-hwaddr_len.patch @@ -0,0 +1,13 @@ +Index: src/core/dhcp.c +=================================================================== +--- a/src/core/dhcp.c ++++ b/src/core/dhcp.c +@@ -1356,7 +1358,7 @@ dhcp_create_request(struct netif *netif) + dhcp->msg_out->giaddr.addr = 0; + for (i = 0; i < DHCP_CHADDR_LEN; i++) { + /* copy netif hardware address, pad with zeroes */ +- dhcp->msg_out->chaddr[i] = (i < netif->hwaddr_len) ? netif->hwaddr[i] : 0/* pad byte*/; ++ dhcp->msg_out->chaddr[i] = (i < (netif->hwaddr_len > NETIF_MAX_HWADDR_LEN ? NETIF_MAX_HWADDR_LEN : netif->hwaddr_len)) ? netif->hwaddr[i] : 0/* pad byte*/; + } + for (i = 0; i < DHCP_SNAME_LEN; i++) { + dhcp->msg_out->sname[i] = 0; diff --git a/external/meta-virtualization/recipes-extended/xen/files/lwip.patch-cvs b/external/meta-virtualization/recipes-extended/xen/files/lwip.patch-cvs new file mode 100644 index 00000000..b2718778 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/lwip.patch-cvs @@ -0,0 +1,2398 @@ +? .ChangeLog.swp +? ChangeLog +Index: CHANGELOG +=================================================================== +RCS file: /sources/lwip/lwip/CHANGELOG,v +retrieving revision 1.300 +retrieving revision 1.318 +diff -u -p -r1.300 -r1.318 +--- a/CHANGELOG 23 Mar 2008 13:49:39 -0000 1.300 ++++ b/CHANGELOG 14 Jul 2008 20:12:36 -0000 1.318 +@@ -19,9 +19,77 @@ HISTORY + + ++ New features: + ++ 2008-06-30 Simon Goldschmidt ++ * mem.c, opt.h, stats.h: fixed bug #21433: Calling mem_free/pbuf_free from ++ interrupt context isn't safe: LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT allows ++ mem_free to run between mem_malloc iterations. Added illegal counter for ++ mem stats. ++ ++ 2008-06-27 Simon Goldschmidt ++ * stats.h/.c, some other files: patch #6483: stats module improvement: ++ Added defines to display each module's statistic individually, added stats ++ defines for MEM, MEMP and SYS modules, removed (unused) rexmit counter. ++ ++ 2008-06-17 Simon Goldschmidt ++ * err.h: patch #6459: Made err_t overridable to use a more efficient type ++ (define LWIP_ERR_T in cc.h) ++ ++ 2008-06-17 Simon Goldschmidt ++ * slipif.c: patch #6480: Added a configuration option for slipif for symmetry ++ to loopif ++ ++ 2008-06-17 Simon Goldschmidt (patch by Luca Ceresoli) ++ * netif.c, loopif.c, ip.c, netif.h, loopif.h, opt.h: Checked in slightly ++ modified version of patch # 6370: Moved loopif code to netif.c so that ++ loopback traffic is supported on all netifs (all local IPs). ++ Added option to limit loopback packets for each netifs. ++ + + ++ Bugfixes: + ++ 2008-08-14 Simon Goldschmidt ++ * api_msg.c: fixed bug #23847: do_close_internal references freed memory (when ++ tcp_close returns != ERR_OK) ++ ++ 2008-07-08 Frédéric Bernon ++ * stats.h: Fix some build bugs introduced with patch #6483 (missing some parameters ++ in macros, mainly if MEM_STATS=0 and MEMP_STATS=0). ++ ++ 2008-06-24 Jonathan Larmour ++ * tcp_in.c: Fix for bug #23693 as suggested by Art R. Ensure cseg is unused ++ if tcp_seg_copy fails. ++ ++ 2008-06-17 Simon Goldschmidt ++ * inet_chksum.c: Checked in some ideas of patch #6460 (loop optimizations) ++ and created defines for swapping bytes and folding u32 to u16. ++ ++ 2008-05-30 Kieran Mansley ++ * tcp_in.c Remove redundant "if" statement, and use real rcv_wnd ++ rather than rcv_ann_wnd when deciding if packets are in-window. ++ Contributed by <arasmussen@consultant.datasys.swri.edu> ++ ++ 2008-05-30 Kieran Mansley ++ * mem.h: Fix BUG#23254. Change macro definition of mem_* to allow ++ passing as function pointers when MEM_LIBC_MALLOC is defined. ++ ++ 2008-05-09 Jonathan Larmour ++ * err.h, err.c, sockets.c: Fix bug #23119: Reorder timeout error code to ++ stop it being treated as a fatal error. ++ ++ 2008-04-15 Simon Goldschmidt ++ * dhcp.c: fixed bug #22804: dhcp_stop doesn't clear NETIF_FLAG_DHCP ++ (flag now cleared) ++ ++ 2008-03-27 Simon Goldschmidt ++ * mem.c, tcpip.c, tcpip.h, opt.h: fixed bug #21433 (Calling mem_free/pbuf_free ++ from interrupt context isn't safe): set LWIP_USE_HEAP_FROM_INTERRUPT to 1 ++ in lwipopts.h or use pbuf_free_callback(p)/mem_free_callback(m) to free pbufs ++ or heap memory from interrupt context ++ ++ 2008-03-26 Simon Goldschmidt ++ * tcp_in.c, tcp.c: fixed bug #22249: division by zero could occur if a remote ++ host sent a zero mss as TCP option. ++ + + (STABLE-1.3.0) + +Index: src/api/api_msg.c +=================================================================== +RCS file: /sources/lwip/lwip/src/api/api_msg.c,v +retrieving revision 1.102 +retrieving revision 1.104 +diff -u -p -r1.102 -r1.104 +--- a/src/api/api_msg.c 21 Mar 2008 16:23:14 -0000 1.102 ++++ b/src/api/api_msg.c 15 Jul 2008 11:18:58 -0000 1.104 +@@ -598,11 +598,16 @@ do_close_internal(struct netconn *conn) + LWIP_ASSERT("pcb already closed", (conn->pcb.tcp != NULL)); + + /* Set back some callback pointers */ ++ tcp_arg(conn->pcb.tcp, NULL); + if (conn->pcb.tcp->state == LISTEN) { +- tcp_arg(conn->pcb.tcp, NULL); + tcp_accept(conn->pcb.tcp, NULL); + } else { + tcp_recv(conn->pcb.tcp, NULL); ++ tcp_accept(conn->pcb.tcp, NULL); ++ /* some callbacks have to be reset if tcp_close is not successful */ ++ tcp_sent(conn->pcb.tcp, NULL); ++ tcp_poll(conn->pcb.tcp, NULL, 4); ++ tcp_err(conn->pcb.tcp, NULL); + } + /* Try to close the connection */ + err = tcp_close(conn->pcb.tcp); +@@ -610,11 +615,6 @@ do_close_internal(struct netconn *conn) + /* Closing succeeded */ + conn->state = NETCONN_NONE; + /* Set back some callback pointers as conn is going away */ +- tcp_err(conn->pcb.tcp, NULL); +- tcp_poll(conn->pcb.tcp, NULL, 4); +- tcp_sent(conn->pcb.tcp, NULL); +- tcp_recv(conn->pcb.tcp, NULL); +- tcp_arg(conn->pcb.tcp, NULL); + conn->pcb.tcp = NULL; + conn->err = ERR_OK; + /* Trigger select() in socket layer. This send should something else so the +@@ -623,6 +623,14 @@ do_close_internal(struct netconn *conn) + API_EVENT(conn, NETCONN_EVT_SENDPLUS, 0); + /* wake up the application task */ + sys_sem_signal(conn->op_completed); ++ } else { ++ /* Closing failed, restore some of the callbacks */ ++ /* Closing of listen pcb will never fail! */ ++ LWIP_ASSERT("Closing a listen pcb may not fail!", (conn->pcb.tcp->state != LISTEN)); ++ tcp_sent(conn->pcb.tcp, sent_tcp); ++ tcp_poll(conn->pcb.tcp, poll_tcp, 4); ++ tcp_err(conn->pcb.tcp, err_tcp); ++ tcp_arg(conn->pcb.tcp, conn); + } + /* If closing didn't succeed, we get called again either + from poll_tcp or from sent_tcp */ +Index: src/api/err.c +=================================================================== +RCS file: /sources/lwip/lwip/src/api/err.c,v +retrieving revision 1.11 +retrieving revision 1.12 +diff -u -p -r1.11 -r1.12 +--- a/src/api/err.c 13 Dec 2007 23:06:50 -0000 1.11 ++++ b/src/api/err.c 9 May 2008 12:14:23 -0000 1.12 +@@ -44,17 +44,17 @@ static const char *err_strerr[] = { + "Ok.", /* ERR_OK 0 */ + "Out of memory error.", /* ERR_MEM -1 */ + "Buffer error.", /* ERR_BUF -2 */ +- "Routing problem.", /* ERR_RTE -3 */ +- "Connection aborted.", /* ERR_ABRT -4 */ +- "Connection reset.", /* ERR_RST -5 */ +- "Connection closed.", /* ERR_CLSD -6 */ +- "Not connected.", /* ERR_CONN -7 */ +- "Illegal value.", /* ERR_VAL -8 */ +- "Illegal argument.", /* ERR_ARG -9 */ +- "Address in use.", /* ERR_USE -10 */ +- "Low-level netif error.", /* ERR_IF -11 */ +- "Already connected.", /* ERR_ISCONN -12 */ +- "Timeout.", /* ERR_TIMEOUT -13 */ ++ "Timeout.", /* ERR_TIMEOUT -3 */ ++ "Routing problem.", /* ERR_RTE -4 */ ++ "Connection aborted.", /* ERR_ABRT -5 */ ++ "Connection reset.", /* ERR_RST -6 */ ++ "Connection closed.", /* ERR_CLSD -7 */ ++ "Not connected.", /* ERR_CONN -8 */ ++ "Illegal value.", /* ERR_VAL -9 */ ++ "Illegal argument.", /* ERR_ARG -10 */ ++ "Address in use.", /* ERR_USE -11 */ ++ "Low-level netif error.", /* ERR_IF -12 */ ++ "Already connected.", /* ERR_ISCONN -13 */ + "Operation in progress." /* ERR_INPROGRESS -14 */ + }; + +Index: src/api/netdb.c +=================================================================== +RCS file: /sources/lwip/lwip/src/api/netdb.c,v +retrieving revision 1.4 +retrieving revision 1.5 +diff -u -p -r1.4 -r1.5 +--- a/src/api/netdb.c 26 Jan 2008 16:11:39 -0000 1.4 ++++ b/src/api/netdb.c 16 Jul 2008 20:36:12 -0000 1.5 +@@ -326,7 +326,8 @@ lwip_getaddrinfo(const char *nodename, c + if (nodename != NULL) { + /* copy nodename to canonname if specified */ + size_t namelen = strlen(nodename); +- ai->ai_canonname = mem_malloc(namelen + 1); ++ LWIP_ASSERT("namelen is too long", (namelen + 1) <= (mem_size_t)-1); ++ ai->ai_canonname = mem_malloc((mem_size_t)(namelen + 1)); + if (ai->ai_canonname == NULL) { + goto memerr; + } +Index: src/api/sockets.c +=================================================================== +RCS file: /sources/lwip/lwip/src/api/sockets.c,v +retrieving revision 1.116 +retrieving revision 1.117 +diff -u -p -r1.116 -r1.117 +--- a/src/api/sockets.c 13 Mar 2008 20:03:57 -0000 1.116 ++++ b/src/api/sockets.c 9 May 2008 12:14:24 -0000 1.117 +@@ -128,17 +128,17 @@ static const int err_to_errno_table[] = + 0, /* ERR_OK 0 No error, everything OK. */ + ENOMEM, /* ERR_MEM -1 Out of memory error. */ + ENOBUFS, /* ERR_BUF -2 Buffer error. */ +- EHOSTUNREACH, /* ERR_RTE -3 Routing problem. */ +- ECONNABORTED, /* ERR_ABRT -4 Connection aborted. */ +- ECONNRESET, /* ERR_RST -5 Connection reset. */ +- ESHUTDOWN, /* ERR_CLSD -6 Connection closed. */ +- ENOTCONN, /* ERR_CONN -7 Not connected. */ +- EINVAL, /* ERR_VAL -8 Illegal value. */ +- EIO, /* ERR_ARG -9 Illegal argument. */ +- EADDRINUSE, /* ERR_USE -10 Address in use. */ +- -1, /* ERR_IF -11 Low-level netif error */ +- -1, /* ERR_ISCONN -12 Already connected. */ +- ETIMEDOUT, /* ERR_TIMEOUT -13 Timeout */ ++ ETIMEDOUT, /* ERR_TIMEOUT -3 Timeout */ ++ EHOSTUNREACH, /* ERR_RTE -4 Routing problem. */ ++ ECONNABORTED, /* ERR_ABRT -5 Connection aborted. */ ++ ECONNRESET, /* ERR_RST -6 Connection reset. */ ++ ESHUTDOWN, /* ERR_CLSD -7 Connection closed. */ ++ ENOTCONN, /* ERR_CONN -8 Not connected. */ ++ EINVAL, /* ERR_VAL -9 Illegal value. */ ++ EIO, /* ERR_ARG -10 Illegal argument. */ ++ EADDRINUSE, /* ERR_USE -11 Address in use. */ ++ -1, /* ERR_IF -12 Low-level netif error */ ++ -1, /* ERR_ISCONN -13 Already connected. */ + EINPROGRESS /* ERR_INPROGRESS -14 Operation in progress */ + }; + +Index: src/api/tcpip.c +=================================================================== +RCS file: /sources/lwip/lwip/src/api/tcpip.c,v +retrieving revision 1.70 +retrieving revision 1.73 +diff -u -p -r1.70 -r1.73 +--- a/src/api/tcpip.c 12 Jan 2008 11:52:22 -0000 1.70 ++++ b/src/api/tcpip.c 27 Jun 2008 20:34:51 -0000 1.73 +@@ -518,4 +518,42 @@ tcpip_init(void (* initfunc)(void *), vo + sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO); + } + ++/** ++ * Simple callback function used with tcpip_callback to free a pbuf ++ * (pbuf_free has a wrong signature for tcpip_callback) ++ * ++ * @param p The pbuf (chain) to be dereferenced. ++ */ ++static void ++pbuf_free_int(void *p) ++{ ++ struct pbuf *q = p; ++ pbuf_free(q); ++} ++ ++/** ++ * A simple wrapper function that allows you to free a pbuf from interrupt context. ++ * ++ * @param p The pbuf (chain) to be dereferenced. ++ * @return ERR_OK if callback could be enqueued, an err_t if not ++ */ ++err_t ++pbuf_free_callback(struct pbuf *p) ++{ ++ return tcpip_callback_with_block(pbuf_free_int, p, 0); ++} ++ ++/** ++ * A simple wrapper function that allows you to free heap memory from ++ * interrupt context. ++ * ++ * @param m the heap memory to free ++ * @return ERR_OK if callback could be enqueued, an err_t if not ++ */ ++err_t ++mem_free_callback(void *m) ++{ ++ return tcpip_callback_with_block(mem_free, m, 0); ++} ++ + #endif /* !NO_SYS */ +Index: src/core/dhcp.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/dhcp.c,v +retrieving revision 1.86 +retrieving revision 1.87 +diff -u -p -r1.86 -r1.87 +--- a/src/core/dhcp.c 4 Mar 2008 14:25:58 -0000 1.86 ++++ b/src/core/dhcp.c 15 Apr 2008 17:24:55 -0000 1.87 +@@ -568,6 +568,8 @@ dhcp_start(struct netif *netif) + LWIP_ERROR("netif != NULL", (netif != NULL), return ERR_ARG;); + dhcp = netif->dhcp; + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | LWIP_DBG_STATE, ("dhcp_start(netif=%p) %c%c%"U16_F"\n", (void*)netif, netif->name[0], netif->name[1], (u16_t)netif->num)); ++ /* Remove the flag that says this netif is handled by DHCP, ++ it is set when we succeeded starting. */ + netif->flags &= ~NETIF_FLAG_DHCP; + + /* no DHCP client attached yet? */ +@@ -609,6 +611,7 @@ dhcp_start(struct netif *netif) + dhcp_stop(netif); + return ERR_MEM; + } ++ /* Set the flag that says this netif is handled by DHCP. */ + netif->flags |= NETIF_FLAG_DHCP; + return result; + } +@@ -1063,6 +1066,8 @@ dhcp_stop(struct netif *netif) + { + struct dhcp *dhcp = netif->dhcp; + LWIP_ERROR("dhcp_stop: netif != NULL", (netif != NULL), return;); ++ /* Remove the flag that says this netif is handled by DHCP. */ ++ netif->flags &= ~NETIF_FLAG_DHCP; + + LWIP_DEBUGF(DHCP_DEBUG | LWIP_DBG_TRACE | 3, ("dhcp_stop()\n")); + /* netif is DHCP configured? */ +Index: src/core/mem.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/mem.c,v +retrieving revision 1.59 +retrieving revision 1.62 +diff -u -p -r1.59 -r1.62 +--- a/src/core/mem.c 4 Mar 2008 16:31:32 -0000 1.59 ++++ b/src/core/mem.c 30 Jun 2008 18:16:51 -0000 1.62 +@@ -177,9 +177,36 @@ static u8_t *ram; + static struct mem *ram_end; + /** pointer to the lowest free block, this is used for faster search */ + static struct mem *lfree; ++ + /** concurrent access protection */ + static sys_sem_t mem_sem; + ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ ++static volatile u8_t mem_free_count; ++ ++/* Allow mem_free from other (e.g. interrupt) context */ ++#define LWIP_MEM_FREE_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_free) ++#define LWIP_MEM_FREE_PROTECT() SYS_ARCH_PROTECT(lev_free) ++#define LWIP_MEM_FREE_UNPROTECT() SYS_ARCH_UNPROTECT(lev_free) ++#define LWIP_MEM_ALLOC_DECL_PROTECT() SYS_ARCH_DECL_PROTECT(lev_alloc) ++#define LWIP_MEM_ALLOC_PROTECT() SYS_ARCH_PROTECT(lev_alloc) ++#define LWIP_MEM_ALLOC_UNPROTECT() SYS_ARCH_UNPROTECT(lev_alloc) ++ ++#else /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ ++ ++/* Protect the heap only by using a semaphore */ ++#define LWIP_MEM_FREE_DECL_PROTECT() ++#define LWIP_MEM_FREE_PROTECT() sys_arch_sem_wait(mem_sem, 0) ++#define LWIP_MEM_FREE_UNPROTECT() sys_sem_signal(mem_sem) ++/* mem_malloc is protected using semaphore AND LWIP_MEM_ALLOC_PROTECT */ ++#define LWIP_MEM_ALLOC_DECL_PROTECT() ++#define LWIP_MEM_ALLOC_PROTECT() ++#define LWIP_MEM_ALLOC_UNPROTECT() ++ ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ ++ ++ + /** + * "Plug holes" by combining adjacent empty struct mems. + * After this function is through, there should not exist +@@ -255,9 +282,7 @@ mem_init(void) + /* initialize the lowest-free pointer to the start of the heap */ + lfree = (struct mem *)ram; + +-#if MEM_STATS +- lwip_stats.mem.avail = MEM_SIZE_ALIGNED; +-#endif /* MEM_STATS */ ++ MEM_STATS_AVAIL(avail, MEM_SIZE_ALIGNED); + } + + /** +@@ -270,6 +295,7 @@ void + mem_free(void *rmem) + { + struct mem *mem; ++ LWIP_MEM_FREE_DECL_PROTECT(); + + if (rmem == NULL) { + LWIP_DEBUGF(MEM_DEBUG | LWIP_DBG_TRACE | 2, ("mem_free(p == NULL) was called.\n")); +@@ -277,20 +303,20 @@ mem_free(void *rmem) + } + LWIP_ASSERT("mem_free: sanity check alignment", (((mem_ptr_t)rmem) & (MEM_ALIGNMENT-1)) == 0); + +- /* protect the heap from concurrent access */ +- sys_arch_sem_wait(mem_sem, 0); +- + LWIP_ASSERT("mem_free: legal memory", (u8_t *)rmem >= (u8_t *)ram && + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { ++ SYS_ARCH_DECL_PROTECT(lev); + LWIP_DEBUGF(MEM_DEBUG | 3, ("mem_free: illegal memory\n")); +-#if MEM_STATS +- ++lwip_stats.mem.err; +-#endif /* MEM_STATS */ +- sys_sem_signal(mem_sem); ++ /* protect mem stats from concurrent access */ ++ SYS_ARCH_PROTECT(lev); ++ MEM_STATS_INC(illegal); ++ SYS_ARCH_UNPROTECT(lev); + return; + } ++ /* protect the heap from concurrent access */ ++ LWIP_MEM_FREE_PROTECT(); + /* Get the corresponding struct mem ... */ + mem = (struct mem *)((u8_t *)rmem - SIZEOF_STRUCT_MEM); + /* ... which has to be in a used state ... */ +@@ -303,13 +329,14 @@ mem_free(void *rmem) + lfree = mem; + } + +-#if MEM_STATS +- lwip_stats.mem.used -= mem->next - ((u8_t *)mem - ram); +-#endif /* MEM_STATS */ ++ MEM_STATS_DEC_USED(used, mem->next - ((u8_t *)mem - ram)); + + /* finally, see if prev or next are free also */ + plug_holes(mem); +- sys_sem_signal(mem_sem); ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ mem_free_count = 1; ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ ++ LWIP_MEM_FREE_UNPROTECT(); + } + + /** +@@ -321,6 +348,8 @@ mem_free(void *rmem) + * @param newsize required size after shrinking (needs to be smaller than or + * equal to the previous size) + * @return for compatibility reasons: is always == rmem, at the moment ++ * or NULL if newsize is > old size, in which case rmem is NOT touched ++ * or freed! + */ + void * + mem_realloc(void *rmem, mem_size_t newsize) +@@ -328,6 +357,8 @@ mem_realloc(void *rmem, mem_size_t newsi + mem_size_t size; + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; ++ /* use the FREE_PROTECT here: it protects with sem OR SYS_ARCH_PROTECT */ ++ LWIP_MEM_FREE_DECL_PROTECT(); + + /* Expand the size of the allocated memory region so that we can + adjust for alignment. */ +@@ -346,7 +377,12 @@ mem_realloc(void *rmem, mem_size_t newsi + (u8_t *)rmem < (u8_t *)ram_end); + + if ((u8_t *)rmem < (u8_t *)ram || (u8_t *)rmem >= (u8_t *)ram_end) { ++ SYS_ARCH_DECL_PROTECT(lev); + LWIP_DEBUGF(MEM_DEBUG | 3, ("mem_realloc: illegal memory\n")); ++ /* protect mem stats from concurrent access */ ++ SYS_ARCH_PROTECT(lev); ++ MEM_STATS_INC(illegal); ++ SYS_ARCH_UNPROTECT(lev); + return rmem; + } + /* Get the corresponding struct mem ... */ +@@ -366,11 +402,9 @@ mem_realloc(void *rmem, mem_size_t newsi + } + + /* protect the heap from concurrent access */ +- sys_arch_sem_wait(mem_sem, 0); ++ LWIP_MEM_FREE_PROTECT(); + +-#if MEM_STATS +- lwip_stats.mem.used -= (size - newsize); +-#endif /* MEM_STATS */ ++ MEM_STATS_DEC_USED(used, (size - newsize)); + + mem2 = (struct mem *)&ram[mem->next]; + if(mem2->used == 0) { +@@ -426,7 +460,10 @@ mem_realloc(void *rmem, mem_size_t newsi + -> don't do anyhting. + -> the remaining space stays unused since it is too small + } */ +- sys_sem_signal(mem_sem); ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ mem_free_count = 1; ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ ++ LWIP_MEM_FREE_UNPROTECT(); + return rmem; + } + +@@ -444,6 +481,10 @@ mem_malloc(mem_size_t size) + { + mem_size_t ptr, ptr2; + struct mem *mem, *mem2; ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ u8_t local_mem_free_count = 0; ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ ++ LWIP_MEM_ALLOC_DECL_PROTECT(); + + if (size == 0) { + return NULL; +@@ -464,88 +505,101 @@ mem_malloc(mem_size_t size) + + /* protect the heap from concurrent access */ + sys_arch_sem_wait(mem_sem, 0); ++ LWIP_MEM_ALLOC_PROTECT(); ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ /* run as long as a mem_free disturbed mem_malloc */ ++ do { ++ local_mem_free_count = 0; ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ ++ ++ /* Scan through the heap searching for a free block that is big enough, ++ * beginning with the lowest free block. ++ */ ++ for (ptr = (u8_t *)lfree - ram; ptr < MEM_SIZE_ALIGNED - size; ++ ptr = ((struct mem *)&ram[ptr])->next) { ++ mem = (struct mem *)&ram[ptr]; ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ mem_free_count = 0; ++ LWIP_MEM_ALLOC_UNPROTECT(); ++ /* allow mem_free to run */ ++ LWIP_MEM_ALLOC_PROTECT(); ++ if (mem_free_count != 0) { ++ local_mem_free_count = mem_free_count; ++ } ++ mem_free_count = 0; ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + +- /* Scan through the heap searching for a free block that is big enough, +- * beginning with the lowest free block. +- */ +- for (ptr = (u8_t *)lfree - ram; ptr < MEM_SIZE_ALIGNED - size; +- ptr = ((struct mem *)&ram[ptr])->next) { +- mem = (struct mem *)&ram[ptr]; +- +- if ((!mem->used) && +- (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { +- /* mem is not used and at least perfect fit is possible: +- * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ +- +- if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { +- /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing +- * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') +- * -> split large block, create empty remainder, +- * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if +- * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, +- * struct mem would fit in but no data between mem2 and mem2->next +- * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty +- * region that couldn't hold data, but when mem->next gets freed, +- * the 2 regions would be combined, resulting in more free memory +- */ +- ptr2 = ptr + SIZEOF_STRUCT_MEM + size; +- /* create mem2 struct */ +- mem2 = (struct mem *)&ram[ptr2]; +- mem2->used = 0; +- mem2->next = mem->next; +- mem2->prev = ptr; +- /* and insert it between mem and mem->next */ +- mem->next = ptr2; +- mem->used = 1; +- +- if (mem2->next != MEM_SIZE_ALIGNED) { +- ((struct mem *)&ram[mem2->next])->prev = ptr2; +- } +-#if MEM_STATS +- lwip_stats.mem.used += (size + SIZEOF_STRUCT_MEM); +- if (lwip_stats.mem.max < lwip_stats.mem.used) { +- lwip_stats.mem.max = lwip_stats.mem.used; ++ if ((!mem->used) && ++ (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) { ++ /* mem is not used and at least perfect fit is possible: ++ * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ ++ ++ if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) { ++ /* (in addition to the above, we test if another struct mem (SIZEOF_STRUCT_MEM) containing ++ * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') ++ * -> split large block, create empty remainder, ++ * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if ++ * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, ++ * struct mem would fit in but no data between mem2 and mem2->next ++ * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty ++ * region that couldn't hold data, but when mem->next gets freed, ++ * the 2 regions would be combined, resulting in more free memory ++ */ ++ ptr2 = ptr + SIZEOF_STRUCT_MEM + size; ++ /* create mem2 struct */ ++ mem2 = (struct mem *)&ram[ptr2]; ++ mem2->used = 0; ++ mem2->next = mem->next; ++ mem2->prev = ptr; ++ /* and insert it between mem and mem->next */ ++ mem->next = ptr2; ++ mem->used = 1; ++ ++ if (mem2->next != MEM_SIZE_ALIGNED) { ++ ((struct mem *)&ram[mem2->next])->prev = ptr2; ++ } ++ MEM_STATS_INC_USED(used, (size + SIZEOF_STRUCT_MEM)); ++ } else { ++ /* (a mem2 struct does no fit into the user data space of mem and mem->next will always ++ * be used at this point: if not we have 2 unused structs in a row, plug_holes should have ++ * take care of this). ++ * -> near fit or excact fit: do not split, no mem2 creation ++ * also can't move mem->next directly behind mem, since mem->next ++ * will always be used at this point! ++ */ ++ mem->used = 1; ++ MEM_STATS_INC_USED(used, mem->next - ((u8_t *)mem - ram)); + } +-#endif /* MEM_STATS */ +- } else { +- /* (a mem2 struct does no fit into the user data space of mem and mem->next will always +- * be used at this point: if not we have 2 unused structs in a row, plug_holes should have +- * take care of this). +- * -> near fit or excact fit: do not split, no mem2 creation +- * also can't move mem->next directly behind mem, since mem->next +- * will always be used at this point! +- */ +- mem->used = 1; +-#if MEM_STATS +- lwip_stats.mem.used += mem->next - ((u8_t *)mem - ram); +- if (lwip_stats.mem.max < lwip_stats.mem.used) { +- lwip_stats.mem.max = lwip_stats.mem.used; +- } +-#endif /* MEM_STATS */ +- } + +- if (mem == lfree) { +- /* Find next free block after mem and update lowest free pointer */ +- while (lfree->used && lfree != ram_end) { +- lfree = (struct mem *)&ram[lfree->next]; ++ if (mem == lfree) { ++ /* Find next free block after mem and update lowest free pointer */ ++ while (lfree->used && lfree != ram_end) { ++ LWIP_MEM_ALLOC_UNPROTECT(); ++ /* prevent high interrupt latency... */ ++ LWIP_MEM_ALLOC_PROTECT(); ++ lfree = (struct mem *)&ram[lfree->next]; ++ } ++ LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); + } +- LWIP_ASSERT("mem_malloc: !lfree->used", ((lfree == ram_end) || (!lfree->used))); +- } +- sys_sem_signal(mem_sem); +- LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", +- (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); +- LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", +- (unsigned long)((u8_t *)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); +- LWIP_ASSERT("mem_malloc: sanity check alignment", +- (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0); ++ LWIP_MEM_ALLOC_UNPROTECT(); ++ sys_sem_signal(mem_sem); ++ LWIP_ASSERT("mem_malloc: allocated memory not above ram_end.", ++ (mem_ptr_t)mem + SIZEOF_STRUCT_MEM + size <= (mem_ptr_t)ram_end); ++ LWIP_ASSERT("mem_malloc: allocated memory properly aligned.", ++ (unsigned long)((u8_t *)mem + SIZEOF_STRUCT_MEM) % MEM_ALIGNMENT == 0); ++ LWIP_ASSERT("mem_malloc: sanity check alignment", ++ (((mem_ptr_t)mem) & (MEM_ALIGNMENT-1)) == 0); + +- return (u8_t *)mem + SIZEOF_STRUCT_MEM; ++ return (u8_t *)mem + SIZEOF_STRUCT_MEM; ++ } + } +- } ++#if LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++ /* if we got interrupted by a mem_free, try again */ ++ } while(local_mem_free_count != 0); ++#endif /* LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT */ + LWIP_DEBUGF(MEM_DEBUG | 2, ("mem_malloc: could not allocate %"S16_F" bytes\n", (s16_t)size)); +-#if MEM_STATS +- ++lwip_stats.mem.err; +-#endif /* MEM_STATS */ ++ MEM_STATS_INC(err); ++ LWIP_MEM_ALLOC_UNPROTECT(); + sys_sem_signal(mem_sem); + return NULL; + } +Index: src/core/memp.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/memp.c,v +retrieving revision 1.55 +retrieving revision 1.56 +diff -u -p -r1.55 -r1.56 +--- a/src/core/memp.c 25 Nov 2007 10:43:28 -0000 1.55 ++++ b/src/core/memp.c 27 Jun 2008 18:37:54 -0000 1.56 +@@ -252,13 +252,12 @@ memp_init(void) + struct memp *memp; + u16_t i, j; + +-#if MEMP_STATS + for (i = 0; i < MEMP_MAX; ++i) { +- lwip_stats.memp[i].used = lwip_stats.memp[i].max = +- lwip_stats.memp[i].err = 0; +- lwip_stats.memp[i].avail = memp_num[i]; ++ MEMP_STATS_AVAIL(used, i, 0); ++ MEMP_STATS_AVAIL(max, i, 0); ++ MEMP_STATS_AVAIL(err, i, 0); ++ MEMP_STATS_AVAIL(avail, i, memp_num[i]); + } +-#endif /* MEMP_STATS */ + + memp = LWIP_MEM_ALIGN(memp_memory); + /* for every pool: */ +@@ -315,20 +314,13 @@ memp_malloc_fn(memp_t type, const char* + memp->file = file; + memp->line = line; + #endif /* MEMP_OVERFLOW_CHECK */ +-#if MEMP_STATS +- ++lwip_stats.memp[type].used; +- if (lwip_stats.memp[type].used > lwip_stats.memp[type].max) { +- lwip_stats.memp[type].max = lwip_stats.memp[type].used; +- } +-#endif /* MEMP_STATS */ ++ MEMP_STATS_INC_USED(used, type); + LWIP_ASSERT("memp_malloc: memp properly aligned", + ((mem_ptr_t)memp % MEM_ALIGNMENT) == 0); + memp = (struct memp*)((u8_t*)memp + MEMP_SIZE); + } else { + LWIP_DEBUGF(MEMP_DEBUG | 2, ("memp_malloc: out of memory in pool %s\n", memp_desc[type])); +-#if MEMP_STATS +- ++lwip_stats.memp[type].err; +-#endif /* MEMP_STATS */ ++ MEMP_STATS_INC(err, type); + } + + SYS_ARCH_UNPROTECT(old_level); +@@ -365,9 +357,7 @@ memp_free(memp_t type, void *mem) + #endif /* MEMP_OVERFLOW_CHECK >= 2 */ + #endif /* MEMP_OVERFLOW_CHECK */ + +-#if MEMP_STATS +- lwip_stats.memp[type].used--; +-#endif /* MEMP_STATS */ ++ MEMP_STATS_DEC(used, type); + + memp->next = memp_tab[type]; + memp_tab[type] = memp; +Index: src/core/netif.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/netif.c,v +retrieving revision 1.65 +retrieving revision 1.68 +diff -u -p -r1.65 -r1.68 +--- a/src/core/netif.c 9 Oct 2007 20:00:55 -0000 1.65 ++++ b/src/core/netif.c 19 Jun 2008 16:27:18 -0000 1.68 +@@ -45,6 +45,12 @@ + #include "lwip/snmp.h" + #include "lwip/igmp.h" + #include "netif/etharp.h" ++#if ENABLE_LOOPBACK ++#include "lwip/sys.h" ++#if LWIP_NETIF_LOOPBACK_MULTITHREADING ++#include "lwip/tcpip.h" ++#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ ++#endif /* ENABLE_LOOPBACK */ + + #if LWIP_NETIF_STATUS_CALLBACK + #define NETIF_STATUS_CALLBACK(n) { if (n->status_callback) (n->status_callback)(n); } +@@ -106,6 +112,10 @@ netif_add(struct netif *netif, struct ip + #if LWIP_IGMP + netif->igmp_mac_filter = NULL; + #endif /* LWIP_IGMP */ ++#if ENABLE_LOOPBACK ++ netif->loop_first = NULL; ++ netif->loop_last = NULL; ++#endif /* ENABLE_LOOPBACK */ + + /* remember netif specific state information data */ + netif->state = state; +@@ -114,6 +124,9 @@ netif_add(struct netif *netif, struct ip + #if LWIP_NETIF_HWADDRHINT + netif->addr_hint = NULL; + #endif /* LWIP_NETIF_HWADDRHINT*/ ++#if ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS ++ netif->loop_cnt_current = 0; ++#endif /* ENABLE_LOOPBACK && LWIP_LOOPBACK_MAX_PBUFS */ + + netif_set_addr(netif, ipaddr, netmask, gw); + +@@ -493,7 +506,158 @@ u8_t netif_is_link_up(struct netif *neti + */ + void netif_set_link_callback(struct netif *netif, void (* link_callback)(struct netif *netif )) + { +- if ( netif ) +- netif->link_callback = link_callback; ++ if (netif) { ++ netif->link_callback = link_callback; ++ } + } + #endif /* LWIP_NETIF_LINK_CALLBACK */ ++ ++#if ENABLE_LOOPBACK ++/** ++ * Send an IP packet to be received on the same netif (loopif-like). ++ * The pbuf is simply copied and handed back to netif->input. ++ * In multithreaded mode, this is done directly since netif->input must put ++ * the packet on a queue. ++ * In callback mode, the packet is put on an internal queue and is fed to ++ * netif->input by netif_poll(). ++ * ++ * @param netif the lwip network interface structure ++ * @param p the (IP) packet to 'send' ++ * @param ipaddr the ip address to send the packet to (not used) ++ * @return ERR_OK if the packet has been sent ++ * ERR_MEM if the pbuf used to copy the packet couldn't be allocated ++ */ ++err_t ++netif_loop_output(struct netif *netif, struct pbuf *p, ++ struct ip_addr *ipaddr) ++{ ++ struct pbuf *r; ++ err_t err; ++ struct pbuf *last; ++#if LWIP_LOOPBACK_MAX_PBUFS ++ u8_t clen = 0; ++#endif /* LWIP_LOOPBACK_MAX_PBUFS */ ++ SYS_ARCH_DECL_PROTECT(lev); ++ LWIP_UNUSED_ARG(ipaddr); ++ ++ /* Allocate a new pbuf */ ++ r = pbuf_alloc(PBUF_LINK, p->tot_len, PBUF_RAM); ++ if (r == NULL) { ++ return ERR_MEM; ++ } ++#if LWIP_LOOPBACK_MAX_PBUFS ++ clen = pbuf_clen(r); ++ /* check for overflow or too many pbuf on queue */ ++ if(((netif->loop_cnt_current + clen) < netif->loop_cnt_current) || ++ ((netif->loop_cnt_current + clen) > LWIP_LOOPBACK_MAX_PBUFS)) { ++ pbuf_free(r); ++ r = NULL; ++ return ERR_MEM; ++ } ++ netif->loop_cnt_current += clen; ++#endif /* LWIP_LOOPBACK_MAX_PBUFS */ ++ ++ /* Copy the whole pbuf queue p into the single pbuf r */ ++ if ((err = pbuf_copy(r, p)) != ERR_OK) { ++ pbuf_free(r); ++ r = NULL; ++ return err; ++ } ++ ++ /* Put the packet on a linked list which gets emptied through calling ++ netif_poll(). */ ++ ++ /* let last point to the last pbuf in chain r */ ++ for (last = r; last->next != NULL; last = last->next); ++ ++ SYS_ARCH_PROTECT(lev); ++ if(netif->loop_first != NULL) { ++ LWIP_ASSERT("if first != NULL, last must also be != NULL", netif->loop_last != NULL); ++ netif->loop_last->next = r; ++ netif->loop_last = last; ++ } else { ++ netif->loop_first = r; ++ netif->loop_last = last; ++ } ++ SYS_ARCH_UNPROTECT(lev); ++ ++#if LWIP_NETIF_LOOPBACK_MULTITHREADING ++ /* For multithreading environment, schedule a call to netif_poll */ ++ tcpip_callback(netif_poll, netif); ++#endif /* LWIP_NETIF_LOOPBACK_MULTITHREADING */ ++ ++ return ERR_OK; ++} ++ ++/** ++ * Call netif_poll() in the main loop of your application. This is to prevent ++ * reentering non-reentrant functions like tcp_input(). Packets passed to ++ * netif_loop_output() are put on a list that is passed to netif->input() by ++ * netif_poll(). ++ */ ++void ++netif_poll(struct netif *netif) ++{ ++ struct pbuf *in; ++ SYS_ARCH_DECL_PROTECT(lev); ++ ++ do { ++ /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ ++ SYS_ARCH_PROTECT(lev); ++ in = netif->loop_first; ++ if(in != NULL) { ++ struct pbuf *in_end = in; ++#if LWIP_LOOPBACK_MAX_PBUFS ++ u8_t clen = pbuf_clen(in); ++ /* adjust the number of pbufs on queue */ ++ LWIP_ASSERT("netif->loop_cnt_current underflow", ++ ((netif->loop_cnt_current - clen) < netif->loop_cnt_current)); ++ netif->loop_cnt_current -= clen; ++#endif /* LWIP_LOOPBACK_MAX_PBUFS */ ++ while(in_end->len != in_end->tot_len) { ++ LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); ++ in_end = in_end->next; ++ } ++ /* 'in_end' now points to the last pbuf from 'in' */ ++ if(in_end == netif->loop_last) { ++ /* this was the last pbuf in the list */ ++ netif->loop_first = netif->loop_last = NULL; ++ } else { ++ /* pop the pbuf off the list */ ++ netif->loop_first = in_end->next; ++ LWIP_ASSERT("should not be null since first != last!", netif->loop_first != NULL); ++ } ++ /* De-queue the pbuf from its successors on the 'loop_' list. */ ++ in_end->next = NULL; ++ } ++ SYS_ARCH_UNPROTECT(lev); ++ ++ if(in != NULL) { ++ /* loopback packets are always IP packets! */ ++ if(ip_input(in, netif) != ERR_OK) { ++ pbuf_free(in); ++ } ++ /* Don't reference the packet any more! */ ++ in = NULL; ++ } ++ /* go on while there is a packet on the list */ ++ } while(netif->loop_first != NULL); ++} ++ ++#if !LWIP_NETIF_LOOPBACK_MULTITHREADING ++/** ++ * Calls netif_poll() for every netif on the netif_list. ++ */ ++void ++netif_poll_all(void) ++{ ++ struct netif *netif = netif_list; ++ /* loop through netifs */ ++ while (netif != NULL) { ++ netif_poll(netif); ++ /* proceed to next network interface */ ++ netif = netif->next; ++ } ++} ++#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ ++#endif /* ENABLE_LOOPBACK */ +Index: src/core/pbuf.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/pbuf.c,v +retrieving revision 1.127 +retrieving revision 1.128 +diff -u -p -r1.127 -r1.128 +--- a/src/core/pbuf.c 4 Mar 2008 16:37:46 -0000 1.127 ++++ b/src/core/pbuf.c 1 Apr 2008 19:05:40 -0000 1.128 +@@ -667,8 +667,8 @@ pbuf_dechain(struct pbuf *p) + * + * @note Only one packet is copied, no packet queue! + * +- * @param p_to pbuf source of the copy +- * @param p_from pbuf destination of the copy ++ * @param p_to pbuf destination of the copy ++ * @param p_from pbuf source of the copy + * + * @return ERR_OK if pbuf was copied + * ERR_ARG if one of the pbufs is NULL or p_to is not big +Index: src/core/stats.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/stats.c,v +retrieving revision 1.27 +retrieving revision 1.28 +diff -u -p -r1.27 -r1.28 +--- a/src/core/stats.c 4 Mar 2008 16:31:32 -0000 1.27 ++++ b/src/core/stats.c 27 Jun 2008 18:37:54 -0000 1.28 +@@ -54,7 +54,6 @@ stats_display_proto(struct stats_proto * + { + LWIP_PLATFORM_DIAG(("\n%s\n\t", name)); + LWIP_PLATFORM_DIAG(("xmit: %"STAT_COUNTER_F"\n\t", proto->xmit)); +- LWIP_PLATFORM_DIAG(("rexmit: %"STAT_COUNTER_F"\n\t", proto->rexmit)); + LWIP_PLATFORM_DIAG(("recv: %"STAT_COUNTER_F"\n\t", proto->recv)); + LWIP_PLATFORM_DIAG(("fw: %"STAT_COUNTER_F"\n\t", proto->fw)); + LWIP_PLATFORM_DIAG(("drop: %"STAT_COUNTER_F"\n\t", proto->drop)); +@@ -68,6 +67,7 @@ stats_display_proto(struct stats_proto * + LWIP_PLATFORM_DIAG(("cachehit: %"STAT_COUNTER_F"\n", proto->cachehit)); + } + ++#if IGMP_STATS + void + stats_display_igmp(struct stats_igmp *igmp) + { +@@ -82,7 +82,9 @@ stats_display_igmp(struct stats_igmp *ig + LWIP_PLATFORM_DIAG(("report_rxed: %"STAT_COUNTER_F"\n\t", igmp->report_rxed)); + LWIP_PLATFORM_DIAG(("group_query_rxed: %"STAT_COUNTER_F"\n", igmp->group_query_rxed)); + } ++#endif /* IGMP_STATS */ + ++#if MEM_STATS || MEMP_STATS + void + stats_display_mem(struct stats_mem *mem, char *name) + { +@@ -93,48 +95,53 @@ stats_display_mem(struct stats_mem *mem, + LWIP_PLATFORM_DIAG(("err: %"U32_F"\n", (u32_t)mem->err)); + } + ++#if MEMP_STATS + void +-stats_display(void) ++stats_display_memp(struct stats_mem *mem, int index) + { +-#if MEMP_STATS +- s16_t i; + char * memp_names[] = { + #define LWIP_MEMPOOL(name,num,size,desc) desc, + #include "lwip/memp_std.h" + }; +-#endif +-#if LINK_STATS +- stats_display_proto(&lwip_stats.link, "LINK"); +-#endif +-#if ETHARP_STATS +- stats_display_proto(&lwip_stats.etharp, "ETHARP"); +-#endif +-#if IPFRAG_STATS +- stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG"); +-#endif +-#if IP_STATS +- stats_display_proto(&lwip_stats.ip, "IP"); +-#endif +-#if ICMP_STATS +- stats_display_proto(&lwip_stats.icmp, "ICMP"); +-#endif +-#if IGMP_STATS +- stats_display_igmp(&lwip_stats.igmp); +-#endif +-#if UDP_STATS +- stats_display_proto(&lwip_stats.udp, "UDP"); +-#endif +-#if TCP_STATS +- stats_display_proto(&lwip_stats.tcp, "TCP"); +-#endif +-#if MEM_STATS +- stats_display_mem(&lwip_stats.mem, "HEAP"); +-#endif +-#if MEMP_STATS ++ if(index < MEMP_MAX) { ++ stats_display_mem(mem, memp_names[index]); ++ } ++} ++#endif /* MEMP_STATS */ ++#endif /* MEM_STATS || MEMP_STATS */ ++ ++#if SYS_STATS ++void ++stats_display_sys(struct stats_sys *sys) ++{ ++ LWIP_PLATFORM_DIAG(("\nSYS\n\t")); ++ LWIP_PLATFORM_DIAG(("sem.used: %"U32_F"\n\t", (u32_t)sys->sem.used)); ++ LWIP_PLATFORM_DIAG(("sem.max: %"U32_F"\n\t", (u32_t)sys->sem.max)); ++ LWIP_PLATFORM_DIAG(("sem.err: %"U32_F"\n\t", (u32_t)sys->sem.err)); ++ LWIP_PLATFORM_DIAG(("mbox.used: %"U32_F"\n\t", (u32_t)sys->mbox.used)); ++ LWIP_PLATFORM_DIAG(("mbox.max: %"U32_F"\n\t", (u32_t)sys->mbox.max)); ++ LWIP_PLATFORM_DIAG(("mbox.err: %"U32_F"\n\t", (u32_t)sys->mbox.err)); ++} ++#endif /* SYS_STATS */ ++ ++void ++stats_display(void) ++{ ++ s16_t i; ++ ++ LINK_STATS_DISPLAY(); ++ ETHARP_STATS_DISPLAY(); ++ IPFRAG_STATS_DISPLAY(); ++ IP_STATS_DISPLAY(); ++ IGMP_STATS_DISPLAY(); ++ ICMP_STATS_DISPLAY(); ++ UDP_STATS_DISPLAY(); ++ TCP_STATS_DISPLAY(); ++ MEM_STATS_DISPLAY(); + for (i = 0; i < MEMP_MAX; i++) { +- stats_display_mem(&lwip_stats.memp[i], memp_names[i]); ++ MEMP_STATS_DISPLAY(i); + } +-#endif ++ SYS_STATS_DISPLAY(); + } + #endif /* LWIP_STATS_DISPLAY */ + +Index: src/core/sys.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/sys.c,v +retrieving revision 1.32 +retrieving revision 1.33 +diff -u -p -r1.32 -r1.33 +--- a/src/core/sys.c 25 Nov 2007 13:57:05 -0000 1.32 ++++ b/src/core/sys.c 16 Jul 2008 20:36:12 -0000 1.33 +@@ -65,7 +65,7 @@ struct sswt_cb + void + sys_mbox_fetch(sys_mbox_t mbox, void **msg) + { +- u32_t time; ++ u32_t time_needed; + struct sys_timeouts *timeouts; + struct sys_timeo *tmptimeout; + sys_timeout_handler h; +@@ -76,18 +76,18 @@ sys_mbox_fetch(sys_mbox_t mbox, void **m + + if (!timeouts || !timeouts->next) { + UNLOCK_TCPIP_CORE(); +- time = sys_arch_mbox_fetch(mbox, msg, 0); ++ time_needed = sys_arch_mbox_fetch(mbox, msg, 0); + LOCK_TCPIP_CORE(); + } else { + if (timeouts->next->time > 0) { + UNLOCK_TCPIP_CORE(); +- time = sys_arch_mbox_fetch(mbox, msg, timeouts->next->time); ++ time_needed = sys_arch_mbox_fetch(mbox, msg, timeouts->next->time); + LOCK_TCPIP_CORE(); + } else { +- time = SYS_ARCH_TIMEOUT; ++ time_needed = SYS_ARCH_TIMEOUT; + } + +- if (time == SYS_ARCH_TIMEOUT) { ++ if (time_needed == SYS_ARCH_TIMEOUT) { + /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message + could be fetched. We should now call the timeout handler and + deallocate the memory allocated for the timeout. */ +@@ -107,8 +107,8 @@ sys_mbox_fetch(sys_mbox_t mbox, void **m + /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout + occured. The time variable is set to the number of + milliseconds we waited for the message. */ +- if (time < timeouts->next->time) { +- timeouts->next->time -= time; ++ if (time_needed < timeouts->next->time) { ++ timeouts->next->time -= time_needed; + } else { + timeouts->next->time = 0; + } +@@ -125,7 +125,7 @@ sys_mbox_fetch(sys_mbox_t mbox, void **m + void + sys_sem_wait(sys_sem_t sem) + { +- u32_t time; ++ u32_t time_needed; + struct sys_timeouts *timeouts; + struct sys_timeo *tmptimeout; + sys_timeout_handler h; +@@ -139,12 +139,12 @@ sys_sem_wait(sys_sem_t sem) + sys_arch_sem_wait(sem, 0); + } else { + if (timeouts->next->time > 0) { +- time = sys_arch_sem_wait(sem, timeouts->next->time); ++ time_needed = sys_arch_sem_wait(sem, timeouts->next->time); + } else { +- time = SYS_ARCH_TIMEOUT; ++ time_needed = SYS_ARCH_TIMEOUT; + } + +- if (time == SYS_ARCH_TIMEOUT) { ++ if (time_needed == SYS_ARCH_TIMEOUT) { + /* If time == SYS_ARCH_TIMEOUT, a timeout occured before a message + could be fetched. We should now call the timeout handler and + deallocate the memory allocated for the timeout. */ +@@ -164,8 +164,8 @@ sys_sem_wait(sys_sem_t sem) + /* If time != SYS_ARCH_TIMEOUT, a message was received before the timeout + occured. The time variable is set to the number of + milliseconds we waited for the message. */ +- if (time < timeouts->next->time) { +- timeouts->next->time -= time; ++ if (time_needed < timeouts->next->time) { ++ timeouts->next->time -= time_needed; + } else { + timeouts->next->time = 0; + } +Index: src/core/tcp.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/tcp.c,v +retrieving revision 1.85 +retrieving revision 1.86 +diff -u -p -r1.85 -r1.86 +--- a/src/core/tcp.c 22 Jan 2008 21:15:15 -0000 1.85 ++++ b/src/core/tcp.c 26 Mar 2008 11:57:13 -0000 1.86 +@@ -509,7 +509,8 @@ tcp_connect(struct tcp_pcb *pcb, struct + pcb->rcv_wnd = TCP_WND; + pcb->rcv_ann_wnd = TCP_WND; + pcb->snd_wnd = TCP_WND; +- /* The send MSS is updated when an MSS option is received. */ ++ /* As initial send MSS, we use TCP_MSS but limit it to 536. ++ The send MSS is updated when an MSS option is received. */ + pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; + #if TCP_CALCULATE_EFF_SEND_MSS + pcb->mss = tcp_eff_send_mss(pcb->mss, ipaddr); +@@ -991,7 +992,8 @@ tcp_alloc(u8_t prio) + pcb->rcv_ann_wnd = TCP_WND; + pcb->tos = 0; + pcb->ttl = TCP_TTL; +- /* The send MSS is updated when an MSS option is received. */ ++ /* As initial send MSS, we use TCP_MSS but limit it to 536. ++ The send MSS is updated when an MSS option is received. */ + pcb->mss = (TCP_MSS > 536) ? 536 : TCP_MSS; + pcb->rto = 3000 / TCP_SLOW_INTERVAL; + pcb->sa = 0; +Index: src/core/tcp_in.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/tcp_in.c,v +retrieving revision 1.97 +retrieving revision 1.100 +diff -u -p -r1.97 -r1.100 +--- a/src/core/tcp_in.c 22 Jan 2008 21:15:15 -0000 1.97 ++++ b/src/core/tcp_in.c 24 Jun 2008 15:46:39 -0000 1.100 +@@ -511,7 +511,7 @@ tcp_process(struct tcp_pcb *pcb) + } + } else { + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, +- pcb->rcv_nxt+pcb->rcv_ann_wnd)) { ++ pcb->rcv_nxt+pcb->rcv_wnd)) { + acceptable = 1; + } + } +@@ -1038,7 +1038,7 @@ tcp_receive(struct tcp_pcb *pcb) + and below rcv_nxt + rcv_wnd) in order to be further + processed. */ + if (TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, +- pcb->rcv_nxt + pcb->rcv_ann_wnd - 1)){ ++ pcb->rcv_nxt + pcb->rcv_wnd - 1)){ + if (pcb->rcv_nxt == seqno) { + accepted_inseq = 1; + /* The incoming segment is the next in sequence. We check if +@@ -1195,14 +1195,14 @@ tcp_receive(struct tcp_pcb *pcb) + } else { + pcb->ooseq = cseg; + } +- } +- tcp_seg_free(next); +- if (cseg->next != NULL) { +- next = cseg->next; +- if (TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { +- /* We need to trim the incoming segment. */ +- cseg->len = (u16_t)(next->tcphdr->seqno - seqno); +- pbuf_realloc(cseg->p, cseg->len); ++ tcp_seg_free(next); ++ if (cseg->next != NULL) { ++ next = cseg->next; ++ if (TCP_SEQ_GT(seqno + cseg->len, next->tcphdr->seqno)) { ++ /* We need to trim the incoming segment. */ ++ cseg->len = (u16_t)(next->tcphdr->seqno - seqno); ++ pbuf_realloc(cseg->p, cseg->len); ++ } + } + } + break; +@@ -1282,10 +1282,7 @@ tcp_receive(struct tcp_pcb *pcb) + + } + } else { +- if(!TCP_SEQ_BETWEEN(seqno, pcb->rcv_nxt, +- pcb->rcv_nxt + pcb->rcv_ann_wnd-1)){ +- tcp_ack_now(pcb); +- } ++ tcp_ack_now(pcb); + } + } else { + /* Segments with length 0 is taken care of here. Segments that +@@ -1331,7 +1328,8 @@ tcp_parseopt(struct tcp_pcb *pcb) + opts[c + 1] == 0x04) { + /* An MSS option with the right option length. */ + mss = (opts[c + 2] << 8) | opts[c + 3]; +- pcb->mss = mss > TCP_MSS? TCP_MSS: mss; ++ /* Limit the mss to the configured TCP_MSS and prevent division by zero */ ++ pcb->mss = ((mss > TCP_MSS) || (mss == 0)) ? TCP_MSS : mss; + + /* And we are done processing options. */ + break; +Index: src/core/ipv4/autoip.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/ipv4/autoip.c,v +retrieving revision 1.16 +retrieving revision 1.17 +diff -u -p -r1.16 -r1.17 +--- a/src/core/ipv4/autoip.c 26 Jan 2008 16:11:40 -0000 1.16 ++++ b/src/core/ipv4/autoip.c 17 Jun 2008 20:16:23 -0000 1.17 +@@ -395,8 +395,8 @@ autoip_arp_reply(struct netif *netif, st + /* Copy struct ip_addr2 to aligned ip_addr, to support compilers without + * structure packing (not using structure copy which breaks strict-aliasing rules). + */ +- MEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); +- MEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); ++ SMEMCPY(&sipaddr, &hdr->sipaddr, sizeof(sipaddr)); ++ SMEMCPY(&dipaddr, &hdr->dipaddr, sizeof(dipaddr)); + + if ((netif->autoip->state == AUTOIP_STATE_PROBING) || + ((netif->autoip->state == AUTOIP_STATE_ANNOUNCING) && +Index: src/core/ipv4/inet_chksum.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/ipv4/inet_chksum.c,v +retrieving revision 1.4 +retrieving revision 1.5 +diff -u -p -r1.4 -r1.5 +--- a/src/core/ipv4/inet_chksum.c 10 Mar 2008 16:12:31 -0000 1.4 ++++ b/src/core/ipv4/inet_chksum.c 17 Jun 2008 20:06:25 -0000 1.5 +@@ -41,8 +41,6 @@ + #include "lwip/inet_chksum.h" + #include "lwip/inet.h" + +-#include <string.h> +- + /* These are some reference implementations of the checksum algorithm, with the + * aim of being simple, correct and fully portable. Checksumming is the + * first thing you would want to optimize for your platform. If you create +@@ -65,6 +63,11 @@ + # define LWIP_CHKSUM_ALGORITHM 0 + #endif + ++/** Like the name says... */ ++#define SWAP_BYTES_IN_WORD(w) ((w & 0xff) << 8) | ((w & 0xff00) >> 8) ++/** Split an u32_t in two u16_ts and add them up */ ++#define FOLD_U32T(u) ((u >> 16) + (u & 0x0000ffffUL)) ++ + #if (LWIP_CHKSUM_ALGORITHM == 1) /* Version #1 */ + /** + * lwip checksum +@@ -86,8 +89,7 @@ lwip_standard_chksum(void *dataptr, u16_ + acc = 0; + /* dataptr may be at odd or even addresses */ + octetptr = (u8_t*)dataptr; +- while (len > 1) +- { ++ while (len > 1) { + /* declare first octet as most significant + thus assume network order, ignoring host order */ + src = (*octetptr) << 8; +@@ -98,8 +100,7 @@ lwip_standard_chksum(void *dataptr, u16_ + acc += src; + len -= 2; + } +- if (len > 0) +- { ++ if (len > 0) { + /* accumulate remaining octet */ + src = (*octetptr) << 8; + acc += src; +@@ -154,19 +155,22 @@ lwip_standard_chksum(void *dataptr, int + } + + /* Consume left-over byte, if any */ +- if (len > 0) ++ if (len > 0) { + ((u8_t *)&t)[0] = *(u8_t *)ps;; ++ } + + /* Add end bytes */ + sum += t; + +- /* Fold 32-bit sum to 16 bits */ +- while ((sum >> 16) != 0) +- sum = (sum & 0xffff) + (sum >> 16); ++ /* Fold 32-bit sum to 16 bits ++ calling this twice is propably faster than if statements... */ ++ sum = FOLD_U32T(sum); ++ sum = FOLD_U32T(sum); + + /* Swap if alignment was odd */ +- if (odd) +- sum = ((sum & 0xff) << 8) | ((sum & 0xff00) >> 8); ++ if (odd) { ++ sum = SWAP_BYTES_IN_WORD(sum); ++ } + + return sum; + } +@@ -211,18 +215,20 @@ lwip_standard_chksum(void *dataptr, int + + while (len > 7) { + tmp = sum + *pl++; /* ping */ +- if (tmp < sum) ++ if (tmp < sum) { + tmp++; /* add back carry */ ++ } + + sum = tmp + *pl++; /* pong */ +- if (sum < tmp) ++ if (sum < tmp) { + sum++; /* add back carry */ ++ } + + len -= 8; + } + + /* make room in upper bits */ +- sum = (sum >> 16) + (sum & 0xffff); ++ sum = FOLD_U32T(sum); + + ps = (u16_t *)pl; + +@@ -233,16 +239,20 @@ lwip_standard_chksum(void *dataptr, int + } + + /* dangling tail byte remaining? */ +- if (len > 0) /* include odd byte */ ++ if (len > 0) { /* include odd byte */ + ((u8_t *)&t)[0] = *(u8_t *)ps; ++ } + + sum += t; /* add end bytes */ + +- while ((sum >> 16) != 0) /* combine halves */ +- sum = (sum >> 16) + (sum & 0xffff); ++ /* Fold 32-bit sum to 16 bits ++ calling this twice is propably faster than if statements... */ ++ sum = FOLD_U32T(sum); ++ sum = FOLD_U32T(sum); + +- if (odd) +- sum = ((sum & 0xff) << 8) | ((sum & 0xff00) >> 8); ++ if (odd) { ++ sum = SWAP_BYTES_IN_WORD(sum); ++ } + + return sum; + } +@@ -277,18 +287,18 @@ inet_chksum_pseudo(struct pbuf *p, + (void *)q, (void *)q->next)); + acc += LWIP_CHKSUM(q->payload, q->len); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ +- while ((acc >> 16) != 0) { +- acc = (acc & 0xffffUL) + (acc >> 16); +- } ++ /* just executing this next line is probably faster that the if statement needed ++ to check whether we really need to execute it, and does no harm */ ++ acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; +- acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); ++ acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { +- acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); ++ acc = SWAP_BYTES_IN_WORD(acc); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); +@@ -297,9 +307,10 @@ inet_chksum_pseudo(struct pbuf *p, + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + +- while ((acc >> 16) != 0) { +- acc = (acc & 0xffffUL) + (acc >> 16); +- } ++ /* Fold 32-bit sum to 16 bits ++ calling this twice is propably faster than if statements... */ ++ acc = FOLD_U32T(acc); ++ acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); + } +@@ -340,18 +351,17 @@ inet_chksum_pseudo_partial(struct pbuf * + chksum_len -= chklen; + LWIP_ASSERT("delete me", chksum_len < 0x7fff); + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): unwrapped lwip_chksum()=%"X32_F" \n", acc));*/ +- while ((acc >> 16) != 0) { +- acc = (acc & 0xffffUL) + (acc >> 16); +- } ++ /* fold the upper bit down */ ++ acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; +- acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); ++ acc = SWAP_BYTES_IN_WORD(acc); + } + /*LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): wrapped lwip_chksum()=%"X32_F" \n", acc));*/ + } + + if (swapped) { +- acc = ((acc & 0xff) << 8) | ((acc & 0xff00UL) >> 8); ++ acc = SWAP_BYTES_IN_WORD(acc); + } + acc += (src->addr & 0xffffUL); + acc += ((src->addr >> 16) & 0xffffUL); +@@ -360,9 +370,10 @@ inet_chksum_pseudo_partial(struct pbuf * + acc += (u32_t)htons((u16_t)proto); + acc += (u32_t)htons(proto_len); + +- while ((acc >> 16) != 0) { +- acc = (acc & 0xffffUL) + (acc >> 16); +- } ++ /* Fold 32-bit sum to 16 bits ++ calling this twice is propably faster than if statements... */ ++ acc = FOLD_U32T(acc); ++ acc = FOLD_U32T(acc); + LWIP_DEBUGF(INET_DEBUG, ("inet_chksum_pseudo(): pbuf chain lwip_chksum()=%"X32_F"\n", acc)); + return (u16_t)~(acc & 0xffffUL); + } +@@ -380,13 +391,7 @@ inet_chksum_pseudo_partial(struct pbuf * + u16_t + inet_chksum(void *dataptr, u16_t len) + { +- u32_t acc; +- +- acc = LWIP_CHKSUM(dataptr, len); +- while ((acc >> 16) != 0) { +- acc = (acc & 0xffff) + (acc >> 16); +- } +- return (u16_t)~(acc & 0xffff); ++ return ~LWIP_CHKSUM(dataptr, len); + } + + /** +@@ -407,17 +412,15 @@ inet_chksum_pbuf(struct pbuf *p) + swapped = 0; + for(q = p; q != NULL; q = q->next) { + acc += LWIP_CHKSUM(q->payload, q->len); +- while ((acc >> 16) != 0) { +- acc = (acc & 0xffffUL) + (acc >> 16); +- } ++ acc = FOLD_U32T(acc); + if (q->len % 2 != 0) { + swapped = 1 - swapped; +- acc = (acc & 0x00ffUL << 8) | (acc & 0xff00UL >> 8); ++ acc = SWAP_BYTES_IN_WORD(acc); + } + } + + if (swapped) { +- acc = ((acc & 0x00ffUL) << 8) | ((acc & 0xff00UL) >> 8); ++ acc = SWAP_BYTES_IN_WORD(acc); + } + return (u16_t)~(acc & 0xffffUL); + } +Index: src/core/ipv4/ip.c +=================================================================== +RCS file: /sources/lwip/lwip/src/core/ipv4/ip.c,v +retrieving revision 1.66 +retrieving revision 1.68 +diff -u -p -r1.66 -r1.68 +--- a/src/core/ipv4/ip.c 14 Jan 2008 20:53:23 -0000 1.66 ++++ b/src/core/ipv4/ip.c 17 Jun 2008 19:39:22 -0000 1.68 +@@ -531,9 +531,19 @@ ip_output_if(struct pbuf *p, struct ip_a + LWIP_DEBUGF(IP_DEBUG, ("ip_output_if: %c%c%"U16_F"\n", netif->name[0], netif->name[1], netif->num)); + ip_debug_print(p); + +- LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); ++#if (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) ++ if (ip_addr_cmp(dest, &netif->ip_addr)) { ++ /* Packet to self, enqueue it for loopback */ ++ LWIP_DEBUGF(IP_DEBUG, ("netif_loop_output()")); ++ ++ return netif_loop_output(netif, p, dest); ++ } else ++#endif /* (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) */ ++ { ++ LWIP_DEBUGF(IP_DEBUG, ("netif->output()")); + +- return netif->output(netif, p, dest); ++ return netif->output(netif, p, dest); ++ } + } + + /** +Index: src/include/lwip/debug.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/debug.h,v +retrieving revision 1.37 +retrieving revision 1.39 +diff -u -p -r1.37 -r1.39 +--- a/src/include/lwip/debug.h 22 Sep 2007 11:16:07 -0000 1.37 ++++ b/src/include/lwip/debug.h 16 Jul 2008 20:36:22 -0000 1.39 +@@ -61,26 +61,28 @@ + #define LWIP_DBG_HALT 0x08U + + #ifndef LWIP_NOASSERT +-#define LWIP_ASSERT(x,y) do { if(!(y)) LWIP_PLATFORM_ASSERT(x); } while(0) ++#define LWIP_ASSERT(message, assertion) do { if(!(assertion)) \ ++ LWIP_PLATFORM_ASSERT(message); } while(0) + #else /* LWIP_NOASSERT */ +-#define LWIP_ASSERT(x,y) ++#define LWIP_ASSERT(message, assertion) + #endif /* LWIP_NOASSERT */ + +-/** print "m" message only if "e" is true, and execute "h" expression */ ++/** if "expression" isn't true, then print "message" and execute "handler" expression */ + #ifndef LWIP_ERROR +-#define LWIP_ERROR(m,e,h) do { if (!(e)) { LWIP_PLATFORM_ASSERT(m); h;}} while(0) ++#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ ++ LWIP_PLATFORM_ASSERT(message); handler;}} while(0) + #endif /* LWIP_ERROR */ + + #ifdef LWIP_DEBUG + /** print debug message only if debug message type is enabled... + * AND is of correct type AND is at least LWIP_DBG_LEVEL + */ +-#define LWIP_DEBUGF(debug,x) do { \ ++#define LWIP_DEBUGF(debug, message) do { \ + if ( \ + ((debug) & LWIP_DBG_ON) && \ + ((debug) & LWIP_DBG_TYPES_ON) && \ + ((s16_t)((debug) & LWIP_DBG_MASK_LEVEL) >= LWIP_DBG_MIN_LEVEL)) { \ +- LWIP_PLATFORM_DIAG(x); \ ++ LWIP_PLATFORM_DIAG(message); \ + if ((debug) & LWIP_DBG_HALT) { \ + while(1); \ + } \ +@@ -88,7 +90,7 @@ + } while(0) + + #else /* LWIP_DEBUG */ +-#define LWIP_DEBUGF(debug,x) ++#define LWIP_DEBUGF(debug, message) + #endif /* LWIP_DEBUG */ + + #endif /* __LWIP_DEBUG_H__ */ +Index: src/include/lwip/err.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/err.h,v +retrieving revision 1.13 +retrieving revision 1.15 +diff -u -p -r1.13 -r1.15 +--- a/src/include/lwip/err.h 13 Dec 2007 23:06:50 -0000 1.13 ++++ b/src/include/lwip/err.h 17 Jun 2008 20:27:32 -0000 1.15 +@@ -33,37 +33,43 @@ + #define __LWIP_ERR_H__ + + #include "lwip/opt.h" ++#include "lwip/arch.h" + + #ifdef __cplusplus + extern "C" { + #endif + +-typedef s8_t err_t; ++/** Define LWIP_ERR_T in cc.h if you want to use ++ * a different type for your platform (must be signed). */ ++#ifdef LWIP_ERR_T ++typedef LWIP_ERR_T err_t; ++#else /* LWIP_ERR_T */ ++ typedef s8_t err_t; ++#endif /* LWIP_ERR_T*/ + + /* Definitions for error constants. */ + + #define ERR_OK 0 /* No error, everything OK. */ + #define ERR_MEM -1 /* Out of memory error. */ + #define ERR_BUF -2 /* Buffer error. */ +-#define ERR_RTE -3 /* Routing problem. */ ++#define ERR_TIMEOUT -3 /* Timeout. */ ++#define ERR_RTE -4 /* Routing problem. */ + + #define ERR_IS_FATAL(e) ((e) < ERR_RTE) + +-#define ERR_ABRT -4 /* Connection aborted. */ +-#define ERR_RST -5 /* Connection reset. */ +-#define ERR_CLSD -6 /* Connection closed. */ +-#define ERR_CONN -7 /* Not connected. */ ++#define ERR_ABRT -5 /* Connection aborted. */ ++#define ERR_RST -6 /* Connection reset. */ ++#define ERR_CLSD -7 /* Connection closed. */ ++#define ERR_CONN -8 /* Not connected. */ + +-#define ERR_VAL -8 /* Illegal value. */ ++#define ERR_VAL -9 /* Illegal value. */ + +-#define ERR_ARG -9 /* Illegal argument. */ ++#define ERR_ARG -10 /* Illegal argument. */ + +-#define ERR_USE -10 /* Address in use. */ ++#define ERR_USE -11 /* Address in use. */ + +-#define ERR_IF -11 /* Low-level netif error */ +-#define ERR_ISCONN -12 /* Already connected. */ +- +-#define ERR_TIMEOUT -13 /* Timeout. */ ++#define ERR_IF -12 /* Low-level netif error */ ++#define ERR_ISCONN -13 /* Already connected. */ + + #define ERR_INPROGRESS -14 /* Operation in progress */ + +Index: src/include/lwip/mem.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/mem.h,v +retrieving revision 1.21 +retrieving revision 1.22 +diff -u -p -r1.21 -r1.22 +--- a/src/include/lwip/mem.h 4 Mar 2008 16:31:32 -0000 1.21 ++++ b/src/include/lwip/mem.h 30 May 2008 11:37:15 -0000 1.22 +@@ -50,16 +50,16 @@ typedef size_t mem_size_t; + * allow these defines to be overridden. + */ + #ifndef mem_free +-#define mem_free(x) free(x) ++#define mem_free free + #endif + #ifndef mem_malloc +-#define mem_malloc(x) malloc(x) ++#define mem_malloc malloc + #endif + #ifndef mem_calloc +-#define mem_calloc(x, y) calloc(x, y) ++#define mem_calloc calloc + #endif + #ifndef mem_realloc +-#define mem_realloc(x, size) (x) ++#define mem_realloc realloc + #endif + #else /* MEM_LIBC_MALLOC */ + +Index: src/include/lwip/netif.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/netif.h,v +retrieving revision 1.43 +retrieving revision 1.46 +diff -u -p -r1.43 -r1.46 +--- a/src/include/lwip/netif.h 9 Oct 2007 19:59:59 -0000 1.43 ++++ b/src/include/lwip/netif.h 19 Jun 2008 16:27:23 -0000 1.46 +@@ -34,6 +34,8 @@ + + #include "lwip/opt.h" + ++#define ENABLE_LOOPBACK (LWIP_NETIF_LOOPBACK || LWIP_HAVE_LOOPIF) ++ + #include "lwip/err.h" + + #include "lwip/ip_addr.h" +@@ -165,6 +167,14 @@ struct netif { + #if LWIP_NETIF_HWADDRHINT + u8_t *addr_hint; + #endif /* LWIP_NETIF_HWADDRHINT */ ++#if ENABLE_LOOPBACK ++ /* List of packets to be queued for ourselves. */ ++ struct pbuf *loop_first; ++ struct pbuf *loop_last; ++#if LWIP_LOOPBACK_MAX_PBUFS ++ u16_t loop_cnt_current; ++#endif /* LWIP_LOOPBACK_MAX_PBUFS */ ++#endif /* ENABLE_LOOPBACK */ + }; + + #if LWIP_SNMP +@@ -242,4 +252,12 @@ void netif_set_link_callback(struct neti + } + #endif + ++#if ENABLE_LOOPBACK ++err_t netif_loop_output(struct netif *netif, struct pbuf *p, struct ip_addr *dest_ip); ++void netif_poll(struct netif *netif); ++#if !LWIP_NETIF_LOOPBACK_MULTITHREADING ++void netif_poll_all(void); ++#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ ++#endif /* ENABLE_LOOPBACK */ ++ + #endif /* __LWIP_NETIF_H__ */ +Index: src/include/lwip/opt.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/opt.h,v +retrieving revision 1.116 +retrieving revision 1.122 +diff -u -p -r1.116 -r1.122 +--- a/src/include/lwip/opt.h 31 Jan 2008 18:19:29 -0000 1.116 ++++ b/src/include/lwip/opt.h 30 Jun 2008 18:16:52 -0000 1.122 +@@ -155,6 +155,27 @@ + #define MEMP_USE_CUSTOM_POOLS 0 + #endif + ++/** ++ * Set this to 1 if you want to free PBUF_RAM pbufs (or call mem_free()) from ++ * interrupt context (or another context that doesn't allow waiting for a ++ * semaphore). ++ * If set to 1, mem_malloc will be protected by a semaphore and SYS_ARCH_PROTECT, ++ * while mem_free will only use SYS_ARCH_PROTECT. mem_malloc SYS_ARCH_UNPROTECTs ++ * with each loop so that mem_free can run. ++ * ++ * ATTENTION: As you can see from the above description, this leads to dis-/ ++ * enabling interrupts often, which can be slow! Also, on low memory, mem_malloc ++ * can need longer. ++ * ++ * If you don't want that, at least for NO_SYS=0, you can still use the following ++ * functions to enqueue a deallocation call which then runs in the tcpip_thread ++ * context: ++ * - pbuf_free_callback(p); ++ * - mem_free_callback(m); ++ */ ++#ifndef LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT ++#define LWIP_ALLOW_MEM_FREE_FROM_OTHER_CONTEXT 0 ++#endif + + /* + ------------------------------------------------ +@@ -815,6 +836,39 @@ + #define LWIP_NETIF_HWADDRHINT 0 + #endif + ++/** ++ * LWIP_NETIF_LOOPBACK==1: Support sending packets with a destination IP ++ * address equal to the netif IP address, looping them back up the stack. ++ */ ++#ifndef LWIP_NETIF_LOOPBACK ++#define LWIP_NETIF_LOOPBACK 0 ++#endif ++ ++/** ++ * LWIP_LOOPBACK_MAX_PBUFS: Maximum number of pbufs on queue for loopback ++ * sending for each netif (0 = disabled) ++ */ ++#ifndef LWIP_LOOPBACK_MAX_PBUFS ++#define LWIP_LOOPBACK_MAX_PBUFS 0 ++#endif ++ ++/** ++ * LWIP_NETIF_LOOPBACK_MULTITHREADING: Indicates whether threading is enabled in ++ * the system, as netifs must change how they behave depending on this setting ++ * for the LWIP_NETIF_LOOPBACK option to work. ++ * Setting this is needed to avoid reentering non-reentrant functions like ++ * tcp_input(). ++ * LWIP_NETIF_LOOPBACK_MULTITHREADING==1: Indicates that the user is using a ++ * multithreaded environment like tcpip.c. In this case, netif->input() ++ * is called directly. ++ * LWIP_NETIF_LOOPBACK_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. ++ * The packets are put on a list and netif_poll() must be called in ++ * the main application loop. ++ */ ++#ifndef LWIP_NETIF_LOOPBACK_MULTITHREADING ++#define LWIP_NETIF_LOOPBACK_MULTITHREADING (!NO_SYS) ++#endif ++ + /* + ------------------------------------ + ---------- LOOPIF options ---------- +@@ -827,20 +881,16 @@ + #define LWIP_HAVE_LOOPIF 0 + #endif + ++/* ++ ------------------------------------ ++ ---------- SLIPIF options ---------- ++ ------------------------------------ ++*/ + /** +- * LWIP_LOOPIF_MULTITHREADING: Indicates whether threading is enabled in +- * the system, as LOOPIF must change how it behaves depending on this setting. +- * Setting this is needed to avoid reentering non-reentrant functions like +- * tcp_input(). +- * LWIP_LOOPIF_MULTITHREADING==1: Indicates that the user is using a +- * multithreaded environment like tcpip.c. In this case, netif->input() +- * is called directly. +- * LWIP_LOOPIF_MULTITHREADING==0: Indicates a polling (or NO_SYS) setup. +- * The packets are put on a list and loopif_poll() must be called in +- * the main application loop. ++ * LWIP_HAVE_SLIPIF==1: Support slip interface and slipif.c + */ +-#ifndef LWIP_LOOPIF_MULTITHREADING +-#define LWIP_LOOPIF_MULTITHREADING 1 ++#ifndef LWIP_HAVE_SLIPIF ++#define LWIP_HAVE_SLIPIF 0 + #endif + + /* +Index: src/include/lwip/sio.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/sio.h,v +retrieving revision 1.7 +retrieving revision 1.8 +diff -u -p -r1.7 -r1.8 +--- a/src/include/lwip/sio.h 6 Sep 2007 16:43:44 -0000 1.7 ++++ b/src/include/lwip/sio.h 27 Mar 2008 18:06:02 -0000 1.8 +@@ -32,16 +32,24 @@ + * It needs to be implemented by those platforms which need SLIP or PPP + */ + ++#ifndef __SIO_H__ ++#define __SIO_H__ ++ + #include "lwip/arch.h" + + #ifdef __cplusplus + extern "C" { + #endif + ++/* If you want to define sio_fd_t elsewhere or differently, ++ define this in your cc.h file. */ + #ifndef __sio_fd_t_defined + typedef void * sio_fd_t; + #endif + ++/* The following functions can be defined to something else in your cc.h file ++ or be implemented in your custom sio.c file. */ ++ + #ifndef sio_open + sio_fd_t sio_open(u8_t); + #endif +@@ -69,3 +77,5 @@ void sio_read_abort(sio_fd_t); + #ifdef __cplusplus + } + #endif ++ ++#endif /* __SIO_H__ */ +Index: src/include/lwip/sockets.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/sockets.h,v +retrieving revision 1.38 +retrieving revision 1.39 +diff -u -p -r1.38 -r1.39 +--- a/src/include/lwip/sockets.h 2 Dec 2007 15:24:02 -0000 1.38 ++++ b/src/include/lwip/sockets.h 26 Apr 2008 10:46:23 -0000 1.39 +@@ -177,7 +177,22 @@ typedef struct ip_mreq { + } ip_mreq; + #endif /* LWIP_IGMP */ + +-/* Unimplemented for now... */ ++/* ++ * The Type of Service provides an indication of the abstract ++ * parameters of the quality of service desired. These parameters are ++ * to be used to guide the selection of the actual service parameters ++ * when transmitting a datagram through a particular network. Several ++ * networks offer service precedence, which somehow treats high ++ * precedence traffic as more important than other traffic (generally ++ * by accepting only traffic above a certain precedence at time of high ++ * load). The major choice is a three way tradeoff between low-delay, ++ * high-reliability, and high-throughput. ++ * The use of the Delay, Throughput, and Reliability indications may ++ * increase the cost (in some sense) of the service. In many networks ++ * better performance for one of these parameters is coupled with worse ++ * performance on another. Except for very unusual cases at most two ++ * of these three indications should be set. ++ */ + #define IPTOS_TOS_MASK 0x1E + #define IPTOS_TOS(tos) ((tos) & IPTOS_TOS_MASK) + #define IPTOS_LOWDELAY 0x10 +@@ -187,7 +202,13 @@ typedef struct ip_mreq { + #define IPTOS_MINCOST IPTOS_LOWCOST + + /* +- * Definitions for IP precedence (also in ip_tos) (Unimplemented) ++ * The Network Control precedence designation is intended to be used ++ * within a network only. The actual use and control of that ++ * designation is up to each network. The Internetwork Control ++ * designation is intended for use by gateway control originators only. ++ * If the actual use of these precedence designations is of concern to ++ * a particular network, it is the responsibility of that network to ++ * control the access to, and use of, those precedence designations. + */ + #define IPTOS_PREC_MASK 0xe0 + #define IPTOS_PREC(tos) ((tos) & IPTOS_PREC_MASK) +Index: src/include/lwip/stats.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/stats.h,v +retrieving revision 1.19 +retrieving revision 1.23 +diff -u -p -r1.19 -r1.23 +--- a/src/include/lwip/stats.h 28 Nov 2007 21:25:07 -0000 1.19 ++++ b/src/include/lwip/stats.h 8 Jul 2008 09:15:57 -0000 1.23 +@@ -57,7 +57,6 @@ extern "C" { + + struct stats_proto { + STAT_COUNTER xmit; /* Transmitted packets. */ +- STAT_COUNTER rexmit; /* Retransmitted packets. */ + STAT_COUNTER recv; /* Received packets. */ + STAT_COUNTER fw; /* Forwarded packets. */ + STAT_COUNTER drop; /* Dropped packets. */ +@@ -87,7 +86,8 @@ struct stats_mem { + mem_size_t avail; + mem_size_t used; + mem_size_t max; +- mem_size_t err; ++ STAT_COUNTER err; ++ STAT_COUNTER illegal; + }; + + struct stats_syselem { +@@ -142,64 +142,138 @@ extern struct stats_ lwip_stats; + #define stats_init() /* Compatibility define, not init needed. */ + + #define STATS_INC(x) ++lwip_stats.x ++#define STATS_DEC(x) --lwip_stats.x + #else + #define stats_init() + #define STATS_INC(x) ++#define STATS_DEC(x) + #endif /* LWIP_STATS */ + + #if TCP_STATS + #define TCP_STATS_INC(x) STATS_INC(x) ++#define TCP_STATS_DISPLAY() stats_display_proto(&lwip_stats.tcp, "TCP") + #else + #define TCP_STATS_INC(x) ++#define TCP_STATS_DISPLAY() + #endif + + #if UDP_STATS + #define UDP_STATS_INC(x) STATS_INC(x) ++#define UDP_STATS_DISPLAY() stats_display_proto(&lwip_stats.udp, "UDP") + #else + #define UDP_STATS_INC(x) ++#define UDP_STATS_DISPLAY() + #endif + + #if ICMP_STATS + #define ICMP_STATS_INC(x) STATS_INC(x) ++#define ICMP_STATS_DISPLAY() stats_display_proto(&lwip_stats.icmp, "ICMP") + #else + #define ICMP_STATS_INC(x) ++#define ICMP_STATS_DISPLAY() + #endif + + #if IGMP_STATS + #define IGMP_STATS_INC(x) STATS_INC(x) ++#define IGMP_STATS_DISPLAY() stats_display_igmp(&lwip_stats.igmp) + #else + #define IGMP_STATS_INC(x) ++#define IGMP_STATS_DISPLAY() + #endif + + #if IP_STATS + #define IP_STATS_INC(x) STATS_INC(x) ++#define IP_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip, "IP") + #else + #define IP_STATS_INC(x) ++#define IP_STATS_DISPLAY() + #endif + + #if IPFRAG_STATS + #define IPFRAG_STATS_INC(x) STATS_INC(x) ++#define IPFRAG_STATS_DISPLAY() stats_display_proto(&lwip_stats.ip_frag, "IP_FRAG") + #else + #define IPFRAG_STATS_INC(x) ++#define IPFRAG_STATS_DISPLAY() + #endif + + #if ETHARP_STATS + #define ETHARP_STATS_INC(x) STATS_INC(x) ++#define ETHARP_STATS_DISPLAY() stats_display_proto(&lwip_stats.etharp, "ETHARP") + #else + #define ETHARP_STATS_INC(x) ++#define ETHARP_STATS_DISPLAY() + #endif + + #if LINK_STATS + #define LINK_STATS_INC(x) STATS_INC(x) ++#define LINK_STATS_DISPLAY() stats_display_proto(&lwip_stats.link, "LINK") + #else + #define LINK_STATS_INC(x) ++#define LINK_STATS_DISPLAY() ++#endif ++ ++#if MEM_STATS ++#define MEM_STATS_AVAIL(x, y) lwip_stats.mem.x = y ++#define MEM_STATS_INC(x) STATS_INC(mem.x) ++#define MEM_STATS_INC_USED(x, y) do { lwip_stats.mem.used += y; \ ++ if (lwip_stats.mem.max < lwip_stats.mem.used) { \ ++ lwip_stats.mem.max = lwip_stats.mem.used; \ ++ } \ ++ } while(0) ++#define MEM_STATS_DEC_USED(x, y) lwip_stats.mem.x -= y ++#define MEM_STATS_DISPLAY() stats_display_mem(&lwip_stats.mem, "HEAP") ++#else ++#define MEM_STATS_AVAIL(x, y) ++#define MEM_STATS_INC(x) ++#define MEM_STATS_INC_USED(x, y) ++#define MEM_STATS_DEC_USED(x, y) ++#define MEM_STATS_DISPLAY() ++#endif ++ ++#if MEMP_STATS ++#define MEMP_STATS_AVAIL(x, i, y) lwip_stats.memp[i].x = y ++#define MEMP_STATS_INC(x, i) STATS_INC(memp[i].x) ++#define MEMP_STATS_DEC(x, i) STATS_DEC(memp[i].x) ++#define MEMP_STATS_INC_USED(x, i) do { ++lwip_stats.memp[i].used; \ ++ if (lwip_stats.memp[i].max < lwip_stats.memp[i].used) { \ ++ lwip_stats.memp[i].max = lwip_stats.memp[i].used; \ ++ } \ ++ } while(0) ++#define MEMP_STATS_DISPLAY(i) stats_display_memp(&lwip_stats.memp[i], i) ++#else ++#define MEMP_STATS_AVAIL(x, i, y) ++#define MEMP_STATS_INC(x, i) ++#define MEMP_STATS_DEC(x, i) ++#define MEMP_STATS_INC_USED(x, i) ++#define MEMP_STATS_DISPLAY(i) ++#endif ++ ++#if SYS_STATS ++#define SYS_STATS_INC(x) STATS_INC(sys.x) ++#define SYS_STATS_DEC(x) STATS_DEC(sys.x) ++#define SYS_STATS_DISPLAY() stats_display_sys(&lwip_stats.sys) ++#else ++#define SYS_STATS_INC(x) ++#define SYS_STATS_DEC(x) ++#define SYS_STATS_DISPLAY() + #endif + + /* Display of statistics */ + #if LWIP_STATS_DISPLAY + void stats_display(void); ++void stats_display_proto(struct stats_proto *proto, char *name); ++void stats_display_igmp(struct stats_igmp *igmp); ++void stats_display_mem(struct stats_mem *mem, char *name); ++void stats_display_memp(struct stats_mem *mem, int index); ++void stats_display_sys(struct stats_sys *sys); + #else + #define stats_display() ++#define stats_display_proto(proto, name) ++#define stats_display_igmp(igmp) ++#define stats_display_mem(mem, name) ++#define stats_display_memp(mem, index) ++#define stats_display_sys(sys) + #endif /* LWIP_STATS_DISPLAY */ + + #ifdef __cplusplus +Index: src/include/lwip/tcpip.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/lwip/tcpip.h,v +retrieving revision 1.24 +retrieving revision 1.27 +diff -u -p -r1.24 -r1.27 +--- a/src/include/lwip/tcpip.h 12 Jan 2008 11:52:22 -0000 1.24 ++++ b/src/include/lwip/tcpip.h 27 Jun 2008 20:34:55 -0000 1.27 +@@ -83,7 +83,11 @@ err_t tcpip_netifapi_lock(struct netifap + #endif /* LWIP_NETIF_API */ + + err_t tcpip_callback_with_block(void (*f)(void *ctx), void *ctx, u8_t block); +-#define tcpip_callback(f,ctx) tcpip_callback_with_block(f,ctx,1) ++#define tcpip_callback(f, ctx) tcpip_callback_with_block(f, ctx, 1) ++ ++/* free pbufs or heap memory from another context without blocking */ ++err_t pbuf_free_callback(struct pbuf *p); ++err_t mem_free_callback(void *m); + + err_t tcpip_timeout(u32_t msecs, sys_timeout_handler h, void *arg); + #define tcpip_untimeout(h, arg) tcpip_timeout(0xffffffff, h, arg) +Index: src/include/netif/loopif.h +=================================================================== +RCS file: /sources/lwip/lwip/src/include/netif/loopif.h,v +retrieving revision 1.7 +retrieving revision 1.9 +diff -u -p -r1.7 -r1.9 +--- a/src/include/netif/loopif.h 10 May 2007 10:59:20 -0000 1.7 ++++ b/src/include/netif/loopif.h 17 Jun 2008 20:12:22 -0000 1.9 +@@ -32,6 +32,7 @@ + #ifndef __NETIF_LOOPIF_H__ + #define __NETIF_LOOPIF_H__ + ++#include "lwip/opt.h" + #include "lwip/netif.h" + #include "lwip/err.h" + +@@ -39,9 +40,9 @@ + extern "C" { + #endif + +-#if !LWIP_LOOPIF_MULTITHREADING +-void loopif_poll(struct netif *netif); +-#endif ++#if !LWIP_NETIF_LOOPBACK_MULTITHREADING ++#define loopif_poll netif_poll ++#endif /* !LWIP_NETIF_LOOPBACK_MULTITHREADING */ + + err_t loopif_init(struct netif *netif); + +Index: src/netif/etharp.c +=================================================================== +RCS file: /sources/lwip/lwip/src/netif/etharp.c,v +retrieving revision 1.145 +retrieving revision 1.148 +diff -u -p -r1.145 -r1.148 +--- a/src/netif/etharp.c 4 Mar 2008 13:41:24 -0000 1.145 ++++ b/src/netif/etharp.c 19 Jun 2008 16:40:59 -0000 1.148 +@@ -353,7 +353,7 @@ find_entry(struct ip_addr *ipaddr, u8_t + * 1) empty entry + * 2) oldest stable entry + * 3) oldest pending entry without queued packets +- * 4) oldest pending entry without queued packets ++ * 4) oldest pending entry with queued packets + * + * { ETHARP_TRY_HARD is set at this point } + */ +@@ -1130,7 +1130,14 @@ ethernet_input(struct pbuf *p, struct ne + + /* points to packet payload, which starts with an Ethernet header */ + ethhdr = p->payload; +- ++ LWIP_DEBUGF(ETHARP_DEBUG | LWIP_DBG_TRACE, ++ ("ethernet_input: dest:%02x:%02x:%02x:%02x:%02x:%02x, src:%02x:%02x:%02x:%02x:%02x:%02x, type:%2hx\n", ++ (unsigned)ethhdr->dest.addr[0], (unsigned)ethhdr->dest.addr[1], (unsigned)ethhdr->dest.addr[2], ++ (unsigned)ethhdr->dest.addr[3], (unsigned)ethhdr->dest.addr[4], (unsigned)ethhdr->dest.addr[5], ++ (unsigned)ethhdr->src.addr[0], (unsigned)ethhdr->src.addr[1], (unsigned)ethhdr->src.addr[2], ++ (unsigned)ethhdr->src.addr[3], (unsigned)ethhdr->src.addr[4], (unsigned)ethhdr->src.addr[5], ++ (unsigned)htons(ethhdr->type))); ++ + switch (htons(ethhdr->type)) { + /* IP packet? */ + case ETHTYPE_IP: +@@ -1165,6 +1172,8 @@ ethernet_input(struct pbuf *p, struct ne + #endif /* PPPOE_SUPPORT */ + + default: ++ ETHARP_STATS_INC(etharp.proterr); ++ ETHARP_STATS_INC(etharp.drop); + pbuf_free(p); + p = NULL; + break; +Index: src/netif/loopif.c +=================================================================== +RCS file: /sources/lwip/lwip/src/netif/loopif.c,v +retrieving revision 1.26 +retrieving revision 1.27 +diff -u -p -r1.26 -r1.27 +--- a/src/netif/loopif.c 31 Aug 2007 10:14:09 -0000 1.26 ++++ b/src/netif/loopif.c 12 Jun 2008 20:10:10 -0000 1.27 +@@ -40,149 +40,8 @@ + #if LWIP_HAVE_LOOPIF + + #include "netif/loopif.h" +-#include "lwip/pbuf.h" + #include "lwip/snmp.h" + +-#include <string.h> +- +-#if !LWIP_LOOPIF_MULTITHREADING +- +-#include "lwip/sys.h" +-#include "lwip/mem.h" +- +-/* helper struct for the linked list of pbufs */ +-struct loopif_private { +- struct pbuf *first; +- struct pbuf *last; +-}; +- +-/** +- * Call loopif_poll() in the main loop of your application. This is to prevent +- * reentering non-reentrant functions like tcp_input(). Packets passed to +- * loopif_output() are put on a list that is passed to netif->input() by +- * loopif_poll(). +- * +- * @param netif the lwip network interface structure for this loopif +- */ +-void +-loopif_poll(struct netif *netif) +-{ +- SYS_ARCH_DECL_PROTECT(lev); +- struct pbuf *in, *in_end; +- struct loopif_private *priv = (struct loopif_private*)netif->state; +- +- LWIP_ERROR("priv != NULL", (priv != NULL), return;); +- +- do { +- /* Get a packet from the list. With SYS_LIGHTWEIGHT_PROT=1, this is protected */ +- SYS_ARCH_PROTECT(lev); +- in = priv->first; +- if(in) { +- in_end = in; +- while(in_end->len != in_end->tot_len) { +- LWIP_ASSERT("bogus pbuf: len != tot_len but next == NULL!", in_end->next != NULL); +- in_end = in_end->next; +- } +- /* 'in_end' now points to the last pbuf from 'in' */ +- if(in_end == priv->last) { +- /* this was the last pbuf in the list */ +- priv->first = priv->last = NULL; +- } else { +- /* pop the pbuf off the list */ +- priv->first = in_end->next; +- LWIP_ASSERT("should not be null since first != last!", priv->first != NULL); +- } +- } +- SYS_ARCH_UNPROTECT(lev); +- +- if(in != NULL) { +- if(in_end->next != NULL) { +- /* De-queue the pbuf from its successors on the 'priv' list. */ +- in_end->next = NULL; +- } +- if(netif->input(in, netif) != ERR_OK) { +- pbuf_free(in); +- } +- /* Don't reference the packet any more! */ +- in = NULL; +- in_end = NULL; +- } +- /* go on while there is a packet on the list */ +- } while(priv->first != NULL); +-} +-#endif /* LWIP_LOOPIF_MULTITHREADING */ +- +-/** +- * Send an IP packet over the loopback interface. +- * The pbuf is simply copied and handed back to netif->input. +- * In multithreaded mode, this is done directly since netif->input must put +- * the packet on a queue. +- * In callback mode, the packet is put on an internal queue and is fed to +- * netif->input by loopif_poll(). +- * +- * @param netif the lwip network interface structure for this loopif +- * @param p the (IP) packet to 'send' +- * @param ipaddr the ip address to send the packet to (not used for loopif) +- * @return ERR_OK if the packet has been sent +- * ERR_MEM if the pbuf used to copy the packet couldn't be allocated +- */ +-static err_t +-loopif_output(struct netif *netif, struct pbuf *p, +- struct ip_addr *ipaddr) +-{ +-#if !LWIP_LOOPIF_MULTITHREADING +- SYS_ARCH_DECL_PROTECT(lev); +- struct loopif_private *priv; +- struct pbuf *last; +-#endif /* LWIP_LOOPIF_MULTITHREADING */ +- struct pbuf *r; +- err_t err; +- +- LWIP_UNUSED_ARG(ipaddr); +- +- /* Allocate a new pbuf */ +- r = pbuf_alloc(PBUF_RAW, p->tot_len, PBUF_RAM); +- if (r == NULL) { +- return ERR_MEM; +- } +- +- /* Copy the whole pbuf queue p into the single pbuf r */ +- if ((err = pbuf_copy(r, p)) != ERR_OK) { +- pbuf_free(r); +- r = NULL; +- return err; +- } +- +-#if LWIP_LOOPIF_MULTITHREADING +- /* Multithreading environment, netif->input() is supposed to put the packet +- into a mailbox, so we can safely call it here without risking to re-enter +- functions that are not reentrant (TCP!!!) */ +- if(netif->input(r, netif) != ERR_OK) { +- pbuf_free(r); +- r = NULL; +- } +-#else /* LWIP_LOOPIF_MULTITHREADING */ +- /* Raw API without threads: put the packet on a linked list which gets emptied +- through calling loopif_poll(). */ +- priv = (struct loopif_private*)netif->state; +- +- /* let last point to the last pbuf in chain r */ +- for (last = r; last->next != NULL; last = last->next); +- SYS_ARCH_PROTECT(lev); +- if(priv->first != NULL) { +- LWIP_ASSERT("if first != NULL, last must also be != NULL", priv->last != NULL); +- priv->last->next = r; +- priv->last = last; +- } else { +- priv->first = r; +- priv->last = last; +- } +- SYS_ARCH_UNPROTECT(lev); +-#endif /* LWIP_LOOPIF_MULTITHREADING */ +- +- return ERR_OK; +-} +- + /** + * Initialize a lwip network interface structure for a loopback interface + * +@@ -193,16 +52,6 @@ loopif_output(struct netif *netif, struc + err_t + loopif_init(struct netif *netif) + { +-#if !LWIP_LOOPIF_MULTITHREADING +- struct loopif_private *priv; +- +- priv = (struct loopif_private*)mem_malloc(sizeof(struct loopif_private)); +- if(priv == NULL) +- return ERR_MEM; +- priv->first = priv->last = NULL; +- netif->state = priv; +-#endif /* LWIP_LOOPIF_MULTITHREADING */ +- + /* initialize the snmp variables and counters inside the struct netif + * ifSpeed: no assumption can be made! + */ +@@ -210,7 +59,7 @@ loopif_init(struct netif *netif) + + netif->name[0] = 'l'; + netif->name[1] = 'o'; +- netif->output = loopif_output; ++ netif->output = netif_loop_output; + return ERR_OK; + } + +Index: src/netif/slipif.c +=================================================================== +RCS file: /sources/lwip/lwip/src/netif/slipif.c,v +retrieving revision 1.29 +retrieving revision 1.30 +diff -u -p -r1.29 -r1.30 +--- a/src/netif/slipif.c 30 Nov 2007 17:22:21 -0000 1.29 ++++ b/src/netif/slipif.c 17 Jun 2008 20:14:05 -0000 1.30 +@@ -44,6 +44,9 @@ + + #include "netif/slipif.h" + #include "lwip/opt.h" ++ ++#if LWIP_HAVE_SLIPIF ++ + #include "lwip/def.h" + #include "lwip/pbuf.h" + #include "lwip/sys.h" +@@ -273,3 +276,4 @@ slipif_init(struct netif *netif) + sys_thread_new(SLIPIF_THREAD_NAME, slipif_loop, netif, SLIPIF_THREAD_STACKSIZE, SLIPIF_THREAD_PRIO); + return ERR_OK; + } ++#endif /* LWIP_HAVE_SLIPIF */ diff --git a/external/meta-virtualization/recipes-extended/xen/files/newlib-chk.patch b/external/meta-virtualization/recipes-extended/xen/files/newlib-chk.patch new file mode 100644 index 00000000..a5d01495 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/newlib-chk.patch @@ -0,0 +1,155 @@ +--- a/newlib/libc/stdio/fprintf_chk.c 1969-12-31 19:00:00.000000000 -0500 ++++ b/newlib/libc/stdio/fprintf_chk.c 2009-02-26 19:02:53.000000000 -0500 +@@ -0,0 +1,21 @@ ++#include <stdarg.h> ++#include <stdio.h> ++ ++/* ++ * Stub implementation of __fprintf_chk adapted from glibc 2.7. This ++ * doesn't actually implement any buffer overflow protection. It just makes ++ * the linker happy :) ++*/ ++int ++__fprintf_chk (FILE *fp, int flag, const char *format, ...) ++{ ++ va_list ap; ++ int done; ++ ++ va_start (ap, format); ++ done = vfprintf (fp, format, ap); ++ va_end (ap); ++ ++ return done; ++} ++ +--- a/newlib/libc/stdio/Makefile.am 2007-08-02 16:23:06.000000000 -0400 ++++ b/newlib/libc/stdio/Makefile.am 2009-02-26 18:14:53.000000000 -0500 +@@ -20,6 +20,7 @@ + flags.c \ + fopen.c \ + fprintf.c \ ++ fprintf_chk.c \ + fputc.c \ + fputs.c \ + fread.c \ +@@ -65,6 +66,7 @@ + sniprintf.c \ + snprintf.c \ + sprintf.c \ ++ sprintf_chk.c \ + sscanf.c \ + stdio.c \ + tmpfile.c \ +--- a/newlib/libc/stdio/Makefile.in 2007-12-19 17:36:38.000000000 -0500 ++++ b/newlib/libc/stdio/Makefile.in 2009-02-26 18:43:52.000000000 -0500 +@@ -63,7 +63,8 @@ + lib_a-fgets.$(OBJEXT) lib_a-fileno.$(OBJEXT) \ + lib_a-findfp.$(OBJEXT) lib_a-fiprintf.$(OBJEXT) \ + lib_a-flags.$(OBJEXT) lib_a-fopen.$(OBJEXT) \ +- lib_a-fprintf.$(OBJEXT) lib_a-fputc.$(OBJEXT) \ ++ lib_a-fprintf.$(OBJEXT) lib_a-fprintf_chk.$(OBJEXT) \ ++ lib_a-fputc.$(OBJEXT) \ + lib_a-fputs.$(OBJEXT) lib_a-fread.$(OBJEXT) \ + lib_a-freopen.$(OBJEXT) lib_a-fscanf.$(OBJEXT) \ + lib_a-fiscanf.$(OBJEXT) lib_a-fseek.$(OBJEXT) \ +@@ -86,6 +87,7 @@ + lib_a-setvbuf.$(OBJEXT) lib_a-siprintf.$(OBJEXT) \ + lib_a-siscanf.$(OBJEXT) lib_a-sniprintf.$(OBJEXT) \ + lib_a-snprintf.$(OBJEXT) lib_a-sprintf.$(OBJEXT) \ ++ lib_a-sprintf_chk.$(OBJEXT) \ + lib_a-sscanf.$(OBJEXT) lib_a-stdio.$(OBJEXT) \ + lib_a-tmpfile.$(OBJEXT) lib_a-tmpnam.$(OBJEXT) \ + lib_a-ungetc.$(OBJEXT) lib_a-vdiprintf.$(OBJEXT) \ +@@ -122,15 +124,15 @@ + LTLIBRARIES = $(noinst_LTLIBRARIES) + am__objects_4 = clearerr.lo fclose.lo fdopen.lo feof.lo ferror.lo \ + fflush.lo fgetc.lo fgetpos.lo fgets.lo fileno.lo findfp.lo \ +- fiprintf.lo flags.lo fopen.lo fprintf.lo fputc.lo fputs.lo \ +- fread.lo freopen.lo fscanf.lo fiscanf.lo fseek.lo fsetpos.lo \ ++ fiprintf.lo flags.lo fopen.lo fprintf.lo fprintf_chk.lo fputc.lo \ ++ fputs.lo fread.lo freopen.lo fscanf.lo fiscanf.lo fseek.lo fsetpos.lo \ + ftell.lo fvwrite.lo fwalk.lo fwrite.lo getc.lo getchar.lo \ + getc_u.lo getchar_u.lo getdelim.lo getline.lo gets.lo \ + iprintf.lo iscanf.lo makebuf.lo perror.lo printf.lo putc.lo \ + putchar.lo putc_u.lo putchar_u.lo puts.lo refill.lo remove.lo \ + rename.lo rewind.lo rget.lo scanf.lo sccl.lo setbuf.lo \ + setbuffer.lo setlinebuf.lo setvbuf.lo siprintf.lo siscanf.lo \ +- sniprintf.lo snprintf.lo sprintf.lo sscanf.lo stdio.lo \ ++ sniprintf.lo snprintf.lo sprintf.lo sprintf_chk.lo sscanf.lo stdio.lo \ + tmpfile.lo tmpnam.lo ungetc.lo vdiprintf.lo vdprintf.lo \ + viprintf.lo viscanf.lo vprintf.lo vscanf.lo vsiprintf.lo \ + vsiscanf.lo vsnprintf.lo vsniprintf.lo vsprintf.lo vsscanf.lo \ +@@ -344,6 +346,7 @@ + flags.c \ + fopen.c \ + fprintf.c \ ++ fprintf_chk.c \ + fputc.c \ + fputs.c \ + fread.c \ +@@ -389,6 +392,7 @@ + sniprintf.c \ + snprintf.c \ + sprintf.c \ ++ sprintf_chk.c \ + sscanf.c \ + stdio.c \ + tmpfile.c \ +@@ -508,6 +512,7 @@ + siprintf.def \ + siscanf.def \ + sprintf.def \ ++ sprintf_chk.def \ + sscanf.def \ + tmpfile.def \ + tmpnam.def \ +@@ -678,6 +683,12 @@ + lib_a-fprintf.obj: fprintf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fprintf.obj `if test -f 'fprintf.c'; then $(CYGPATH_W) 'fprintf.c'; else $(CYGPATH_W) '$(srcdir)/fprintf.c'; fi` + ++lib_a-fprintf_chk.o: fprintf_chk.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fprintf_chk.o `test -f 'fprintf_chk.c' || echo '$(srcdir)/'`fprintf_chk.c ++ ++lib_a-fprintf_chk.obj: fprintf_chk.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fprintf_chk.obj `if test -f 'fprintf_chk.c'; then $(CYGPATH_W) 'fprintf_chk.c'; else $(CYGPATH_W) '$(srcdir)/fprintf_chk.c'; fi` ++ + lib_a-fputc.o: fputc.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-fputc.o `test -f 'fputc.c' || echo '$(srcdir)/'`fputc.c + +@@ -948,6 +959,12 @@ + lib_a-sprintf.obj: sprintf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sprintf.obj `if test -f 'sprintf.c'; then $(CYGPATH_W) 'sprintf.c'; else $(CYGPATH_W) '$(srcdir)/sprintf.c'; fi` + ++lib_a-sprintf_chk.o: sprintf_chk.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sprintf_chk.o `test -f 'sprintf_chk.c' || echo '$(srcdir)/'`sprintf_chk.c ++ ++lib_a-sprintf_chk.obj: sprintf_chk.c ++ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sprintf_chk.obj `if test -f 'sprintf_chk.c'; then $(CYGPATH_W) 'sprintf_chk.c'; else $(CYGPATH_W) '$(srcdir)/sprintf_chk.c'; fi` ++ + lib_a-sscanf.o: sscanf.c + $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_a_CFLAGS) $(CFLAGS) -c -o lib_a-sscanf.o `test -f 'sscanf.c' || echo '$(srcdir)/'`sscanf.c + +--- a/newlib/libc/stdio/sprintf_chk.c 1969-12-31 19:00:00.000000000 -0500 ++++ b/newlib/libc/stdio/sprintf_chk.c 2009-02-26 19:02:26.000000000 -0500 +@@ -0,0 +1,21 @@ ++#include <stdarg.h> ++#include <stdio.h> ++ ++/* ++ * Stub implementation of __sprintf_chk adapted from glibc 2.7. This ++ * doesn't actually implement any buffer overflow protection. It just makes ++ * the linker happy :) ++*/ ++int ++__sprintf_chk (char *s, int flags, size_t slen, const char *format, ...) ++{ ++ va_list arg; ++ int done; ++ ++ va_start (arg, format); ++ done = vsprintf (s, format, arg); ++ va_end (arg); ++ ++ return done; ++} ++ diff --git a/external/meta-virtualization/recipes-extended/xen/files/newlib-stdint-size_max-fix-from-1.17.0.patch b/external/meta-virtualization/recipes-extended/xen/files/newlib-stdint-size_max-fix-from-1.17.0.patch new file mode 100644 index 00000000..3610d646 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/newlib-stdint-size_max-fix-from-1.17.0.patch @@ -0,0 +1,16 @@ +--- a/newlib/libc/include/stdint.h.orig 2006-08-17 00:39:43.000000000 +0300 ++++ b/newlib/libc/include/stdint.h 2009-08-25 17:33:23.000000000 +0300 +@@ -348,8 +348,11 @@ + #endif + + /* This must match size_t in stddef.h, currently long unsigned int */ +-#define SIZE_MIN (-__STDINT_EXP(LONG_MAX) - 1L) +-#define SIZE_MAX __STDINT_EXP(LONG_MAX) ++#ifdef __SIZE_MAX__ ++#define SIZE_MAX __SIZE_MAX__ ++#else ++#define SIZE_MAX (__STDINT_EXP(LONG_MAX) * 2UL + 1) ++#endif + + /* This must match sig_atomic_t in <signal.h> (currently int) */ + #define SIG_ATOMIC_MIN (-__STDINT_EXP(INT_MAX) - 1) diff --git a/external/meta-virtualization/recipes-extended/xen/files/newlib.patch b/external/meta-virtualization/recipes-extended/xen/files/newlib.patch new file mode 100644 index 00000000..dbf409a2 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/newlib.patch @@ -0,0 +1,727 @@ +There is a mix between longs and long longs. + +Index: newlib/libc/include/inttypes.h +=================================================================== +RCS file: /cvs/src/src/newlib/libc/include/inttypes.h,v +retrieving revision 1.3 +diff -u -p -r1.3 inttypes.h +--- a/newlib/libc/include/inttypes.h 16 Dec 2005 19:03:12 -0000 1.3 ++++ b/newlib/libc/include/inttypes.h 8 Nov 2007 16:32:44 -0000 +@@ -163,12 +163,12 @@ + + + /* 64-bit types */ +-#if __have_longlong64 +-#define __PRI64(x) __STRINGIFY(ll##x) +-#define __SCN64(x) __STRINGIFY(ll##x) +-#elif __have_long64 ++#if __have_long64 + #define __PRI64(x) __STRINGIFY(l##x) + #define __SCN64(x) __STRINGIFY(l##x) ++#elif __have_longlong64 ++#define __PRI64(x) __STRINGIFY(ll##x) ++#define __SCN64(x) __STRINGIFY(ll##x) + #else + #define __PRI64(x) __STRINGIFY(x) + #define __SCN64(x) __STRINGIFY(x) +@@ -217,12 +217,12 @@ + #endif + + /* max-bit types */ +-#if __have_longlong64 +-#define __PRIMAX(x) __STRINGIFY(ll##x) +-#define __SCNMAX(x) __STRINGIFY(ll##x) +-#elif __have_long64 ++#if __have_long64 + #define __PRIMAX(x) __STRINGIFY(l##x) + #define __SCNMAX(x) __STRINGIFY(l##x) ++#elif __have_longlong64 ++#define __PRIMAX(x) __STRINGIFY(ll##x) ++#define __SCNMAX(x) __STRINGIFY(ll##x) + #else + #define __PRIMAX(x) __STRINGIFY(x) + #define __SCNMAX(x) __STRINGIFY(x) +@@ -242,12 +242,12 @@ + #define SCNxMAX __SCNMAX(x) + + /* ptr types */ +-#if __have_longlong64 +-#define __PRIPTR(x) __STRINGIFY(ll##x) +-#define __SCNPTR(x) __STRINGIFY(ll##x) +-#elif __have_long64 ++#if __have_long64 + #define __PRIPTR(x) __STRINGIFY(l##x) + #define __SCNPTR(x) __STRINGIFY(l##x) ++#elif __have_longlong64 ++#define __PRIPTR(x) __STRINGIFY(ll##x) ++#define __SCNPTR(x) __STRINGIFY(ll##x) + #else + #define __PRIPTR(x) __STRINGIFY(x) + #define __SCNPTR(x) __STRINGIFY(x) + +We don't want u?int32_t to be long as our code assume in a lot of places to be +int. + +Index: newlib/libc/include/stdint.h +=================================================================== +RCS file: /cvs/src/src/newlib/libc/include/stdint.h,v +retrieving revision 1.10 +diff -u -p -r1.10 stdint.h +--- a/newlib/libc/include/stdint.h 16 Aug 2006 21:39:43 -0000 1.10 ++++ b/newlib/libc/include/stdint.h 12 Feb 2008 13:07:52 -0000 +@@ -38,7 +38,7 @@ extern "C" { + #if __STDINT_EXP(LONG_MAX) > 0x7fffffff + #define __have_long64 1 + #elif __STDINT_EXP(LONG_MAX) == 0x7fffffff && !defined(__SPU__) +-#define __have_long32 1 ++/* #define __have_long32 1 */ + #endif + + #if __STDINT_EXP(SCHAR_MAX) == 0x7f + +Define the basic ia64 jump buffer + +Index: newlib/libc/include/sys/config.h +=================================================================== +RCS file: /cvs/src/src/newlib/libc/include/sys/config.h,v +retrieving revision 1.47 +diff -u -p -r1.47 config.h +--- a/newlib/libc/include/sys/config.h 15 Mar 2007 21:32:12 -0000 1.47 ++++ b/newlib/libc/include/sys/config.h 8 Nov 2007 16:32:44 -0000 +@@ -71,6 +71,10 @@ + #endif + #endif + ++#ifndef __DYNAMIC_REENT__ ++#define __DYNAMIC_REENT__ ++#endif ++ + #ifdef __mn10200__ + #define __SMALL_BITFIELDS + #endif + +Dynamic pointer to our reentrancy zone + +Index: newlib/libc/reent/getreent.c +=================================================================== +RCS file: /cvs/src/src/newlib/libc/reent/getreent.c,v +retrieving revision 1.2 +diff -u -p -r1.2 getreent.c +--- a/newlib/libc/reent/getreent.c 7 Sep 2007 00:45:55 -0000 1.2 ++++ b/newlib/libc/reent/getreent.c 8 Nov 2007 16:32:44 -0000 +@@ -3,12 +3,20 @@ + #include <_ansi.h> + #include <reent.h> + ++#define weak_alias(name, aliasname) \ ++ extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))); ++ + #ifdef __getreent + #undef __getreent + #endif ++#ifdef __libc_getreent ++#undef __libc_getreent ++#endif + + struct _reent * +-_DEFUN_VOID(__getreent) ++__libc_getreent (void) + { + return _impure_ptr; + } ++weak_alias(__libc_getreent,__getreent) ++ + +We can't provide a red zone in mini-os. + +Index: newlib/libc/machine/x86_64/memcpy.S +=================================================================== +RCS file: /cvs/src/src/newlib/libc/machine/x86_64/memcpy.S,v +retrieving revision 1.1 +diff -u -p -r1.1 memcpy.S +--- a/newlib/libc/machine/x86_64/memcpy.S 28 Aug 2007 21:56:49 -0000 1.1 ++++ b/newlib/libc/machine/x86_64/memcpy.S 8 Nov 2007 16:32:44 -0000 +@@ -30,10 +30,18 @@ quadword_aligned: + cmpq $256, rdx + jb quadword_copy + ++#if 1 ++ subq $32, rsp ++ movq rax, 24 (rsp) ++ movq r12, 16 (rsp) ++ movq r13, 8 (rsp) ++ movq r14, 0 (rsp) ++#else + movq rax, -8 (rsp) + movq r12, -16 (rsp) + movq r13, -24 (rsp) + movq r14, -32 (rsp) ++#endif + + movq rdx, rcx /* Copy 128 bytes at a time with minimum cache polution */ + shrq $7, rcx +@@ -89,10 +97,18 @@ loop: + movq rdx, rcx + andq $127, rcx + rep movsb ++#if 1 ++ movq 24 (rsp), rax ++ movq 16 (rsp), r12 ++ movq 8 (rsp), r13 ++ movq 0 (rsp), r14 ++ addq $32, rsp ++#else + movq -8 (rsp), rax + movq -16 (rsp), r12 + movq -24 (rsp), r13 + movq -32 (rsp), r14 ++#endif + ret + + +--- a/newlib/libc/machine/x86_64/x86_64mach.h.orig 2008-07-11 14:57:23.062269000 +0100 ++++ b/newlib/libc/machine/x86_64/x86_64mach.h 2008-07-11 14:58:01.262503000 +0100 +@@ -22,81 +22,81 @@ + + #define REG(x) CONCAT1(__REG_PREFIX__, x) + +-#define rax REG(rax) +-#define rbx REG(rbx) +-#define rcx REG(rcx) +-#define rdx REG(rdx) +-#define rsi REG(rsi) +-#define rdi REG(rdi) +-#define rbp REG(rbp) +-#define rsp REG(rsp) +- +-#define r8 REG(r8) +-#define r9 REG(r9) +-#define r10 REG(r10) +-#define r11 REG(r11) +-#define r12 REG(r12) +-#define r13 REG(r13) +-#define r14 REG(r14) +-#define r15 REG(r15) +- +-#define eax REG(eax) +-#define ebx REG(ebx) +-#define ecx REG(ecx) +-#define edx REG(edx) +-#define esi REG(esi) +-#define edi REG(edi) +-#define ebp REG(ebp) +-#define esp REG(esp) +- +-#define st0 REG(st) +-#define st1 REG(st(1)) +-#define st2 REG(st(2)) +-#define st3 REG(st(3)) +-#define st4 REG(st(4)) +-#define st5 REG(st(5)) +-#define st6 REG(st(6)) +-#define st7 REG(st(7)) +- +-#define ax REG(ax) +-#define bx REG(bx) +-#define cx REG(cx) +-#define dx REG(dx) +- +-#define ah REG(ah) +-#define bh REG(bh) +-#define ch REG(ch) +-#define dh REG(dh) +- +-#define al REG(al) +-#define bl REG(bl) +-#define cl REG(cl) +-#define dl REG(dl) +- +-#define sil REG(sil) +- +-#define mm1 REG(mm1) +-#define mm2 REG(mm2) +-#define mm3 REG(mm3) +-#define mm4 REG(mm4) +-#define mm5 REG(mm5) +-#define mm6 REG(mm6) +-#define mm7 REG(mm7) +- +-#define xmm0 REG(xmm0) +-#define xmm1 REG(xmm1) +-#define xmm2 REG(xmm2) +-#define xmm3 REG(xmm3) +-#define xmm4 REG(xmm4) +-#define xmm5 REG(xmm5) +-#define xmm6 REG(xmm6) +-#define xmm7 REG(xmm7) +- +-#define cr0 REG(cr0) +-#define cr1 REG(cr1) +-#define cr2 REG(cr2) +-#define cr3 REG(cr3) +-#define cr4 REG(cr4) ++#define rax %rax ++#define rbx %rbx ++#define rcx %rcx ++#define rdx %rdx ++#define rsi %rsi ++#define rdi %rdi ++#define rbp %rbp ++#define rsp %rsp ++ ++#define r8 %r8 ++#define r9 %r9 ++#define r10 %r10 ++#define r11 %r11 ++#define r12 %r12 ++#define r13 %r13 ++#define r14 %r14 ++#define r15 %r15 ++ ++#define eax %eax ++#define ebx %ebx ++#define ecx %ecx ++#define edx %edx ++#define esi %esi ++#define edi %edi ++#define ebp %ebp ++#define esp %esp ++ ++#define st0 %st ++#define st1 %st(1) ++#define st2 %st(2) ++#define st3 %st(3) ++#define st4 %st(4) ++#define st5 %st(5) ++#define st6 %st(6) ++#define st7 %st(7) ++ ++#define ax %ax ++#define bx %bx ++#define cx %cx ++#define dx %dx ++ ++#define ah %ah ++#define bh %bh ++#define ch %ch ++#define dh %dh ++ ++#define al %al ++#define bl %bl ++#define cl %cl ++#define dl %dl ++ ++#define sil %sil ++ ++#define mm1 %mm1 ++#define mm2 %mm2 ++#define mm3 %mm3 ++#define mm4 %mm4 ++#define mm5 %mm5 ++#define mm6 %mm6 ++#define mm7 %mm7 ++ ++#define xmm0 %xmm0 ++#define xmm1 %xmm1 ++#define xmm2 %xmm2 ++#define xmm3 %xmm3 ++#define xmm4 %xmm4 ++#define xmm5 %xmm5 ++#define xmm6 %xmm6 ++#define xmm7 %xmm7 ++ ++#define cr0 %cr0 ++#define cr1 %cr1 ++#define cr2 %cr2 ++#define cr3 %cr3 ++#define cr4 %cr4 + + #ifdef _I386MACH_NEED_SOTYPE_FUNCTION + #define SOTYPE_FUNCTION(sym) .type SYM(sym),@function +--- a/newlib/libc/machine/x86_64/memcpy.S.orig 2008-07-11 15:12:27.494693000 +0100 ++++ b/newlib/libc/machine/x86_64/memcpy.S 2008-07-11 15:12:29.448706000 +0100 +@@ -60,14 +60,14 @@ + movq 48 (rsi), r13 + movq 56 (rsi), r14 + +- movntiq rax, (rdi) +- movntiq r8 , 8 (rdi) +- movntiq r9 , 16 (rdi) +- movntiq r10, 24 (rdi) +- movntiq r11, 32 (rdi) +- movntiq r12, 40 (rdi) +- movntiq r13, 48 (rdi) +- movntiq r14, 56 (rdi) ++ movnti rax, (rdi) ++ movnti r8 , 8 (rdi) ++ movnti r9 , 16 (rdi) ++ movnti r10, 24 (rdi) ++ movnti r11, 32 (rdi) ++ movnti r12, 40 (rdi) ++ movnti r13, 48 (rdi) ++ movnti r14, 56 (rdi) + + movq 64 (rsi), rax + movq 72 (rsi), r8 +@@ -78,14 +78,14 @@ + movq 112 (rsi), r13 + movq 120 (rsi), r14 + +- movntiq rax, 64 (rdi) +- movntiq r8 , 72 (rdi) +- movntiq r9 , 80 (rdi) +- movntiq r10, 88 (rdi) +- movntiq r11, 96 (rdi) +- movntiq r12, 104 (rdi) +- movntiq r13, 112 (rdi) +- movntiq r14, 120 (rdi) ++ movnti rax, 64 (rdi) ++ movnti r8 , 72 (rdi) ++ movnti r9 , 80 (rdi) ++ movnti r10, 88 (rdi) ++ movnti r11, 96 (rdi) ++ movnti r12, 104 (rdi) ++ movnti r13, 112 (rdi) ++ movnti r14, 120 (rdi) + + leaq 128 (rsi), rsi + leaq 128 (rdi), rdi +--- a/newlib/libc/machine/i386/i386mach.h 2000-08-28 18:50:06.000000000 +0100 ++++ b/newlib/libc/machine/i386/i386mach.h 2008-07-11 15:17:13.874409000 +0100 +@@ -27,46 +27,46 @@ + + #define REG(x) CONCAT1(__REG_PREFIX__, x) + +-#define eax REG(eax) +-#define ebx REG(ebx) +-#define ecx REG(ecx) +-#define edx REG(edx) +-#define esi REG(esi) +-#define edi REG(edi) +-#define ebp REG(ebp) +-#define esp REG(esp) +- +-#define st0 REG(st) +-#define st1 REG(st(1)) +-#define st2 REG(st(2)) +-#define st3 REG(st(3)) +-#define st4 REG(st(4)) +-#define st5 REG(st(5)) +-#define st6 REG(st(6)) +-#define st7 REG(st(7)) +- +-#define ax REG(ax) +-#define bx REG(bx) +-#define cx REG(cx) +-#define dx REG(dx) +- +-#define ah REG(ah) +-#define bh REG(bh) +-#define ch REG(ch) +-#define dh REG(dh) +- +-#define al REG(al) +-#define bl REG(bl) +-#define cl REG(cl) +-#define dl REG(dl) +- +-#define mm1 REG(mm1) +-#define mm2 REG(mm2) +-#define mm3 REG(mm3) +-#define mm4 REG(mm4) +-#define mm5 REG(mm5) +-#define mm6 REG(mm6) +-#define mm7 REG(mm7) ++#define eax %eax ++#define ebx %ebx ++#define ecx %ecx ++#define edx %edx ++#define esi %esi ++#define edi %edi ++#define ebp %ebp ++#define esp %esp ++ ++#define st0 %st ++#define st1 %st(1) ++#define st2 %st(2) ++#define st3 %st(3) ++#define st4 %st(4) ++#define st5 %st(5) ++#define st6 %st(6) ++#define st7 %st(7) ++ ++#define ax %ax ++#define bx %bx ++#define cx %cx ++#define dx %dx ++ ++#define ah %ah ++#define bh %bh ++#define ch %ch ++#define dh %dh ++ ++#define al %al ++#define bl %bl ++#define cl %cl ++#define dl %dl ++ ++#define mm1 %mm1 ++#define mm2 %mm2 ++#define mm3 %mm3 ++#define mm4 %mm4 ++#define mm5 %mm5 ++#define mm6 %mm6 ++#define mm7 %mm7 + + #ifdef _I386MACH_NEED_SOTYPE_FUNCTION + #define SOTYPE_FUNCTION(sym) .type SYM(sym),@function +--- a/newlib/libc/machine/x86_64/memset.S 2007-08-28 22:56:49.000000000 +0100 ++++ b/newlib/libc/machine/x86_64/memset.S 2008-07-11 15:16:59.098320000 +0100 +@@ -40,22 +40,22 @@ + + .p2align 4 + loop: +- movntiq rax, (rdi) +- movntiq rax, 8 (rdi) +- movntiq rax, 16 (rdi) +- movntiq rax, 24 (rdi) +- movntiq rax, 32 (rdi) +- movntiq rax, 40 (rdi) +- movntiq rax, 48 (rdi) +- movntiq rax, 56 (rdi) +- movntiq rax, 64 (rdi) +- movntiq rax, 72 (rdi) +- movntiq rax, 80 (rdi) +- movntiq rax, 88 (rdi) +- movntiq rax, 96 (rdi) +- movntiq rax, 104 (rdi) +- movntiq rax, 112 (rdi) +- movntiq rax, 120 (rdi) ++ movnti rax, (rdi) ++ movnti rax, 8 (rdi) ++ movnti rax, 16 (rdi) ++ movnti rax, 24 (rdi) ++ movnti rax, 32 (rdi) ++ movnti rax, 40 (rdi) ++ movnti rax, 48 (rdi) ++ movnti rax, 56 (rdi) ++ movnti rax, 64 (rdi) ++ movnti rax, 72 (rdi) ++ movnti rax, 80 (rdi) ++ movnti rax, 88 (rdi) ++ movnti rax, 96 (rdi) ++ movnti rax, 104 (rdi) ++ movnti rax, 112 (rdi) ++ movnti rax, 120 (rdi) + + leaq 128 (rdi), rdi + +--- a/newlib/libm/machine/i386/i386mach.h.orig 2008-07-11 15:30:37.367227000 +0100 ++++ b/newlib/libm/machine/i386/i386mach.h 2008-07-11 15:30:55.232337000 +0100 +@@ -27,46 +27,46 @@ + + #define REG(x) CONCAT1(__REG_PREFIX__, x) + +-#define eax REG(eax) +-#define ebx REG(ebx) +-#define ecx REG(ecx) +-#define edx REG(edx) +-#define esi REG(esi) +-#define edi REG(edi) +-#define ebp REG(ebp) +-#define esp REG(esp) +- +-#define st0 REG(st) +-#define st1 REG(st(1)) +-#define st2 REG(st(2)) +-#define st3 REG(st(3)) +-#define st4 REG(st(4)) +-#define st5 REG(st(5)) +-#define st6 REG(st(6)) +-#define st7 REG(st(7)) +- +-#define ax REG(ax) +-#define bx REG(bx) +-#define cx REG(cx) +-#define dx REG(dx) +- +-#define ah REG(ah) +-#define bh REG(bh) +-#define ch REG(ch) +-#define dh REG(dh) +- +-#define al REG(al) +-#define bl REG(bl) +-#define cl REG(cl) +-#define dl REG(dl) +- +-#define mm1 REG(mm1) +-#define mm2 REG(mm2) +-#define mm3 REG(mm3) +-#define mm4 REG(mm4) +-#define mm5 REG(mm5) +-#define mm6 REG(mm6) +-#define mm7 REG(mm7) ++#define eax %eax ++#define ebx %ebx ++#define ecx %ecx ++#define edx %edx ++#define esi %esi ++#define edi %edi ++#define ebp %ebp ++#define esp %esp ++ ++#define st0 %st ++#define st1 %st(1) ++#define st2 %st(2) ++#define st3 %st(3) ++#define st4 %st(4) ++#define st5 %st(5) ++#define st6 %st(6) ++#define st7 %st(7) ++ ++#define ax %ax ++#define bx %bx ++#define cx %cx ++#define dx %dx ++ ++#define ah %ah ++#define bh %bh ++#define ch %ch ++#define dh %dh ++ ++#define al %al ++#define bl %bl ++#define cl %cl ++#define dl %dl ++ ++#define mm1 %mm1 ++#define mm2 %mm2 ++#define mm3 %mm3 ++#define mm4 %mm4 ++#define mm5 %mm5 ++#define mm6 %mm6 ++#define mm7 %mm7 + + #ifdef _I386MACH_NEED_SOTYPE_FUNCTION + #define SOTYPE_FUNCTION(sym) .type SYM(sym),@function + + +We want to have a 64bit offsets libc even on 32bit platforms. + +--- ./newlib/configure.host.orig 2008-08-07 16:01:17.801946000 +0100 ++++ ./newlib/configure.host 2008-08-07 16:01:34.181064000 +0100 +@@ -317,6 +317,8 @@ + oext=lo + lpfx= + aext=la ;; ++ i[34567]86-xen-elf) ++ stdio64_dir=stdio64 ;; + *) ;; #shared library not supported for ${host} + esac + +--- a/newlib/libc/include/sys/_types.h.orig 2008-08-07 15:22:44.925008000 +0100 ++++ b/newlib/libc/include/sys/_types.h 2008-08-07 15:22:50.824044000 +0100 +@@ -13,8 +13,12 @@ + #include <sys/lock.h> + + #ifndef __off_t_defined ++#ifdef __MINIOS__ ++typedef long long _off_t; ++#else + typedef long _off_t; + #endif ++#endif + + #if defined(__rtems__) + /* device numbers are 32-bit major and and 32-bit minor */ +--- ./newlib/libc/include/sys/config.h.orig 2008-08-07 14:43:25.915866000 +0100 ++++ ./newlib/libc/include/sys/config.h 2008-08-07 14:44:13.508154000 +0100 +@@ -69,6 +69,10 @@ + /* we use some glibc header files so turn on glibc large file feature */ + #define _LARGEFILE64_SOURCE 1 + #endif ++#ifdef __MINIOS__ ++#define __LARGE64_FILES 1 ++#define _LARGEFILE64_SOURCE 1 ++#endif + #endif + + #ifndef __DYNAMIC_REENT__ +--- ./newlib/libc/include/sys/_default_fcntl.h.orig 2008-08-07 15:08:22.377836000 +0100 ++++ ./newlib/libc/include/sys/_default_fcntl.h 2008-08-07 15:08:31.651890000 +0100 +@@ -170,7 +170,11 @@ + /* Provide _<systemcall> prototypes for functions provided by some versions + of newlib. */ + #ifdef _COMPILING_NEWLIB +-extern int _open _PARAMS ((const char *, int, ...)); ++extern int _open _PARAMS ((const char *, int, ...)) ++#ifdef __MINIOS__ ++ asm("open64") ++#endif ++ ; + extern int _fcntl _PARAMS ((int, int, ...)); + #ifdef __LARGE64_FILES + extern int _open64 _PARAMS ((const char *, int, ...)); +--- ./newlib/libc/include/sys/unistd.h.orig 2008-08-07 15:09:36.449280000 +0100 ++++ ./newlib/libc/include/sys/unistd.h 2008-08-07 15:09:51.210370000 +0100 +@@ -101,7 +101,11 @@ + int _EXFUN(link, (const char *__path1, const char *__path2 )); + int _EXFUN(nice, (int __nice_value )); + #if !defined(__INSIDE_CYGWIN__) +-off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence )); ++off_t _EXFUN(lseek, (int __fildes, off_t __offset, int __whence )) ++#ifdef __MINIOS__ ++ asm("lseek64") ++#endif ++ ; + #endif + #if defined(__SPU__) + #define F_ULOCK 0 +--- ./newlib/libc/include/sys/stat.h.orig 2008-08-07 16:08:50.495116000 +0100 ++++ ./newlib/libc/include/sys/stat.h 2008-08-07 16:10:21.799753000 +0100 +@@ -49,6 +49,9 @@ + long st_spare4[2]; + #endif + }; ++#ifdef __MINIOS__ ++#define stat64 stat ++#endif + #endif + + #define _IFMT 0170000 /* type of file */ +@@ -132,7 +135,11 @@ + /* Provide prototypes for most of the _<systemcall> names that are + provided in newlib for some compilers. */ + #ifdef _COMPILING_NEWLIB +-int _EXFUN(_fstat,( int __fd, struct stat *__sbuf )); ++int _EXFUN(_fstat,( int __fd, struct stat *__sbuf )) ++#ifdef __MINIOS__ ++ asm("fstat64") ++#endif ++ ; + int _EXFUN(_stat,( const char *__path, struct stat *__sbuf )); + #ifdef __LARGE64_FILES + struct stat64; +--- ./newlib/libc/include/_syslist.h.orig 2008-08-07 16:24:19.122605000 +0100 ++++ ./newlib/libc/include/_syslist.h 2008-08-07 16:24:21.548628000 +0100 +@@ -14,6 +14,7 @@ + #define _kill kill + #define _link link + #define _lseek lseek ++#define _lseek64 lseek64 + #define _open open + #define _read read + #define _sbrk sbrk +--- a/newlib/libc/include/reent.h.orig 2008-08-07 16:28:49.846502000 +0100 ++++ b/newlib/libc/include/reent.h 2008-08-07 16:29:02.096586000 +0100 +@@ -87,6 +87,9 @@ + #if defined(__CYGWIN__) && defined(_COMPILING_NEWLIB) + #define stat64 __stat64 + #endif ++#if defined(__MINIOS__) ++#define stat64 stat ++#endif + + struct stat64; + diff --git a/external/meta-virtualization/recipes-extended/xen/files/polarssl.patch b/external/meta-virtualization/recipes-extended/xen/files/polarssl.patch new file mode 100644 index 00000000..95487308 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/polarssl.patch @@ -0,0 +1,64 @@ +diff -Naur polarssl-1.1.4/include/polarssl/config.h polarssl-x86_64/include/polarssl/config.h +--- a/include/polarssl/config.h 2011-12-22 05:06:27.000000000 -0500 ++++ b/include/polarssl/config.h 2012-10-30 17:18:07.567001000 -0400 +@@ -164,8 +164,8 @@ + * application. + * + * Uncomment this macro to prevent loading of default entropy functions. +-#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES + */ ++#define POLARSSL_NO_DEFAULT_ENTROPY_SOURCES + + /** + * \def POLARSSL_NO_PLATFORM_ENTROPY +@@ -175,8 +175,8 @@ + * standards like the /dev/urandom or Windows CryptoAPI. + * + * Uncomment this macro to disable the built-in platform entropy functions. +-#define POLARSSL_NO_PLATFORM_ENTROPY + */ ++#define POLARSSL_NO_PLATFORM_ENTROPY + + /** + * \def POLARSSL_PKCS1_V21 +@@ -426,8 +426,8 @@ + * Requires: POLARSSL_TIMING_C + * + * This module enables the HAVEGE random number generator. +- */ + #define POLARSSL_HAVEGE_C ++ */ + + /** + * \def POLARSSL_MD_C +@@ -490,7 +490,7 @@ + * + * This module provides TCP/IP networking routines. + */ +-#define POLARSSL_NET_C ++//#define POLARSSL_NET_C + + /** + * \def POLARSSL_PADLOCK_C +@@ -644,8 +644,8 @@ + * Caller: library/havege.c + * + * This module is used by the HAVEGE random number generator. +- */ + #define POLARSSL_TIMING_C ++ */ + + /** + * \def POLARSSL_VERSION_C +diff -Naur polarssl-1.1.4/library/bignum.c polarssl-x86_64/library/bignum.c +--- a/library/bignum.c 2012-04-29 16:15:55.000000000 -0400 ++++ b/library/bignum.c 2012-10-30 17:21:52.135000999 -0400 +@@ -1101,7 +1101,7 @@ + Z.p[i - t - 1] = ~0; + else + { +-#if defined(POLARSSL_HAVE_LONGLONG) ++#if 0 //defined(POLARSSL_HAVE_LONGLONG) + t_udbl r; + + r = (t_udbl) X.p[i] << biL; diff --git a/external/meta-virtualization/recipes-extended/xen/files/tools-xentop-vwprintw.patch b/external/meta-virtualization/recipes-extended/xen/files/tools-xentop-vwprintw.patch new file mode 100644 index 00000000..5d5d0116 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/tools-xentop-vwprintw.patch @@ -0,0 +1,25 @@ +tools/xentop : fix vwprintw -Werror=deprecated-declarations warning + +gcc-8.1 complains: + +| xentop.c: In function 'print': +| xentop.c:304:4: error: 'vwprintw' is deprecated [-Werror=deprecated-declarations] +| vwprintw(stdscr, (curses_str_t)fmt, args); +| ^~~~~~~~ + +vw_printw is the non-deprecated alternative. + +Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> +diff --git a/tools/xenstat/xentop/xentop.c b/tools/xenstat/xentop/xentop.c +index 2fd2b67..c465810 100644 +--- a/tools/xenstat/xentop/xentop.c ++++ b/tools/xenstat/xentop/xentop.c +@@ -301,7 +301,7 @@ static void print(const char *fmt, ...) + if (!batch) { + if((current_row() < lines()-1)) { + va_start(args, fmt); +- vwprintw(stdscr, (curses_str_t)fmt, args); ++ vw_printw(stdscr, (curses_str_t)fmt, args); + va_end(args); + } + } else { diff --git a/external/meta-virtualization/recipes-extended/xen/files/tpmemu-0.7.4.patch b/external/meta-virtualization/recipes-extended/xen/files/tpmemu-0.7.4.patch new file mode 100644 index 00000000..622b34f5 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/tpmemu-0.7.4.patch @@ -0,0 +1,12 @@ +diff -Naur tpm_emulator-x86_64-back/tpm/tpm_emulator_extern.c tpm_emulator-x86_64/tpm/tpm_emulator_extern.c +--- a/tpm/tpm_emulator_extern.c 2012-04-27 10:55:46.581963398 -0400 ++++ b/tpm/tpm_emulator_extern.c 2012-04-27 10:56:02.193034152 -0400 +@@ -249,7 +249,7 @@ + #else /* TPM_NO_EXTERN */ + + int (*tpm_extern_init)(void) = NULL; +-int (*tpm_extern_release)(void) = NULL; ++void (*tpm_extern_release)(void) = NULL; + void* (*tpm_malloc)(size_t size) = NULL; + void (*tpm_free)(/*const*/ void *ptr) = NULL; + void (*tpm_log)(int priority, const char *fmt, ...) = NULL; diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-bufsize.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-bufsize.patch new file mode 100644 index 00000000..9c9304cf --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-bufsize.patch @@ -0,0 +1,13 @@ +diff --git a/config.h.in b/config.h.in +index d16a997..8088a2a 100644 +--- a/config.h.in ++++ b/config.h.in +@@ -27,7 +27,7 @@ + #define TPM_STORAGE_NAME "${TPM_STORAGE_NAME}" + #define TPM_DEVICE_NAME "${TPM_DEVICE_NAME}" + #define TPM_LOG_FILE "${TPM_LOG_FILE}" +-#define TPM_CMD_BUF_SIZE 4096 ++#define TPM_CMD_BUF_SIZE 4088 + + #endif /* _CONFIG_H_ */ + diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-cmake-Wextra.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-cmake-Wextra.patch new file mode 100644 index 00000000..5fee4e9a --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-cmake-Wextra.patch @@ -0,0 +1,21 @@ +--- + CMakeLists.txt | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +Index: tpm_emulator-x86_64/CMakeLists.txt +=================================================================== +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -40,10 +40,11 @@ set(TPM_STORAGE_NAME "/var/lib/tpm/tpm_e + set(TPM_DEVICE_NAME "/dev/tpm") + endif() + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) +-add_definitions(-Wall -Werror -Wno-unused-parameter -Wpointer-arith -Wcast-align -Wwrite-strings) ++add_definitions(-Wall -Werror) + if("${CMAKE_SYSTEM}" MATCHES "Linux") + add_definitions(-Wextra) + endif() ++add_definitions(-Wno-unused-parameter -Wpointer-arith -Wcast-align -Wwrite-strings) + if(USE_OPENSSL) + add_definitions(-DUSE_OPENSSL) + endif() diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-deepquote-anyloc.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-deepquote-anyloc.patch new file mode 100644 index 00000000..b1cbf66e --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-deepquote-anyloc.patch @@ -0,0 +1,127 @@ +diff --git a/tpm/tpm_cmd_handler.c b/tpm/tpm_cmd_handler.c +index 69511d1..7545d51 100644 +--- a/tpm/tpm_cmd_handler.c ++++ b/tpm/tpm_cmd_handler.c +@@ -3347,12 +3347,13 @@ static TPM_RESULT execute_TPM_DeepQuote(TPM_REQUEST *req, TPM_RESPONSE *rsp) + { + TPM_NONCE nonce; + TPM_RESULT res; +- UINT32 sigSize; +- BYTE *sig; ++ UINT32 quote_blob_size; ++ BYTE *quote_blob; + BYTE *ptr; + UINT32 len; + TPM_PCR_SELECTION myPCR; + TPM_PCR_SELECTION ptPCR; ++ UINT32 extraInfoFlags = 0; + + tpm_compute_in_param_digest(req); + +@@ -3361,17 +3362,19 @@ static TPM_RESULT execute_TPM_DeepQuote(TPM_REQUEST *req, TPM_RESPONSE *rsp) + if (tpm_unmarshal_TPM_NONCE(&ptr, &len, &nonce) + || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &myPCR) + || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &ptPCR) ++ || tpm_unmarshal_TPM_DEEP_QUOTE_INFO(&ptr, &len, &extraInfoFlags) + || len != 0) return TPM_BAD_PARAMETER; + +- res = TPM_DeepQuote(&nonce, &myPCR, &ptPCR, &req->auth1, &sigSize, &sig); ++ res = TPM_DeepQuote(&nonce, &myPCR, &ptPCR, &req->auth1, extraInfoFlags, ++ "e_blob_size, "e_blob); + if (res != TPM_SUCCESS) return res; +- rsp->paramSize = len = sigSize; ++ rsp->paramSize = len = quote_blob_size; + rsp->param = ptr = tpm_malloc(len); +- if (ptr == NULL || tpm_marshal_BLOB(&ptr, &len, sig, sigSize)) { ++ if (ptr == NULL || tpm_marshal_BLOB(&ptr, &len, quote_blob, quote_blob_size)) { + tpm_free(rsp->param); + res = TPM_FAIL; + } +- tpm_free(sig); ++ tpm_free(quote_blob); + + return res; + } +diff --git a/tpm/tpm_commands.h b/tpm/tpm_commands.h +index 328d1be..a56dd5f 100644 +--- a/tpm/tpm_commands.h ++++ b/tpm/tpm_commands.h +@@ -3077,6 +3077,7 @@ TPM_RESULT TPM_ParentSignEK( + * @myPCR: [in] PCR selection for the virtual TPM + * @ptPCR: [in] PCR selection for the hardware TPM + * @auth1: [in, out] Authorization protocol parameters ++ * @extraInfoFlags [in] Flags for including, kernel hash, group info, etc + * @sigSize: [out] The length of the returned digital signature + * @sig: [out] The resulting digital signature and PCR values + * Returns: TPM_SUCCESS on success, a TPM error code otherwise. +@@ -3086,6 +3087,7 @@ TPM_RESULT TPM_DeepQuote( + TPM_PCR_SELECTION *myPCR, + TPM_PCR_SELECTION *ptPCR, + TPM_AUTH *auth1, ++ UINT32 extraInfoFlags, + UINT32 *sigSize, + BYTE **sig + ); +diff --git a/tpm/tpm_credentials.c b/tpm/tpm_credentials.c +index c0d62e7..6586c22 100644 +--- a/tpm/tpm_credentials.c ++++ b/tpm/tpm_credentials.c +@@ -183,7 +183,8 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_KEY_HANDLE keyHandle, TPM_AUTH *auth1, + + int endorsementKeyFresh = 0; + +-TPM_RESULT VTPM_GetParentQuote(TPM_DIGEST* data, TPM_PCR_SELECTION *sel, UINT32 *sigSize, BYTE **sig); ++TPM_RESULT VTPM_GetParentQuote(TPM_NONCE *data, TPM_PCR_SELECTION *sel, ++ UINT32 extraInfoFlags, UINT32 *sigSize, BYTE **sig); + + TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, + TPM_AUTH *auth1, UINT32 *sigSize, BYTE **sig) +@@ -191,7 +192,7 @@ TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, + TPM_PUBKEY pubKey; + TPM_RESULT res; + TPM_DIGEST hres; +- ++ UINT32 extraInfoFlags = 0; + info("TPM_ParentSignEK()"); + + res = tpm_verify_auth(auth1, tpmData.permanent.data.ownerAuth, TPM_KH_OWNER); +@@ -206,7 +207,7 @@ TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, + res = TPM_FAIL; + + if (res == TPM_SUCCESS) +- res = VTPM_GetParentQuote(&hres, sel, sigSize, sig); ++ res = VTPM_GetParentQuote((TPM_NONCE*)&hres, sel, extraInfoFlags, sigSize, sig); + + free_TPM_PUBKEY(pubKey); + return res; +@@ -218,7 +219,7 @@ static const BYTE dquot_hdr[] = { + + TPM_RESULT TPM_DeepQuote(TPM_NONCE *externalData, TPM_PCR_SELECTION *myPCR, + TPM_PCR_SELECTION *ptPCR, TPM_AUTH *auth1, +- UINT32 *sigSize, BYTE **sig) ++ UINT32 extraInfoFlags, UINT32 *quote_blob_size, BYTE **quote_blob) + { + TPM_RESULT res; + TPM_DIGEST hres; +@@ -253,7 +254,7 @@ TPM_RESULT TPM_DeepQuote(TPM_NONCE *externalData, TPM_PCR_SELECTION *myPCR, + + tpm_free(buf); + +- res = VTPM_GetParentQuote(&hres, ptPCR, sigSize, sig); ++ res = VTPM_GetParentQuote((TPM_NONCE*)&hres, ptPCR, extraInfoFlags, quote_blob_size, quote_blob); + + return res; + } +diff --git a/tpm/tpm_marshalling.h b/tpm/tpm_marshalling.h +index d510ebe..2e0c008 100644 +--- a/tpm/tpm_marshalling.h ++++ b/tpm/tpm_marshalling.h +@@ -268,6 +268,8 @@ static inline int tpm_unmarshal_BOOL(BYTE **ptr, UINT32 *length, BOOL *v) + #define tpm_unmarshal_TPM_REDIR_COMMAND tpm_unmarshal_UINT32 + #define tpm_marshal_DAAHANDLE tpm_marshal_UINT32 + #define tpm_unmarshal_DAAHANDLE tpm_unmarshal_UINT32 ++#define tpm_marshal_TPM_DEEP_QUOTE_INFO tpm_marshal_UINT32 ++#define tpm_unmarshal_TPM_DEEP_QUOTE_INFO tpm_unmarshal_UINT32 + + int tpm_marshal_UINT32_ARRAY(BYTE **ptr, UINT32 *length, UINT32 *v, UINT32 n); + int tpm_unmarshal_UINT32_ARRAY(BYTE **ptr, UINT32 *length, UINT32 *v, UINT32 n); diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-deepquote.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-deepquote.patch new file mode 100644 index 00000000..6344f387 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-deepquote.patch @@ -0,0 +1,187 @@ +diff --git a/tpm/tpm_cmd_handler.c b/tpm/tpm_cmd_handler.c +index 0fabf98..69511d1 100644 +--- a/tpm/tpm_cmd_handler.c ++++ b/tpm/tpm_cmd_handler.c +@@ -3343,6 +3343,39 @@ static TPM_RESULT execute_TPM_ParentSignEK(TPM_REQUEST *req, TPM_RESPONSE *rsp) + return res; + } + ++static TPM_RESULT execute_TPM_DeepQuote(TPM_REQUEST *req, TPM_RESPONSE *rsp) ++{ ++ TPM_NONCE nonce; ++ TPM_RESULT res; ++ UINT32 sigSize; ++ BYTE *sig; ++ BYTE *ptr; ++ UINT32 len; ++ TPM_PCR_SELECTION myPCR; ++ TPM_PCR_SELECTION ptPCR; ++ ++ tpm_compute_in_param_digest(req); ++ ++ ptr = req->param; ++ len = req->paramSize; ++ if (tpm_unmarshal_TPM_NONCE(&ptr, &len, &nonce) ++ || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &myPCR) ++ || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &ptPCR) ++ || len != 0) return TPM_BAD_PARAMETER; ++ ++ res = TPM_DeepQuote(&nonce, &myPCR, &ptPCR, &req->auth1, &sigSize, &sig); ++ if (res != TPM_SUCCESS) return res; ++ rsp->paramSize = len = sigSize; ++ rsp->param = ptr = tpm_malloc(len); ++ if (ptr == NULL || tpm_marshal_BLOB(&ptr, &len, sig, sigSize)) { ++ tpm_free(rsp->param); ++ res = TPM_FAIL; ++ } ++ tpm_free(sig); ++ ++ return res; ++} ++ + static void tpm_setup_rsp_auth(TPM_COMMAND_CODE ordinal, TPM_RESPONSE *rsp) + { + tpm_hmac_ctx_t hmac; +@@ -4098,6 +4131,11 @@ void tpm_execute_command(TPM_REQUEST *req, TPM_RESPONSE *rsp) + res = execute_TPM_ParentSignEK(req, rsp); + break; + ++ case TPM_ORD_DeepQuote: ++ debug("[TPM_ORD_DeepQuote]"); ++ res = execute_TPM_DeepQuote(req, rsp); ++ break; ++ + default: + #ifdef MTM_EMULATOR + res = mtm_execute_command(req, rsp); +diff --git a/tpm/tpm_commands.h b/tpm/tpm_commands.h +index 7fef934..328d1be 100644 +--- a/tpm/tpm_commands.h ++++ b/tpm/tpm_commands.h +@@ -3071,6 +3071,25 @@ TPM_RESULT TPM_ParentSignEK( + BYTE **sig + ); + ++/** ++ * TPM_DeepQuote - gets a hardware TPM quote of a vTPM's PCRs ++ * @externalData: [in] AntiReplay nonce to prevent replay of messages ++ * @myPCR: [in] PCR selection for the virtual TPM ++ * @ptPCR: [in] PCR selection for the hardware TPM ++ * @auth1: [in, out] Authorization protocol parameters ++ * @sigSize: [out] The length of the returned digital signature ++ * @sig: [out] The resulting digital signature and PCR values ++ * Returns: TPM_SUCCESS on success, a TPM error code otherwise. ++ */ ++TPM_RESULT TPM_DeepQuote( ++ TPM_NONCE *externalData, ++ TPM_PCR_SELECTION *myPCR, ++ TPM_PCR_SELECTION *ptPCR, ++ TPM_AUTH *auth1, ++ UINT32 *sigSize, ++ BYTE **sig ++); ++ + /* + * Error handling + * [tpm_error.c] +diff --git a/tpm/tpm_credentials.c b/tpm/tpm_credentials.c +index 01f29e6..c0d62e7 100644 +--- a/tpm/tpm_credentials.c ++++ b/tpm/tpm_credentials.c +@@ -211,3 +211,49 @@ TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, + free_TPM_PUBKEY(pubKey); + return res; + } ++ ++static const BYTE dquot_hdr[] = { ++ 0, 0, 0, 0, 'D', 'Q', 'U', 'T' ++}; ++ ++TPM_RESULT TPM_DeepQuote(TPM_NONCE *externalData, TPM_PCR_SELECTION *myPCR, ++ TPM_PCR_SELECTION *ptPCR, TPM_AUTH *auth1, ++ UINT32 *sigSize, BYTE **sig) ++{ ++ TPM_RESULT res; ++ TPM_DIGEST hres; ++ TPM_PCR_INFO_SHORT pcrData; ++ tpm_sha1_ctx_t ctx; ++ BYTE *buf, *ptr; ++ UINT32 size, len; ++ ++ info("TPM_DeepQuote()"); ++ ++ res = tpm_verify_auth(auth1, tpmData.permanent.data.ownerAuth, TPM_KH_OWNER); ++ if (res != TPM_SUCCESS) return res; ++ ++ res = tpm_compute_pcr_digest(myPCR, &pcrData.digestAtRelease, NULL); ++ if (res != TPM_SUCCESS) return res; ++ ++ pcrData.pcrSelection.sizeOfSelect = myPCR->sizeOfSelect; ++ memcpy(pcrData.pcrSelection.pcrSelect, myPCR->pcrSelect, myPCR->sizeOfSelect); ++ pcrData.localityAtRelease = 1 << tpmData.stany.flags.localityModifier; ++ ++ size = len = sizeof_TPM_PCR_INFO_SHORT(pcrData); ++ buf = ptr = tpm_malloc(size); ++ if (buf == NULL) return TPM_NOSPACE; ++ if (tpm_marshal_TPM_PCR_INFO_SHORT(&ptr, &len, &pcrData)) ++ return TPM_FAIL; ++ ++ tpm_sha1_init(&ctx); ++ tpm_sha1_update(&ctx, dquot_hdr, 8); ++ tpm_sha1_update(&ctx, externalData->nonce, 20); ++ tpm_sha1_update(&ctx, buf, size); ++ tpm_sha1_final(&ctx, hres.digest); ++ ++ tpm_free(buf); ++ ++ res = VTPM_GetParentQuote(&hres, ptPCR, sigSize, sig); ++ ++ return res; ++} +diff --git a/tpm/tpm_structures.h b/tpm/tpm_structures.h +index b0f4625..dfb1894 100644 +--- a/tpm/tpm_structures.h ++++ b/tpm/tpm_structures.h +@@ -660,6 +660,42 @@ typedef struct tdTPM_CMK_MA_APPROVAL { + + /* VTPM-only commands: */ + /* ++ * Deep Quote - Create quote of PCRs ++ * Input: ++ * TPM_TAG tag TPM_TAG_RQU_AUTH1_COMMAND ++ * UINT32 paramSize Total size of request ++ * TPM_COMMAND_CODE ordinal TPM_ORD_DeepQuote ++ * TPM_NONCE externData 20 bytes of external data ++ * TPM_PCR_SELECTION vtSel PCR selection for virtual TPM ++ * TPM_PCR_SELECTION ptSel PCR selection for physical TPM ++ * --- ++ * UINT32 authHandle Owner authorization session (OIAP) ++ * TPM_NONCE nonceOdd Nonce for authHandle ++ * BOOL continueAuth Continue flag for authHandle ++ * TPM_AUTHDATA privAuth Authorization digest for command ++ * ++ * Output: ++ * TPM_TAG tag TPM_TAG_RSP_AUTH1_COMMAND ++ * UINT32 paramSize Total size of response ++ * TPM_RESULT returnCode Return code of the operation ++ * BYTE[] sig Signature provided by physical TPM ++ * TPM_PCRVALUE[] pcrValue Values of hardware PCRs used in the quote ++ * --- ++ * TPM_NONCE nonceEven Nonce for authHandle ++ * BOOL continueAuth Continue flag for authHandle ++ * TPM_AUTHDATA resAuth Authorization digest for response ++ * ++ * The values of the virutal TPM's PCRs are not included in the response. ++ * The signature is a standard TPM_Quote response from the physical TPM; its ++ * externalData is the SHA1 hash of the following structure: ++ * TPM_STRUCT_VER version MUST be 0.0.0.0 ++ * BYTE[4] fixed MUST be the string "DQUT" ++ * TPM_NONCE externData From input to the deep quote ++ * TPM_PCR_INFO_SHORT pcrData Virtual TPM's PCRs ++ */ ++#define TPM_ORD_DeepQuote (TPM_VENDOR_COMMAND | TPM_ORD_Quote) ++ ++/* + * ParentSignEK - Proof of fresh provisioning and EK value + * + * Input: diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-implicit-fallthrough.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-implicit-fallthrough.patch new file mode 100644 index 00000000..e95d41fc --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-implicit-fallthrough.patch @@ -0,0 +1,10 @@ +--- a/tpm/tpm_cmd_handler.c.orig 2017-04-27 13:37:14.408000000 +0200 ++++ b/tpm/tpm_cmd_handler.c 2017-04-27 13:39:53.585000000 +0200 +@@ -3397,6 +3397,7 @@ + sizeof(rsp->auth2->nonceOdd.nonce)); + tpm_hmac_update(&hmac, (BYTE*)&rsp->auth2->continueAuthSession, 1); + tpm_hmac_final(&hmac, rsp->auth2->auth); ++ /* fall-thru */ + case TPM_TAG_RSP_AUTH1_COMMAND: + tpm_hmac_init(&hmac, rsp->auth1->secret, sizeof(rsp->auth1->secret)); + tpm_hmac_update(&hmac, rsp->auth1->digest, sizeof(rsp->auth1->digest)); diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-locality.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-locality.patch new file mode 100644 index 00000000..8ab7dea6 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-locality.patch @@ -0,0 +1,50 @@ +diff --git a/tpm/tpm_capability.c b/tpm/tpm_capability.c +index 60bbb90..f8f7f0f 100644 +--- a/tpm/tpm_capability.c ++++ b/tpm/tpm_capability.c +@@ -949,6 +949,8 @@ static TPM_RESULT set_vendor(UINT32 subCap, BYTE *setValue, + UINT32 setValueSize, BOOL ownerAuth, + BOOL deactivated, BOOL disabled) + { ++ if (tpmData.stany.flags.localityModifier != 8) ++ return TPM_BAD_PARAMETER; + /* set the capability area with the specified data, on failure + deactivate the TPM */ + switch (subCap) { +diff --git a/tpm/tpm_cmd_handler.c b/tpm/tpm_cmd_handler.c +index 288d1ce..9e1cfb4 100644 +--- a/tpm/tpm_cmd_handler.c ++++ b/tpm/tpm_cmd_handler.c +@@ -4132,7 +4132,7 @@ void tpm_emulator_shutdown() + tpm_extern_release(); + } + +-int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size) ++int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size, int locality) + { + TPM_REQUEST req; + TPM_RESPONSE rsp; +@@ -4140,7 +4140,9 @@ int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint3 + UINT32 len; + BOOL free_out; + +- debug("tpm_handle_command()"); ++ debug("tpm_handle_command(%d)", locality); ++ if (locality != -1) ++ tpmData.stany.flags.localityModifier = locality; + + /* we need the whole packet at once, otherwise unmarshalling will fail */ + if (tpm_unmarshal_TPM_REQUEST((uint8_t**)&in, &in_size, &req) != 0) { +diff --git a/tpm/tpm_emulator.h b/tpm/tpm_emulator.h +index eed749e..4c228bd 100644 +--- a/tpm/tpm_emulator.h ++++ b/tpm/tpm_emulator.h +@@ -59,7 +59,7 @@ void tpm_emulator_shutdown(void); + * its usage. In case of an error, all internally allocated memory + * is released and the the state of out and out_size is unspecified. + */ +-int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size); ++int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size, int locality); + + #endif /* _TPM_EMULATOR_H_ */ + diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm-parent-sign-ek.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm-parent-sign-ek.patch new file mode 100644 index 00000000..14e66eee --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm-parent-sign-ek.patch @@ -0,0 +1,196 @@ +diff --git a/tpm/tpm_cmd_handler.c b/tpm/tpm_cmd_handler.c +index 9e1cfb4..0fabf98 100644 +--- a/tpm/tpm_cmd_handler.c ++++ b/tpm/tpm_cmd_handler.c +@@ -3312,6 +3312,37 @@ static TPM_RESULT execute_TPM_OwnerReadPubek(TPM_REQUEST *req, TPM_RESPONSE *rsp + return res; + } + ++static TPM_RESULT execute_TPM_ParentSignEK(TPM_REQUEST *req, TPM_RESPONSE *rsp) ++{ ++ TPM_NONCE nonce; ++ TPM_RESULT res; ++ UINT32 sigSize; ++ BYTE *sig; ++ BYTE *ptr; ++ UINT32 len; ++ TPM_PCR_SELECTION targetPCR; ++ ++ tpm_compute_in_param_digest(req); ++ ++ ptr = req->param; ++ len = req->paramSize; ++ if (tpm_unmarshal_TPM_NONCE(&ptr, &len, &nonce) ++ || tpm_unmarshal_TPM_PCR_SELECTION(&ptr, &len, &targetPCR) ++ || len != 0) return TPM_BAD_PARAMETER; ++ ++ res = TPM_ParentSignEK(&nonce, &targetPCR, &req->auth1, &sigSize, &sig); ++ if (res != TPM_SUCCESS) return res; ++ rsp->paramSize = len = sigSize; ++ rsp->param = ptr = tpm_malloc(len); ++ if (ptr == NULL || tpm_marshal_BLOB(&ptr, &len, sig, sigSize)) { ++ tpm_free(rsp->param); ++ res = TPM_FAIL; ++ } ++ tpm_free(sig); ++ ++ return res; ++} ++ + static void tpm_setup_rsp_auth(TPM_COMMAND_CODE ordinal, TPM_RESPONSE *rsp) + { + tpm_hmac_ctx_t hmac; +@@ -4062,6 +4093,11 @@ void tpm_execute_command(TPM_REQUEST *req, TPM_RESPONSE *rsp) + res = execute_TPM_OwnerReadPubek(req, rsp); + break; + ++ case TPM_ORD_ParentSignEK: ++ debug("[TPM_ORD_ParentSignEK]"); ++ res = execute_TPM_ParentSignEK(req, rsp); ++ break; ++ + default: + #ifdef MTM_EMULATOR + res = mtm_execute_command(req, rsp); +diff --git a/tpm/tpm_commands.h b/tpm/tpm_commands.h +index a7666f6..7fef934 100644 +--- a/tpm/tpm_commands.h ++++ b/tpm/tpm_commands.h +@@ -3054,6 +3054,23 @@ TPM_RESULT TPM_OwnerReadPubek( + TPM_PUBKEY *pubEndorsementKey + ); + ++/** ++ * TPM_ParentSignEK - gets a hardware TPM quote of a vTPM's EK ++ * @externalData: [in] AntiReplay nonce to prevent replay of messages ++ * @sel: [in] PCR selection for the hardware TPM's quote ++ * @auth1: [in, out] Authorization protocol parameters ++ * @sigSize: [out] The length of the returned digital signature ++ * @sig: [out] The resulting digital signature and PCR values ++ * Returns: TPM_SUCCESS on success, a TPM error code otherwise. ++ */ ++TPM_RESULT TPM_ParentSignEK( ++ TPM_NONCE *externalData, ++ TPM_PCR_SELECTION *sel, ++ TPM_AUTH *auth1, ++ UINT32 *sigSize, ++ BYTE **sig ++); ++ + /* + * Error handling + * [tpm_error.c] +diff --git a/tpm/tpm_credentials.c b/tpm/tpm_credentials.c +index 9cd64af..01f29e6 100644 +--- a/tpm/tpm_credentials.c ++++ b/tpm/tpm_credentials.c +@@ -180,3 +180,34 @@ TPM_RESULT TPM_OwnerReadInternalPub(TPM_KEY_HANDLE keyHandle, TPM_AUTH *auth1, + return TPM_BAD_PARAMETER; + } + } ++ ++int endorsementKeyFresh = 0; ++ ++TPM_RESULT VTPM_GetParentQuote(TPM_DIGEST* data, TPM_PCR_SELECTION *sel, UINT32 *sigSize, BYTE **sig); ++ ++TPM_RESULT TPM_ParentSignEK(TPM_NONCE *externalData, TPM_PCR_SELECTION *sel, ++ TPM_AUTH *auth1, UINT32 *sigSize, BYTE **sig) ++{ ++ TPM_PUBKEY pubKey; ++ TPM_RESULT res; ++ TPM_DIGEST hres; ++ ++ info("TPM_ParentSignEK()"); ++ ++ res = tpm_verify_auth(auth1, tpmData.permanent.data.ownerAuth, TPM_KH_OWNER); ++ if (res != TPM_SUCCESS) return res; ++ ++ if (!endorsementKeyFresh) return TPM_DISABLED_CMD; ++ ++ res = tpm_get_pubek(&pubKey); ++ if (res != TPM_SUCCESS) return res; ++ ++ if (tpm_compute_pubkey_checksum(externalData, &pubKey, &hres)) ++ res = TPM_FAIL; ++ ++ if (res == TPM_SUCCESS) ++ res = VTPM_GetParentQuote(&hres, sel, sigSize, sig); ++ ++ free_TPM_PUBKEY(pubKey); ++ return res; ++} +diff --git a/tpm/tpm_data.c b/tpm/tpm_data.c +index 50c9697..6a0c499 100644 +--- a/tpm/tpm_data.c ++++ b/tpm/tpm_data.c +@@ -76,6 +76,8 @@ static void init_timeouts(void) + tpmData.permanent.data.cmd_durations[2] = 1000; + } + ++extern int endorsementKeyFresh; ++ + void tpm_init_data(void) + { + /* endorsement key */ +@@ -157,6 +159,7 @@ void tpm_init_data(void) + if (tpmConf & TPM_CONF_GENERATE_EK) { + /* generate a new endorsement key */ + tpm_rsa_generate_key(&tpmData.permanent.data.endorsementKey, 2048); ++ endorsementKeyFresh = 1; + } else { + /* setup endorsement key */ + tpm_rsa_import_key(&tpmData.permanent.data.endorsementKey, +diff --git a/tpm/tpm_structures.h b/tpm/tpm_structures.h +index f746c05..b0f4625 100644 +--- a/tpm/tpm_structures.h ++++ b/tpm/tpm_structures.h +@@ -658,6 +658,49 @@ typedef struct tdTPM_CMK_MA_APPROVAL { + #define TPM_ORD_TickStampBlob 242 + #define TPM_ORD_MAX 256 + ++/* VTPM-only commands: */ ++/* ++ * ParentSignEK - Proof of fresh provisioning and EK value ++ * ++ * Input: ++ * TPM_TAG tag TPM_TAG_RQU_AUTH1_COMMAND ++ * UINT32 paramSize Total size of request ++ * TPM_COMMAND_CODE ordinal TPM_ORD_ParentSignEK ++ * TPM_NONCE externData 20 bytes of external data ++ * TPM_PCR_SELECTION ptSel PCR selection for physical TPM ++ * --- ++ * UINT32 authHandle Owner authorization session (OIAP) ++ * TPM_NONCE nonceOdd Nonce for authHandle ++ * BOOL continueAuth Continue flag for authHandle ++ * TPM_AUTHDATA privAuth Authorization digest for command ++ * ++ * Output: ++ * TPM_TAG tag TPM_TAG_RSP_AUTH1_COMMAND ++ * UINT32 paramSize Total size of response ++ * TPM_RESULT returnCode Return code of the operation ++ * BYTE[] sig Signature provided by physical TPM ++ * TPM_PCRVALUE[] pcrValue Values of hardware PCRs used in the quote ++ * --- ++ * TPM_NONCE nonceEven Nonce for authHandle ++ * BOOL continueAuth Continue flag for authHandle ++ * TPM_AUTHDATA resAuth Authorization digest for response ++ * ++ * This command is only valid on the first boot of a vTPM; on any subsequent ++ * boot, the command returns TPM_DISABLED_CMD. It is intended to be used to ++ * provide evidence of proper platform configuration to the verifier/CA which is ++ * responsible for the creation of the vTPM's endorsement credential, which will ++ * be used on subsequent boots to certify AIKs via the usual Privacy CA protocol. ++ * ++ * The values of the virtual TPM's PCRs are not included in the response. ++ * The signature is a standard TPM_Quote response from the physical TPM; its ++ * externalData is the SHA1 hash of the following structure: ++ * TPM_PUBKEY pubEK The vTPM's public EK ++ * TPM_NONCE externData From input to the deep quote ++ * ++ * This structure was chosen to match the return of TPM_ReadPubek ++ */ ++#define TPM_ORD_ParentSignEK (TPM_VENDOR_COMMAND | TPM_ORD_ReadPubek) ++ + /* + * TCS Ordinals ([TPM_Part2], Section 17.1) + * diff --git a/external/meta-virtualization/recipes-extended/xen/files/vtpm_TPM_ChangeAuthAsymFinish.patch b/external/meta-virtualization/recipes-extended/xen/files/vtpm_TPM_ChangeAuthAsymFinish.patch new file mode 100644 index 00000000..aefca284 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/vtpm_TPM_ChangeAuthAsymFinish.patch @@ -0,0 +1,28 @@ +Patch derived from below Xen changeset. +Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> + +commit 22bf5be3237cb482a2ffd772ffd20ce37285eebf +Author: Olaf Hering <olaf@aepfle.de> +Date: Mon Jun 18 14:55:36 2018 +0200 + +stubdom/vtpm: fix memcmp in TPM_ChangeAuthAsymFinish + +gcc8 spotted this error: +error: 'memcmp' reading 20 bytes from a region of size 8 [-Werror=stringop-overflow=] + +Signed-off-by: Olaf Hering <olaf@aepfle.de> +Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org> + +diff --git a/tpm/tpm_deprecated.c b/tpm/tpm_deprecated.c +index c362b56..4c49f54 100644 +--- a/tpm/tpm_deprecated.c ++++ b/tpm/tpm_deprecated.c +@@ -434,7 +434,7 @@ TPM_RESULT TPM_ChangeAuthAsymFinish(TPM_KEY_HANDLE parentHandle, + tpm_hmac_final(&hmac_ctx, b1.digest); + /* 6. The TPM SHALL compare b1 with newAuthLink. The TPM SHALL + indicate a failure if the values do not match. */ +- if (memcmp(&b1, &newAuthLink, sizeof(TPM_HMAC))) { ++ if (memcmp(&b1, newAuthLink, sizeof(TPM_HMAC))) { + debug("TPM_ChangeAuthAsymFinish(): newAuthLink value does not match."); + return TPM_FAIL; + } diff --git a/external/meta-virtualization/recipes-extended/xen/files/xen-4.11-arm-acpi-fix-string-lengths.patch b/external/meta-virtualization/recipes-extended/xen/files/xen-4.11-arm-acpi-fix-string-lengths.patch new file mode 100644 index 00000000..ece64071 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/xen-4.11-arm-acpi-fix-string-lengths.patch @@ -0,0 +1,101 @@ +From 5e1a00969afe98a713bf14d1ba1902403b60e287 Mon Sep 17 00:00:00 2001 +From: Christopher Clark <christopher.w.clark@gmail.com> +Date: Thu, 16 Aug 2018 13:04:52 -0700 +Subject: [PATCH v2] libxl/arm: Fix build on arm64 + acpi w/ gcc 8.2 +To: xen-devel@lists.xenproject.org +Cc: wei.liu2@citrix.com, + ian.jackson@eu.citrix.com, + julien.grall@arm.com, + sstabellini@kernel.org + +[modified for Xen 4.11 to add required: #include <xen-tools/libs.h>] + +Add zero-padding to #defined ACPI table strings that are copied. +Provides sufficient characters to satisfy the length required to +fully populate the destination and prevent array-bounds warnings. +Add BUILD_BUG_ON sizeof checks for compile-time length checking. + +Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> +Reviewed-by: Stefano Stabellini <sstabellini@kernel.org> +Acked-by: Wei Liu <wei.liu2@citrix.com> +--- +v2: add BUILD_BUG_ON length checks, requested by Wei. + +v1: Please add this patch to the backport list for the next minor + 4.11 release. + +Prior to this: gcc 8.2 objects to memcpy past bounds: + +| libxl_arm_acpi.c: In function 'make_acpi_header': +| libxl_arm_acpi.c:208:5: error: 'memcpy' forming offset [5, 6] is out +of the bounds [0, 4] [-Werror=array-bounds] +| memcpy(h->oem_id, ACPI_OEM_ID, sizeof(h->oem_id)); +| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| libxl_arm_acpi.c:209:5: error: 'memcpy' forming offset [5, 8] is out +of the bounds [0, 4] [-Werror=array-bounds] +| memcpy(h->oem_table_id, ACPI_OEM_TABLE_ID, +sizeof(h->oem_table_id)); +| +^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| libxl_arm_acpi.c:211:5: error: 'memcpy' forming offset 4 is out of the +bounds [0, 3] [-Werror=array-bounds] +| memcpy(h->asl_compiler_id, ACPI_ASL_COMPILER_ID, +| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| sizeof(h->asl_compiler_id)); +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| In function 'make_acpi_rsdp.isra.4', +| inlined from 'libxl__prepare_acpi' at libxl_arm_acpi.c:389:5: +| libxl_arm_acpi.c:193:5: error: 'memcpy' forming offset [5, 6] is out +of the bounds [0, 4] [-Werror=array-bounds] +| memcpy(rsdp->oem_id, ACPI_OEM_ID, sizeof(rsdp->oem_id)); +| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + tools/libxl/libxl_arm_acpi.c | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/tools/libxl/libxl_arm_acpi.c b/tools/libxl/libxl_arm_acpi.c +index 636f724..8924396 100644 +--- a/tools/libxl/libxl_arm_acpi.c ++++ b/tools/libxl/libxl_arm_acpi.c +@@ -29,6 +29,7 @@ typedef int64_t s64; + + #include <acpi/acconfig.h> + #include <acpi/actbl.h> ++#include <xen-tools/libs.h> + + #ifndef BITS_PER_LONG + #ifdef _LP64 +@@ -48,9 +49,9 @@ extern const unsigned char dsdt_anycpu_arm[]; + _hidden + extern const int dsdt_anycpu_arm_len; + +-#define ACPI_OEM_ID "Xen" +-#define ACPI_OEM_TABLE_ID "ARM" +-#define ACPI_ASL_COMPILER_ID "XL" ++#define ACPI_OEM_ID "Xen\0\0" ++#define ACPI_OEM_TABLE_ID "ARM\0\0\0\0" ++#define ACPI_ASL_COMPILER_ID "XL\0" + + enum { + RSDP, +@@ -190,6 +191,7 @@ static void make_acpi_rsdp(libxl__gc *gc, struct xc_dom_image *dom, + struct acpi_table_rsdp *rsdp = (void *)dom->acpi_modules[0].data + offset; + + memcpy(rsdp->signature, "RSD PTR ", sizeof(rsdp->signature)); ++ BUILD_BUG_ON(sizeof(ACPI_OEM_ID) != sizeof(rsdp->oem_id)); + memcpy(rsdp->oem_id, ACPI_OEM_ID, sizeof(rsdp->oem_id)); + rsdp->length = acpitables[RSDP].size; + rsdp->revision = 0x02; +@@ -205,9 +207,12 @@ static void make_acpi_header(struct acpi_table_header *h, const char *sig, + memcpy(h->signature, sig, 4); + h->length = len; + h->revision = rev; ++ BUILD_BUG_ON(sizeof(ACPI_OEM_ID) != sizeof(h->oem_id)); + memcpy(h->oem_id, ACPI_OEM_ID, sizeof(h->oem_id)); ++ BUILD_BUG_ON(sizeof(ACPI_OEM_TABLE_ID) != sizeof(h->oem_table_id)); + memcpy(h->oem_table_id, ACPI_OEM_TABLE_ID, sizeof(h->oem_table_id)); + h->oem_revision = 0; ++ BUILD_BUG_ON(sizeof(ACPI_ASL_COMPILER_ID) != sizeof(h->asl_compiler_id)); + memcpy(h->asl_compiler_id, ACPI_ASL_COMPILER_ID, + sizeof(h->asl_compiler_id)); + h->asl_compiler_revision = 0; diff --git a/external/meta-virtualization/recipes-extended/xen/files/xen-disable-sse-before-inlines.patch b/external/meta-virtualization/recipes-extended/xen/files/xen-disable-sse-before-inlines.patch new file mode 100644 index 00000000..54a28ee4 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/xen-disable-sse-before-inlines.patch @@ -0,0 +1,140 @@ +From 6d50ae155c0f736aa6239eabf1bc8c8e3704742d Mon Sep 17 00:00:00 2001 +From: Christopher Clark <christopher.w.clark@gmail.com> +Date: Fri, 21 Sep 2018 08:28:02 -0700 +Subject: [PATCH v2] fuzz, test x86_emulator: disable sse before including + always_inline fns +To: xen-devel@lists.xenproject.org, + jbeulich@suse.com +Cc: ian.jackson@eu.citrix.com, + wei.liu2@citrix.com, + andrew.cooper3@citrix.com + +Workaround for compiler rejection of SSE-using always_inlines defined before +SSE is disabled. + +Compiling with _FORTIFY_SOURCE or higher levels of optimization enabled +will always_inline several library fns (memset, memcpy, ...) +(with gcc 8.2.0 and glibc 2.28). + +In fuzz and x86_emulator test, the compiler is instructed not +to generate SSE instructions via: #pragma GCC target("no-sse") +because those registers are needed for use by the workload. + +The combination above causes compilation failure as the inline functions +use those instructions. This is resolved by reordering the inclusion of +<stdio.h> and <string.h> to after the pragma disabling SSE generation. + +It would be preferable to locate the no-sse pragma within x86-emulate.h at the +top of the file, prior to including any other headers; unfortunately doing so +before <stdlib.h> causes compilation failure due to declaration of 'atof' with: + "SSE register return with SSE disabled". +Fortunately there is no (known) current dependency on any always_inline +SSE-inclined function declared in <stdlib.h> or any of its dependencies, so the +pragma is therefore issued immediately after inclusion of <stdlib.h> with a +comment introduced to explain its location there. + +Add compile-time checks for unwanted prior inclusion of <string.h> and +<stdio.h>, which are the two headers that provide the library functions that +are handled with wrappers and listed within "x86-emulate.h" as ones "we think +might access any of the FPU state". +* Use standard-defined "EOF" macro to detect prior <stdio.h> inclusion. +* Use "_STRING_H" (non-standardized guard macro) as best-effort + for detection of prior <string.h> inclusion. This is non-universally + viable but will provide error output on common GLIBC systems, so + provides some defensive coverage. + +Adds conditional #include <stdio.h> to x86-emulate.h because fwrite, printf, +etc. are referenced when WRAP has been defined. + +Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> +Reviewed-by: Jan Beulich <jbeulich@suse.com> +--- + tools/fuzz/x86_instruction_emulator/fuzz-emul.c | 10 +++++++-- + tools/tests/x86_emulator/wrappers.c | 1 - + tools/tests/x86_emulator/x86-emulate.h | 28 +++++++++++++++++++++++-- + 3 files changed, 34 insertions(+), 5 deletions(-) + +diff --git a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c +index 03a2473..0ffd0fb 100644 +--- a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c ++++ b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c +@@ -6,9 +6,7 @@ + #include <stdbool.h> + #include <stddef.h> + #include <stdint.h> +-#include <stdio.h> + #include <stdlib.h> +-#include <string.h> + #include <sys/types.h> + #include <sys/stat.h> + #include <sys/mman.h> +@@ -16,6 +14,14 @@ + #include <xen/xen.h> + + #include "x86-emulate.h" ++/* ++ * include "x86-emulate.h" prior to <stdio.h> and <string.h>: ++ * x86-emulate.h disables use of SSE registers, while <stdio.h> and <string.h> ++ * declare functions that may be always_inline and use those registers ++ * unless they have been disabled earlier, which can fail to compile. ++ */ ++#include <stdio.h> ++#include <string.h> + #include "fuzz-emul.h" + + #define MSR_INDEX_MAX 16 +diff --git a/tools/tests/x86_emulator/wrappers.c b/tools/tests/x86_emulator/wrappers.c +index d02013c..eba7cc9 100644 +--- a/tools/tests/x86_emulator/wrappers.c ++++ b/tools/tests/x86_emulator/wrappers.c +@@ -1,5 +1,4 @@ + #include <stdarg.h> +-#include <stdio.h> + + #define WRAP(x) typeof(x) emul_##x + #include "x86-emulate.h" +diff --git a/tools/tests/x86_emulator/x86-emulate.h b/tools/tests/x86_emulator/x86-emulate.h +index b249e46..07ea1e8 100644 +--- a/tools/tests/x86_emulator/x86-emulate.h ++++ b/tools/tests/x86_emulator/x86-emulate.h +@@ -3,11 +3,35 @@ + #include <stddef.h> + #include <stdint.h> + #include <stdlib.h> +-#include <string.h> +- ++/* ++ * Use of sse registers must be disabled prior to the definition of ++ * always_inline functions that would use them (memcpy, memset, etc), ++ * so do this as early as possible, aiming to be before any always_inline ++ * functions that are used are declared. ++ * Unfortunately, this cannot be done prior to inclusion of <stdlib.h> ++ * due to functions such as 'atof' that have SSE register return declared, ++ * so do so here, immediately after that. ++ */ + #if __GNUC__ >= 6 + #pragma GCC target("no-sse") + #endif ++ /* ++ * Attempt detection of unwanted prior inclusion of some headers known to use ++ * always_inline with SSE registers in some library / compiler / optimization ++ * combinations. ++ */ ++#ifdef _STRING_H ++#error "Must not include <string.h> before x86-emulate.h" ++#endif ++#include <string.h> ++ ++/* EOF is a standard macro defined in <stdio.h> so use it for detection */ ++#ifdef EOF ++#error "Must not include <stdio.h> before x86-emulate.h" ++#endif ++#ifdef WRAP ++#include <stdio.h> ++#endif + + #include <xen/xen.h> + +-- +2.1.4 + diff --git a/external/meta-virtualization/recipes-extended/xen/files/xen-tools-xenpmd-snprintf.patch b/external/meta-virtualization/recipes-extended/xen/files/xen-tools-xenpmd-snprintf.patch new file mode 100644 index 00000000..aac7282f --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/files/xen-tools-xenpmd-snprintf.patch @@ -0,0 +1,78 @@ +From e4d78a67ffbacf30b66464080898227f18f6bf49 Mon Sep 17 00:00:00 2001 +From: Christopher Clark <christopher.w.clark@gmail.com> +Date: Fri, 17 Aug 2018 17:46:10 -0700 +Subject: [PATCH] xenpmd: prevent format-truncation warning with gcc 8.2 + ARM + 32-bit +To: xen-devel@lists.xenproject.org +Cc: ian.jackson@eu.citrix.com, + wei.liu2@citrix.com + +xenpmd writes battery information to xenstore, including a string with a +formatted hex value calculated from summing the lengths of four strings, +plus some constants. + +Each of the four strings has a maximum length of 31 bytes, excluding the +terminating zero byte. The strings are stored in 32-byte arrays in a +struct that is zeroed before it is populated, and logic that writes to +the strings uses strncpy and explicit zero termination. + +The maximum value to be supplied to the xenstore string is: + (9 * 4) + (31 * 4) + 4 , which is 164, ie. 0xa4. + +When used with this value, '%02x' will always fit within 3 bytes, but +gcc 8.2 is apparently not able to deduce this (observed when building +for a 32-bit ARM platform). + +This commit assists the compiler by applying a mask (0xff) to the value, +enabling it to observe a lower maximum value and so pass the truncation +length check. + +Prior to this change, building fails with the compiler warning: + +| xenpmd.c: In function 'write_battery_info_to_xenstore': +| xenpmd.c:354:23: error: '%02x' directive output may be truncated +writing between 2 and 8 bytes into a region of size 3 +[-Werror=format-truncation=] +| snprintf(val, 3, "%02x", +| ^~~~ +| xenpmd.c:354:22: note: directive argument in the range [40, 2147483778] +| snprintf(val, 3, "%02x", +| ^~~~~~ +| xenpmd.c:354:5: note: 'snprintf' output between 3 and 9 bytes into a +destination of size 3 +| snprintf(val, 3, "%02x", +| ^~~~~~~~~~~~~~~~~~~~~~~~ +| (unsigned int)(9*4 + +| ~~~~~~~~~~~~~~~~~~~~ +| strlen(info->model_number) + +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| strlen(info->serial_number) + +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| strlen(info->battery_type) + +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| strlen(info->oem_info) + 4)); +| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +| cc1: all warnings being treated as errors + +Signed-off-by: Christopher Clark <christopher.clark6@baesystems.com> +--- + tools/xenpmd/xenpmd.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/tools/xenpmd/xenpmd.c b/tools/xenpmd/xenpmd.c +index 56412a9..0c0787e 100644 +--- a/tools/xenpmd/xenpmd.c ++++ b/tools/xenpmd/xenpmd.c +@@ -350,8 +350,10 @@ void write_battery_info_to_xenstore(struct battery_info *info) + + memset(val, 0, 1024); + memset(string_info, 0, 256); +- /* write 9 dwords (so 9*4) + length of 4 strings + 4 null terminators */ +- snprintf(val, 3, "%02x", ++ /* write 9 dwords (so 9*4) + length of 4 strings + 4 null terminators. ++ * mask informs the compiler that format truncation will not occur. ++ */ ++ snprintf(val, 3, "%02x", 0xff & + (unsigned int)(9*4 + + strlen(info->model_number) + + strlen(info->serial_number) + diff --git a/external/meta-virtualization/recipes-extended/xen/lwip.inc b/external/meta-virtualization/recipes-extended/xen/lwip.inc new file mode 100644 index 00000000..e0836332 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/lwip.inc @@ -0,0 +1,24 @@ +# Copyright (C) 2018 kebodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +# clear this out to break dependency circle +DEPENDS = "" + +# Nothing to configure or compile +# For stubdoms, lwip is basically a source package with a couple of patches applied. +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +# needed because this directory isn't typically part of a sysroot +SYSROOT_DIRS += "${prefix}/lwip" + +FILES_${PN} = "\ + ${prefix} \ +" + +do_install() { + install -d ${D}${prefix}/lwip + cp -r -t ${D}${prefix}/lwip ${S}/src/* +} diff --git a/external/meta-virtualization/recipes-extended/xen/lwip_1.3.0.bb b/external/meta-virtualization/recipes-extended/xen/lwip_1.3.0.bb new file mode 100644 index 00000000..b7d8e95d --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/lwip_1.3.0.bb @@ -0,0 +1,19 @@ +# Copyright (C) 2018 kebodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "LWIP" +HOMEPAGE = "https://savannah.nongnu.org/projects/lwip" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://COPYING;md5=59a383b05013356e0c9899b06dc5da3f" + +SRCREV_lwip = "bcb4afa886408bf0a1dde9c2a4a00323c8b07eb1" +SRC_URI = "\ + git://git.savannah.gnu.org/lwip.git;protocol=git;nobranch=1;destsuffix=lwip;name=lwip \ + file://lwip.patch-cvs \ + file://lwip.dhcp_create_request-hwaddr_len.patch \ +" + +S="${WORKDIR}/${PN}" +B="${S}" + +require lwip.inc diff --git a/external/meta-virtualization/recipes-extended/xen/mini-os.inc b/external/meta-virtualization/recipes-extended/xen/mini-os.inc new file mode 100644 index 00000000..61c27041 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/mini-os.inc @@ -0,0 +1,28 @@ +# Copyright (C) 2018 kebodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +# clear this out to break dependency circle +DEPENDS = "" + +do_configure() { + ${MAKE} -C ${WORKDIR}/mini-os links +} + +# Nothing to configure or compile +do_compile[noexec] = "1" + +# needed because this directory isn't typically part of a sysroot +SYSROOT_DIRS += "${prefix}/mini-os" +RDEPENDS_${PN}-dev = "perl" + +FILES_${PN}-dev = "\ + ${prefix} \ +" + +do_install() { + install -d ${D}${prefix}/mini-os + cp -r -t ${D}${prefix}/mini-os ${S}/* + rm -rf ${D}${prefix}/mini-os/scripts +} diff --git a/external/meta-virtualization/recipes-extended/xen/mini-os_4.11.0.bb b/external/meta-virtualization/recipes-extended/xen/mini-os_4.11.0.bb new file mode 100644 index 00000000..85a06a79 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/mini-os_4.11.0.bb @@ -0,0 +1,17 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "Mini-OS is a tiny OS kernel distributed with the Xen Project" +HOMEPAGE = "https://wiki.xenproject.org/wiki/Mini-OS" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=8a437231894440a8f7629caa372243d0" + +# git commit hash for: xen-RELEASE-4.11.0 +SRCREV_minios = "0b4b7897e08b967a09bed2028a79fabff82342dd" +SRC_URI = "\ + git://xenbits.xen.org/mini-os.git;protocol=git;nobranch=1;destsuffix=mini-os;name=minios \ +" +S="${WORKDIR}/mini-os" +B="${S}" + +require mini-os.inc diff --git a/external/meta-virtualization/recipes-extended/xen/newlib.inc b/external/meta-virtualization/recipes-extended/xen/newlib.inc new file mode 100644 index 00000000..1fdbd0aa --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/newlib.inc @@ -0,0 +1,64 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +CPPFLAGS_INCLUDE_DIR = "-isystem `${HOST_PREFIX}gcc -print-file-name=include`" +STUBDOM_CFLAGS += "-D_I386MACH_ALLOW_HW_INTERRUPTS" + +export ac_cv_path_CC_FOR_TARGET="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT} ${STUBDOM_CPPFLAGS} ${STUBDOM_CFLAGS}" +export CC_FOR_TARGET="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT} ${STUBDOM_CPPFLAGS} ${STUBDOM_CFLAGS}" + +export ac_cv_path_CXX_FOR_TARGET="${HOST_PREFIX}g++ --sysroot=${RECIPE_SYSROOT}" +export CXX_FOR_TARGET="${HOST_PREFIX}g++ --sysroot=${RECIPE_SYSROOT}" + +export ac_cv_path_CPP_FOR_TARGET="${HOST_PREFIX}gcc -E --sysroot=${RECIPE_SYSROOT}" +export CPP_FOR_TARGET="${HOST_PREFIX}gcc -E --sysroot=${RECIPE_SYSROOT}" + +export ac_cv_path_LD_FOR_TARGET="${HOST_PREFIX}ld --sysroot=${RECIPE_SYSROOT}" +export LD_FOR_TARGET="${HOST_PREFIX}ld --sysroot=${RECIPE_SYSROOT}" + +export ac_cv_path_AS_FOR_TARGET="${HOST_PREFIX}as" +export AS_FOR_TARGET="${HOST_PREFIX}as" + +export ac_cv_path_AR_FOR_TARGET="${HOST_PREFIX}ar" +export AR_FOR_TARGET="${HOST_PREFIX}ar" + +export ac_cv_path_NM_FOR_TARGET="${HOST_PREFIX}nm" +export NM_FOR_TARGET="${HOST_PREFIX}nm" + +export ac_cv_path_RANLIB_FOR_TARGET="${HOST_PREFIX}ranlib" +export RANLIB_FOR_TARGET="${HOST_PREFIX}ranlib" + +export ac_cv_path_OBJDUMP_FOR_TARGET="${HOST_PREFIX}objdump" +export OBJDUMP_FOR_TARGET="${HOST_PREFIX}objdump" + +export ac_cv_path_OBJCOPY_FOR_TARGET="${HOST_PREFIX}objcopy" +export OBJCOPY_FOR_TARGET="${HOST_PREFIX}objcopy" + +export ac_cv_path_STRIP_FOR_TARGET="${HOST_PREFIX}strip" +export STRIP_FOR_TARGET="${HOST_PREFIX}strip" + +export ac_cv_path_STRINGS_FOR_TARGET="${HOST_PREFIX}strings" +export STRINGS_FOR_TARGET="${HOST_PREFIX}strings" + +export ac_cv_path_READELF_FOR_TARGET="${HOST_PREFIX}readelf" +export READELF_FOR_TARGET="${HOST_PREFIX}readelf" + +do_configure() { + ${S}/configure --verbose --prefix=${prefix} --target=${GNU_TARGET_ARCH}-xen-elf --enable-newlib-io-long-long --disable-multilib + find ${S} -type f | xargs perl -i.bak -pe 's/\b_(tzname|daylight|timezone)\b/$1/g' +} + +do_compile() { + ${MAKE} +} + +do_install() { + ${MAKE} DESTDIR=${D} install + rm -rf ${D}/cross-root-${GNU_TARGET_ARCH}/share + rm -rf ${D}/cross-root-${GNU_TARGET_ARCH}/info + install -m 644 `${HOST_PREFIX}gcc -print-file-name=include`/stdarg.h -t ${D}/${includedir} + install -m 644 `${HOST_PREFIX}gcc -print-file-name=include`/stddef.h -t ${D}/${includedir} + install -m 644 `${HOST_PREFIX}gcc -print-file-name=include`/stdbool.h -t ${D}/${includedir} +} diff --git a/external/meta-virtualization/recipes-extended/xen/newlib_1.16.0.bb b/external/meta-virtualization/recipes-extended/xen/newlib_1.16.0.bb new file mode 100644 index 00000000..60672bea --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/newlib_1.16.0.bb @@ -0,0 +1,21 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "Newlib is a C library intended for use on embedded systems." +HOMEPAGE = "http://sourceware.org/newlib" +LICENSE = "GPLv2 & LGPLv3 & GPLv3 & LGPLv2" +LIC_FILES_CHKSUM = "file://COPYING.NEWLIB;md5=950f50b290e8fcf7a2d3fff61775de9b" + +# this is the hash of version tag 1_16_0 +SRCREV_newlib = "07b4b67a88f386ce4716a14e0ff2c2bce992b985" +SRC_URI = "\ + git://sourceware.org/git/newlib-cygwin.git;protocol=git;nobranch=1;destsuffix=newlib;name=newlib \ + file://newlib.patch \ + file://newlib-chk.patch \ + file://newlib-stdint-size_max-fix-from-1.17.0.patch \ +" + +S="${WORKDIR}/newlib" +B="${WORKDIR}/build" + +require newlib.inc diff --git a/external/meta-virtualization/recipes-extended/xen/polarssl.inc b/external/meta-virtualization/recipes-extended/xen/polarssl.inc new file mode 100644 index 00000000..eae95f40 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/polarssl.inc @@ -0,0 +1,27 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +DEPENDS += "\ + newlib \ +" +STUBDOM_CFLAGS += "\ + -Wno-memset-elt-size \ + -Wno-implicit-fallthrough \ +" + +# nothing to configure +do_configure[noexec] = "1" + +do_compile() { + ${MAKE} CC="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT} ${STUBDOM_CPPFLAGS} ${STUBDOM_CFLAGS}" +} + +do_install() { + install -d ${D}${includedir} + cp -r -t ${D}${includedir} ${S}/include/polarssl + + install -d ${D}/${libdir} + install -m 644 -t ${D}/${libdir} ${S}/library/libpolarssl.a +} diff --git a/external/meta-virtualization/recipes-extended/xen/polarssl_1.1.4.bb b/external/meta-virtualization/recipes-extended/xen/polarssl_1.1.4.bb new file mode 100644 index 00000000..80ea45a7 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/polarssl_1.1.4.bb @@ -0,0 +1,19 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "PolarSSL (now 'mbed TLS') is an open source, portable, easy to use, readable and flexible SSL library." +HOMEPAGE = "https://tls.mbed.org" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://LICENSE;md5=751419260aa954499f7abaabaa882bbe" + +# git hash for release tag polarssl-1.1.4 +SRCREV_polarssl = "d36da11125a9c85c572a4fdf63e0a25e76d7bb18" +SRC_URI = "\ + git://github.com/ARMmbed/mbedtls.git;protocol=https;nobranch=1;destsuffix=polarssl;name=polarssl \ + file://polarssl.patch; \ +" + +S="${WORKDIR}/${PN}" +B="${S}/library" + +require polarssl.inc diff --git a/external/meta-virtualization/recipes-extended/xen/stubdom-gmp.inc b/external/meta-virtualization/recipes-extended/xen/stubdom-gmp.inc new file mode 100644 index 00000000..ef6473d4 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/stubdom-gmp.inc @@ -0,0 +1,37 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +DEPENDS += "\ + newlib \ +" + +do_configure() { + # need to modify prefix here during configure otherwise OE-level variables + # (prefix, libdir, includedir, etc...) defined in stubdom.inc get messed up + CPPFLAGS="-isystem ${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include ${STUBDOM_CPPFLAGS}" \ + CFLAGS="${STUBDOM_CFLAGS}" \ + CC="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT}" \ + ${S}/configure \ + --disable-shared \ + --enable-static \ + --disable-fft \ + --without-readline \ + --with-gnu-ld \ + --prefix=${prefix}/${GNU_TARGET_ARCH}-xen-elf \ + --libdir=${libdir} \ + --build=`${HOST_PREFIX}gcc -dumpmachine` \ + --host=${GNU_TARGET_ARCH}-xen-elf + + sed -i 's/#define HAVE_OBSTACK_VPRINTF 1/\/\/#define HAVE_OBSTACK_VPRINTF 1/' ${S}/config.h +} + +do_compile() { + ${MAKE} +} + +do_install() { + ${MAKE} DESTDIR=${D} install + rm -rf ${D}${prefix}/${GNU_TARGET_ARCH}-xen-elf/share +} diff --git a/external/meta-virtualization/recipes-extended/xen/stubdom-gmp_4.3.2.bb b/external/meta-virtualization/recipes-extended/xen/stubdom-gmp_4.3.2.bb new file mode 100644 index 00000000..d9a2adbd --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/stubdom-gmp_4.3.2.bb @@ -0,0 +1,20 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "GMP library for Xen vTPM's." +HOMEPAGE = "http://gmp" +LICENSE = "GPLv3" +LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504 \ + file://COPYING.LIB;md5=6a6a8e020838b23406c81b19c1d46df6 \ +" + +SRC_URI = "\ + https://gmplib.org/download/gmp/archive/gmp-${PV}.tar.bz2 \ +" +SRC_URI[md5sum] = "dd60683d7057917e34630b4a787932e8" +SRC_URI[sha256sum] = "936162c0312886c21581002b79932829aa048cfaf9937c6265aeaa14f1cd1775" + +S="${WORKDIR}/gmp-${PV}" +B="${S}" + +require stubdom-gmp.inc diff --git a/external/meta-virtualization/recipes-extended/xen/stubdom.inc b/external/meta-virtualization/recipes-extended/xen/stubdom.inc new file mode 100644 index 00000000..bfc67527 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/stubdom.inc @@ -0,0 +1,152 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +COMPATIBLE_HOST = '(x86_64.*).*-linux' + +require xen-arch.inc + +# many of the xen stubdom related recipes build and package static instead of shared libraries +EXCLUDE_FROM_SHLIBS = "1" + +# base set of dependencies to be used for xen stubdom recipes +DEPENDS += "\ + lwip \ + mini-os \ +" + +# unset EVERYTHING from the OE environment. +# Weird things happen when these are exported into the environment. +unset CFLAGS +unset BUILD_CFLAGS +unset TARGET_CFLAGS +unset CFLAGS_FOR_BUILD + +unset CPPFLAGS +unset BUILD_CPPFLAGS +unset TARGET_CPPFLAGS +unset CPPFLAGS_FOR_BUILD + +unset LDFLAGS +unset BUILD_LDFLAGS +unset TARGET_LDFLAGS +unset LDFLAGS_FOR_BUILD + +unset CXXFLAGS +unset TARGET_CXXFLAGS +unset BUILD_CXXFLAGS +unset CXXFLAGS_FOR_BUILD + +unset BUILD_CC +unset BUILD_CPP +unset BUILD_CXX +unset BUILD_LD +unset BUILD_AR +unset BUILD_AS +unset BUILD_CCLD +unset BUILD_FC +unset BUILD_RANLIB +unset BUILD_NM +unset BUILD_STRIP +unset BUILD_READELF +unset BUILD_OBJCOPY +unset BUILD_OBJDUMP +unset CC +unset CPP +unset CXX +unset LD +unset AR +unset AS +unset NM +unset RANLIB +unset STRIP +unset STRINGS +unset READELF +unset OBJCOPY +unset OBJDUMP +unset READELF +unset CCLD +unset FC + +# Provide support to build both 32-bit and 64-bit stubdoms +python () { + gnu_dict = { + 'x86_32': 'i686', + 'x86_64': 'x86_64', + } + + if d.expand('${XEN_TARGET_ARCH}') == 'x86_32': + d.setVar("GNU_TARGET_ARCH",gnu_dict[d.expand('${XEN_TARGET_ARCH}')]) + d.setVar("PACKAGE_ARCH","core2-32") + elif d.expand('${XEN_TARGET_ARCH}') == 'x86_64': + d.setVar("GNU_TARGET_ARCH",gnu_dict[d.expand('${XEN_TARGET_ARCH}')]) +} + +export GNU_TARGET_ARCH +export XEN_TARGET_ARCH="${@map_xen_arch(d.getVar('TARGET_ARCH'), d)}" +export XEN_COMPILE_ARCH="${@map_xen_arch(d.getVar('BUILD_ARCH'), d)}" + +LWIP_SRCDIR = "${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/lwip" +MINIOS_SRCDIR = "${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/mini-os" + +# Base set of CPPFLAGS, CFLAGS needed for each component used to build MiniOS-based stubdoms +# LDFLAGS are only used when building stubdoms, so only used in stubdom recipes +# Generic name given because each library uses DEF_, BUILD_, TARGET_, and xxxFLAGS differently +CPPFLAGS_INCLUDE_DIR = "-isystem ${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include" + +STUBDOM_CPPFLAGS += "\ + -isystem ${MINIOS_SRCDIR}/include \ + -D__MINIOS__ \ + -DHAVE_LIBC \ + -isystem ${MINIOS_SRCDIR}/include/posix \ + -isystem ${MINIOS_SRCDIR}/include/xen \ + -isystem ${MINIOS_SRCDIR}/include/x86 \ + -isystem ${MINIOS_SRCDIR}/include/x86/${XEN_TARGET_ARCH} \ + -U __linux__ \ + -U __FreeBSD__ \ + -U __sun__ \ + -nostdinc \ + ${CPPFLAGS_INCLUDE_DIR} \ + -isystem ${LWIP_SRCDIR}/include \ + -isystem ${LWIP_SRCDIR}/include/ipv4 \ +" + +STUBDOM_CFLAGS += "\ + -mno-red-zone \ + -O1 \ + -fno-omit-frame-pointer \ + -m64 \ + -fno-reorder-blocks \ + -fno-asynchronous-unwind-tables \ + -DBUILD_ID \ + -fno-strict-aliasing \ + -std=gnu99 \ + -Wall \ + -Wstrict-prototypes \ + -Wdeclaration-after-statement \ + -Wno-unused-but-set-variable \ + -Wno-unused-local-typedefs \ + -fno-stack-protector \ + -fno-exceptions \ +" + +STUBDOM_LDFLAGS = "\ + -nostdlib \ + -L${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/lib \ +" + +# Need to redefine these for stubdom-related builds. It all starts because of +# the prefix used in newlib and then continues because we don't want to +# cross-contaminate stubdom-related recipes with headers and libraries found in +# the OE-defined locations +export prefix="/cross-root-${GNU_TARGET_ARCH}" +export includedir="${prefix}/${GNU_TARGET_ARCH}-xen-elf/include" +export libdir="${prefix}/${GNU_TARGET_ARCH}-xen-elf/lib" +export libexecdir="${libdir}" +export STAGING_INCDIR +export STAGING_LIBDIR + +# Typically defined in Xen and Minios .mk files that aren't sourced/read, +# defined to trigger some values and paths in Makefiles +export debug="y" +export stubdom="y" +export XEN_OS="MiniOS" diff --git a/external/meta-virtualization/recipes-extended/xen/tpm-emulator.inc b/external/meta-virtualization/recipes-extended/xen/tpm-emulator.inc new file mode 100644 index 00000000..f58a2763 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/tpm-emulator.inc @@ -0,0 +1,37 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +DEPENDS += "\ + cmake-native \ + newlib \ + stubdom-gmp \ +" + +# nothing to configure +do_configure[noexec] = "1" + +export CMAKE_C_FLAGS = "\ + -std=c99 \ + -DTPM_NO_EXTERN \ + ${STUBDOM_CPPFLAGS} \ + ${STUBDOM_CFLAGS} \ + -Wno-declaration-after-statement \ + -Wno-implicit-fallthrough \ +" + +do_compile() { + CC="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT}" cmake .. -DCMAKE_C_FLAGS:STRING="${CMAKE_C_FLAGS}" + ${MAKE} VERBOSE=1 tpm_crypto tpm +} + +do_install() { + install -d ${D}/${libdir} + install -m 644 -t ${D}/${libdir} ${B}/crypto/libtpm_crypto.a + install -m 644 -t ${D}/${libdir} ${B}/tpm/libtpm.a + + install -D -m 644 -t ${D}/${includedir}/tpm-emulator/build ${S}/build/config.h + install -D -m 644 -t ${D}/${includedir}/tpm-emulator/crypto ${S}/crypto/*.h + install -D -m 644 -t ${D}/${includedir}/tpm-emulator/tpm ${S}/tpm/*.h +} diff --git a/external/meta-virtualization/recipes-extended/xen/tpm-emulator_0.7.4.bb b/external/meta-virtualization/recipes-extended/xen/tpm-emulator_0.7.4.bb new file mode 100644 index 00000000..96a40905 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/tpm-emulator_0.7.4.bb @@ -0,0 +1,27 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "TPM Emulator" +HOMEPAGE = "http://xenbits.xen.org/xen-extfiles" +LICENSE = "GPLv2" +LIC_FILES_CHKSUM = "file://README;md5=eeabd77cf8fd8a8bc42983884cb09863" + +SRC_URI = "\ + http://xenbits.xen.org/xen-extfiles/tpm_emulator-${PV}.tar.gz;name=tpm-emulator \ + file://tpmemu-0.7.4.patch \ + file://vtpm-bufsize.patch \ + file://vtpm-locality.patch \ + file://vtpm-parent-sign-ek.patch \ + file://vtpm-deepquote.patch \ + file://vtpm-deepquote-anyloc.patch \ + file://vtpm-cmake-Wextra.patch \ + file://vtpm-implicit-fallthrough.patch \ + file://vtpm_TPM_ChangeAuthAsymFinish.patch \ +" +SRC_URI[tpm-emulator.md5sum] = "e26becb8a6a2b6695f6b3e8097593db8" +SRC_URI[tpm-emulator.sha256sum] = "4e48ea0d83dd9441cc1af04ab18cd6c961b9fa54d5cbf2c2feee038988dea459" + +S="${WORKDIR}/tpm_emulator-${PV}" +B="${S}/build" + +require tpm-emulator.inc diff --git a/external/meta-virtualization/recipes-extended/xen/xen-arch.inc b/external/meta-virtualization/recipes-extended/xen/xen-arch.inc new file mode 100644 index 00000000..fb0093e3 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/xen-arch.inc @@ -0,0 +1,18 @@ + +valid_xen_archs = " \ + x86_64 x86_32 \ + arm32 arm64 \ + " + +def map_xen_arch(a, d): + import re + valid_archs = d.getVar('valid_xen_archs').split() + + if re.match("i.86", a): return "x86_32" + elif re.match("x86.64", a): return "x86_64" + elif re.match("arm.*", a): return "arm32" + elif re.match("aarch64.*", a): return "arm64" + elif a in valid_archs: return a + else: + return "INVALID" + diff --git a/external/meta-virtualization/recipes-extended/xen/xen-vtpm.inc b/external/meta-virtualization/recipes-extended/xen/xen-vtpm.inc new file mode 100644 index 00000000..a94c7503 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/xen-vtpm.inc @@ -0,0 +1,111 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +require stubdom.inc + +DEPENDS = "\ + newlib \ + lwip \ + mini-os \ + polarssl \ + stubdom-gmp \ + tpm-emulator \ +" +# These were unset by stubdom.inc to allow us to scope them per recipe +export CC="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT}" +export CCLD="${HOST_PREFIX}gcc --sysroot=${RECIPE_SYSROOT}" +export CXX="${HOST_PREFIX}g++ --sysroot=${RECIPE_SYSROOT}" +export CPP="${HOST_PREFIX}gcc -E --sysroot=${RECIPE_SYSROOT}" +export LD="${HOST_PREFIX}ld --sysroot=${RECIPE_SYSROOT}" +export LD_LTO="${HOST_PREFIX}ld --sysroot=${RECIPE_SYSROOT}" +export AS="${HOST_PREFIX}as" +export AR="${HOST_PREFIX}ar" +export NM="${HOST_PREFIX}nm" +export RANLIB="${HOST_PREFIX}ranlib" +export OBJDUMP="${HOST_PREFIX}objdump" +export OBJCOPY="${HOST_PREFIX}objcopy" +export STRIP="${HOST_PREFIX}strip" +export STRINGS="${HOST_PREFIX}strings" +export READELF="${HOST_PREFIX}readelf" + + +# Required for some of the config stuff +export STUBDOM_TARGETS="vtpm vtpmmgr" + +VTPM_CPPFLAGS = "\ + -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator/build \ + -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator/crypto \ + -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator/tpm \ + -I${RECIPE_SYSROOT}/cross-root-${GNU_TARGET_ARCH}/${GNU_TARGET_ARCH}-xen-elf/include/tpm-emulator \ +" + +# The includes from this Xen directory are not in the MiniOS repo, although they probably should be. +STUBDOM_CPPFLAGS += "-isystem ${B}/include/" + +do_configure() { + + # GCC 7 fails linking header defined inlines if not declared 'static' or 'extern' + # This appears to be fixed in Xen 4.10.0+, so let's look at version of Xen source + # to determine if we need to modify inline declarations. + # + # 'echo -e' to enable interpretation of backslashes + # 'sort -V' to natural sort version numbers + # 'head -n1' to capture the first line of output from sort command + + if [ "${PV}" = "$(echo "${PV};4.9.999" | sed 's/;/\n/' | sort -V | head -n1)" ]; then + sed -i "s/^inline/static inline/g" ${B}/vtpmmgr/*.h + fi + + for i in AR AS NM RANLIB OBJDUMP OBJCOPY STRIP STRINGS READELF CXX LD LD_LTO CC CPP; do + sed -i "s/^\($i\s\s*\).*=/\1?=/" ${MINIOS_SRCDIR}/Config.mk + done + + # replicate the TARGETS_MINIOS target in xen/stubdom/Makefile + for i in ${STUBDOM_TARGETS}; do + [ -d ${B}/mini-os-${XEN_TARGET_ARCH}-$i ] || + for j in $(cd ${MINIOS_SRCDIR} ; find . -type d) ; do \ + mkdir -p ${B}/mini-os-${XEN_TARGET_ARCH}-$i/$j; \ + done + done +} + +do_compile() { + ${MAKE} MINIOS_CONFIG="${B}/vtpm/minios.cfg" CONFIG_FILE="${B}/vtpm-minios-config.mk" DESTDIR= -C ${MINIOS_SRCDIR} config + CPPFLAGS="`cat ${B}/vtpm-minios-config.mk` ${STUBDOM_CPPFLAGS} ${VTPM_CPPFLAGS}" CFLAGS="${STUBDOM_CFLAGS}" ${MAKE} -C ${B}/vtpm + DEF_CPPFLAGS="${STUBDOM_CPPFLAGS}" \ + DEF_CFLAGS="${STUBDOM_CFLAGS}" \ + DEF_LDFLAGS="${STUBDOM_LDFLAGS}" \ + MINIOS_CONFIG="${B}/vtpm/minios.cfg" \ + ${MAKE} -C ${MINIOS_SRCDIR} \ + OBJ_DIR=${B}/mini-os-${XEN_TARGET_ARCH}-vtpm \ + APP_OBJS="${B}/vtpm/vtpm.a" \ + APP_LDLIBS="-ltpm -ltpm_crypto -lgmp -lpolarssl" + + ${MAKE} MINIOS_CONFIG="${B}/vtpmmgr/minios.cfg" CONFIG_FILE="${B}/vtpmmgr-minios-config.mk" DESTDIR= -C ${MINIOS_SRCDIR} config + CPPFLAGS="`cat ${B}/vtpmmgr-minios-config.mk` ${STUBDOM_CPPFLAGS}" CFLAGS="${STUBDOM_CFLAGS}" ${MAKE} -C ${B}/vtpmmgr + DEF_CPPFLAGS="${STUBDOM_CPPFLAGS}" \ + DEF_CFLAGS="${STUBDOM_CFLAGS}" \ + DEF_LDFLAGS="${STUBDOM_LDFLAGS}" \ + MINIOS_CONFIG="${B}/vtpmmgr/minios.cfg" \ + ${MAKE} -C ${MINIOS_SRCDIR} \ + OBJ_DIR=${B}/mini-os-${XEN_TARGET_ARCH}-vtpmmgr \ + APP_OBJS="${B}/vtpmmgr/vtpmmgr.a" \ + APP_LDLIBS="-lm -lpolarssl" +} + +PACKAGES = "\ + ${PN}-vtpm-stubdom \ + ${PN}-vtpmmgr-stubdom \ +" +FILES_${PN}-vtpm-stubdom="\ + ${libdir}/xen/boot/vtpm-stubdom.gz \ +" + +FILES_${PN}-vtpmmgr-stubdom="\ + ${libdir}/xen/boot/vtpmmgr-stubdom.gz \ +" + +do_install() { + install -m 644 -D ${B}/mini-os-${XEN_TARGET_ARCH}-vtpm/mini-os.gz ${D}${libdir}/xen/boot/vtpm-stubdom.gz + install -m 644 -D ${B}/mini-os-${XEN_TARGET_ARCH}-vtpmmgr/mini-os.gz ${D}${libdir}/xen/boot/vtpmmgr-stubdom.gz +} diff --git a/external/meta-virtualization/recipes-extended/xen/xen-vtpm_4.11.0.bb b/external/meta-virtualization/recipes-extended/xen/xen-vtpm_4.11.0.bb new file mode 100644 index 00000000..088e985b --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/xen-vtpm_4.11.0.bb @@ -0,0 +1,21 @@ +# Copyright (C) 2017 Kurt Bodiker <kurt.bodiker@braintrust-us.com> +# Released under the MIT license (see COPYING.MIT for the terms) + +DESCRIPTION = "MiniOS-based vTPMs for Xen" +HOMEPAGE = "https://www.xenproject.org" +LICENSE = "GPLv2 & BSD-3-Clause" +LIC_FILES_CHKSUM = "file://COPYING;md5=b1ceb1b03a49b202ee6f41ffd1ed0155 \ + file://vtpm/COPYING;md5=75a98062ab0322ded060d9026a1bda61 \ +" + +# git commit hash for Xen's RELEASE-4.11.0 tag +SRCREV_xen = "1eb6544a567e3e5133fafe0c4ef3545c5138d0e4" +SRC_URI = "\ + git://xenbits.xen.org/xen.git;protocol=git;nobranch=1;name=xen;subpath=stubdom \ + git://xenbits.xen.org/xen.git;protocol=git;nobranch=1;name=xen;destsuffix=stubdom/include;subpath=tools/xenstore/include \ +" + +S="${WORKDIR}/stubdom" +B="${S}" + +require xen-vtpm.inc diff --git a/external/meta-virtualization/recipes-extended/xen/xen.inc b/external/meta-virtualization/recipes-extended/xen/xen.inc new file mode 100644 index 00000000..7eb2ac4b --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/xen.inc @@ -0,0 +1,1106 @@ +DESCRIPTION = "Xen hypervisor" +HOMEPAGE = "http://xen.org" +LICENSE = "GPLv2" +SECTION = "console/tools" + +LIC_FILES_CHKSUM = "file://COPYING;md5=bbb4b1bdc2c3b6743da3c39d03249095" + +COMPATIBLE_HOST = '(x86_64.*).*-linux|aarch64.*-linux|arm-.*-linux-gnueabi' + +inherit autotools-brokensep setuptools update-rc.d systemd deploy + +require xen-arch.inc + +PACKAGECONFIG ??= " \ + sdl \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd', '', d)} \ + ${@bb.utils.contains('XEN_TARGET_ARCH', 'x86_64', 'hvm', '', d)} \ + " + +FLASK_POLICY_FILE ?= "xenpolicy-${PV}" + +PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,virtual/libsdl," +PACKAGECONFIG[xsm] = "--enable-xsmpolicy,--disable-xsmpolicy,checkpolicy-native," +PACKAGECONFIG[systemd] = "--enable-systemd,--disable-systemd,systemd," +PACKAGECONFIG[hvm] = "--with-system-seabios="/usr/share/firmware/bios.bin",--disable-seabios,seabios ipxe vgabios," + +DEPENDS = " \ + bison-native \ + dev86-native \ + flex-native \ + file-native \ + gettext-native \ + acpica-native \ + ncurses-native \ + util-linux-native \ + xz-native \ + bridge-utils \ + curl \ + dtc \ + gettext \ + glib-2.0 \ + gnutls \ + iproute2 \ + libnl \ + ncurses \ + openssl \ + pciutils \ + pixman \ + procps \ + python \ + libaio \ + lzo \ + util-linux \ + xz \ + yajl \ + zlib \ + gnu-efi \ + " + +# inherit setuptools adds python to RDEPENDS, override it +RDEPENDS_${PN} = "" + +RDEPENDS_${PN}-base = "\ + bash perl xz \ + ${PN}-console \ + ${PN}-libxenguest \ + ${PN}-libxenlight \ + ${PN}-libxenvchan \ + ${PN}-libxenctrl \ + ${PN}-libxlutil \ + ${PN}-libxenstat \ + ${PN}-libxenstore \ + ${PN}-libfsimage \ + ${PN}-fsimage \ + ${PN}-scripts-block \ + ${PN}-scripts-network \ + ${PN}-xen-watchdog \ + ${PN}-xencommons \ + ${PN}-xendomains \ + ${PN}-xenstore \ + ${PN}-xenstored \ + ${PN}-xl \ + " + +RDEPENDS_${PN}-dev = "" + +RRECOMMENDS_${PN}-base = " \ + ${PN}-blktap \ + ${PN}-libblktap \ + ${PN}-libblktapctl \ + ${PN}-libvhd \ + ${PN}-flask \ + ${PN}-hvmloader \ + ${PN}-shim \ + ${PN}-xenpaging \ + " + +RDEPENDS_${PN}-devd = " \ + ${PN}-xl \ + " + +RDEPENDS_${PN}-fsimage = " \ + libext2fs \ + " + +RDEPENDS_${PN}-misc = " \ + perl \ + python \ + " + +RDEPENDS_${PN}-remus = " \ + bash \ + python \ + " + +RDEPENDS_${PN}-scripts-block = "\ + bash \ + ${PN}-scripts-common \ + ${PN}-volatiles \ + " + +RDEPENDS_${PN}-scripts-common = "bash" + +RDEPENDS_${PN}-scripts-network = "\ + bash \ + bridge-utils \ + ${PN}-scripts-common \ + ${PN}-volatiles \ + " + +RDEPENDS_${PN}-xencommons = "\ + bash \ + ${PN}-console \ + ${PN}-xenstore \ + ${PN}-xenstored \ + ${PN}-xl \ + ${PN}-scripts-common \ + " + +RDEPENDS_${PN}-xendomains = "\ + bash \ + ${PN}-console \ + ${PN}-scripts-block \ + ${PN}-scripts-common \ + ${PN}-xenstored \ + " + +RDEPENDS_${PN}-xl = "libgcc" + +RDEPENDS_${PN}-xentrace = "python" + +RDEPENDS_${PN}-xen-watchdog = "bash" + +PACKAGES = "\ + ${PN}-base \ + ${PN}-blktap \ + ${PN}-console \ + ${PN}-cpuid \ + ${PN}-dbg \ + ${PN}-dev \ + ${PN}-devd \ + ${PN}-doc \ + ${PN}-efi \ + ${PN}-flask \ + ${PN}-flask-tools \ + ${PN}-fsimage \ + ${PN}-gdbsx \ + ${PN}-hvmloader \ + ${PN}-hypervisor \ + ${PN}-init-xenstore-dom \ + ${PN}-kdd \ + ${PN}-libblktap \ + ${PN}-libblktapctl \ + ${PN}-libblktapctl-dev \ + ${PN}-libblktap-dev \ + ${PN}-libfsimage \ + ${PN}-libfsimage-dev \ + ${PN}-libvhd \ + ${PN}-libvhd-dev \ + ${PN}-libxencall \ + ${PN}-libxencall-dev \ + ${PN}-libxenctrl \ + ${PN}-libxenctrl-dev \ + ${PN}-libxendevicemodel \ + ${PN}-libxendevicemodel-dev \ + ${PN}-libxenevtchn \ + ${PN}-libxenevtchn-dev \ + ${PN}-libxenforeignmemory \ + ${PN}-libxenforeignmemory-dev \ + ${PN}-libxengnttab \ + ${PN}-libxengnttab-dev \ + ${PN}-libxenguest \ + ${PN}-libxenguest-dev \ + ${PN}-libxenlight \ + ${PN}-libxenlight-dev \ + ${PN}-libxenstat \ + ${PN}-libxenstat-dev \ + ${PN}-libxenstore \ + ${PN}-libxenstore-dev \ + ${PN}-libxentoolcore \ + ${PN}-libxentoolcore-dev \ + ${PN}-libxentoollog \ + ${PN}-libxentoollog-dev \ + ${PN}-libxenvchan \ + ${PN}-libxenvchan-dev \ + ${PN}-libxlutil \ + ${PN}-libxlutil-dev \ + ${PN}-livepatch \ + ${PN}-misc \ + ${PN}-pygrub \ + ${PN}-python \ + ${PN}-qemu \ + ${PN}-remus \ + ${PN}-scripts-block \ + ${PN}-scripts-common \ + ${PN}-scripts-network \ + ${PN}-shim \ + ${PN}-staticdev \ + ${PN}-volatiles \ + ${PN}-xcutils \ + ${PN}-xencommons \ + ${PN}-xend \ + ${PN}-xend-examples \ + ${PN}-xendomains \ + ${PN}-xenmon \ + ${PN}-xenpaging \ + ${PN}-xenpmd \ + ${PN}-xenstat \ + ${PN}-xenstore \ + ${PN}-xenstored \ + ${PN}-xentrace \ + ${PN}-xen-watchdog \ + ${PN}-xl \ + ${PN}-xl-examples \ + ${PN}-xm \ + ${PN}-xm-examples \ + " + +FILES_${PN}-dbg += "\ + ${libdir}/.debug \ + ${libdir}/debug/* \ + ${libdir}/xen/bin/.debug \ + ${libdir}/python2.7/site-packages/.debug \ + ${libdir}/python2.7/site-packages/xen/lowlevel/.debug \ + ${libdir}/fs/xfs/.debug \ + ${libdir}/fs/ufs/.debug \ + ${libdir}/fs/ext2fs-lib/.debug \ + ${libdir}/fs/fat/.debug \ + ${libdir}/fs/zfs/.debug \ + ${libdir}/fs/reiserfs/.debug \ + ${libdir}/fs/iso9660/.debug \ + ${libdir}/fs/*/.debug \ + ${sbindir}/.debug \ + ${libdir}exec/.debug \ + ${libdir}/xen/libexec/.debug \ + ${bindir}/.debug \ + ${libdir}/python2.7/dist-packages/.debug \ + ${libdir}/python2.7/dist-packages/xen/lowlevel/.debug \ + " + +FILES_${PN}-dev = "\ + ${includedir} \ + " + +FILES_${PN}-doc = "\ + ${sysconfdir}/xen/README \ + ${sysconfdir}/xen/README.incompatibilities \ + ${datadir}/doc \ + ${datadir}/man \ + " + +FILES_${PN}-staticdev += "\ + ${libdir}/libblktapctl.a \ + ${libdir}/libxenguest.a \ + ${libdir}/libxenlight.a \ + ${libdir}/libxenvchan.a \ + ${libdir}/libxenctrl.a \ + ${libdir}/libxlutil.a \ + ${libdir}/libvhd.a \ + ${libdir}/libxenstat.a \ + ${libdir}/libxenstore.a \ + ${libdir}/libblktap.a \ + " + +FILES_${PN}-libblktapctl = "${libdir}/libblktapctl.so.*" +FILES_${PN}-libblktapctl-dev = " \ + ${libdir}/libblktapctl.so \ + ${datadir}/pkgconfig/xenblktapctl.pc \ + " + +FILES_${PN}-libxencall = "${libdir}/libxencall.so.*" +FILES_${PN}-libxencall-dev = " \ + ${libdir}/libxencall.so \ + ${datadir}/pkgconfig/xencall.pc \ + " + +FILES_${PN}-libxenctrl = "${libdir}/libxenctrl.so.*" +FILES_${PN}-libxenctrl-dev = " \ + ${libdir}/libxenctrl.so \ + ${datadir}/pkgconfig/xencontrol.pc \ + " + +FILES_${PN}-libxendevicemodel = "${libdir}/libxendevicemodel.so.*" +FILES_${PN}-libxendevicemodel-dev = " \ + ${libdir}/libxendevicemodel.so \ + ${datadir}/pkgconfig/xendevicemodel.pc \ + " + +FILES_${PN}-libxenevtchn = "${libdir}/libxenevtchn.so.*" +FILES_${PN}-libxenevtchn-dev = " \ + ${libdir}/libxenevtchn.so \ + ${datadir}/pkgconfig/xenevtchn.pc \ + " + +FILES_${PN}-libxenforeignmemory = "${libdir}/libxenforeignmemory.so.*" +FILES_${PN}-libxenforeignmemory-dev = " \ + ${libdir}/libxenforeignmemory.so \ + ${datadir}/pkgconfig/xenforeignmemory.pc \ + " + +FILES_${PN}-libxengnttab = "${libdir}/libxengnttab.so.*" +FILES_${PN}-libxengnttab-dev = " \ + ${libdir}/libxengnttab.so \ + ${datadir}/pkgconfig/xengnttab.pc \ + " + +FILES_${PN}-libxenguest = "${libdir}/libxenguest.so.*" +FILES_${PN}-libxenguest-dev = " \ + ${libdir}/libxenguest.so \ + ${datadir}/pkgconfig/xenguest.pc \ + " + +FILES_${PN}-libxenlight = "${libdir}/libxenlight.so.*" +FILES_${PN}-libxenlight-dev = " \ + ${libdir}/libxenlight.so \ + ${datadir}/pkgconfig/xenlight.pc \ + " + +FILES_${PN}-libxenstat = "${libdir}/libxenstat.so.*" +FILES_${PN}-libxenstat-dev = " \ + ${libdir}/libxenstat.so \ + ${datadir}/pkgconfig/xenstat.pc \ + " + +FILES_${PN}-libxenstore = "${libdir}/libxenstore.so.*" +FILES_${PN}-libxenstore-dev = " \ + ${libdir}/libxenstore.so \ + ${datadir}/pkgconfig/xenstore.pc \ + " + +FILES_${PN}-libxentoolcore = "${libdir}/libxentoolcore.so.*" +FILES_${PN}-libxentoolcore-dev = " \ + ${libdir}/libxentoolcore.so \ + ${datadir}/pkgconfig/xentoolcore.pc \ + " + +FILES_${PN}-libxentoollog = "${libdir}/libxentoollog.so.*" +FILES_${PN}-libxentoollog-dev = " \ + ${libdir}/libxentoollog.so \ + ${datadir}/pkgconfig/xentoollog.pc \ + " + +FILES_${PN}-libxenvchan = "${libdir}/libxenvchan.so.*" +FILES_${PN}-libxenvchan-dev = " \ + ${libdir}/libxenvchan.so \ + ${datadir}/pkgconfig/xenvchan.pc \ + " + +FILES_${PN}-libxlutil = "${libdir}/libxlutil.so.*" +FILES_${PN}-libxlutil-dev = " \ + ${libdir}/libxlutil.so \ + ${datadir}/pkgconfig/xlutil.pc \ + " +FILES_${PN}-libvhd = "${libdir}/libvhd.so.*" +FILES_${PN}-libvhd-dev = " \ + ${libdir}/libvhd.so \ + ${datadir}/pkgconfig/vhd.pc \ + " + +FILES_${PN}-libblktap = "${libdir}/libblktap.so.*" +FILES_${PN}-libblktap-dev = " \ + ${libdir}/libblktap.so \ + ${datadir}/pkgconfig/blktap.pc \ + " + +FILES_${PN}-libfsimage = "${libdir}/libfsimage.so.*" +FILES_${PN}-libfsimage-dev = " \ + ${libdir}/libfsimage.so \ + ${datadir}/pkgconfig/fsimage.pc \ + " + +FILES_${PN}-fsimage = "${libdir}/fs/*/*fsimage.so" + +FILES_${PN}-hypervisor = "\ + /boot/xen-* \ + /boot/xen \ + /boot/xen-*.gz \ + /boot/xen.gz \ + /boot/xen-syms-* \ + " + +FILES_${PN}-init-xenstore-dom = "${libdir}/xen/bin/init-xenstore-domain" + +FILES_${PN}-efi = "\ + ${exec_prefix}/lib64/efi/xen* \ + " + +FILES_${PN}-base = "\ + ${sysconfdir}/xen/auto \ + ${sysconfdir}/xen/cpupool \ + ${localstatedir}/xen/dump \ + " + +FILES_${PN}-blktap = "\ + ${sbindir}/blktapctrl \ + ${sbindir}/img2qcow \ + ${sbindir}/lock-util \ + ${sbindir}/qcow2raw \ + ${sbindir}/qcow-create \ + ${sbindir}/tap-ctl \ + ${sbindir}/tapdisk \ + ${sbindir}/tapdisk2 \ + ${sbindir}/tapdisk-client \ + ${sbindir}/tapdisk-diff \ + ${sbindir}/tapdisk-stream \ + ${sbindir}/td-util \ + ${sbindir}/vhd-update \ + ${sbindir}/vhd-util \ + " + +FILES_${PN}-console = "\ + ${libdir}/xen/bin/xenconsole \ + ${sbindir}/xenconsoled \ + " + +FILES_${PN}-cpuid = "\ + ${bindir}/xen-cpuid \ + " + +FILES_${PN}-devd = "\ + ${sysconfdir}/init.d/xendriverdomain \ + ${systemd_unitdir}/system/xendriverdomain.service \ + " + +FILES_${PN}-flask = "\ + /boot/${FLASK_POLICY_FILE} \ + " + +FILES_${PN}-flask-tools = "\ + ${sbindir}/flask-get-bool \ + ${sbindir}/flask-getenforce \ + ${sbindir}/flask-label-pci \ + ${sbindir}/flask-loadpolicy \ + ${sbindir}/flask-set-bool \ + ${sbindir}/flask-setenforce \ + " + +FILES_${PN}-gdbsx = "\ + ${sbindir}/gdbsx \ + " + +INSANE_SKIP_${PN}-hvmloader = "arch" +FILES_${PN}-hvmloader = "\ + ${libdir}/xen/boot/hvmloader \ + " + +FILES_${PN}-kdd = "\ + ${sbindir}/kdd \ + " + +FILES_${PN}-livepatch += " \ + ${sbindir}/xen-livepatch \ + " + +FILES_${PN}-misc = "\ + ${bindir}/xencons \ + ${bindir}/xencov_split \ + ${bindir}/xen-detect \ + ${libdir}/xen/bin/xenpvnetboot \ + ${libdir}/xen/bin/depriv-fd-checker \ + ${sbindir}/gtracestat \ + ${sbindir}/gtraceview \ + ${sbindir}/xen-bugtool \ + ${sbindir}/xencov \ + ${sbindir}/xenperf \ + ${sbindir}/xenpm \ + ${sbindir}/xsview \ + ${sbindir}/xen-diag \ + ${sbindir}/xen-tmem-list-parse \ + ${sbindir}/xen-python-path \ + ${sbindir}/xen-ringwatch \ + ${sbindir}/xen-hptool \ + ${sbindir}/xen-hvmcrash \ + ${sbindir}/xen-hvmctx \ + ${sbindir}/xenlockprof \ + ${sbindir}/xen-lowmemd \ + ${sbindir}/xen-mfndump \ + ${libdir}/xen/bin/verify-stream-v2 \ + ${libdir}/xen/bin/convert-legacy-stream \ + " + +FILES_${PN}-pygrub = "\ + ${bindir}/pygrub \ + ${libdir}/xen/bin/pygrub \ + " + +FILES_${PN}-python = "\ + ${libdir}/python2.7 \ + " + +INSANE_SKIP_${PN} = "already-stripped" +INSANE_SKIP_${PN}-qemu = "arch" +FILES_${PN}-qemu = " \ + ${datadir}/xen/qemu \ + ${libdir}/xen/bin/qemu-system-i386 \ + ${libdir}/xen/bin/qemu-system-x86_64 \ + ${libdir}/xen/bin/qemu-img \ + ${libdir}/xen/bin/qemu-nbd \ + ${libdir}/xen/bin/qemu-ga \ + ${libdir}/xen/bin/qemu-io \ + ${libdir}/xen/bin/qemu-dm \ + ${libdir}/xen/bin/virtfs-proxy-helper \ + /usr/libexec/qemu-bridge-helper \ + ${libdir}/xen/libexec/qemu-bridge-helper \ + /usr/etc/qemu \ + /usr/etc/qemu/target-x86_64.conf \ + ${libdir}/xen/etc/qemu/target-x86_64.conf \ + ${datadir}/qemu-xen \ + ${datadir}/qemu-xen/qemu \ + ${datadir}/qemu-xen/qemu/bamboo.dtb \ + ${datadir}/qemu-xen/qemu/pxe-pcnet.rom \ + ${datadir}/qemu-xen/qemu/vgabios-vmware.bin \ + ${datadir}/qemu-xen/qemu/pxe-eepro100.rom \ + ${datadir}/qemu-xen/qemu/pxe-e1000.rom \ + ${datadir}/qemu-xen/qemu/openbios-ppc \ + ${datadir}/qemu-xen/qemu/multiboot.bin \ + ${datadir}/qemu-xen/qemu/vgabios-cirrus.bin \ + ${datadir}/qemu-xen/qemu/bios.bin \ + ${datadir}/qemu-xen/qemu/vgabios-stdvga.bin \ + ${datadir}/qemu-xen/qemu/palcode-clipper \ + ${datadir}/qemu-xen/qemu/pxe-ne2k_pci.rom \ + ${datadir}/qemu-xen/qemu/spapr-rtas.bin \ + ${datadir}/qemu-xen/qemu/slof.bin \ + ${datadir}/qemu-xen/qemu/vgabios-qxl.bin \ + ${datadir}/qemu-xen/qemu/pxe-rtl8139.rom \ + ${datadir}/qemu-xen/qemu/openbios-sparc64 \ + ${datadir}/qemu-xen/qemu/pxe-virtio.rom \ + ${datadir}/qemu-xen/qemu/kvmvapic.bin \ + ${datadir}/qemu-xen/qemu/openbios-sparc32 \ + ${datadir}/qemu-xen/qemu/petalogix-s3adsp1800.dtb \ + ${datadir}/qemu-xen/qemu/sgabios.bin \ + ${datadir}/qemu-xen/qemu/linuxboot.bin \ + ${datadir}/qemu-xen/qemu/qemu-icon.bmp \ + ${datadir}/qemu-xen/qemu/ppc_rom.bin \ + ${datadir}/qemu-xen/qemu/vgabios.bin \ + ${datadir}/qemu-xen/qemu/s390-zipl.rom \ + ${datadir}/qemu-xen/qemu/petalogix-ml605.dtb \ + ${datadir}/qemu-xen/qemu/keymaps \ + ${datadir}/qemu-xen/qemu/keymaps/common \ + ${datadir}/qemu-xen/qemu/keymaps/th \ + ${datadir}/qemu-xen/qemu/keymaps/is \ + ${datadir}/qemu-xen/qemu/keymaps/en-gb \ + ${datadir}/qemu-xen/qemu/keymaps/ar \ + ${datadir}/qemu-xen/qemu/keymaps/fr-be \ + ${datadir}/qemu-xen/qemu/keymaps/ru \ + ${datadir}/qemu-xen/qemu/keymaps/hu \ + ${datadir}/qemu-xen/qemu/keymaps/de-ch \ + ${datadir}/qemu-xen/qemu/keymaps/no \ + ${datadir}/qemu-xen/qemu/keymaps/fr \ + ${datadir}/qemu-xen/qemu/keymaps/pl \ + ${datadir}/qemu-xen/qemu/keymaps/fr-ca \ + ${datadir}/qemu-xen/qemu/keymaps/de \ + ${datadir}/qemu-xen/qemu/keymaps/fr-ch \ + ${datadir}/qemu-xen/qemu/keymaps/bepo \ + ${datadir}/qemu-xen/qemu/keymaps/lv \ + ${datadir}/qemu-xen/qemu/keymaps/ja \ + ${datadir}/qemu-xen/qemu/keymaps/da \ + ${datadir}/qemu-xen/qemu/keymaps/lt \ + ${datadir}/qemu-xen/qemu/keymaps/hr \ + ${datadir}/qemu-xen/qemu/keymaps/es \ + ${datadir}/qemu-xen/qemu/keymaps/modifiers \ + ${datadir}/qemu-xen/qemu/keymaps/sl \ + ${datadir}/qemu-xen/qemu/keymaps/it \ + ${datadir}/qemu-xen/qemu/keymaps/nl \ + ${datadir}/qemu-xen/qemu/keymaps/fo \ + ${datadir}/qemu-xen/qemu/keymaps/mk \ + ${datadir}/qemu-xen/qemu/keymaps/pt-br \ + ${datadir}/qemu-xen/qemu/keymaps/tr \ + ${datadir}/qemu-xen/qemu/keymaps/sv \ + ${datadir}/qemu-xen/qemu/keymaps/fi \ + ${datadir}/qemu-xen/qemu/keymaps/en-us \ + ${datadir}/qemu-xen/qemu/keymaps/et \ + ${datadir}/qemu-xen/qemu/keymaps/nl-be \ + ${datadir}/qemu-xen/qemu/keymaps/pt \ + ${bindir}/qemu-nbd-xen \ + ${bindir}/qemu-img-xen \ + " + +FILES_${PN}-remus = "\ + ${bindir}/remus \ + ${sysconfdir}/xen/scripts/remus-netbuf-setup \ + " + +FILES_${PN}-scripts-network = " \ + ${sysconfdir}/xen/scripts/colo-proxy-setup \ + ${sysconfdir}/xen/scripts/network-bridge \ + ${sysconfdir}/xen/scripts/network-nat \ + ${sysconfdir}/xen/scripts/network-route \ + ${sysconfdir}/xen/scripts/qemu-ifup \ + ${sysconfdir}/xen/scripts/vif2 \ + ${sysconfdir}/xen/scripts/vif-bridge \ + ${sysconfdir}/xen/scripts/vif-common.sh \ + ${sysconfdir}/xen/scripts/vif-nat \ + ${sysconfdir}/xen/scripts/vif-openvswitch \ + ${sysconfdir}/xen/scripts/vif-route \ + ${sysconfdir}/xen/scripts/vif-setup \ + " + +FILES_${PN}-scripts-block = " \ + ${sysconfdir}/xen/scripts/blktap \ + ${sysconfdir}/xen/scripts/block \ + ${sysconfdir}/xen/scripts/block-common.sh \ + ${sysconfdir}/xen/scripts/block-dummy \ + ${sysconfdir}/xen/scripts/block-enbd \ + ${sysconfdir}/xen/scripts/block-iscsi \ + ${sysconfdir}/xen/scripts/block-nbd \ + ${sysconfdir}/xen/scripts/block-drbd-probe \ + ${sysconfdir}/xen/scripts/block-tap \ + ${sysconfdir}/xen/scripts/vscsi \ + " + +FILES_${PN}-scripts-common = " \ + ${sysconfdir}/xen/scripts/external-device-migrate \ + ${sysconfdir}/xen/scripts/hotplugpath.sh \ + ${sysconfdir}/xen/scripts/locking.sh \ + ${sysconfdir}/xen/scripts/logging.sh \ + ${sysconfdir}/xen/scripts/xen-hotplug-cleanup \ + ${sysconfdir}/xen/scripts/xen-hotplug-common.sh \ + ${sysconfdir}/xen/scripts/xen-network-common.sh \ + ${sysconfdir}/xen/scripts/xen-script-common.sh \ + " + +INSANE_SKIP_${PN}-shim = "arch" +FILES_${PN}-shim = " \ + ${libdir}/xen/boot/xen-shim \ + " + +FILES_${PN}-volatiles = "\ + ${sysconfdir}/default/volatiles/99_xen \ + ${sysconfdir}/tmpfiles.d/xen.conf \ + " + +FILES_${PN}-xcutils = "\ + ${libdir}/xen/bin/lsevtchn \ + ${libdir}/xen/bin/readnotes \ + ${libdir}/xen/bin/xc_restore \ + ${libdir}/xen/bin/xc_save \ + " + +FILES_${PN}-xend-examples = "\ + ${sysconfdir}/xen/xend-config.sxp \ + ${sysconfdir}/xen/xend-pci-permissive.sxp \ + ${sysconfdir}/xen/xend-pci-quirks.sxp \ + " + +FILES_${PN}-xenpaging = "\ + ${libdir}/xen/bin/xenpaging \ + ${localstatedir}/lib/xen/xenpaging \ + " + +FILES_${PN}-xenpmd = "\ + ${sbindir}/xenpmd \ + " + +FILES_${PN}-xenstat = "\ + ${sbindir}/xentop \ + " + +FILES_${PN}-xenstore = "\ + ${bindir}/xenstore \ + ${bindir}/xenstore-chmod \ + ${bindir}/xenstore-control \ + ${bindir}/xenstore-exists \ + ${bindir}/xenstore-list \ + ${bindir}/xenstore-ls \ + ${bindir}/xenstore-read \ + ${bindir}/xenstore-rm \ + ${bindir}/xenstore-watch \ + ${bindir}/xenstore-write \ + " + +FILES_${PN}-xenstored = "\ + ${sbindir}/xenstored \ + ${localstatedir}/lib/xenstored \ + " + +FILES_${PN}-xentrace = "\ + ${bindir}/xentrace \ + ${bindir}/xentrace_format \ + ${bindir}/xentrace_setsize \ + ${libdir}/xen/bin/xenctx \ + ${bindir}/xenalyze \ + ${sbindir}/xentrace \ + ${sbindir}/xentrace_setsize \ + " + +FILES_${PN}-xen-watchdog = "\ + ${sbindir}/xenwatchdogd \ + ${sysconfdir}/init.d/xen-watchdog \ + ${systemd_unitdir}/system/xen-watchdog.service \ + " + +FILES_${PN}-xl = "\ + ${sysconfdir}/bash_completion.d/xl.sh \ + ${sysconfdir}/xen/xl.conf \ + ${libdir}/xen/bin/libxl-save-helper \ + ${sbindir}/xl \ + ${libdir}/xen/bin/xen-init-dom0 \ + " + +FILES_${PN}-xl-examples = "\ + ${sysconfdir}/xen/xlexample.hvm \ + ${sysconfdir}/xen/xlexample.pvlinux \ + " + +FILES_${PN}-xm-examples = "\ + ${sysconfdir}/xen/xmexample1 \ + ${sysconfdir}/xen/xmexample2 \ + ${sysconfdir}/xen/xmexample3 \ + ${sysconfdir}/xen/xmexample.hvm \ + ${sysconfdir}/xen/xmexample.hvm-stubdom \ + ${sysconfdir}/xen/xmexample.nbd \ + ${sysconfdir}/xen/xmexample.pv-grub \ + ${sysconfdir}/xen/xmexample.vti \ + " + +FILES_${PN}-xenmon = "\ + ${sbindir}/xenbaked \ + ${sbindir}/xentrace_setmask \ + ${sbindir}/xenmon.py \ + " + +FILES_${PN}-xm = "\ + ${sysconfdir}/xen/xm-config.xml \ + ${datadir}/xen/create.dtd \ + ${sbindir}/xm \ + " + +FILES_${PN}-xencommons += "\ + ${sysconfdir}/default/xencommons \ + ${sysconfdir}/init.d/xencommons \ + ${sysconfdir}/xen/scripts/launch-xenstore \ + ${systemd_unitdir}/modules-load.d/xen.conf \ + ${systemd_unitdir}/system/proc-xen.mount \ + ${systemd_unitdir}/system/xen-qemu-dom0-disk-backend.service \ + ${systemd_unitdir}/system/xenconsoled.service \ + ${systemd_unitdir}/system/xen-init-dom0.service \ + ${systemd_unitdir}/system/xenstored.service \ + ${systemd_unitdir}/system/var-lib-xenstored.mount \ + " + +FILES_${PN}-xend += " \ + ${sysconfdir}/init.d/xend \ + ${sbindir}/xend \ + " + +FILES_${PN}-xendomains += "\ + ${libdir}/xen/bin/xendomains \ + ${sysconfdir}/default/xendomains \ + ${sysconfdir}/init.d/xendomains \ + ${sysconfdir}/sysconfig/xendomains \ + ${systemd_unitdir}/system/xendomains.service \ + " + +# configure init.d scripts +INITSCRIPT_PACKAGES = "${PN}-xend ${PN}-xencommons ${PN}-xen-watchdog ${PN}-xendomains ${PN}-devd" +INITSCRIPT_NAME_${PN}-xencommons = "xencommons" +INITSCRIPT_PARAMS_${PN}-xencommons = "defaults 80" +INITSCRIPT_NAME_${PN}-xen-watchdog = "xen-watchdog" +INITSCRIPT_PARAMS_${PN}-xen-watchdog = "defaults 81" +INITSCRIPT_NAME_${PN}-xend = "xend" +INITSCRIPT_PARAMS_${PN}-xend = "defaults 82" +INITSCRIPT_NAME_${PN}-xendomains = "xendomains" +INITSCRIPT_PARAMS_${PN}-xendomains = "defaults 83" +INITSCRIPT_NAME_${PN}-devd = "xendriverdomain" +INITSCRIPT_PARAMS_${PN}-devd = "defaults 82" + +# systemd packages +SYSTEMD_PACKAGES = "${PN}-xen-watchdog ${PN}-xencommons ${PN}-xendomains ${PN}-devd" +SYSTEMD_SERVICE_${PN}-devd = "xendriverdomain.service" +SYSTEMD_SERVICE_${PN}-xen-watchdog = "xen-watchdog.service" +SYSTEMD_SERVICE_${PN}-xencommons = " \ + proc-xen.mount \ + var-lib-xenstored.mount \ + xen-qemu-dom0-disk-backend.service \ + xenconsoled.service \ + xen-init-dom0.service \ + xenstored.service \ + " +SYSTEMD_SERVICE_${PN}-xendomains = "xendomains.service" + +#### REQUIRED ENVIRONMENT VARIABLES #### +export BUILD_SYS +export HOST_SYS +export STAGING_INCDIR +export STAGING_LIBDIR + +# specify xen hypervisor to build/target +export XEN_TARGET_ARCH = "${@map_xen_arch(d.getVar('TARGET_ARCH'), d)}" +export XEN_COMPILE_ARCH = "${@map_xen_arch(d.getVar('BUILD_ARCH'), d)}" + +python () { + if d.getVar('XEN_TARGET_ARCH') == 'INVALID': + raise bb.parse.SkipPackage('Cannot map `%s` to a xen architecture' % d.getVar('TARGET_ARCH')) +} + +# Yocto appends ${PN} to libexecdir by default and Xen appends 'xen' as well +# the result is a nested xen/xen/ so let's avoid that by shunning Yocto's +# extra ${PN} appended. +libexecdir = "${libdir}" + +# hardcoded as Linux, as the only compatible hosts are Linux. +export XEN_OS = "Linux" + +# this is used for the header (#!${bindir}/python) of the install python scripts +export PYTHONPATH="${bindir}/python" +export ac_cv_path_PYTHONPATH="${bindir}/python" +export DISTUTILS_BUILD_ARGS +export DISTUTILS_INSTALL_ARGS + +# xen and seabios require HOSTCC and HOSTCXX set to cross-compile +export HOSTCC="${BUILD_CC}" +export HOSTCXX="${BUILD_CXX}" + +# make xen requires CROSS_COMPILE set by hand as it does not abide by ./configure +export CROSS_COMPILE="${TARGET_PREFIX}" + +# overide LDFLAGS to allow xen to build without: "x86_64-oe-linux-ld: unrecognized option '-Wl,-O1'" +export LDFLAGS="" + +# Yocto injects -mfpmath=sse for some machine types into the CFLAGS which +# conflicts with -mno-sse so instead we strip -mfpmath=sse instead of +# patching the build to be ok with this +TUNE_CCARGS := "${@oe.utils.str_filter_out('-mfpmath=sse', '${TUNE_CCARGS}', d)}" +TUNE_CCARGS := "${@oe.utils.str_filter_out('-msse4.2', '${TUNE_CCARGS}', d)}" + +# Supply the full set of compiler flags via the tool variables +# Yocto supplys _FORTIFY_SOURCE via CC/CPP/CXX but optimization -O via C*FLAGS +CC_append = " ${CFLAGS}" +CPP_append = " ${CPPFLAGS}" +CXX_append = " ${CXXFLAGS}" + +EXTRA_OECONF += " \ + --exec-prefix=${prefix} \ + --prefix=${prefix} \ + --host=${HOST_SYS} \ + --with-systemd=${systemd_unitdir}/system \ + --with-systemd-modules-load=${systemd_unitdir}/modules-load.d \ + --disable-stubdom \ + --disable-ioemu-stubdom \ + --disable-pv-grub \ + --disable-xenstore-stubdom \ + --disable-rombios \ + --disable-ocamltools \ + --with-initddir=${INIT_D_DIR} \ + --with-sysconfig-leaf-dir=default \ + --with-system-qemu=/usr/bin/qemu-system-i386 \ + --disable-qemu-traditional \ + " + +EXTRA_OEMAKE += "STDVGA_ROM=${STAGING_DIR_HOST}/usr/share/firmware/vgabios-0.7a.bin" +EXTRA_OEMAKE += "CIRRUSVGA_ROM=${STAGING_DIR_HOST}/usr/share/firmware/vgabios-0.7a.cirrus.bin" +EXTRA_OEMAKE += "SEABIOS_ROM=${STAGING_DIR_HOST}/usr/share/firmware/bios.bin" +EXTRA_OEMAKE += "ETHERBOOT_ROMS=${STAGING_DIR_HOST}/usr/share/firmware/rtl8139.rom" + +# prevent the Xen build scripts from fetching things during the build +# all dependencies should be reflected in the Yocto recipe +EXTRA_OEMAKE += "WGET=/bin/false" +EXTRA_OEMAKE += "GIT=/bin/false" + +# Improve build reproducibility: provide values for build variables. +def get_build_time_vars(d): + source_date_epoch = d.getVar('SOURCE_DATE_EPOCH') + if source_date_epoch is not None: + import datetime + utc_datetime = datetime.datetime.utcfromtimestamp(float(source_date_epoch)) + return " XEN_BUILD_DATE=" + utc_datetime.strftime("%Y-%m-%d") + \ + " XEN_BUILD_TIME=" + utc_datetime.strftime("%H:%M:%S") + return "" +EXTRA_OEMAKE += "${@['', 'XEN_WHOAMI=${PF} XEN_DOMAIN=${DISTRO} XEN_BUILD_HOST=${PN}-buildhost'] \ + [d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1']}${@get_build_time_vars(d)}" + +# Improve build reproducibility: compiler flags to remove filesystem differences. +# Suppress __FILE__ via an alternative builtin. +CC += "${@['', '-gno-record-gcc-switches -Wno-builtin-macro-redefined -D__FILE__=__VERSION__ ' + \ + '-fdebug-prefix-map=${WORKDIR}=${PN}'] \ + [d.getVar('BUILD_REPRODUCIBLE_BINARIES') == '1']}" + +# check for XSM in package config to allow XSM_ENABLE to be set +python () { + pkgconfig = d.getVar('PACKAGECONFIG') + if ('xsm') in pkgconfig.split(): + d.setVar('XSM_ENABLED', '1') + else: + d.setVar('XSM_ENABLED', '0') +} + +do_post_patch() { + # fixup AS/CC/CCP/etc variable within StdGNU.mk + for i in LD CC CPP CXX; do + sed -i "s/^\($i\s\s*\).*=/\1?=/" ${S}/config/StdGNU.mk + done + # fixup environment passing in some makefiles + sed -i 's#\(\w*\)=\(\$.\w*.\)#\1="\2"#' ${S}/tools/firmware/Makefile + + # libsystemd-daemon -> libsystemd for newer systemd versions + sed -i 's#libsystemd-daemon#libsystemd#' ${S}/tools/configure + + # Improve build reproducibility: disable insertion of the build timestamp + # into the x86 EFI hypervisor binary. + # binutils should allow a user-supplied timestamp or use SOURCE_DATE_EPOCH + # for PE but currently does not. + if [ "${BUILD_REPRODUCIBLE_BINARIES}" = "1" ] ; then + sed '/^EFI_LDFLAGS = /{a EFI_LDFLAGS += --no-insert-timestamp +}' -i "${S}/xen/arch/x86/Makefile" + fi +} + +do_post_patch_append_arm() { + # The hypervisor binary must not be built with the hard floating point ABI. + echo "CC := \$(filter-out ${TUNE_CCARGS},\$(CC))" >> ${B}/xen/arch/arm/Rules.mk +} + +addtask post_patch after do_patch before do_configure + +do_stubs() { + # no stubs-32.h in our 64-bit sysroot - hack it into tools/include/gnu + if ! test -f ${STAGING_DIR_TARGET}/usr/include/gnu/stubs-32.h ; then + if test -f ${STAGING_DIR_TARGET}/usr/include/gnu/stubs-64.h ; then + test -d ${S}/tools/include/gnu || mkdir ${S}/tools/include/gnu + cat ${STAGING_DIR_TARGET}/usr/include/gnu/stubs-64.h | grep -v stub_bdflush | grep -v stub_getmsg | grep -v stub_putmsg > ${S}/tools/include/gnu/stubs-32.h + echo \#define __stub___kernel_cosl >> ${S}/tools/include/gnu/stubs-32.h + echo \#define __stub___kernel_sinl >> ${S}/tools/include/gnu/stubs-32.h + echo \#define __stub___kernel_tanl >> ${S}/tools/include/gnu/stubs-32.h + fi + fi +} + +addtask stubs after do_configure before do_compile + +# Allow all hypervisor settings in a defconfig +EXTRA_OEMAKE += "XEN_CONFIG_EXPERT=y" +# Build release versions always. Technically since we track release +# tarballs this always happens but occasionally people pull in patches +# from staging that reverts this +EXTRA_OEMAKE += "debug=n" + +do_configure() { + + #./configure --enable-xsmpolicy does not set XSM_ENABLE must be done manually + if [ "${XSM_ENABLED}" = "1" ]; then + echo "XSM_ENABLE := y" > ${S}/.config + fi + + if [ -f "${WORKDIR}/defconfig" ]; then + cp "${WORKDIR}/defconfig" "${B}/xen/.config" || \ + bbfatal "Unable to copy defconfig to .config" + fi + + # do configure + oe_runconf + if [ ! -e ${STAGING_INCDIR}/bits/long-double-32.h ]; then + cp ${STAGING_INCDIR}/bits/long-double-64.h ${STAGING_INCDIR}/bits/long-double-32.h + fi +} + +do_compile() { + # workaround for build bug when CFLAGS is exported + # https://www.mail-archive.com/xen-devel@lists.xen.org/msg67822.html + unset CFLAGS + + # Workaround for parallel build bug: build xen first. + # https://lists.xenproject.org/archives/html/xen-devel/2018-07/msg02551.html + oe_runmake xen + oe_runmake +} + +do_install() { + # CFLAGS is used to set PY_CFLAGS which affects the pygrub install + # so also need to unset CFLAGS here: + unset CFLAGS + oe_runmake DESTDIR="${D}" install + + # remove installed volatiles + rm -rf ${D}${localstatedir}/run \ + ${D}${localstatedir}/lock \ + ${D}${localstatedir}/log \ + ${D}${localstatedir}/volatile \ + ${D}${localstatedir}/lib/xen + + VOLATILE_DIRS=" \ + ${localstatedir}/run/xenstored \ + ${localstatedir}/run/xend \ + ${localstatedir}/run/xend/boot \ + ${localstatedir}/run/xen \ + ${localstatedir}/log/xen \ + ${localstatedir}/lock/xen \ + ${localstatedir}/lock/subsys \ + ${localstatedir}/lib/xen \ + " + + # install volatiles using populate_volatiles mechanism + install -d ${D}${sysconfdir}/default/volatiles + for i in $VOLATILE_DIRS; do + echo "d root root 0755 $i none" >> ${D}${sysconfdir}/default/volatiles/99_xen + done + + # workaround for xendomains script which searchs sysconfig if directory exists + install -d ${D}${sysconfdir}/sysconfig + ln -sf ${sysconfdir}/default/xendomains ${D}${sysconfdir}/sysconfig/xendomains + + # systemd + if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then + # install volatiles using systemd tmpfiles.d + install -d ${D}${sysconfdir}/tmpfiles.d + for i in $VOLATILE_DIRS; do + echo "d $i 0755 root root - -" >> ${D}${sysconfdir}/tmpfiles.d/xen.conf + done + fi + + # fixup default path to qemu-system-i386 + sed -i 's#\(test -z "$QEMU_XEN" && QEMU_XEN=\).*$#\1"/usr/bin/qemu-system-i386"#' ${D}/etc/init.d/xencommons + + if [ -e ${D}${systemd_unitdir}/system/xen-qemu-dom0-disk-backend.service ]; then + sed -i 's#ExecStart=.*qemu-system-i386\(.*\)$#ExecStart=/usr/bin/qemu-system-i386\1#' \ + ${D}${systemd_unitdir}/system/xen-qemu-dom0-disk-backend.service + fi +} + +pkg_postinst_${PN}-volatiles() { + if [ -z "$D" ]; then + if command -v systemd-tmpfiles >/dev/null; then + systemd-tmpfiles --create ${sysconfdir}/tmpfiles.d/xen.conf + elif [ -e ${sysconfdir}/init.d/populate-volatile.sh ]; then + ${sysconfdir}/init.d/populate-volatile.sh update + fi + fi +} + +do_deploy() { + install -d ${DEPLOYDIR} + + if [ -f ${D}/boot/xen ]; then + install -m 0644 ${D}/boot/xen ${DEPLOYDIR}/xen-${MACHINE} + fi + + if [ -f ${D}/boot/xen.gz ]; then + install -m 0644 ${D}/boot/xen.gz ${DEPLOYDIR}/xen-${MACHINE}.gz + fi + + if [ -f ${D}/usr/lib64/efi/xen.efi ]; then + install -m 0644 ${D}/usr/lib64/efi/xen.efi ${DEPLOYDIR}/xen-${MACHINE}.efi + fi + + # Install the flask policy in the deploy directory if it exists + if [ -f ${D}/boot/${FLASK_POLICY_FILE} ]; then + install -m 0644 ${D}/boot/${FLASK_POLICY_FILE} ${DEPLOYDIR} + ln -sf ${FLASK_POLICY_FILE} ${DEPLOYDIR}/xenpolicy-${MACHINE} + fi +} + +addtask deploy after do_populate_sysroot + +# Enable use of menuconfig directly from bitbake and also within the devshell +OE_TERMINAL_EXPORTS += "HOST_EXTRACFLAGS HOSTLDFLAGS TERMINFO" +HOST_EXTRACFLAGS = "${BUILD_CFLAGS} ${BUILD_LDFLAGS}" +HOSTLDFLAGS = "${BUILD_LDFLAGS}" +TERMINFO = "${STAGING_DATADIR_NATIVE}/terminfo" +do_devshell[depends] += "ncurses-native:do_populate_sysroot" + +KCONFIG_CONFIG_COMMAND ??= "menuconfig" +python do_menuconfig() { + import shutil + + try: + mtime = os.path.getmtime("xen/.config") + shutil.copy("xen/.config", "xen/.config.orig") + except OSError: + mtime = 0 + + oe_terminal("${SHELL} -c \"cd xen; XEN_CONFIG_EXPERT=y make %s; if [ \$? -ne 0 ]; then echo 'Command failed.'; printf 'Press any key to continue... '; read r; fi\"" % d.getVar('KCONFIG_CONFIG_COMMAND'), + d.getVar('PN') + ' Configuration', d) + + try: + newmtime = os.path.getmtime("xen/.config") + except OSError: + newmtime = 0 + + if newmtime > mtime: + bb.note("Configuration changed, recompile will be forced") + bb.build.write_taint('do_compile', d) +} +do_menuconfig[depends] += "ncurses-native:do_populate_sysroot" +do_menuconfig[nostamp] = "1" +do_menuconfig[dirs] = "${B}" +addtask menuconfig after do_configure diff --git a/external/meta-virtualization/recipes-extended/xen/xen_4.11.0.bb b/external/meta-virtualization/recipes-extended/xen/xen_4.11.0.bb new file mode 100644 index 00000000..870caa72 --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/xen_4.11.0.bb @@ -0,0 +1,16 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +require xen.inc + +SRC_URI = " \ + https://downloads.xenproject.org/release/xen/${PV}/xen-${PV}.tar.gz \ + file://tools-xentop-vwprintw.patch \ + file://xen-4.11-arm-acpi-fix-string-lengths.patch \ + file://xen-tools-xenpmd-snprintf.patch \ + file://xen-disable-sse-before-inlines.patch \ + file://0001-python-pygrub-pass-DISTUTILS-env-vars-as-setup.py-ar.patch \ + " + +SRC_URI[md5sum] = "cbec0600284921744bc14119f4ed3fff" +SRC_URI[sha256sum] = "826e3a9f6d0eac94a825d272cc2c1294e22640ae75af906eb13920f9ad667643" + +S = "${WORKDIR}/xen-${PV}" diff --git a/external/meta-virtualization/recipes-extended/xen/xen_git.bb b/external/meta-virtualization/recipes-extended/xen/xen_git.bb new file mode 100644 index 00000000..0ebd81ce --- /dev/null +++ b/external/meta-virtualization/recipes-extended/xen/xen_git.bb @@ -0,0 +1,19 @@ +require xen.inc + +SRCREV ?= "2b50cdbc444c637575580dcfa6c9525a84d5cc62" + +XEN_REL = "4.12" +XEN_BRANCH = "staging" +FLASK_POLICY_FILE = "xenpolicy-${XEN_REL}-unstable" + +PV = "${XEN_REL}+git${SRCPV}" + +S = "${WORKDIR}/git" + +SRC_URI = " \ + git://xenbits.xen.org/xen.git;branch=${XEN_BRANCH} \ + file://xen-disable-sse-before-inlines.patch \ + file://0001-python-pygrub-pass-DISTUTILS-env-vars-as-setup.py-ar.patch \ + " + +DEFAULT_PREFERENCE = "-1" diff --git a/external/meta-virtualization/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend b/external/meta-virtualization/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend new file mode 100644 index 00000000..95034045 --- /dev/null +++ b/external/meta-virtualization/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend @@ -0,0 +1,13 @@ +# Change the default Xserver OpenGL configuration for non-x86 distros with Xen: deselect 'glamor'. +# This removes the dependency on libegl to simplify the domU build. +# +# To override this (eg. if wanted for dom0 images) define: +# REMOVED_OPENGL_PKGCONFIGS = "" + +XEN_REMOVED_OPENGL_PKGCONFIGS ?= "glamor" +XEN_REMOVED_OPENGL_PKGCONFIGS_x86 = "" +XEN_REMOVED_OPENGL_PKGCONFIGS_x86-64 = "" + +REMOVED_OPENGL_PKGCONFIGS ?= "${@bb.utils.contains('DISTRO_FEATURES', 'xen', "${XEN_REMOVED_OPENGL_PKGCONFIGS}", '', d)}" + +OPENGL_PKGCONFIGS_remove = "${REMOVED_OPENGL_PKGCONFIGS}" diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/docker.cfg b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/docker.cfg new file mode 100644 index 00000000..4ee8e369 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/docker.cfg @@ -0,0 +1,12 @@ +CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m +CONFIG_IP_NF_FILTER=m +CONFIG_NF_NAT=m +CONFIG_NF_CONNTRACK_IPV4=y + +CONFIG_DM_THIN_PROVISIONING=m + + +CONFIG_IP_NF_NAT=m +CONFIG_IP_NF_TARGET_MASQUERADE=m + +CONFIG_OVERLAY_FS=y diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/docker.scc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/docker.scc new file mode 100644 index 00000000..e317456c --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/docker.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Enable Features needed by docker in addition to LXC features" +define KFEATURE_COMPATIBILITY board + +kconf non-hardware docker.cfg diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/ebtables.cfg b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/ebtables.cfg new file mode 100644 index 00000000..a3c514e1 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/ebtables.cfg @@ -0,0 +1,2 @@ +CONFIG_BRIDGE_NF_EBTABLES=m +CONFIG_BRIDGE_EBT_T_NAT=m diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/ebtables.scc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/ebtables.scc new file mode 100644 index 00000000..b3895e58 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/ebtables.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Enable ebtables support" +define KFEATURE_COMPATIBILITY board + +kconf non-hardware ebtables.cfg diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/lxc.cfg b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/lxc.cfg new file mode 100644 index 00000000..c25d60f9 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/lxc.cfg @@ -0,0 +1,46 @@ +CONFIG_CGROUP_DEVICE=y +CONFIG_CPUSETS=y +CONFIG_PROC_PID_CPUSET=y +CONFIG_RESOURCE_COUNTERS=y +CONFIG_CGROUP_MEM_RES_CTLR=y +CONFIG_CGROUP_SCHED=y +CONFIG_FAIR_GROUP_SCHED=y +CONFIG_RT_GROUP_SCHED=y +CONFIG_CHECKPOINT_RESTORE=y +CONFIG_NAMESPACES=y +CONFIG_UTS_NS=y +CONFIG_IPC_NS=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +CONFIG_NET_NS=y + +CONFIG_CLS_CGROUP=m +CONFIG_BLK_CGROUP=y +CONFIG_NETPRIO_CGROUP=m + +CONFIG_DEVPTS_MULTIPLE_INSTANCES=y + +# Virtual drivers +CONFIG_VIRTIO_BLK=y +CONFIG_SCSI_VIRTIO=y +CONFIG_VIRTIO_NET=m +CONFIG_HVC_DRIVER=y +CONFIG_VIRTIO_CONSOLE=y +CONFIG_HW_RANDOM_VIRTIO=m +CONFIG_VIRTIO=y +CONFIG_VIRTIO_RING=y +CONFIG_VIRTIO_PCI=y +CONFIG_VIRTIO_BALLOON=y +CONFIG_VIRTIO_MMIO=y + + +# Base support for live boot +CONFIG_BLK_DEV_LOOP=y +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_VFAT_FS=y +CONFIG_RD_GZIP=y + +# Support for virtual ethernet and LXC +CONFIG_VETH=y +CONFIG_MACVLAN=y diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/lxc.scc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/lxc.scc new file mode 100644 index 00000000..ee518835 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/lxc.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Enable Features needed by LxC, namespaces, cgroups et.c." +define KFEATURE_COMPATIBILITY board + +kconf non-hardware lxc.cfg diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/vswitch.cfg b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/vswitch.cfg new file mode 100644 index 00000000..b1fefc0c --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/vswitch.cfg @@ -0,0 +1,3 @@ +CONFIG_OPENVSWITCH=m +CONFIG_NET_SCH_INGRESS=m +CONFIG_NET_ACT_POLICE=m diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/vswitch.scc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/vswitch.scc new file mode 100644 index 00000000..2790b4fe --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/vswitch.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Enable in kernel OpenvSwitch module" +define KFEATURE_COMPATIBILITY board + +kconf non-hardware vswitch.cfg diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xen.cfg b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xen.cfg new file mode 100644 index 00000000..4780311d --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xen.cfg @@ -0,0 +1,50 @@ +CONFIG_HYPERVISOR_GUEST=y +CONFIG_PARAVIRT=y +CONFIG_XEN=y +CONFIG_XEN_DOM0=y +CONFIG_XEN_PVHVM=y +CONFIG_XEN_MAX_DOMAIN_MEMORY=500 +CONFIG_XEN_SAVE_RESTORE=y +# CONFIG_XEN_DEBUG_FS is not set +CONFIG_XEN_PVH=y +CONFIG_MMU_NOTIFIER=y +CONFIG_HIBERNATE_CALLBACKS=y +CONFIG_PCI_XEN=y +CONFIG_XEN_PCIDEV_FRONTEND=y +CONFIG_SYS_HYPERVISOR=y +CONFIG_XEN_BLKDEV_FRONTEND=y +CONFIG_XEN_BLKDEV_BACKEND=m +CONFIG_XEN_SCSI_FRONTEND=m +CONFIG_XEN_NETDEV_FRONTEND=y +CONFIG_XEN_NETDEV_BACKEND=m +CONFIG_INPUT_MISC=y +CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y +CONFIG_HVC_IRQ=y +CONFIG_HVC_XEN=y +CONFIG_HVC_XEN_FRONTEND=y +CONFIG_XEN_WDT=m +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +CONFIG_FB_SYS_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_XEN_FBDEV_FRONTEND=y +CONFIG_XEN_BALLOON=y +CONFIG_XEN_SCRUB_PAGES=y +CONFIG_XEN_DEV_EVTCHN=y +CONFIG_XEN_BACKEND=y +CONFIG_XENFS=y +CONFIG_XEN_COMPAT_XENFS=y +CONFIG_XEN_SYS_HYPERVISOR=y +CONFIG_XEN_XENBUS_FRONTEND=y +CONFIG_XEN_GNTDEV=m +CONFIG_XEN_GRANT_DEV_ALLOC=m +CONFIG_SWIOTLB_XEN=y +CONFIG_XEN_PCIDEV_BACKEND=m +CONFIG_XEN_PRIVCMD=y +CONFIG_XEN_ACPI_PROCESSOR=m +CONFIG_XEN_MCE_LOG=y +CONFIG_XEN_HAVE_PVMMU=y +CONFIG_XEN_EFI=y +CONFIG_XEN_AUTO_XLATE=y +CONFIG_XEN_ACPI=y diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xen.scc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xen.scc new file mode 100644 index 00000000..b588e5df --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xen.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Xen Kernel Support" +define KFEATURE_COMPATIBILITY arch + +kconf non-hardware xen.cfg diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xt-checksum.cfg b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xt-checksum.cfg new file mode 100644 index 00000000..58afbff6 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xt-checksum.cfg @@ -0,0 +1 @@ +CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xt-checksum.scc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xt-checksum.scc new file mode 100644 index 00000000..d3804f0c --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto/xt-checksum.scc @@ -0,0 +1,4 @@ +define KFEATURE_DESCRIPTION "Add extra iptables modules" +define KFEATURE_COMPATIBILITY board + +kconf non-hardware xt-checksum.cfg diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto_4.14.bbappend b/external/meta-virtualization/recipes-kernel/linux/linux-yocto_4.14.bbappend new file mode 100644 index 00000000..617caccb --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto_4.14.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', '${BPN}_virtualization.inc', '', d)} diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto_4.18.bbappend b/external/meta-virtualization/recipes-kernel/linux/linux-yocto_4.18.bbappend new file mode 100644 index 00000000..617caccb --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto_4.18.bbappend @@ -0,0 +1 @@ +require ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', '${BPN}_virtualization.inc', '', d)} diff --git a/external/meta-virtualization/recipes-kernel/linux/linux-yocto_virtualization.inc b/external/meta-virtualization/recipes-kernel/linux/linux-yocto_virtualization.inc new file mode 100644 index 00000000..5d3cbc66 --- /dev/null +++ b/external/meta-virtualization/recipes-kernel/linux/linux-yocto_virtualization.inc @@ -0,0 +1,18 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-yocto:" + +SRC_URI += "file://xt-checksum.scc \ + file://ebtables.scc \ + file://vswitch.scc \ + file://lxc.scc \ + file://docker.scc \ + " +KERNEL_FEATURES_append = " ${@bb.utils.contains('DISTRO_FEATURES', 'kvm', 'features/kvm/qemu-kvm-enable.scc', '', d)}" + +KERNEL_MODULE_AUTOLOAD += "nf_conntrack_ipv6 openvswitch" +KERNEL_MODULE_AUTOLOAD += "${@bb.utils.contains('DISTRO_FEATURES', 'kvm', 'kvm', '', d)}" + +# aufs kernel support required for xen-image-minimal +KERNEL_FEATURES_append += "${@bb.utils.contains('DISTRO_FEATURES', 'aufs', ' features/aufs/aufs-enable.scc', '', d)}" + +# xen kernel support +SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'xen', ' file://xen.scc', '', d)}" diff --git a/external/meta-virtualization/recipes-networking/cni/cni_git.bb b/external/meta-virtualization/recipes-networking/cni/cni_git.bb new file mode 100644 index 00000000..f7a7597b --- /dev/null +++ b/external/meta-virtualization/recipes-networking/cni/cni_git.bb @@ -0,0 +1,98 @@ +HOMEPAGE = "https://github.com/containernetworking/cni" +SUMMARY = "Container Network Interface - networking for Linux containers" +DESCRIPTION = "CNI (Container Network Interface), a Cloud Native Computing \ +Foundation project, consists of a specification and libraries for writing \ +plugins to configure network interfaces in Linux containers, along with a \ +number of supported plugins. CNI concerns itself only with network connectivity \ +of containers and removing allocated resources when the container is deleted. \ +Because of this focus, CNI has a wide range of support and the specification \ +is simple to implement. \ +" + +SRCREV_cni = "cc562d1b44b3d00b8c341250d49a8a0823a1c085" +SRCREV_plugins = "9abd20edd6c83385ff6c2a6e6ff265158059e723" +SRC_URI = "\ + git://github.com/containernetworking/cni.git;nobranch=1;name=cni \ + git://github.com/containernetworking/plugins.git;nobranch=1;destsuffix=plugins;name=plugins \ + " + +RPROVIDES_${PN} += "kubernetes-cni" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=fa818a259cbed7ce8bc2a22d35a464fc" + +GO_IMPORT = "import" + +PV = "0.6.0+git${SRCREV_cni}" + +inherit go +inherit goarch + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + export GOPATH="${S}/src/import:${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + mkdir -p ${S}/src/import/vendor/ + ln -sf ./ ${S}/src/import/vendor/src + rm -rf ${S}/src/import/plugins + rm -rf ${S}/src/import/vendor/github.com/containernetworking/plugins + + mkdir -p ${S}/src/import/vendor/github.com/containernetworking/cni + + ln -sf ../../../../libcni ${S}/src/import/vendor/github.com/containernetworking/cni/libcni + ln -sf ../../../../pkg ${S}/src/import/vendor/github.com/containernetworking/cni/pkg + ln -sf ../../../../cnitool ${S}/src/import/vendor/github.com/containernetworking/cni/cnitool + ln -sf ${WORKDIR}/plugins ${S}/src/import/vendor/github.com/containernetworking/plugins + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/import/vendor/github.com/containernetworking/cni/libcni + go build + + cd ${S}/src/import/vendor/github.com/containernetworking/cni/cnitool + go build + + cd ${S}/src/import/vendor/github.com/containernetworking/plugins/ + PLUGINS="$(ls -d plugins/meta/*; ls -d plugins/main/* | grep -v windows)" + mkdir -p ${WORKDIR}/plugins/bin/ + for p in $PLUGINS; do + plugin="$(basename "$p")" + echo "building: $p" + go build -o ${WORKDIR}/plugins/bin/$plugin github.com/containernetworking/plugins/$p + done +} + +do_install() { + localbindir="/opt/cni/bin" + + install -d ${D}${localbindir} + install -d ${D}/${sysconfdir}/cni/net.d + + install -m 755 ${S}/src/import/cnitool/cnitool ${D}/${localbindir} + install -m 755 -D ${WORKDIR}/plugins/bin/* ${D}/${localbindir} +} + +FILES_${PN} += "/opt/cni/bin/*" + +INHIBIT_PACKAGE_STRIP = "1" +INSANE_SKIP_${PN} += "ldflags already-stripped" + +deltask compile_ptest_base diff --git a/external/meta-virtualization/recipes-networking/netns/files/0001-Allow-selection-of-go-compiler.patch b/external/meta-virtualization/recipes-networking/netns/files/0001-Allow-selection-of-go-compiler.patch new file mode 100644 index 00000000..84fb9a43 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/netns/files/0001-Allow-selection-of-go-compiler.patch @@ -0,0 +1,107 @@ +From 6576f228339b7931e05a8e861f085f483817806b Mon Sep 17 00:00:00 2001 +From: Paul Barker <pbarker@toganlabs.com> +Date: Tue, 8 May 2018 11:01:14 +0000 +Subject: [PATCH] Allow selection of go compiler + +By running `make GO=/path/to/go` we can now select the appropriate go compiler +to use. This also makes it possible to cross compile netns more easily. + +Signed-off-by: Paul Barker <pbarker@toganlabs.com> +Upstream-status: Pending +--- + Makefile | 25 ++++++++++++++----------- + 1 file changed, 14 insertions(+), 11 deletions(-) + +diff --git a/Makefile b/Makefile +index 3a22f3e..476cb9b 100644 +--- a/src/import/Makefile ++++ b/src/import/Makefile +@@ -23,6 +23,9 @@ CTIMEVAR=-X $(PKG)/version.GITCOMMIT=$(GITCOMMIT) -X $(PKG)/version.VERSION=$(VE + GO_LDFLAGS=-ldflags "-w $(CTIMEVAR)" + GO_LDFLAGS_STATIC=-ldflags "-w $(CTIMEVAR) -extldflags -static" + ++# Set our default go compiler ++GO := go ++ + # List the GOOS and GOARCH to build + GOOSARCHES = linux/arm linux/arm64 linux/amd64 linux/386 + +@@ -33,12 +36,12 @@ build: $(NAME) ## Builds a dynamic executable or package + + $(NAME): *.go VERSION.txt + @echo "+ $@" +- go build -tags "$(BUILDTAGS)" ${GO_LDFLAGS} -o $(NAME) . ++ $(GO) build -tags "$(BUILDTAGS)" ${GO_LDFLAGS} -o $(NAME) . + + .PHONY: static + static: ## Builds a static executable + @echo "+ $@" +- CGO_ENABLED=0 go build \ ++ CGO_ENABLED=0 $(GO) build \ + -tags "$(BUILDTAGS) static_build" \ + ${GO_LDFLAGS_STATIC} -o $(NAME) . + +@@ -55,23 +58,23 @@ lint: ## Verifies `golint` passes + .PHONY: test + test: ## Runs the go tests + @echo "+ $@" +- @go test -v -tags "$(BUILDTAGS) cgo" $(shell go list ./... | grep -v vendor) ++ @$(GO) test -v -tags "$(BUILDTAGS) cgo" $(shell $(GO) list ./... | grep -v vendor) + + .PHONY: vet + vet: ## Verifies `go vet` passes + @echo "+ $@" +- @go vet $(shell go list ./... | grep -v vendor) | grep -v '.pb.go:' | tee /dev/stderr ++ @$(GO) vet $(shell $(GO) list ./... | grep -v vendor) | grep -v '.pb.go:' | tee /dev/stderr + + .PHONY: staticcheck + staticcheck: ## Verifies `staticcheck` passes + @echo "+ $@" +- @staticcheck $(shell go list ./... | grep -v vendor) | grep -v '.pb.go:' | tee /dev/stderr ++ @staticcheck $(shell $(GO) list ./... | grep -v vendor) | grep -v '.pb.go:' | tee /dev/stderr + + .PHONY: cover + cover: ## Runs go test with coverage + @echo "" > coverage.txt +- @for d in $(shell go list ./... | grep -v vendor); do \ +- go test -race -coverprofile=profile.out -covermode=atomic "$$d"; \ ++ @for d in $(shell $(GO) list ./... | grep -v vendor); do \ ++ $(GO) test -race -coverprofile=profile.out -covermode=atomic "$$d"; \ + if [ -f profile.out ]; then \ + cat profile.out >> coverage.txt; \ + rm profile.out; \ +@@ -81,11 +84,11 @@ cover: ## Runs go test with coverage + .PHONY: install + install: ## Installs the executable or package + @echo "+ $@" +- go install -a -tags "$(BUILDTAGS)" ${GO_LDFLAGS} . ++ $(GO) install -a -tags "$(BUILDTAGS)" ${GO_LDFLAGS} . + + define buildpretty + mkdir -p $(BUILDDIR)/$(1)/$(2); +-GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build \ ++GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 $(GO) build \ + -o $(BUILDDIR)/$(1)/$(2)/$(NAME) \ + -a -tags "$(BUILDTAGS) static_build netgo" \ + -installsuffix netgo ${GO_LDFLAGS_STATIC} .; +@@ -99,7 +102,7 @@ cross: *.go VERSION.txt ## Builds the cross-compiled binaries, creating a clean + $(foreach GOOSARCH,$(GOOSARCHES), $(call buildpretty,$(subst /,,$(dir $(GOOSARCH))),$(notdir $(GOOSARCH)))) + + define buildrelease +-GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build \ ++GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 $(GO) build \ + -o $(BUILDDIR)/$(NAME)-$(1)-$(2) \ + -a -tags "$(BUILDTAGS) static_build netgo" \ + -installsuffix netgo ${GO_LDFLAGS_STATIC} .; +@@ -115,7 +118,7 @@ release: *.go VERSION.txt ## Builds the cross-compiled binaries, naming them in + .PHONY: bump-version + BUMP := patch + bump-version: ## Bump the version in the version file. Set BUMP to [ patch | major | minor ] +- @go get -u github.com/jessfraz/junk/sembump # update sembump tool ++ @$(GO) get -u github.com/jessfraz/junk/sembump # update sembump tool + $(eval NEW_VERSION = $(shell sembump --kind $(BUMP) $(VERSION))) + @echo "Bumping VERSION.txt from $(VERSION) to $(NEW_VERSION)" + echo $(NEW_VERSION) > VERSION.txt +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-networking/netns/files/0001-Use-correct-go-cross-compiler.patch b/external/meta-virtualization/recipes-networking/netns/files/0001-Use-correct-go-cross-compiler.patch new file mode 100644 index 00000000..ed66e11b --- /dev/null +++ b/external/meta-virtualization/recipes-networking/netns/files/0001-Use-correct-go-cross-compiler.patch @@ -0,0 +1,77 @@ +From d5c319bb61155d94bef2571a095d82983d786b94 Mon Sep 17 00:00:00 2001 +From: Paul Barker <pbarker@toganlabs.com> +Date: Fri, 13 Oct 2017 17:58:11 +0000 +Subject: [PATCH] Use correct go cross-compiler + +Signed-off-by: Paul Barker <pbarker@toganlabs.com> +Upstream-status: Pending +--- + Makefile | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/Makefile b/Makefile +index cb9a46d..633f884 100644 +--- a/src/import/Makefile ++++ b/src/import/Makefile +@@ -33,12 +33,12 @@ build: $(NAME) ## Builds a dynamic executable or package + + $(NAME): *.go VERSION + @echo "+ $@" +- go build -tags "$(BUILDTAGS)" ${GO_LDFLAGS} -o $(NAME) . ++ $(GO) build -tags "$(BUILDTAGS)" ${GO_LDFLAGS} -o $(NAME) . + + .PHONY: static + static: ## Builds a static executable + @echo "+ $@" +- CGO_ENABLED=0 go build \ ++ CGO_ENABLED=0 $(GO) build \ + -tags "$(BUILDTAGS) static_build" \ + ${GO_LDFLAGS_STATIC} -o $(NAME) . + +@@ -55,21 +55,21 @@ lint: ## Verifies `golint` passes + .PHONY: test + test: ## Runs the go tests + @echo "+ $@" +- @go test -v -tags "$(BUILDTAGS) cgo" $(shell go list ./... | grep -v vendor) ++ @$(GO) test -v -tags "$(BUILDTAGS) cgo" $(shell $(GO) list ./... | grep -v vendor) + + .PHONY: vet + vet: ## Verifies `go vet` passes + @echo "+ $@" +- @go vet $(shell go list ./... | grep -v vendor) | grep -v '.pb.go:' | tee /dev/stderr ++ @$(GO) vet $(shell $(GO) list ./... | grep -v vendor) | grep -v '.pb.go:' | tee /dev/stderr + + .PHONY: install + install: ## Installs the executable or package + @echo "+ $@" +- @go install . ++ @$(GO) install . + + define buildpretty + mkdir -p $(BUILDDIR)/$(1)/$(2); +-GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build \ ++GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 $(GO) build \ + -o $(BUILDDIR)/$(1)/$(2)/$(NAME) \ + -a -tags "$(BUILDTAGS) static_build netgo" \ + -installsuffix netgo ${GO_LDFLAGS_STATIC} .; +@@ -83,7 +83,7 @@ cross: *.go VERSION ## Builds the cross-compiled binaries, creating a clean dire + $(foreach GOOSARCH,$(GOOSARCHES), $(call buildpretty,$(subst /,,$(dir $(GOOSARCH))),$(notdir $(GOOSARCH)))) + + define buildrelease +-GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 go build \ ++GOOS=$(1) GOARCH=$(2) CGO_ENABLED=0 $(GO) build \ + -o $(BUILDDIR)/$(NAME)-$(1)-$(2) \ + -a -tags "$(BUILDTAGS) static_build netgo" \ + -installsuffix netgo ${GO_LDFLAGS_STATIC} .; +@@ -99,7 +99,7 @@ release: *.go VERSION ## Builds the cross-compiled binaries, naming them in such + .PHONY: bump-version + BUMP := patch + bump-version: ## Bump the version in the version file. Set KIND to [ patch | major | minor ] +- @go get -u github.com/jessfraz/junk/sembump # update sembump tool ++ @$(GO) get -u github.com/jessfraz/junk/sembump # update sembump tool + $(eval NEW_VERSION = $(shell sembump --kind $(BUMP) $(VERSION))) + @echo "Bumping VERSION from $(VERSION) to $(NEW_VERSION)" + echo $(NEW_VERSION) > VERSION +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-networking/netns/netns_git.bb b/external/meta-virtualization/recipes-networking/netns/netns_git.bb new file mode 100644 index 00000000..b6d35948 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/netns/netns_git.bb @@ -0,0 +1,51 @@ +HOMEPAGE = "https://github.com/jfrazelle/netns" +SUMMARY = "Runc hook for setting up default bridge networking." +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=48ef0979a2bcc3fae14ff30b8a7f5dbf" + +SRC_URI = "git://github.com/genuinetools/netns;branch=master \ + file://0001-Allow-selection-of-go-compiler.patch \ + " +SRCREV = "0da6ab0997707024debe68c91e940c9168041bf8" +PV = "0.4.0" +GO_IMPORT = "import" + +S = "${WORKDIR}/git" + +inherit goarch +inherit go + +EXTRA_OEMAKE = "GO='${GO}'" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + export GOROOT="${STAGING_LIBDIR_NATIVE}/${TARGET_SYS}/go" + # Setup vendor directory so that it can be used in GOPATH. + # + # Go looks in a src directory under any directory in GOPATH but netns + # uses 'vendor' instead of 'vendor/src'. We can fix this with a symlink. + # + # We also need to link in the ipallocator and version directories as + # they are not under the src directory. + ln -sfn . "${S}/src/import/vendor/src" + mkdir -p "${S}/src/import/vendor/src/github.com/genuinetools/netns" + ln -sfn "${S}/src/import/ipallocator" "${S}/src/import/vendor/src/github.com/genuinetools/netns/ipallocator" + ln -sfn "${S}/src/import/version" "${S}/src/import/vendor/src/github.com/genuinetools/netns/version" + export GOPATH="${S}/src/import/vendor" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CFLAGS="" + export LDFLAGS="" + export CGO_CFLAGS="${BUILDSDK_CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${BUILDSDK_LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + + cd ${S}/src/import + oe_runmake static +} + +do_install() { + install -d ${D}/${sbindir} + install ${S}/src/import/netns ${D}/${sbindir}/netns +} diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-add-ptest.patch b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-add-ptest.patch new file mode 100644 index 00000000..cb708dea --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-add-ptest.patch @@ -0,0 +1,68 @@ +Add test-install rule to support ptest execution + +Signed-off-by: Radu Patriu <radu.patriu@enea.com> + +Index: openvswitch-2.1.2/Makefile.am +=================================================================== +--- openvswitch-2.1.2.orig/Makefile.am ++++ openvswitch-2.1.2/Makefile.am +@@ -300,3 +300,5 @@ + include python/compat/automake.mk + include tutorial/automake.mk + include vtep/automake.mk ++include test.mk ++ +Index: openvswitch-2.1.2/test.mk +=================================================================== +--- /dev/null ++++ openvswitch-2.1.2/test.mk +@@ -0,0 +1,49 @@ ++TEST_DEST ?= ${prefix}/lib/openvswitch ++TEST_ROOT ?= ${prefix}/lib/openvswitch ++TEST_DEPEND = ++ ++if HAVE_OPENSSL ++TEST_DEPEND += $(TESTPKI_FILES) ++endif ++ ++test-install: $(TEST_DEPEND) ++ @list='$(noinst_PROGRAMS) $(EXTRA_DIST) $(dist_check_SCRIPTS) $(TEST_DEPEND) tests/atlocal tests/atconfig' ;\ ++ install -d $(TEST_DEST)/tests ;\ ++ install -d $(TEST_DEST)/python ;\ ++ install -d $(TEST_DEST)/python/ovs ;\ ++ install -d $(TEST_DEST)/python/ovs/db ;\ ++ install -d $(TEST_DEST)/python/ovs/unixctl ;\ ++ install -d $(TEST_DEST)/vswitchd ;\ ++ install vswitchd/vswitch.ovsschema $(TEST_DEST)/vswitchd ;\ ++ install -d $(TEST_DEST)/debian ;\ ++ install debian/ovs-monitor-ipsec $(TEST_DEST)/debian ;\ ++ install -d $(TEST_DEST)/build-aux ;\ ++ install build-aux/check-structs $(TEST_DEST)/build-aux ;\ ++ install -d $(TEST_DEST)/xenserver ;\ ++ install xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_interface-reconfigure $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_InterfaceReconfigure.py $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py $(TEST_DEST)/xenserver ;\ ++ install xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py $(TEST_DEST)/xenserver ;\ ++ install -d $(TEST_DEST)/vtep ;\ ++ install vtep/vtep.ovsschema $(TEST_DEST)/vtep ;\ ++ for p in $$list ; do \ ++ echo $$p ;\ ++ p=$${p#./} ;\ ++ pre=$${p#tests\/} ;\ ++ if test $$pre != $$p ; then \ ++ echo installing $$p to $(TEST_DEST)/tests/$$pre ;\ ++ install $$p $(TEST_DEST)/tests/$$pre ;\ ++ continue ;\ ++ fi ;\ ++ pre=$${p#python\/ovs\/} ;\ ++ if test $$pre != $$p ; then \ ++ echo installing $$p to $(TEST_DEST)/python/ovs/$$pre ;\ ++ install $$p $(TEST_DEST)/python/ovs/$$pre ;\ ++ continue ;\ ++ fi; \ ++ done ;\ ++ sed -i 's|abs_builddir=.*|abs_builddir='"'"'$(TEST_ROOT)/tests'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_srcdir=.*|abs_srcdir='"'"'$(TEST_ROOT)/tests'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_top_srcdir=.*|abs_top_srcdir='"'"'$(TEST_ROOT)'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_top_builddir=.*|abs_top_builddir='"'"'$(TEST_ROOT)'"'"'|g' $(TEST_DEST)/tests/atconfig diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-example b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-example new file mode 100644 index 00000000..6f08c3fa --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-example @@ -0,0 +1,102 @@ +#! /bin/sh +# +# Copyright (C) 2011 Nicira Networks, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +### BEGIN INIT INFO +# Provides: openvswitch-switch +# Required-Start: $network $named $remote_fs $syslog +# Required-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Open vSwitch switch +### END INIT INFO + +(test -x /usr/sbin/ovs-vswitchd && test -x /usr/sbin/ovsdb-server) || exit 0 + +. /usr/share/openvswitch/scripts/ovs-lib +test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch + +if test X"$BRCOMPAT" = Xyes && test ! -x /usr/sbin/ovs-brcompatd; then + BRCOMPAT=no + log_warning_msg "ovs-brcompatd missing, disabling bridge compatibility" +fi + +ovs_ctl () { + set /usr/share/openvswitch/scripts/ovs-ctl "$@" + if test X"$BRCOMPAT" = Xyes; then + set "$@" --brcompat + fi + "$@" +} + +load_kmod () { + ovs_ctl load-kmod || exit $? +} + +start () { + if ovs_ctl load-kmod; then + : + else + echo "Module has probably not been built for this kernel." + if ! test -d /usr/share/doc/openvswitch-datapath-source; then + echo "Install the openvswitch-datapath-source package, then read" + else + echo "For instructions, read" + fi + echo "/usr/share/doc/openvswitch-datapath-source/README.Debian" + fi + set ovs_ctl ${1-start} --system-id=random + if test X"$FORCE_COREFILES" != X; then + set "$@" --force-corefiles="$FORCE_COREFILES" + fi + "$@" || exit $? + + ovs_ctl --protocol=gre enable-protocol +} + +stop () { + ovs_ctl stop +} + +case $1 in + start) + start + ;; + stop | force-stop) + stop + ;; + reload | force-reload) + # The OVS daemons keep up-to-date. + ;; + restart) + stop + start + ;; + status) + ovs_ctl status + ;; + force-reload-kmod) + start force-reload-kmod + ;; + load-kmod) + load_kmod + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod|load-kmod}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-switch b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-switch new file mode 100644 index 00000000..6f08c3fa --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-switch @@ -0,0 +1,102 @@ +#! /bin/sh +# +# Copyright (C) 2011 Nicira Networks, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +### BEGIN INIT INFO +# Provides: openvswitch-switch +# Required-Start: $network $named $remote_fs $syslog +# Required-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Open vSwitch switch +### END INIT INFO + +(test -x /usr/sbin/ovs-vswitchd && test -x /usr/sbin/ovsdb-server) || exit 0 + +. /usr/share/openvswitch/scripts/ovs-lib +test -e /etc/default/openvswitch-switch && . /etc/default/openvswitch-switch + +if test X"$BRCOMPAT" = Xyes && test ! -x /usr/sbin/ovs-brcompatd; then + BRCOMPAT=no + log_warning_msg "ovs-brcompatd missing, disabling bridge compatibility" +fi + +ovs_ctl () { + set /usr/share/openvswitch/scripts/ovs-ctl "$@" + if test X"$BRCOMPAT" = Xyes; then + set "$@" --brcompat + fi + "$@" +} + +load_kmod () { + ovs_ctl load-kmod || exit $? +} + +start () { + if ovs_ctl load-kmod; then + : + else + echo "Module has probably not been built for this kernel." + if ! test -d /usr/share/doc/openvswitch-datapath-source; then + echo "Install the openvswitch-datapath-source package, then read" + else + echo "For instructions, read" + fi + echo "/usr/share/doc/openvswitch-datapath-source/README.Debian" + fi + set ovs_ctl ${1-start} --system-id=random + if test X"$FORCE_COREFILES" != X; then + set "$@" --force-corefiles="$FORCE_COREFILES" + fi + "$@" || exit $? + + ovs_ctl --protocol=gre enable-protocol +} + +stop () { + ovs_ctl stop +} + +case $1 in + start) + start + ;; + stop | force-stop) + stop + ;; + reload | force-reload) + # The OVS daemons keep up-to-date. + ;; + restart) + stop + start + ;; + status) + ovs_ctl status + ;; + force-reload-kmod) + start force-reload-kmod + ;; + load-kmod) + load_kmod + ;; + *) + echo "Usage: $0 {start|stop|restart|force-reload|status|force-stop|force-reload-kmod|load-kmod}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-switch-setup b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-switch-setup new file mode 100644 index 00000000..73387fbc --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-switch-setup @@ -0,0 +1,8 @@ +# This is a POSIX shell fragment -*- sh -*- + +# FORCE_COREFILES: If 'yes' then core files will be enabled. +# FORCE_COREFILES=yes + +# BRCOMPAT: If 'yes' and the openvswitch-brcompat package is installed, then +# Linux bridge compatibility will be enabled. +# BRCOMPAT=yes diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-testcontroller b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-testcontroller new file mode 100755 index 00000000..aad5ad60 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-testcontroller @@ -0,0 +1,274 @@ +#!/bin/sh +# +# Copyright (c) 2011 Nicira Networks Inc. +# Copyright (c) 2007, 2009 Javier Fernandez-Sanguino <jfs@debian.org> +# +# This is free software; you may redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2, +# or (at your option) any later version. +# +# This is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License with +# the Debian operating system, in /usr/share/common-licenses/GPL; if +# not, write to the Free Software Foundation, Inc., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA +# +### BEGIN INIT INFO +# Provides: openvswitch-testcontroller +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $remote_fs +# Should-Start: $named +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Open vSwitch controller +### END INIT INFO + +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +DAEMON=/usr/bin/ovs-testcontroller # Introduce the server's location here +NAME=ovs-testcontroller # Introduce the short server's name here +DESC=ovs-testcontroller # Introduce a short description here +LOGDIR=/var/log/openvswitch # Log directory to use + +PIDFILE=/var/run/openvswitch/$NAME.pid + +test -x $DAEMON || exit 0 + +. /lib/lsb/init-functions + +# Default options, these can be overriden by the information +# at /etc/default/openvswitch-testcontroller +DAEMON_OPTS="" # Additional options given to the server + +DODTIME=10 # Time to wait for the server to die, in seconds + # If this value is set too low you might not + # let some servers to die gracefully and + # 'restart' will not work + +LOGFILE=$LOGDIR/$NAME.log # Server logfile +#DAEMONUSER= # User to run the daemons as. If this value + # is set start-stop-daemon will chuid the server + +# Include defaults if available +default=/etc/default/openvswitch-testcontroller +if [ -f $default ] ; then + . $default +fi + +# Check that the user exists (if we set a user) +# Does the user exist? +if [ -n "$DAEMONUSER" ] ; then + if getent passwd | grep -q "^$DAEMONUSER:"; then + # Obtain the uid and gid + DAEMONUID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $3}'` + DAEMONGID=`getent passwd |grep "^$DAEMONUSER:" | awk -F : '{print $4}'` + else + log_failure_msg "The user $DAEMONUSER, required to run $NAME does not exist." + exit 1 + fi +fi + + +set -e + +running_pid() { +# Check if a given process pid's cmdline matches a given name + pid=$1 + name=$2 + [ -z "$pid" ] && return 1 + [ ! -d /proc/$pid ] && return 1 + cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` + # Is this the expected server + [ "$cmd" != "$name" ] && return 1 + return 0 +} + +running() { +# Check if the process is running looking at /proc +# (works for all users) + + # No pidfile, probably no daemon present + [ ! -f "$PIDFILE" ] && return 1 + pid=`cat $PIDFILE` + running_pid $pid $DAEMON || return 1 + return 0 +} + +start_server() { + if [ -z "$LISTEN" ]; then + echo "$default: No connection methods configured, controller disabled" >&2 + exit 0 + fi + + if [ ! -d /var/run/openvswitch ]; then + install -d -m 755 -o root -g root /var/run/openvswitch + fi + + SSL_OPTS= + case $LISTEN in + *ssl*) + : ${PRIVKEY:=/etc/openvswitch-testcontroller/privkey.pem} + : ${CERT:=/etc/openvswitch-testcontroller/cert.pem} + : ${CACERT:=/etc/openvswitch-testcontroller/cacert.pem} + if test ! -e "$PRIVKEY" || test ! -e "$CERT" || + test ! -e "$CACERT"; then + if test ! -e "$PRIVKEY"; then + echo "$PRIVKEY: private key missing" >&2 + fi + if test ! -e "$CERT"; then + echo "$CERT: certificate for private key missing" >&2 + fi + if test ! -e "$CACERT"; then + echo "$CACERT: CA certificate missing" >&2 + fi + exit 1 + fi + SSL_OPTS="--private-key=$PRIVKEY --certificate=$CERT --ca-cert=$CACERT" + ;; + esac + +# Start the process using the wrapper + if [ -z "$DAEMONUSER" ] ; then + start-stop-daemon --start --pidfile $PIDFILE \ + --exec $DAEMON -- --detach --pidfile=$PIDFILE \ + $LISTEN $DAEMON_OPTS $SSL_OPTS + errcode=$? + else +# if we are using a daemonuser then change the user id + start-stop-daemon --start --quiet --pidfile $PIDFILE \ + --chuid $DAEMONUSER --exec $DAEMON -- \ + --detach --pidfile=$PIDFILE $LISTEN $DAEMON_OPTS \ + $SSL_OPTS + errcode=$? + fi + return $errcode +} + +stop_server() { +# Stop the process using the wrapper + if [ -z "$DAEMONUSER" ] ; then + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --exec $DAEMON + errcode=$? + else +# if we are using a daemonuser then look for process that match + start-stop-daemon --stop --quiet --pidfile $PIDFILE \ + --user $DAEMONUSER --exec $DAEMON + errcode=$? + fi + + return $errcode +} + +reload_server() { + [ ! -f "$PIDFILE" ] && return 1 + pid=`cat $PIDFILE` # This is the daemon's pid + # Send a SIGHUP + kill -1 $pid + return $? +} + +force_stop() { +# Force the process to die killing it manually + [ ! -e "$PIDFILE" ] && return + if running ; then + kill -15 $pid + # Is it really dead? + sleep "$DODTIME" + if running ; then + kill -9 $pid + sleep "$DODTIME" + if running ; then + echo "Cannot kill $NAME (pid=$pid)!" + exit 1 + fi + fi + fi + rm -f $PIDFILE +} + + +case "$1" in + start) + log_begin_msg "Starting $DESC " "$NAME" + # Check if it's running first + if running ; then + log_warning_msg "apparently already running" + log_end_msg 0 + exit 0 + fi + if start_server && running ; then + # It's ok, the server started and is running + log_end_msg 0 + else + # Either we could not start it or it is not running + # after we did + # NOTE: Some servers might die some time after they start, + # this code does not try to detect this and might give + # a false positive (use 'status' for that) + log_end_msg 1 + fi + ;; + stop) + log_begin_msg "Stopping $DESC" "$NAME" + if running ; then + # Only stop the server if we see it running + stop_server + log_end_msg $? + else + # If it's not running don't do anything + log_warning_msg "apparently not running" + log_end_msg 0 + exit 0 + fi + ;; + force-stop) + # First try to stop gracefully the program + $0 stop + if running; then + # If it's still running try to kill it more forcefully + log_begin_msg "Stopping (force) $DESC" "$NAME" + force_stop + log_end_msg $? + fi + ;; + restart|force-reload) + log_begin_msg "Restarting $DESC" "$NAME" + stop_server + # Wait some sensible amount, some server need this + [ -n "$DODTIME" ] && sleep $DODTIME + start_server + running + log_end_msg $? + ;; + status) + + log_begin_msg "Checking status of $DESC" "$NAME" + if running ; then + log_begin_msg "running" + log_end_msg 0 + else + log_warning_msg "apparently not running" + log_end_msg 1 + exit 1 + fi + ;; + # Use this if the daemon cannot reload + reload) + log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" + log_warning_msg "cannot re-read the config file (use restart)." + ;; + *) + N=/etc/init.d/openvswitch-testcontroller + echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-testcontroller-setup b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-testcontroller-setup new file mode 100644 index 00000000..b431ece5 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/openvswitch-testcontroller-setup @@ -0,0 +1,29 @@ +# This is a POSIX shell fragment -*- sh -*- + +# LISTEN: What OpenFlow connection methods should the controller listen on? +# +# This is a space-delimited list of connection methods: +# +# * "pssl:[PORT]": Listen for SSL connections on the specified PORT +# (default: 6633). The private key, certificate, and CA certificate +# must be specified below. +# +# * "pctp:[PORT]": Listen for TCP connections on the specified PORT +# (default: 6633). Not recommended for security reasons. +# +LISTEN="pssl:" + +# PRIVKEY: Name of file containing controller's private key. +# Required if SSL enabled. +PRIVKEY=/etc/openvswitch-testcontroller/privkey.pem + +# CERT: Name of file containing certificate for private key. +# Required if SSL enabled. +CERT=/etc/openvswitch-testcontroller/cert.pem + +# CACERT: Name of file containing switch CA certificate. +# Required if SSL enabled. +CACERT=/etc/openvswitch-testcontroller/cacert.pem + +# Additional options to pass to controller, e.g. "--hub" +DAEMON_OPTS="" diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/python-make-remaining-scripts-use-usr-bin-env.patch b/external/meta-virtualization/recipes-networking/openvswitch/files/python-make-remaining-scripts-use-usr-bin-env.patch new file mode 100644 index 00000000..0dc6b11b --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/python-make-remaining-scripts-use-usr-bin-env.patch @@ -0,0 +1,372 @@ +From a0a2d829642e916bd5d1c498a3e6f3641ed717a0 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Fri, 13 Jan 2017 16:12:55 -0500 +Subject: [PATCH] python: make remaining scripts use /usr/bin/env + +Unfortunately there is no concept of a host python vs. target python +to facilitate cross compilation. There is only one PYTHON variable and +this is used during building and in the header of python scripts after +installation. The best approach for cross compilation is to thus to +ensure python is in the path and avoid passing a path as part of +PYTHON. To make this function smoothly all installed scripts should +make use of /usr/bin/env to increase the chances of finding python. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + build-aux/check-structs | 2 +- + build-aux/dpdkstrip.py | 2 +- + build-aux/extract-ofp-actions | 2 +- + build-aux/extract-ofp-errors | 2 +- + build-aux/extract-ofp-fields | 2 +- + build-aux/extract-ofp-msgs | 2 +- + build-aux/sodepends.py | 2 +- + build-aux/soexpand.py | 2 +- + build-aux/text2c | 2 +- + build-aux/xml2nroff | 2 +- + ovn/utilities/ovn-detrace.in | 2 +- + ovn/utilities/ovn-docker-overlay-driver.in | 2 +- + ovn/utilities/ovn-docker-underlay-driver.in | 2 +- + ovsdb/dot2pic | 2 +- + ovsdb/ovsdb-doc | 2 +- + ovsdb/ovsdb-dot.in | 2 +- + ovsdb/ovsdb-idlc.in | 2 +- + python/build/soutil.py | 2 +- + tests/flowgen.py | 2 +- + tests/ovsdb-monitor-sort.py | 2 +- + tests/uuidfilt.py | 2 +- + utilities/bugtool/ovs-bugtool.in | 2 +- + utilities/ovs-check-dead-ifs.in | 2 +- + utilities/ovs-dpctl-top.in | 2 +- + utilities/ovs-l3ping.in | 2 +- + utilities/ovs-parse-backtrace.in | 2 +- + utilities/ovs-pcap.in | 2 +- + utilities/ovs-tcpdump.in | 2 +- + utilities/ovs-tcpundump.in | 2 +- + utilities/ovs-test.in | 2 +- + utilities/ovs-vlan-test.in | 2 +- + vtep/ovs-vtep.in | 2 +- + 32 files changed, 32 insertions(+), 32 deletions(-) + +diff --git a/build-aux/check-structs b/build-aux/check-structs +index 37ffa06..eb44c91 100755 +--- a/build-aux/check-structs ++++ b/build-aux/check-structs +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + import os.path + import sys +diff --git a/build-aux/dpdkstrip.py b/build-aux/dpdkstrip.py +index 48c7f06..b8b8ba9 100755 +--- a/build-aux/dpdkstrip.py ++++ b/build-aux/dpdkstrip.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + # Copyright (c) 2017 Red Hat, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +diff --git a/build-aux/extract-ofp-actions b/build-aux/extract-ofp-actions +index bd7131f..4d05ef9 100755 +--- a/build-aux/extract-ofp-actions ++++ b/build-aux/extract-ofp-actions +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + import sys + import os.path +diff --git a/build-aux/extract-ofp-errors b/build-aux/extract-ofp-errors +index 71ae0bd..58ba006 100755 +--- a/build-aux/extract-ofp-errors ++++ b/build-aux/extract-ofp-errors +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + import sys + import os.path +diff --git a/build-aux/extract-ofp-fields b/build-aux/extract-ofp-fields +index 184b75e..cf339f8 100755 +--- a/build-aux/extract-ofp-fields ++++ b/build-aux/extract-ofp-fields +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + import getopt + import sys +diff --git a/build-aux/extract-ofp-msgs b/build-aux/extract-ofp-msgs +index a67e870..92c4bda 100755 +--- a/build-aux/extract-ofp-msgs ++++ b/build-aux/extract-ofp-msgs +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + import sys + import os.path +diff --git a/build-aux/sodepends.py b/build-aux/sodepends.py +index 90cfaa0..45812bc 100755 +--- a/build-aux/sodepends.py ++++ b/build-aux/sodepends.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + + # Copyright (c) 2008, 2011, 2017 Nicira, Inc. + # +diff --git a/build-aux/soexpand.py b/build-aux/soexpand.py +index 53ca640..00adcf4 100755 +--- a/build-aux/soexpand.py ++++ b/build-aux/soexpand.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + + # Copyright (c) 2008, 2017 Nicira, Inc. + # +diff --git a/build-aux/text2c b/build-aux/text2c +index cb1f256..ab7910e 100755 +--- a/build-aux/text2c ++++ b/build-aux/text2c +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + import re + import sys +diff --git a/build-aux/xml2nroff b/build-aux/xml2nroff +index bd4e879..db45c56 100755 +--- a/build-aux/xml2nroff ++++ b/build-aux/xml2nroff +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + # Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015, 2016 Nicira, Inc. + # +diff --git a/ovn/utilities/ovn-detrace.in b/ovn/utilities/ovn-detrace.in +index e2e5b4c..5549219 100755 +--- a/ovn/utilities/ovn-detrace.in ++++ b/ovn/utilities/ovn-detrace.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2017 eBay Inc. + # +diff --git a/ovn/utilities/ovn-docker-overlay-driver.in b/ovn/utilities/ovn-docker-overlay-driver.in +index 65edfcd..895426b 100755 +--- a/ovn/utilities/ovn-docker-overlay-driver.in ++++ b/ovn/utilities/ovn-docker-overlay-driver.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # Copyright (C) 2015 Nicira, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +diff --git a/ovn/utilities/ovn-docker-underlay-driver.in b/ovn/utilities/ovn-docker-underlay-driver.in +index d91ce9f..e0c8db6 100755 +--- a/ovn/utilities/ovn-docker-underlay-driver.in ++++ b/ovn/utilities/ovn-docker-underlay-driver.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # Copyright (C) 2015 Nicira, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +diff --git a/ovsdb/dot2pic b/ovsdb/dot2pic +index de67261..174e723 100755 +--- a/ovsdb/dot2pic ++++ b/ovsdb/dot2pic +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + + # Copyright (c) 2009, 2010, 2011, 2013, 2017 Nicira, Inc. + # +diff --git a/ovsdb/ovsdb-doc b/ovsdb/ovsdb-doc +index 406c293..d55c6e6 100755 +--- a/ovsdb/ovsdb-doc ++++ b/ovsdb/ovsdb-doc +@@ -1,4 +1,4 @@ +-#! /usr/bin/python ++#! /usr/bin/env python3 + + # Copyright (c) 2010, 2011, 2012, 2013, 2014, 2015 Nicira, Inc. + # +diff --git a/ovsdb/ovsdb-dot.in b/ovsdb/ovsdb-dot.in +index 8eea617..38ba33a 100755 +--- a/ovsdb/ovsdb-dot.in ++++ b/ovsdb/ovsdb-dot.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#! /usr/bin/env @PYTHON@ + + from datetime import date + import ovs.db.error +diff --git a/ovsdb/ovsdb-idlc.in b/ovsdb/ovsdb-idlc.in +index 1ea2115..4ecb2e2 100755 +--- a/ovsdb/ovsdb-idlc.in ++++ b/ovsdb/ovsdb-idlc.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + + from __future__ import print_function + import getopt +diff --git a/python/build/soutil.py b/python/build/soutil.py +index b8027af..8f52803 100755 +--- a/python/build/soutil.py ++++ b/python/build/soutil.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + + # Copyright (c) 2008, 2017 Nicira, Inc. + # +diff --git a/tests/flowgen.py b/tests/flowgen.py +index 221a8f2..5d96d76 100755 +--- a/tests/flowgen.py ++++ b/tests/flowgen.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + + # Copyright (c) 2009, 2010, 2011, 2012, 2015, 2017 Nicira, Inc. + # +diff --git a/tests/ovsdb-monitor-sort.py b/tests/ovsdb-monitor-sort.py +index 7d368a7..ab4c38c 100755 +--- a/tests/ovsdb-monitor-sort.py ++++ b/tests/ovsdb-monitor-sort.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + + # Breaks lines read from stdin into groups using blank lines as + # group separators, then sorts lines within the groups for +diff --git a/tests/uuidfilt.py b/tests/uuidfilt.py +index ea72812..f1a9aff 100755 +--- a/tests/uuidfilt.py ++++ b/tests/uuidfilt.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + + import re + import sys +diff --git a/utilities/bugtool/ovs-bugtool.in b/utilities/bugtool/ovs-bugtool.in +index 8d220fd..76cedf4 100755 +--- a/utilities/bugtool/ovs-bugtool.in ++++ b/utilities/bugtool/ovs-bugtool.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#! /usr/bin/env @PYTHON@ + + # This library is free software; you can redistribute it and/or + # modify it under the terms of version 2.1 of the GNU Lesser General Public +diff --git a/utilities/ovs-check-dead-ifs.in b/utilities/ovs-check-dead-ifs.in +index ac54f6c..13d86b3 100755 +--- a/utilities/ovs-check-dead-ifs.in ++++ b/utilities/ovs-check-dead-ifs.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + + import os + import re +diff --git a/utilities/ovs-dpctl-top.in b/utilities/ovs-dpctl-top.in +index 7f0f1f8..ece707a 100755 +--- a/utilities/ovs-dpctl-top.in ++++ b/utilities/ovs-dpctl-top.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2013 Nicira, Inc. + # +diff --git a/utilities/ovs-l3ping.in b/utilities/ovs-l3ping.in +index 1b07972..9852699 100644 +--- a/utilities/ovs-l3ping.in ++++ b/utilities/ovs-l3ping.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. +diff --git a/utilities/ovs-parse-backtrace.in b/utilities/ovs-parse-backtrace.in +index 350cbd9..1960fb4 100755 +--- a/utilities/ovs-parse-backtrace.in ++++ b/utilities/ovs-parse-backtrace.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2012 Nicira, Inc. + # +diff --git a/utilities/ovs-pcap.in b/utilities/ovs-pcap.in +index fc15321..bd55a41 100755 +--- a/utilities/ovs-pcap.in ++++ b/utilities/ovs-pcap.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2010 Nicira, Inc. + # +diff --git a/utilities/ovs-tcpdump.in b/utilities/ovs-tcpdump.in +index 91fa14e..bad67b7 100755 +--- a/utilities/ovs-tcpdump.in ++++ b/utilities/ovs-tcpdump.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2016 Red Hat, Inc. + # +diff --git a/utilities/ovs-tcpundump.in b/utilities/ovs-tcpundump.in +index c99015b..9a617ce 100755 +--- a/utilities/ovs-tcpundump.in ++++ b/utilities/ovs-tcpundump.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2010 Nicira, Inc. + # +diff --git a/utilities/ovs-test.in b/utilities/ovs-test.in +index fb1f9ad..4dba169 100644 +--- a/utilities/ovs-test.in ++++ b/utilities/ovs-test.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. +diff --git a/utilities/ovs-vlan-test.in b/utilities/ovs-vlan-test.in +index e229498..5b70118 100755 +--- a/utilities/ovs-vlan-test.in ++++ b/utilities/ovs-vlan-test.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # + # Copyright (c) 2010 Nicira, Inc. + # +diff --git a/vtep/ovs-vtep.in b/vtep/ovs-vtep.in +index 98748e4..3f12ae2 100755 +--- a/vtep/ovs-vtep.in ++++ b/vtep/ovs-vtep.in +@@ -1,4 +1,4 @@ +-#! @PYTHON@ ++#!/usr/bin/env @PYTHON@ + # Copyright (C) 2013 Nicira, Inc. All Rights Reserved. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/python-switch-remaining-scripts-to-use-python3.patch b/external/meta-virtualization/recipes-networking/openvswitch/files/python-switch-remaining-scripts-to-use-python3.patch new file mode 100644 index 00000000..64e0e3f4 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/python-switch-remaining-scripts-to-use-python3.patch @@ -0,0 +1,100 @@ +From 098d3927e928362f0ac60ea97e9c39b73871be21 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Wed, 3 May 2017 10:39:12 -0400 +Subject: [PATCH] python: switch remaining scripts to use python3 + +Work to remove the main openvswitch package's dependency on python 2. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> + +--- + ofproto/ipfix-gen-entities | 2 +- + tests/test-l7.py | 2 +- + utilities/checkpatch.py | 2 +- + utilities/ovs-dev.py | 2 +- + utilities/ovs-pipegen.py | 2 +- + xenserver/etc_xapi.d_plugins_openvswitch-cfg-update | 2 +- + xenserver/opt_xensource_libexec_interface-reconfigure | 2 +- + xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync | 2 +- + 8 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/ofproto/ipfix-gen-entities b/ofproto/ipfix-gen-entities +index 0be7199..d2cce42 100755 +--- a/ofproto/ipfix-gen-entities ++++ b/ofproto/ipfix-gen-entities +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + # + # Copyright (C) 2012 Nicira, Inc. + # +diff --git a/tests/test-l7.py b/tests/test-l7.py +index d7854a1..f09defb 100755 +--- a/tests/test-l7.py ++++ b/tests/test-l7.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2015, 2016 Nicira, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py +index f929714..e17a1cf 100755 +--- a/utilities/checkpatch.py ++++ b/utilities/checkpatch.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2016, 2017 Red Hat, Inc. + # Copyright (c) 2018 Nicira, Inc. + # +diff --git a/utilities/ovs-dev.py b/utilities/ovs-dev.py +index 9ce0f04..839e13e 100755 +--- a/utilities/ovs-dev.py ++++ b/utilities/ovs-dev.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2013, 2014, 2015, 2016 Nicira, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +diff --git a/utilities/ovs-pipegen.py b/utilities/ovs-pipegen.py +index ee57972..e9b99f5 100755 +--- a/utilities/ovs-pipegen.py ++++ b/utilities/ovs-pipegen.py +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + # Copyright (c) 2013, 2014, 2015 Nicira, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); +diff --git a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update +index e7404e3..5edad76 100755 +--- a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update ++++ b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # + # xapi plugin script to update the cache of configuration items in the + # ovs-vswitchd configuration that are managed in the xapi database when +diff --git a/xenserver/opt_xensource_libexec_interface-reconfigure b/xenserver/opt_xensource_libexec_interface-reconfigure +index a82043f..9c20725 100755 +--- a/xenserver/opt_xensource_libexec_interface-reconfigure ++++ b/xenserver/opt_xensource_libexec_interface-reconfigure +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # + # Copyright (c) 2008,2009 Citrix Systems, Inc. + # +diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync +index ecd6f6d..b8f2a42 100755 +--- a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync ++++ b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync +@@ -1,4 +1,4 @@ +-#! /usr/bin/env python ++#! /usr/bin/env python3 + # Copyright (c) 2009, 2010, 2011, 2012, 2013 Nicira, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/external/meta-virtualization/recipes-networking/openvswitch/files/run-ptest b/external/meta-virtualization/recipes-networking/openvswitch/files/run-ptest new file mode 100644 index 00000000..dd067076 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/files/run-ptest @@ -0,0 +1,4 @@ +#!/bin/sh + +./tests/testsuite --am-fmt -C tests AUTOTEST_PATH=utilities:vswitchd:ovsdb:tests + diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0002-Define-WAIT_ANY-if-not-provided-by-system.patch b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0002-Define-WAIT_ANY-if-not-provided-by-system.patch new file mode 100644 index 00000000..f997bbff --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/0002-Define-WAIT_ANY-if-not-provided-by-system.patch @@ -0,0 +1,29 @@ +From 801023e72b31e7c49cbccedd76ade33a17fcbe45 Mon Sep 17 00:00:00 2001 +From: Khem Raj <raj.khem@gmail.com> +Date: Mon, 20 Mar 2017 12:13:30 -0700 +Subject: [PATCH] Define WAIT_ANY if not provided by system + +POSIX does not define it and uses -1 directly +some libc do not have this definitions + +Signed-off-by: Khem Raj <raj.khem@gmail.com> + +--- + tests/test-ovn.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/tests/test-ovn.c b/tests/test-ovn.c +index 84adf81..2bc6bdf 100644 +--- a/tests/test-ovn.c ++++ b/tests/test-ovn.c +@@ -38,6 +38,10 @@ + #include "simap.h" + #include "util.h" + ++#ifndef WAIT_ANY ++# define WAIT_ANY (-1) /* Any process. */ ++#endif ++ + /* --relops: Bitmap of the relational operators to test, in exhaustive test. */ + static unsigned int test_relops; + diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/disable_m4_check.patch b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/disable_m4_check.patch new file mode 100644 index 00000000..711a1487 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/disable_m4_check.patch @@ -0,0 +1,24 @@ +From f675d7209f999ce80cb4249c4ebb216697387b71 Mon Sep 17 00:00:00 2001 +From: Amy Fong <amy.fong@windriver.com> +Date: Thu, 29 Jan 2015 09:56:03 -0500 +Subject: [PATCH] Disable m4 file test where sources are built from git. + +Signed-off-by: Amy Fong <amy.fong@windriver.com> + +--- + Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index ff7d70a..2fc1f13 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -187,7 +187,7 @@ CLEAN_LOCAL += clean-pycov + + # If we're checked out from a Git repository, make sure that every + # file that is in Git is distributed. +-ALL_LOCAL += dist-hook-git ++# ALL_LOCAL += dist-hook-git + dist-hook-git: distfiles + @if test -e $(srcdir)/.git && (git --version) >/dev/null 2>&1; then \ + (cd datapath && $(MAKE) distfiles); \ diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/kernel_module.patch b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/kernel_module.patch new file mode 100644 index 00000000..c177202f --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/kernel_module.patch @@ -0,0 +1,26 @@ +From adfd2380d71dff1a31efaf63cf7ac97470466ec9 Mon Sep 17 00:00:00 2001 +From: Amy Fong <amy.fong@windriver.com> +Date: Thu, 29 Jan 2015 09:56:03 -0500 +Subject: [PATCH] Specify install path for kernel module + +Signed-off-by: Amy Fong <amy.fong@windriver.com> + +--- + datapath/linux/Makefile.main.in | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/datapath/linux/Makefile.main.in b/datapath/linux/Makefile.main.in +index 7d18253..63c520f 100644 +--- a/datapath/linux/Makefile.main.in ++++ b/datapath/linux/Makefile.main.in +@@ -71,8 +71,8 @@ default: + $(MAKE) -C $(KSRC) M=$(builddir) modules + + modules_install: +- $(MAKE) -C $(KSRC) M=$(builddir) modules_install +- depmod `sed -n 's/#define UTS_RELEASE "\([^"]*\)"/\1/p' $(KSRC)/include/generated/utsrelease.h` ++ $(MAKE) -C $(KSRC) M=$(builddir) modules_install INSTALL_MOD_PATH=${INSTALL_MOD_PATH} ++ # depmod `sed -n 's/#define UTS_RELEASE "\([^"]*\)"/\1/p' $(KSRC)/include/generated/utsrelease.h` + endif + + # Much of the kernel build system in this file is derived from Intel's diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/openvswitch-add-ptest-5563e309b80bbea9bff538e71ecfd7e5e538bab9.patch b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/openvswitch-add-ptest-5563e309b80bbea9bff538e71ecfd7e5e538bab9.patch new file mode 100644 index 00000000..a8fc86c9 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/openvswitch-add-ptest-5563e309b80bbea9bff538e71ecfd7e5e538bab9.patch @@ -0,0 +1,110 @@ +From 37df262d2b0f0b8c177aa850623f2c5880484ff0 Mon Sep 17 00:00:00 2001 +From: He Zhe <zhe.he@windriver.com> +Date: Wed, 30 Mar 2016 06:23:45 -0400 +Subject: [PATCH] openvswitch: Add test-install rule to support ptest execution + +Signed-off-by: Radu Patriu <radu.patriu@enea.com> + +Fix ptest for v2.5 + - Copy certain files from srcdir since it has been different from + build directory. + - Copy more necessary files for new added test cases. + - Modify config files for running on target. + +Signed-off-by: He Zhe <zhe.he@windriver.com> + +--- + Makefile.am | 1 + + test.mk | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 75 insertions(+) + create mode 100644 test.mk + +diff --git a/Makefile.am b/Makefile.am +index 7889728..6435399 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -494,3 +494,4 @@ include windows/automake.mk + include ovn/automake.mk + include selinux/automake.mk + include build-aux/automake.mk ++include test.mk +diff --git a/test.mk b/test.mk +new file mode 100644 +index 0000000..0b4587c +--- /dev/null ++++ b/test.mk +@@ -0,0 +1,74 @@ ++TEST_DEST ?= ${prefix}/lib/openvswitch ++TEST_ROOT ?= ${prefix}/lib/openvswitch ++TEST_DEPEND = ++ ++if HAVE_OPENSSL ++TEST_DEPEND += $(TESTPKI_FILES) ++endif ++ ++test-install: $(TEST_DEPEND) ++ @list='$(noinst_PROGRAMS) $(EXTRA_DIST) $(dist_check_SCRIPTS) $(TEST_DEPEND) tests/atlocal tests/atconfig' ;\ ++ install -d $(TEST_DEST)/tests ;\ ++ install $(srcdir)/vtep/ovs-vtep $(TEST_DEST)/tests ;\ ++ install -d $(TEST_DEST)/python ;\ ++ install -d $(TEST_DEST)/python/ovs ;\ ++ install -d $(TEST_DEST)/python/ovs/db ;\ ++ install -d $(TEST_DEST)/python/ovs/compat ;\ ++ install -d $(TEST_DEST)/python/ovs/compat/sortedcontainers ;\ ++ install -d $(TEST_DEST)/python/ovs/unixctl ;\ ++ install -d $(TEST_DEST)/vswitchd ;\ ++ install $(srcdir)/vswitchd/vswitch.ovsschema $(TEST_DEST)/vswitchd ;\ ++ install vswitchd/ovs-vswitchd $(TEST_DEST)/vswitchd ;\ ++ install -d $(TEST_DEST)/debian ;\ ++ install $(srcdir)/debian/ovs-monitor-ipsec $(TEST_DEST)/debian ;\ ++ install -d $(TEST_DEST)/build-aux ;\ ++ install $(srcdir)/build-aux/check-structs $(TEST_DEST)/build-aux ;\ ++ install -d $(TEST_DEST)/xenserver ;\ ++ install $(srcdir)/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync $(TEST_DEST)/xenserver ;\ ++ install $(srcdir)/xenserver/opt_xensource_libexec_interface-reconfigure $(TEST_DEST)/xenserver ;\ ++ install $(srcdir)/xenserver/opt_xensource_libexec_InterfaceReconfigure.py $(TEST_DEST)/xenserver ;\ ++ install $(srcdir)/xenserver/opt_xensource_libexec_InterfaceReconfigureBridge.py $(TEST_DEST)/xenserver ;\ ++ install $(srcdir)/xenserver/opt_xensource_libexec_InterfaceReconfigureVswitch.py $(TEST_DEST)/xenserver ;\ ++ install -d $(TEST_DEST)/vtep ;\ ++ install $(srcdir)/vtep/vtep.ovsschema $(TEST_DEST)/vtep ;\ ++ install -d $(TEST_DEST)/ovn ;\ ++ install $(srcdir)/ovn/ovn-nb.ovsschema $(TEST_DEST)/ovn ;\ ++ install $(srcdir)/ovn/ovn-sb.ovsschema $(TEST_DEST)/ovn ;\ ++ install -d $(TEST_DEST)/utilities ;\ ++ install $(srcdir)/utilities/ovs-pcap.in $(TEST_DEST)/utilities ;\ ++ install $(srcdir)/utilities/ovs-pki.in $(TEST_DEST)/utilities ;\ ++ for p in $$list ; do \ ++ echo $$p ;\ ++ p=$${p#../git/} ;\ ++ pre=$${p#tests\/} ;\ ++ if test $$pre != $$p ; then \ ++ echo installing $$p to $(TEST_DEST)/tests/$$pre ;\ ++ if test -f $$p ; then \ ++ install $$p $(TEST_DEST)/tests/$$pre ;\ ++ else \ ++ install $(srcdir)/$$p $(TEST_DEST)/tests/$$pre ;\ ++ fi ;\ ++ continue ;\ ++ fi ;\ ++ pre=$${p#python\/ovs\/} ;\ ++ if test $$pre != $$p ; then \ ++ echo installing $$p to $(TEST_DEST)/python/ovs/$$pre ;\ ++ if test -f $$p ; then \ ++ install $$p $(TEST_DEST)/python/ovs/$$pre ;\ ++ else \ ++ install $(srcdir)/$$p $(TEST_DEST)/python/ovs/$$pre ;\ ++ fi ;\ ++ continue ;\ ++ fi; \ ++ done ;\ ++ sed -i 's|abs_builddir=.*|abs_builddir='"'"'$(TEST_ROOT)/tests'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_srcdir=.*|abs_srcdir='"'"'$(TEST_ROOT)/tests'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_top_srcdir=.*|abs_top_srcdir='"'"'$(TEST_ROOT)'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|abs_top_builddir=.*|abs_top_builddir='"'"'$(TEST_ROOT)'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|at_srcdir=.*|at_srcdir='"'"'.'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|at_top_srcdir=.*|at_top_srcdir='"'"'..'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|at_top_build_prefix=.*|at_top_build_prefix='"'"'../'"'"'|g' $(TEST_DEST)/tests/atconfig ++ sed -i 's|^\(.*config\.log.*\)|#\1|g' $(TEST_DEST)/tests/testsuite ++ sed -i 's|$$srcdir|$$abs_srcdir|g' $(TEST_DEST)/tests/testsuite ++ sed -i 's|ovs-appctl-bashcomp\.bash|/etc/bash_completion.d/ovs-appctl-bashcomp\.bash|g' $(TEST_DEST)/tests/testsuite ++ sed -i 's|ovs-vsctl-bashcomp\.bash|/etc/bash_completion.d/ovs-vsctl-bashcomp\.bash|g' $(TEST_DEST)/tests/testsuite diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/systemd-create-runtime-dirs.patch b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/systemd-create-runtime-dirs.patch new file mode 100644 index 00000000..65290cf6 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/systemd-create-runtime-dirs.patch @@ -0,0 +1,31 @@ +From 219e7cf9f28fdf14747fdf674bec293f763fe8e3 Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Tue, 4 Sep 2018 15:38:59 -0400 +Subject: [PATCH] systemd: create runtime dirs + +The recommendation would be to make use of "RuntimeDirectory=" and +"RuntimeDirectoryMode=" instead of 'mkdir' and 'chown' but since the +upstream service file uses 'chown' we will match this by using +'mkdir'. Without this the service will fail to start since these +directories won't exist. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + rhel/usr_lib_systemd_system_ovsdb-server.service | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/rhel/usr_lib_systemd_system_ovsdb-server.service b/rhel/usr_lib_systemd_system_ovsdb-server.service +index 694598f..0bb2274 100644 +--- a/rhel/usr_lib_systemd_system_ovsdb-server.service ++++ b/rhel/usr_lib_systemd_system_ovsdb-server.service +@@ -10,6 +10,7 @@ Type=forking + Restart=on-failure + EnvironmentFile=/etc/openvswitch/default.conf + EnvironmentFile=-/etc/sysconfig/openvswitch ++ExecStartPre=-/bin/mkdir /var/run/openvswitch /var/log/openvswitch + ExecStartPre=/bin/chown ${OVS_USER_ID} /var/run/openvswitch /var/log/openvswitch + ExecStartPre=/bin/sh -c 'rm -f /run/openvswitch/useropts; if [ "$${OVS_USER_ID/:*/}" != "root" ]; then /bin/echo "OVSUSER=--ovs-user=${OVS_USER_ID}" > /run/openvswitch/useropts; fi' + EnvironmentFile=-/run/openvswitch/useropts +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/systemd-update-tool-paths.patch b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/systemd-update-tool-paths.patch new file mode 100644 index 00000000..d7d4c159 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch-git/systemd-update-tool-paths.patch @@ -0,0 +1,47 @@ +From 163020a5bba1323dc337d72d4771bb81d824b0dc Mon Sep 17 00:00:00 2001 +From: Mark Asselstine <mark.asselstine@windriver.com> +Date: Tue, 29 May 2018 18:57:46 +0000 +Subject: [PATCH] systemd: update tool paths + +We are using the rhel files but we install our tools in a slightly +different path, update accordingly. + +Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> +--- + rhel/usr_lib_systemd_system_ovs-vswitchd.service.in | 4 ++-- + rhel/usr_lib_systemd_system_ovsdb-server.service | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/rhel/usr_lib_systemd_system_ovs-vswitchd.service.in b/rhel/usr_lib_systemd_system_ovs-vswitchd.service.in +index 11b34c6..94c48f8 100644 +--- a/rhel/usr_lib_systemd_system_ovs-vswitchd.service.in ++++ b/rhel/usr_lib_systemd_system_ovs-vswitchd.service.in +@@ -15,8 +15,8 @@ EnvironmentFile=/etc/openvswitch/default.conf + EnvironmentFile=-/etc/sysconfig/openvswitch + EnvironmentFile=-/run/openvswitch/useropts + @begin_dpdk@ +-ExecStartPre=-/bin/sh -c '/usr/bin/chown :$${OVS_USER_ID##*:} /dev/hugepages' +-ExecStartPre=-/usr/bin/chmod 0775 /dev/hugepages ++ExecStartPre=-/bin/sh -c '/bin/chown :$${OVS_USER_ID##*:} /dev/hugepages' ++ExecStartPre=-/bin/chmod 0775 /dev/hugepages + @end_dpdk@ + ExecStart=/usr/share/openvswitch/scripts/ovs-ctl \ + --no-ovsdb-server --no-monitor --system-id=random \ +diff --git a/rhel/usr_lib_systemd_system_ovsdb-server.service b/rhel/usr_lib_systemd_system_ovsdb-server.service +index 70da1ec..694598f 100644 +--- a/rhel/usr_lib_systemd_system_ovsdb-server.service ++++ b/rhel/usr_lib_systemd_system_ovsdb-server.service +@@ -10,8 +10,8 @@ Type=forking + Restart=on-failure + EnvironmentFile=/etc/openvswitch/default.conf + EnvironmentFile=-/etc/sysconfig/openvswitch +-ExecStartPre=/usr/bin/chown ${OVS_USER_ID} /var/run/openvswitch /var/log/openvswitch +-ExecStartPre=/bin/sh -c 'rm -f /run/openvswitch/useropts; if [ "$${OVS_USER_ID/:*/}" != "root" ]; then /usr/bin/echo "OVSUSER=--ovs-user=${OVS_USER_ID}" > /run/openvswitch/useropts; fi' ++ExecStartPre=/bin/chown ${OVS_USER_ID} /var/run/openvswitch /var/log/openvswitch ++ExecStartPre=/bin/sh -c 'rm -f /run/openvswitch/useropts; if [ "$${OVS_USER_ID/:*/}" != "root" ]; then /bin/echo "OVSUSER=--ovs-user=${OVS_USER_ID}" > /run/openvswitch/useropts; fi' + EnvironmentFile=-/run/openvswitch/useropts + ExecStart=/usr/share/openvswitch/scripts/ovs-ctl \ + --no-ovs-vswitchd --no-monitor --system-id=random \ +-- +2.7.4 + diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch.inc b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch.inc new file mode 100644 index 00000000..8aab739b --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch.inc @@ -0,0 +1,162 @@ +SUMMARY = "OpenvSwitch" +DESCRIPTION = "\ + Open vSwitch is a production quality, multilayer virtual switch \ + licensed under the open source Apache 2.0 license. It is designed \ + to enable massive network automation through programmatic extension, \ + while still supporting standard management interfaces and protocols \ + (e.g. NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag) \ + " + +HOMEPAGE = "http://openvswitch.org/" +SECTION = "networking" +LICENSE = "Apache-2" + +DEPENDS += "bridge-utils openssl python3 perl python3-six-native coreutils-native" + +RDEPENDS_${PN} += "util-linux-uuidgen util-linux-libuuid coreutils \ + python3 perl perl-module-strict ${PN}-switch \ + bash python3-twisted python3-six" +RDEPENDS_${PN}-testcontroller = "${PN} lsb ${PN}-pki" +RDEPENDS_${PN}-switch = "${PN} openssl procps util-linux-uuidgen" +RDEPENDS_${PN}-pki = "${PN}" +RDEPENDS_${PN}-brcompat = "${PN} ${PN}-switch" + +# Some installers will fail because of an install order based on +# rdeps. E.g. ovs-pki calls sed in the postinstall. sed may be +# queued for install later. +RDEPENDS_${PN} += "sed gawk grep" + +SRC_URI = "\ + file://openvswitch-switch \ + file://openvswitch-switch-setup \ + file://openvswitch-testcontroller \ + file://openvswitch-testcontroller-setup \ + " + +EXTRA_OECONF += "\ + PYTHON=python3 \ + PYTHON3=python3 \ + PERL=${bindir}/perl \ + " +CONFIGUREOPT_DEPTRACK = "" + +# Don't compile kernel modules by default since it heavily depends on +# kernel version. Use the in-kernel module for now. +# distro layers can enable with EXTRA_OECONF_pn_openvswitch += "" +# EXTRA_OECONF = "--with-linux=${STAGING_KERNEL_DIR} KARCH=${TARGET_ARCH}" + +ALLOW_EMPTY_${PN}-pki = "1" +PACKAGES =+ "${PN}-testcontroller ${PN}-switch ${PN}-brcompat ${PN}-pki" + +FILES_${PN}-testcontroller = "\ + ${sysconfdir}/init.d/openvswitch-testcontroller \ + ${sysconfdir}/default/openvswitch-testcontroller \ + ${sysconfdir}/openvswitch-testcontroller \ + ${bindir}/ovs-testcontroller \ + " + +FILES_${PN}-brcompat = "${sbindir}/ovs-brcompatd" + +FILES_${PN}-switch = "\ + ${sysconfdir}/init.d/openvswitch-switch \ + ${sysconfdir}/default/openvswitch-switch \ + ${systemd_unitdir}/system/ovs-vswitchd.service \ + ${systemd_unitdir}/system/openvswitch.service \ + ${systemd_unitdir}/system/ovsdb-server.service \ + ${sysconfdir}/sysconfig/openvswitch \ + ${sysconfdir}/openvswitch/default.conf \ + " + +# silence a warning +FILES_${PN} += "${datadir}/ovsdbmonitor" +FILES_${PN} += "/run" + +FILES_${PN} += "${libdir}/python${PYTHON_BASEVERSION}/" +inherit autotools update-rc.d systemd python3native + +SYSTEMD_PACKAGES = "${PN}-switch" +SYSTEMD_SERVICE_${PN}-switch = " \ + ovsdb-server.service \ + ovs-vswitchd.service \ + openvswitch.service \ +" + +INITSCRIPT_PACKAGES = "${PN}-switch ${PN}-testcontroller" +INITSCRIPT_NAME_${PN}-switch = "openvswitch-switch" +INITSCRIPT_PARAMS_${PN}-switch = "defaults 71" + +INITSCRIPT_NAME_${PN}-testcontroller = "openvswitch-testcontroller" +INITSCRIPT_PARAMS_${PN}-testcontroller = "defaults 72" + +do_configure_prepend() { + # Work around the for Makefile CC=$(if ....) by swapping out any + # "-Wa," assembly directives with "-Xassembler + CC=`echo '${CC}' | sed 's/-Wa,/-Xassembler /g'` +} + +do_install_prepend() { + SERVICE_FILE="${S}/rhel/usr_lib_systemd_system_ovs-vswitchd.service" + ${S}/build-aux/dpdkstrip.py \ + ${@bb.utils.contains('PACKAGECONFIG','dpdk','--dpdk','--nodpdk',d)} \ + < ${S}/rhel/usr_lib_systemd_system_ovs-vswitchd.service.in \ + > ${SERVICE_FILE} +} + +do_install_append() { + install -d ${D}/${sysconfdir}/default/ + install -m 660 ${WORKDIR}/openvswitch-switch-setup ${D}/${sysconfdir}/default/openvswitch-switch + install -d ${D}/${sysconfdir}/openvswitch-testcontroller + install -m 660 ${WORKDIR}/openvswitch-testcontroller-setup ${D}/${sysconfdir}/default/openvswitch-testcontroller + + install -d ${D}/${sysconfdir}/init.d/ + install -m 755 ${WORKDIR}/openvswitch-testcontroller ${D}/${sysconfdir}/init.d/openvswitch-testcontroller + install -m 755 ${WORKDIR}/openvswitch-switch ${D}/${sysconfdir}/init.d/openvswitch-switch + true || rm -fr ${D}/${datadir}/${PN}/pki + + install -d ${D}/${sysconfdir}/sysconfig + install -m 644 ${S}/rhel/usr_share_openvswitch_scripts_systemd_sysconfig.template \ + ${D}/${sysconfdir}/sysconfig/openvswitch + + install -d ${D}/${sysconfdir}/openvswitch + install -m 644 ${S}/rhel/etc_openvswitch_default.conf \ + ${D}/${sysconfdir}/openvswitch/default.conf + + install -d ${D}/${systemd_unitdir}/system/ + install -m 644 ${S}/rhel/usr_lib_systemd_system_ovs-vswitchd.service \ + ${D}/${systemd_unitdir}/system/ovs-vswitchd.service + install -m 644 ${S}/rhel/usr_lib_systemd_system_openvswitch.service \ + ${D}/${systemd_unitdir}/system/openvswitch.service + install -m 644 ${S}/rhel/usr_lib_systemd_system_ovsdb-server.service \ + ${D}/${systemd_unitdir}/system/ovsdb-server.service + + oe_runmake modules_install INSTALL_MOD_PATH=${D} + install -d ${D}${libdir}/python${PYTHON_BASEVERSION}/site-packages + cp -r ${S}/python/ovstest/ ${D}${libdir}/python${PYTHON_BASEVERSION}/site-packages/ +} + +pkg_postinst_ontarget_${PN}-pki () { + if test ! -d $D/${datadir}/${PN}/pki; then + ovs-pki init --dir=$D/${datadir}/${PN}/pki + fi +} + +pkg_postinst_ontarget_${PN}-testcontroller () { + if test ! -d $D/${datadir}/${PN}/pki; then + ovs-pki init --dir=$D/${datadir}/${PN}/pki + fi + + cd $D/${sysconfdir}/openvswitch-testcontroller + if ! test -e cacert.pem; then + ln -s $D/${datadir}/${PN}/pki/switchca/cacert.pem cacert.pem + fi + if ! test -e privkey.pem || ! test -e cert.pem; then + oldumask=$(umask) + umask 077 + ovs-pki req+sign --dir=$D/${datadir}/${PN}/pki tmp controller >/dev/null + mv tmp-privkey.pem privkey.pem + mv tmp-cert.pem cert.pem + mv tmp-req.pem req.pem + chmod go+r cert.pem req.pem + umask $oldumask + fi +} diff --git a/external/meta-virtualization/recipes-networking/openvswitch/openvswitch_git.bb b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch_git.bb new file mode 100644 index 00000000..a9309332 --- /dev/null +++ b/external/meta-virtualization/recipes-networking/openvswitch/openvswitch_git.bb @@ -0,0 +1,65 @@ +require openvswitch.inc + +DEPENDS += "virtual/kernel" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +RDEPENDS_${PN}-ptest += "\ + python3-logging python3-syslog python3-io \ + python3-fcntl python3-shell python3-xml python3-math \ + python3-datetime python3-netclient python3 sed \ + ldd perl-module-socket perl-module-carp perl-module-exporter \ + perl-module-xsloader python3-netserver python3-threading \ + python3-resource findutils which \ + " + +S = "${WORKDIR}/git" +PV = "2.10.0+${SRCREV}" + +FILESEXTRAPATHS_append := "${THISDIR}/${PN}-git:" + +SRCREV = "5563e309b80bbea9bff538e71ecfd7e5e538bab9" +SRC_URI = "file://openvswitch-switch \ + file://openvswitch-switch-setup \ + file://openvswitch-testcontroller \ + file://openvswitch-testcontroller-setup \ + git://github.com/openvswitch/ovs.git;protocol=git;branch=branch-2.10 \ + file://openvswitch-add-ptest-${SRCREV}.patch \ + file://run-ptest \ + file://disable_m4_check.patch \ + file://kernel_module.patch \ + file://python-make-remaining-scripts-use-usr-bin-env.patch \ + file://0002-Define-WAIT_ANY-if-not-provided-by-system.patch \ + file://python-switch-remaining-scripts-to-use-python3.patch \ + file://systemd-update-tool-paths.patch \ + file://systemd-create-runtime-dirs.patch \ + " + +LIC_FILES_CHKSUM = "file://LICENSE;md5=1ce5d23a6429dff345518758f13aaeab" + +DPDK_INSTALL_DIR ?= "/opt/dpdk" + +PACKAGECONFIG ?= "libcap-ng" +PACKAGECONFIG[dpdk] = "--with-dpdk=${STAGING_DIR_TARGET}${DPDK_INSTALL_DIR}/share/${TARGET_ARCH}-native-linuxapp-gcc,,dpdk,dpdk" +PACKAGECONFIG[libcap-ng] = "--enable-libcapng,--disable-libcapng,libcap-ng," +PACKAGECONFIG[ssl] = ",--disable-ssl,openssl," + +# Don't compile kernel modules by default since it heavily depends on +# kernel version. Use the in-kernel module for now. +# distro layers can enable with EXTRA_OECONF_pn_openvswitch += "" +# EXTRA_OECONF += "--with-linux=${STAGING_KERNEL_BUILDDIR} --with-linux-source=${STAGING_KERNEL_DIR} KARCH=${TARGET_ARCH}" + +# silence a warning +FILES_${PN} += "/lib/modules" + +inherit ptest + +EXTRA_OEMAKE += "TEST_DEST=${D}${PTEST_PATH} TEST_ROOT=${PTEST_PATH}" + +do_install_ptest() { + oe_runmake test-install +} + +do_install_append() { + oe_runmake modules_install INSTALL_MOD_PATH=${D} +} |