commit:     57d291e49e5502dae4161d0d48e34bf223cfdce8
Author:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
AuthorDate: Fri Aug 28 22:07:49 2020 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Sun Aug 30 00:24:38 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=57d291e4

eclass/kernel-install.eclass: rework tests

instead of using linux image we compile tiny static binary and use
it as /sbin/init
image is simply created using mkfs.ext4 -d option

arm tests need qemu keyworded, so disabled for now

Closes: https://github.com/gentoo/gentoo/pull/17305
Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 eclass/kernel-install.eclass          | 119 +++++++++++++++++++++++++++-------
 sys-kernel/gentoo-kernel-bin/Manifest |   2 -
 sys-kernel/gentoo-kernel/Manifest     |   2 -
 sys-kernel/vanilla-kernel/Manifest    |   2 -
 4 files changed, 96 insertions(+), 29 deletions(-)

diff --git a/eclass/kernel-install.eclass b/eclass/kernel-install.eclass
index f834670d457..e826626e13f 100644
--- a/eclass/kernel-install.eclass
+++ b/eclass/kernel-install.eclass
@@ -40,18 +40,7 @@ case "${EAPI:-0}" in
                ;;
 esac
 
-inherit mount-boot
-
-TCL_VER=10.1
-SRC_URI+="
-       test? (
-               amd64? (
-                       
https://dev.gentoo.org/~mgorny/dist/tinycorelinux-${TCL_VER}-amd64.qcow2
-               )
-               x86? (
-                       
https://dev.gentoo.org/~mgorny/dist/tinycorelinux-${TCL_VER}-x86.qcow2
-               )
-       )"
+inherit mount-boot toolchain-funcs
 
 SLOT="${PV}"
 IUSE="+initramfs test"
@@ -59,8 +48,6 @@ RESTRICT+="
        !test? ( test )
        test? ( userpriv )
        arm? ( test )
-       arm64? ( test )
-       ppc64? ( test )
 "
 
 # install-DEPEND actually
@@ -74,8 +61,12 @@ RDEPEND="
 BDEPEND="
        test? (
                dev-tcltk/expect
+               sys-apps/coreutils
                sys-kernel/dracut
+               sys-fs/e2fsprogs
                amd64? ( app-emulation/qemu[qemu_softmmu_targets_x86_64] )
+               arm64? ( app-emulation/qemu[qemu_softmmu_targets_aarch64] )
+               ppc64? ( app-emulation/qemu[qemu_softmmu_targets_ppc64] )
                x86? ( app-emulation/qemu[qemu_softmmu_targets_i386] )
        )"
 
@@ -206,12 +197,68 @@ kernel-install_get_qemu_arch() {
                arm64)
                        echo aarch64
                        ;;
+               ppc64)
+                       echo ppc64
+                       ;;
                *)
                        die "${FUNCNAME}: unsupported ARCH=${ARCH}"
                        ;;
        esac
 }
 
+# @FUNCTION: kernel-install_create_init
+# @USAGE: <filename>
+# @DESCRIPTION:
+# Create minimal /sbin/init
+kernel-install_create_init() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       [[ ${#} -eq 1 ]] || die "${FUNCNAME}: invalid arguments"
+       [[ -z ${1} ]] && die "${FUNCNAME}: empty argument specified"
+
+       local output="${1}"
+       [[ -f ${output} ]] && die "${FUNCNAME}: ${output} already exists"
+
+       cat <<-_EOF_ >"${T}/init.c" || die
+               #include <stdio.h>
+               int main() {
+                       printf("Hello, World!\n");
+                       return 0;
+               }
+       _EOF_
+
+       $(tc-getBUILD_CC) -Os -static "${T}/init.c" -o "${output}" || die 
+       $(tc-getBUILD_STRIP) "${output}" || die
+}
+
+# @FUNCTION: kernel-install_create_qemu_image
+# @USAGE: <filename>
+# @DESCRIPTION:
+# Create minimal qemu raw image
+kernel-install_create_qemu_image() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       [[ ${#} -eq 1 ]] || die "${FUNCNAME}: invalid arguments"
+       [[ -z ${1} ]] && die "${FUNCNAME}: empty argument specified"
+
+       local image="${1}"
+       [[ -f ${image} ]] && die "${FUNCNAME}: ${image} already exists"
+
+       local imageroot="${T}/imageroot"
+       [[ -d ${imageroot} ]] && die "${FUNCNAME}: ${imageroot} already exists"
+       mkdir "${imageroot}" || die
+
+       # some layout needed to pass dracut's usable_root() validation
+       mkdir -p "${imageroot}"/{bin,dev,etc,lib,proc,root,sbin,sys} || die
+       touch "${imageroot}/lib/ld-fake.so" || die
+
+       kernel-install_create_init "${imageroot}/sbin/init"
+
+       # image may be smaller if needed
+       truncate -s 4M "${image}" || die
+       mkfs.ext4 -v -d "${imageroot}" -L groot "${image}" || die
+}
+
 # @FUNCTION: kernel-install_test
 # @USAGE: <version> <image> <modules>
 # @DESCRIPTION:
@@ -234,25 +281,43 @@ kernel-install_test() {
                --no-hostonly \
                --kmoddir "${modules}" \
                "${T}/initrd" "${version}" || die
-       # get a read-write copy of the disk image
-       cp "${DISTDIR}/tinycorelinux-${TCL_VER}-${ARCH}.qcow2" \
-               "${T}/fs.qcow2" || die
+
+       kernel-install_create_qemu_image "${T}/fs.img"
 
        cd "${T}" || die
+
        local qemu_extra_args=
-       [[ ${qemu_arch} == x86_64 ]] && qemu_extra_args='-cpu max'
+       local qemu_extra_append=
+
+       case ${qemu_arch} in
+               aarch64)
+                       qemu_extra_args="-M virt -cpu cortex-a57 -smp 1"
+                       qemu_extra_append="console=ttyAMA0"
+                       ;;
+               i386|x86_64)
+                       qemu_extra_args="-cpu max"
+                       qemu_extra_append="console=ttyS0,115200n8"
+                       ;;
+               ppc64)
+                       qemu_extra_args="-nodefaults"
+                       ;;
+               *)
+                       :
+                       ;;
+       esac
+
        cat > run.sh <<-EOF || die
                #!/bin/sh
                exec qemu-system-${qemu_arch} \
                        ${qemu_extra_args} \
-                       -m 256M \
-                       -display none \
+                       -m 512M \
+                       -nographic \
                        -no-reboot \
                        -kernel '${image}' \
                        -initrd '${T}/initrd' \
                        -serial mon:stdio \
-                       -hda '${T}/fs.qcow2' \
-                       -append 'root=/dev/sda console=ttyS0,115200n8'
+                       -drive file=fs.img,format=raw,index=0,media=disk \
+                       -append 'root=LABEL=groot ${qemu_extra_append}'
        EOF
        chmod +x run.sh || die
        # TODO: initramfs does not let core finish starting on some systems,
@@ -261,6 +326,14 @@ kernel-install_test() {
                set timeout 900
                spawn ./run.sh
                expect {
+                       "terminating on signal" {
+                               send_error "\n* Qemu killed"
+                               exit 1
+                       }
+                       "OS terminated" {
+                               send_error "\n* Qemu terminated OS"
+                               exit 1
+                       }
                        "Kernel panic" {
                                send_error "\n* Kernel panic"
                                exit 1
@@ -269,7 +342,7 @@ kernel-install_test() {
                                send_error "\n* Initramfs failed to start the 
system"
                                exit 1
                        }
-                       "Core 10.1" {
+                       "Hello, World!" {
                                send_error "\n* Booted successfully"
                                exit 0
                        }

diff --git a/sys-kernel/gentoo-kernel-bin/Manifest 
b/sys-kernel/gentoo-kernel-bin/Manifest
index 2fc18cb3cf1..b55c2b0ad9f 100644
--- a/sys-kernel/gentoo-kernel-bin/Manifest
+++ b/sys-kernel/gentoo-kernel-bin/Manifest
@@ -22,5 +22,3 @@ DIST gentoo-kernel-5.8.4-1.x86.xpak 56574861 BLAKE2B 
350f0609733fc8a9e76ba81ee5f
 DIST gentoo-kernel-5.8.5-1.amd64.xpak 64641722 BLAKE2B 
623b91448b017791f8d1597be27cf01e3a44be035d3e724f1693e6ea9bed203429ba586b2b3b941da07888053d7fa71e7907051315d144d139d759348be3f4a6
 SHA512 
b6963f4fb1d9d3b3dde64bd8505b3f4fb5ef23e2e0d8f774cb1ab36dc2cdc3accefbcb6eba8ff624a5ee1e2b9a5d15f17f17225bf90afb20a3e9c02027b049d6
 DIST gentoo-kernel-5.8.5-1.arm64.xpak 61961042 BLAKE2B 
8c920e52d3888270714206b4287ad2e0741b9b474ea6e64d7afbcafa8f84dceabeba88df87f5bc5f26bc1d23a5fb9b9b564a50e7eaa9a5ccea98ca581837d24d
 SHA512 
1fb55a01f43197fb760d35e7c36d30e7b7d97c5df36ac1a012067df6b5d20f8af619d41d63181832a2db0318a95ab196568af34665adfaf8661dd1450aa9ee8d
 DIST gentoo-kernel-5.8.5-1.x86.xpak 56586150 BLAKE2B 
d0ff52cec539f85c7971cf69f882a82f937123d9e0464b685f86895080d32e3a3e17ab53dd952633bf827242519de9cc0a22915ef84872219314ea4143157e8c
 SHA512 
273504c8521468ac24e287feab1b6bc7e7d93ffe7ca577ee2e692791b9ba2221004e53dbce00837832a1c11996785b94b601f88b76cb9b5eac1c743e263e9eff
-DIST tinycorelinux-10.1-amd64.qcow2 16842752 BLAKE2B 
e013e76503c335739a9623c0901ca791937a0e6b177854535cadec1e2c2cd2df588283ed3128cf652595f32264fbfe5b3bd3a8c97665fd4da344e308535be366
 SHA512 
c3aeb20ff8769da9211694b7f701907cc7ae7582cdfad2c2fdc008d97ebcbd9dc08245b4e8f8450e1cb304bd705345a11fe79f901a47979fee91443841d55641
-DIST tinycorelinux-10.1-x86.qcow2 14876672 BLAKE2B 
3c760eb7438b13261e52ecfaa33a53649ced95f1ab40aae52134b8cdc31a16d7aa0d6a6dd716e268ed148e9d77a10b7c700b141b61d70c82d271ffe88e8e2a3c
 SHA512 
9964538dc42f232a11949f74b61d46422ea5da3bdc253a217119bd0b8a750c40fd2da0b07157067be9ac0226472614f210a1248114df0d331df390979867a895

diff --git a/sys-kernel/gentoo-kernel/Manifest 
b/sys-kernel/gentoo-kernel/Manifest
index a4dbd36f563..70d95b56f08 100644
--- a/sys-kernel/gentoo-kernel/Manifest
+++ b/sys-kernel/gentoo-kernel/Manifest
@@ -31,5 +31,3 @@ DIST kernel-x86_64.config.5.4.21 184907 BLAKE2B 
0eb2b07c14cea7545350fcdf3a94f2a5
 DIST linux-5.4.tar.xz 109441440 BLAKE2B 
193bc4a3147e147d5529956164ec4912fad5d5c6fb07f909ff1056e57235834173194afc686993ccd785c1ff15804de0961b625f3008cca0e27493efc8f27b13
 SHA512 
9f60f77e8ab972b9438ac648bed17551c8491d6585a5e85f694b2eaa4c623fbc61eb18419b2656b6795eac5deec0edaa04547fc6723fbda52256bd7f3486898f
 DIST linux-5.7.tar.xz 112690468 BLAKE2B 
b2b71e231507429b178b6b89be546c4a3ee2757f5d2c58b6137d383f16034a587225a75a9dbca6a01a433056ebe078487132c224e909a2971c9634687e47b1d1
 SHA512 
45bde01593f6147c8c169b9e46b4b56eee998142552ae0ff82f1dd21b1fd54f3b32f6283f6bd77ea717d374672167849e468c157f235d2f12f7d7816e4623bf6
 DIST linux-5.8.tar.xz 114459324 BLAKE2B 
7bd97f8fa4527840754434414c07283e89731dc8ebb1e95fa5bc1469a60af1122582c0d3b6e262e77882f023190068df3537bd8b65964b3caa820bb2c8e579c7
 SHA512 
45a53ecf351096ef6e98242cca4228b8da9b9139ecc6963695791ea6fb7a9484a4e1c19dcca7ce7cbfdfa49de0451b70973bb078f12bdae9cbaddbc3f8092556
-DIST tinycorelinux-10.1-amd64.qcow2 16842752 BLAKE2B 
e013e76503c335739a9623c0901ca791937a0e6b177854535cadec1e2c2cd2df588283ed3128cf652595f32264fbfe5b3bd3a8c97665fd4da344e308535be366
 SHA512 
c3aeb20ff8769da9211694b7f701907cc7ae7582cdfad2c2fdc008d97ebcbd9dc08245b4e8f8450e1cb304bd705345a11fe79f901a47979fee91443841d55641
-DIST tinycorelinux-10.1-x86.qcow2 14876672 BLAKE2B 
3c760eb7438b13261e52ecfaa33a53649ced95f1ab40aae52134b8cdc31a16d7aa0d6a6dd716e268ed148e9d77a10b7c700b141b61d70c82d271ffe88e8e2a3c
 SHA512 
9964538dc42f232a11949f74b61d46422ea5da3bdc253a217119bd0b8a750c40fd2da0b07157067be9ac0226472614f210a1248114df0d331df390979867a895

diff --git a/sys-kernel/vanilla-kernel/Manifest 
b/sys-kernel/vanilla-kernel/Manifest
index 47cbb13c643..94bbdb60256 100644
--- a/sys-kernel/vanilla-kernel/Manifest
+++ b/sys-kernel/vanilla-kernel/Manifest
@@ -18,5 +18,3 @@ DIST linux-5.7.19.tar.xz 112742648 BLAKE2B 
408fdc49f8a341f6d7c0fead1ddc1b0816caf
 DIST linux-5.8.3.tar.xz 114473912 BLAKE2B 
9d2913bbaf4afabd8f654abd0a2a3c62df043a613cbc2518944f5889d1a760ab6401e76d0b67b0cc9fbe05c8a0e280fe9b2ebf125f50ff5962f097956642fd8e
 SHA512 
a23973139bf105e202621f6181be366e1a933aefd1da9a347d3a19c0917ba16dd271b5c8d90a8c527791fb0f7535a1cc1bbecd118598b500c881d16ff7d64157
 DIST linux-5.8.4.tar.xz 114478188 BLAKE2B 
d9cb7a130e69de2fd176e5ce4236cfe5f4f31cf96f963a1f04e94958d0b064a7cf34c5a2d7e37500892fd840214ce1fc6f2ffb3050cbf8678ffe612bbd1cf51d
 SHA512 
b1fb4586932369f2853360aaab702baaa994be5a88c0a746b7272d7c29c864ac2f0302bd82664f58d29f7b464bc98603167211ea886aa15ea1cd6d12d422ba61
 DIST linux-5.8.5.tar.xz 114482912 BLAKE2B 
751cded511b08dd541cd6ae2365602068138641d4a6ade4205936dd1ec1de5a01441a2822afde25fd83004896e8ae02a70af37482dc4b09fa9fc52ca8bd05a8c
 SHA512 
30832e10d14f87f62542cc8a58d2d7d54cbfd0e99de772f79364354a09c2aff2c5bd07bcd06e1e7523a404aa39829355b6b198334472d3070dc7a4f810ed0f20
-DIST tinycorelinux-10.1-amd64.qcow2 16842752 BLAKE2B 
e013e76503c335739a9623c0901ca791937a0e6b177854535cadec1e2c2cd2df588283ed3128cf652595f32264fbfe5b3bd3a8c97665fd4da344e308535be366
 SHA512 
c3aeb20ff8769da9211694b7f701907cc7ae7582cdfad2c2fdc008d97ebcbd9dc08245b4e8f8450e1cb304bd705345a11fe79f901a47979fee91443841d55641
-DIST tinycorelinux-10.1-x86.qcow2 14876672 BLAKE2B 
3c760eb7438b13261e52ecfaa33a53649ced95f1ab40aae52134b8cdc31a16d7aa0d6a6dd716e268ed148e9d77a10b7c700b141b61d70c82d271ffe88e8e2a3c
 SHA512 
9964538dc42f232a11949f74b61d46422ea5da3bdc253a217119bd0b8a750c40fd2da0b07157067be9ac0226472614f210a1248114df0d331df390979867a895

Reply via email to