diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 4c1a1bb1..d5aae362 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -62,7 +62,6 @@ jobs: matrix: os: - "ubuntu-20.04" - - "macos-latest" rust-target: - "x86_64-unknown-linux-musl" cgroups: @@ -80,7 +79,7 @@ jobs: - name: Test run: | bash ci/linux.sh - timeout-minutes: 10 + timeout-minutes: 20 env: CI_TARGET: ${{ matrix.rust-target }} CI_CGROUPS: ${{ matrix.cgroups }} diff --git a/ci/linux.sh b/ci/linux.sh index db87ebb8..76184f2c 100644 --- a/ci/linux.sh +++ b/ci/linux.sh @@ -6,44 +6,17 @@ echo "Operating system: $CI_OS" echo "this is hack, ignore this file" >> ./stracez-dummy -if [[ $CI_OS == "ubuntu-20.04" ]]; then - if [[ $CI_CGROUPS == "cgroup-v2" ]]; then - echo "Skipping: cgroup v2 runs in macos" - exit 0 - fi -fi -if [[ $CI_OS == "macos-latest" ]]; then - if [[ $CI_CGROUPS == "cgroup-v1" ]]; then - echo "Skipping: cgroup v1 does not need virtualization" - exit 0 - fi -fi - echo "::group::Preparing" if [[ $CI_CGROUPS == "cgroup-v2" ]] && [ -z "${CI_VM+set}" ]; then echo "::group::Preparing virtual machine" - vagrant --version -cat > Vagrantfile < logs.zip + sudo apt install sshpass strace + wget http://ftp.debian.org/debian/pool/main/s/slirp/slirp_1.0.17-8_amd64.deb -O slirp.deb && sudo dpkg -i slirp.deb + ( cd uml-ci; ./main.sh; ) + #sudo sshpass -p user ssh -p 2224 user@127.0.0.1 "cat /vagrant/logs.zip | base64" | base64 --decode > logs.zip # WTF?? + sudo sshpass -p user ssh -p 2224 user@127.0.0.1 sudo poweroff || true rm stracez-dummy - unzip logs.zip + #unzip logs.zip sleep 10 echo "Current directory after VM finish" ls . @@ -63,5 +36,5 @@ sudo --preserve-env ./tests/$CI_TARGET/minion-tests --trace echo "::group::Finalize" echo "Current directory after running tests" ls . -echo "Collecting logs to archive" -zip logs.zip strace* +#echo "Collecting logs to archive" +#zip logs.zip strace* diff --git a/uml-ci/main.sh b/uml-ci/main.sh new file mode 100755 index 00000000..d5dcda66 --- /dev/null +++ b/uml-ci/main.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +set -e + +wget -q https://download.fedoraproject.org/pub/fedora/linux/releases/33/Cloud/x86_64/images/Fedora-Cloud-Base-33-1.2.x86_64.raw.xz -O img.xz +unxz img.xz +wget -q https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.93.tar.xz +tar -xJf linux-5.4.93.tar.xz +( +cd linux-5.4.93 +export ARCH=um +make defconfig +bash +cat >> .config << EOF +CONFIG_CGROUP_PIDS=y +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_MEMCG_SWAP_ENABLED=y +CONFIG_USER_NS=y +CONFIG_PID_NS=y +EOF +make -j3 +) +linux-5.4.93/linux mem=4096M ubda=img rootfstype=hostfs init="$PWD"/uml-setup.sh +linux-5.4.93/linux mem=4096M ubda=img root=/dev/ubda1 rootfstype=ext4 hostfs=.. eth0=slirp,,./uml-slirp.sh & +./uml-ssh.sh diff --git a/uml-ci/payload.sh b/uml-ci/payload.sh new file mode 100755 index 00000000..446e7022 --- /dev/null +++ b/uml-ci/payload.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +sudo dnf install -y strace zip +export CI_OS=fedora +export CI_CGROUPS=cgroup-v2 +export CI_TARGET=x86_64-unknown-linux-musl +export CI_VM=1 +bash ci/linux.sh diff --git a/uml-ci/uml-setup.sh b/uml-ci/uml-setup.sh new file mode 100755 index 00000000..3df3fa53 --- /dev/null +++ b/uml-ci/uml-setup.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +mkdir /dev/mnt +mount /dev/ubda1 /dev/mnt +sed -i 's/.*PermitRootLogin.*/PermitRootLogin yes/' /dev/mnt/etc/ssh/sshd_config +echo >> /dev/mnt/usr/lib/systemd/system/rc-local.service +echo '[Install]' >> /dev/mnt/usr/lib/systemd/system/rc-local.service +echo 'WantedBy=multi-user.target' >> /dev/mnt/usr/lib/systemd/system/rc-local.service +sed -i 's/After=.*/After=sshd.service/' /dev/mnt/usr/lib/systemd/system/rc-local.service +chroot /dev/mnt systemctl enable rc-local +echo '#!/bin/bash + +echo root:root | chpasswd +ifconfig eth0 10.0.2.15 netmask 255.255.255.0 +route add default dev eth0 +echo nameserver 10.0.2.3 > /etc/resolv.conf +ifconfig -a > /dev/console +route > /dev/console +exit 0 +' > /dev/mnt/etc/rc.d/rc.local +chmod +x /dev/mnt/etc/rc.d/rc.local +umount /dev/mnt +sync +poweroff -f diff --git a/uml-ci/uml-slirp.sh b/uml-ci/uml-slirp.sh new file mode 100755 index 00000000..e6b72016 --- /dev/null +++ b/uml-ci/uml-slirp.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +exec slirp-fullbolt 'host addr 10.0.2.2' 'redir tcp 2224 10.0.2.15:22' diff --git a/uml-ci/uml-ssh.sh b/uml-ci/uml-ssh.sh new file mode 100755 index 00000000..dc0e4123 --- /dev/null +++ b/uml-ci/uml-ssh.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# wait for vm startup +while ! echo incompatible | nc 127.0.0.1 2224; do sleep 1; done + +set -e + +sleep 10 +sshpass -p root ssh -v -o 'StrictHostKeyChecking no' -p 2224 root@127.0.0.1 'sed -i '"'"'s/.*wheel.*/#\0/'"'"' /etc/sudoers; sed -i '"'"'s/#*\(.*wheel.*NOPASSWD.*\)/\1/'"'"' /etc/sudoers; adduser -g wheel --uid '"$(id -u)"' user; echo user:user | chpasswd' +sshpass -p user ssh -v -o 'StrictHostKeyChecking no' -p 2224 user@127.0.0.1 'sudo mount -t hostfs hostfs ~; cd; exec uml-ci/payload.sh'