From 281ab1f7dc2ae279694b40bea0b6b463238a05d8 Mon Sep 17 00:00:00 2001 From: Marco Guerri Date: Sat, 14 Nov 2020 14:27:51 +0000 Subject: [PATCH] Improved all scripts --- Dockerfile | 8 ++-- .../images/core-image-minimal.bbappend | 1 - run.sh | 35 ++++++++++++++ .../build_image.sh => scripts/build.sh | 0 scripts/{build_container.sh => buildc.sh} | 0 scripts/copy_image.sh | 6 --- .../run_qemu.sh => scripts/emulate.sh | 47 +++++++++++-------- scripts/run_build_in_container.sh | 27 ----------- 8 files changed, 66 insertions(+), 58 deletions(-) create mode 100755 run.sh rename build_scripts/build_image.sh => scripts/build.sh (100%) rename scripts/{build_container.sh => buildc.sh} (100%) delete mode 100755 scripts/copy_image.sh rename build_scripts/run_qemu.sh => scripts/emulate.sh (77%) delete mode 100755 scripts/run_build_in_container.sh diff --git a/Dockerfile b/Dockerfile index 2b2182c..598880a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -55,8 +55,8 @@ RUN mkdir $home/openembedded/build COPY --chown=dev:dev layer/local.conf $home/openembedded/build/conf/local.conf COPY --chown=dev:dev layer/bblayers.conf $home/openembedded/build/conf/bblayers.conf -COPY --chown=dev:dev build_scripts/run_qemu.sh $home -COPY --chown=dev:dev build_scripts/build_image.sh $home +COPY --chown=dev:dev scripts/emulate.sh $home +COPY --chown=dev:dev scripts/build.sh $home -RUN chmod u+x $home/run_qemu.sh -RUN chmod u+x $home/build_image.sh +RUN chmod u+x $home/emulate.sh +RUN chmod u+x $home/build.sh diff --git a/layer/recipes-core/images/core-image-minimal.bbappend b/layer/recipes-core/images/core-image-minimal.bbappend index 8aa735d..c4ca2c3 100644 --- a/layer/recipes-core/images/core-image-minimal.bbappend +++ b/layer/recipes-core/images/core-image-minimal.bbappend @@ -21,7 +21,6 @@ IMAGE_INSTALL += " \ kernel-modules \ psmisc \ procps \ - rtl8192 \ iw \ tmux \ glibc-utils \ diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..fa271fd --- /dev/null +++ b/run.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -eu + +[[ $(whoami) != "root" ]] && echo "Please run this script as root" && exit 1 + +if docker volume inspect oe_build_volume >& /dev/null; then + echo "Docker volume oe_build_volume already exists..." +else + echo "Creating docker volume" + docker volume create oe_build_volume +fi + +if docker inspect c_oe_build >& /dev/null; then + echo "Docker container already exists, restarting..." + docker stop c_oe_build + docker start -ai c_oe_build +else + + if ! docker image inspect oe_build >& /dev/null; then + echo "Image does not exist, building it..." + docker build -t oe_build . + fi + echo "Creating container based on oe_build image" + docker run \ + --cap-add=ALL \ + --cap-add=NET_ADMIN \ + --cap-add=SETUID \ + --cap-add=SETGID \ + --cap-add=AUDIT_WRITE \ + -v oe_build_volume:/home/dev/openembedded/build \ + --device /dev/net/tun:/dev/net/tun \ + -it \ + --name c_oe_build oe_build \ + /home/dev/build.sh +fi diff --git a/build_scripts/build_image.sh b/scripts/build.sh similarity index 100% rename from build_scripts/build_image.sh rename to scripts/build.sh diff --git a/scripts/build_container.sh b/scripts/buildc.sh similarity index 100% rename from scripts/build_container.sh rename to scripts/buildc.sh diff --git a/scripts/copy_image.sh b/scripts/copy_image.sh deleted file mode 100755 index 092dab0..0000000 --- a/scripts/copy_image.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -set -eu - -[[ $(whoami) != "root" ]] && echo "Please run this script as root" && exit 1 -docker cp -L oe_build:/home/dev/openembedded/build/tmp-glibc/deploy/images/raspberrypi2/core-image-minimal-raspberrypi2.rpi-sdimg . diff --git a/build_scripts/run_qemu.sh b/scripts/emulate.sh similarity index 77% rename from build_scripts/run_qemu.sh rename to scripts/emulate.sh index 9e9444b..d624f68 100755 --- a/build_scripts/run_qemu.sh +++ b/scripts/emulate.sh @@ -1,13 +1,18 @@ #!/bin/bash set -ex +OE_ROOT="/home/dev/openembedded" -platform=${1} - -case "$platform" in - x86_64 ) echo "Starting qemu x86_64"; build=1;; - arm ) echo "Starting qemu arm"; build=0;; - * ) echo "Invalid platform"; exit 1;; +machine=$(grep "^MACHINE" ${OE_ROOT}/build/conf/local.conf | sed 's/[^"]*"\([^"]*\)"/\1/') +case "${machine}" in + qemux86-64) + ;; + *arm*) + ;; + *) + echo "Machine type not supported: ${machine}" + exit 1 + ;; esac # Container privileges required: @@ -36,34 +41,36 @@ esac # Setup bridge -sudo /sbin/ip link set down dev br0 && /sbin/brctl delbr br0 || true +if ! /sbin/brctl show br0; then + sudo /sbin/ip link add name br0 type bridge + sudo /sbin/ip link set eth0 master br0 +fi -sudo /sbin/ip link add name br0 type bridge -sudo /sbin/ip link set eth0 master br0 sudo /sbin/ip addr flush dev eth0 +sudo /sbin/ip addr flush dev br0 sudo /sbin/dhclient br0 -sudo /sbin/ip link set down dev tap0 && sudo /sbin/ip link delete tap0 || true -# Setup tap device for qemu -sudo /sbin/ip tuntap add tap0 mode tap -sudo /sbin/brctl addif br0 tap0 +if ! /sbin/ip link show tap0; then + sudo /sbin/ip tuntap add tap0 mode tap + sudo /sbin/ip link set tap0 master br0 + sudo /sbin/ip link set tap0 up +fi -if [[ ${platform} == "x86_64" ]]; then +if [[ ${machine} == "qemux86-64" ]]; then ( - deploy_dir=~dev/openembedded/openembedded-core/build/tmp-glibc/deploy/images/qemux86-64 + deploy_dir="${OE_ROOT}/build/tmp-glibc/deploy/images/${machine}" qemu-system-x86_64 -kernel ${deploy_dir}/bzImage \ --append "console=ttyS0 root=/dev/vda" \ -nographic \ -serial mon:stdio \ - -drive file=${deploy_dir}/core-image-minimal-qemux86-64.ext4,if=virtio,format=raw \ - -device e1000,macaddr=00:11:22:33:44:55,id=hintf \ - -netdev tap,ifname=tap0,id=hintf,script=no - + -drive file=${deploy_dir}/core-image-minimal-${machine}.ext4,if=virtio,format=raw \ + -netdev tap,id=network0,ifname=tap0,script=no,downscript=no \ + -device e1000,netdev=network0,mac=00:11:22:33:44:55 ) else ( - deploy_dir=~dev/openembedded/build/tmp-glibc/deploy/images/raspberrypi2/ + deploy_dir="${OE_ROOT}/build/tmp-glibc/deploy/images/raspberrypi2/" # Note: all the append kernel command line parameters effectively # overwrite what is written in cmdline.txt (the file used by Rpi bootloader # to populate kernel command line arguments according to the boot protocol), diff --git a/scripts/run_build_in_container.sh b/scripts/run_build_in_container.sh deleted file mode 100755 index 886a4a6..0000000 --- a/scripts/run_build_in_container.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/bash - -[[ $(whoami) != "root" ]] && echo "Please run this script as root" && exit 1 - -( - docker volume inspect oe_build_bolume >& /dev/null && \ - echo "Docker volume oe_build_volume already exists..." || \ - docker volume create oe_build_volume - - docker inspect oe_build >& /dev/null && \ - echo "Docker container already exists, restarting..." && \ - docker stop oe_build && \ - docker start -ai oe_build - -) || docker run \ - --cap-add=NET_ADMIN \ - --cap-add=SETUID \ - --cap-add=SETGID \ - --cap-add=AUDIT_WRITE \ - --cap-add=NET_RAW \ - --security-opt apparmor:unconfined \ - -v oe_build_volume:/home/dev/openembedded/build \ - --device /dev/net/tun:/dev/net/tun \ - --cpuset-cpus 0-3 \ - -it \ - --name oe_build oe_build \ - /home/dev/build_image.sh