Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unexpected bash readable test result with GitHub Actions

MWE

I have a GitHub Actions workflow that recently stopped working without me making changes. The error:

==> ERROR: /etc/makepkg.conf not found.
    Aborting...

This is from running # sudo -Eu builder makepkg --printsrcinfo.

  • Source
  • Logs

The order of the logs seem to be wrong but it is correct in an earlier log (possibly due to ls -l having a large output).

The source of this error seems to be libmakepkg/util/config.sh.in:

    # Source the config file; fail if it is not found
    if [[ -r $MAKEPKG_CONF ]]; then
        source_safe "$MAKEPKG_CONF"
    else
        error "$(gettext "%s not found.")" "$MAKEPKG_CONF"
        plainerr "$(gettext "Aborting...")"
        exit $E_CONFIG_ERROR
    fi

I added the following to my entrypoint script:

echo "Writing SRCINFO..."

# Debug
echo "---"
ls -l /
echo "---"
ls -l /etc
echo "---"
sudo -Eu builder cat /etc/makepkg.conf
echo "---"
sudo -Eu builder /bin/bash -c "[[ -r "/etc/makepkg.conf" ]] && echo 1 || echo 0"
echo "---"

sudo -Eu builder makepkg --printsrcinfo > .SRCINFO

The builder user is created in build.sh:

useradd builder -m
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

I got:

Setting permissions...
Writing SRCINFO...
---
total 52
lrwxrwxrwx   1 root root    7 Feb  1 19:19 bin -> usr/bin
drwxr-xr-x   2 root root 4096 Jan 19 01:32 boot
drwxr-xr-x   5 root root  340 Feb  7 11:58 dev
-rwxr-xr-x   1 root root  836 Feb  7 11:57 entrypoint.sh
drwxr-xr-x   1 root root 4096 Feb  7 11:58 etc
drwxr-xr-x   6 root root 4096 Feb  7 11:58 github
drwxr-xr-x   1 root root 4096 Feb  7 11:57 home
lrwxrwxrwx   1 root root    7 Feb  1 19:19 lib -> usr/lib
lrwxrwxrwx   1 root root    7 Feb  1 19:19 lib64 -> usr/lib
drwxr-xr-x   2 root root 4096 Jan 19 01:32 mnt
drwxr-xr-x   2 root root 4096 Jan 19 01:32 opt
dr-xr-xr-x 159 root root    0 Feb  7 11:58 proc
drwxr-x---   2 root root 4096 Jan 19 01:32 root
drwxr-xr-x   1 root root 4096 Feb  7 11:58 run
lrwxrwxrwx   1 root root    7 Feb  1 19:19 sbin -> usr/bin
drwxr-xr-x   4 root root 4096 Feb  1 19:19 srv
dr-xr-xr-x  12 root root    0 Feb  7 11:58 sys
drwxrwxrwt   2 root root 4096 Jan 19 01:32 tmp
drwxr-xr-x   1 root root 4096 Feb  7 11:57 usr
drwxr-xr-x   1 root root 4096 Feb  1 19:19 var
---
total 640
-rw-r--r-- 1 root root      0 Jan 19 01:32 arch-release
drwxr-xr-x 3 root root   4096 Feb  1 19:19 audit
-rw-r--r-- 1 root root     28 Dec 20 18:44 bash.bash_logout
-rw-r--r-- 1 root root    618 Dec 20 18:44 bash.bashrc
-rw-r--r-- 1 root root    447 Dec  2 16:02 bindresvport.blacklist
drwxr-xr-x 2 root root   4096 Dec 16 14:38 binfmt.d
drwxr-xr-x 4 root root   4096 Feb  1 19:19 ca-certificates
-rw------- 1 root root    722 Jan 19 01:32 crypttab
drwxr-xr-x 2 root root   4096 Feb  1 19:19 default
drwxr-xr-x 2 root root   4096 Jan  7 19:51 depmod.d
-rw-r--r-- 1 root root    685 Jan 31 20:31 e2scrub.conf
-rw-r--r-- 1 root root     97 Jan 13 22:50 environment
-rw-r--r-- 1 root root   1362 Jan 20 21:31 ethertypes
-rw-r--r-- 1 root root    126 Jan 19 01:32 fstab
-rw-r--r-- 1 root root   2584 Feb  6 00:09 gai.conf
-rw-r--r-- 1 root root    626 Feb  7 11:57 group
-rw-r--r-- 1 root root    610 Jan 31 00:20 group-
-rw------- 1 root root    558 Feb  7 11:57 gshadow
-rw------- 1 root root    546 Jan 31 00:20 gshadow-
-rw-r--r-- 1 root root     73 Jan 19 01:32 host.conf
-rw-r--r-- 1 root root     13 Feb  7 11:58 hostname
-rw-r--r-- 1 root root    174 Feb  7 11:58 hosts
-rw-r--r-- 1 root root    714 Dec  8 17:48 inputrc
drwxr-xr-x 2 root root   4096 Feb  1 19:19 iproute2
drwxr-xr-x 2 root root   4096 Feb  1 19:19 iptables
-rw-r--r-- 1 root root     20 Jan 19 01:32 issue
drwxr-xr-x 3 root root   4096 Feb  1 19:19 kernel
drwxr-xr-x 2 root root   4096 Jul  7  2020 keyutils
-rw-r--r-- 1 root root    369 Jan 14 00:32 krb5.conf
-rw-r--r-- 1 root root  18096 Feb  7 11:57 ld.so.cache
-rw-r--r-- 1 root root    117 Jan 19 01:32 ld.so.conf
drwxr-xr-x 1 root root   4096 Feb  7 11:57 ld.so.conf.d
-rw-r----- 1 root root    191 Jan 13 22:33 libaudit.conf
drwxr-xr-x 2 root root   4096 Feb  1 19:19 libnl
-rw-r--r-- 1 root root     17 Jan 31 00:19 locale.conf
-rw-r--r-- 1 root root     18 Jan 31 00:19 locale.gen
-rw-r--r-- 1 root root   9984 Feb  6 00:09 locale.gen.pacnew
-rw-r--r-- 1 root root   5645 Sep  7 13:42 login.defs
-rw-r--r-- 1 root root   5792 Jul  1  2020 makepkg.conf
-rw-r--r-- 1 root root    812 Jan 31 20:31 mke2fs.conf
drwxr-xr-x 2 root root   4096 Jan  7 19:51 modprobe.d
drwxr-xr-x 2 root root   4096 Dec 16 14:38 modules-load.d
-rw-r--r-- 1 root root      0 Jan 19 01:32 motd
lrwxrwxrwx 1 root root     12 Feb  7 11:58 mtab -> /proc/mounts
-rw-r--r-- 1 root root    767 Dec  2 16:02 netconfig
-rw-r--r-- 1 root root   2717 Feb  6 00:09 nscd.conf
-rw-r--r-- 1 root root    328 Jan 19 01:32 nsswitch.conf
drwxr-xr-x 1 root root   4096 Feb  7 11:57 openldap
lrwxrwxrwx 1 root root     19 Feb  1 19:19 os-release -> /usr/lib/os-release
-rw-r--r-- 1 root root   3264 Feb  7 11:57 pacman.conf
-rw-r--r-- 1 root root   2883 Jul  1  2020 pacman.conf.pacnew
drwxr-xr-x 1 root root   4096 Feb  7 11:57 pacman.d
drwxr-xr-x 1 root root   4096 Feb  7 11:57 pam.d
-rw-r--r-- 1 root root    744 Feb  7 11:57 passwd
-rw-r--r-- 1 root root    699 Jan 31 00:20 passwd-
drwxr-xr-x 2 root root   4096 Feb  1 19:19 pkcs11
-rw-r--r-- 1 root root   1020 Jan 19 01:32 profile
drwxr-xr-x 1 root root   4096 Feb  7 11:57 profile.d
-rw-r--r-- 1 root root   3171 Jan  3 17:14 protocols
-rw-r--r-- 1 root root   1814 Jul  7  2020 request-key.conf
drwxr-xr-x 2 root root   4096 Jul  7  2020 request-key.d
-rw-r--r-- 1 root root    649 Feb  7 11:58 resolv.conf
-rw-r--r-- 1 root root   1634 Feb  6 00:09 rpc
-rw-r--r-- 1 root root    139 Jan 19 01:32 securetty
drwxr-xr-x 2 root root   4096 Feb  1 19:19 security
-rw-r--r-- 1 root root 297708 Jan  3 17:14 services
-rw------- 1 root root    375 Feb  7 11:57 shadow
-rw------- 1 root root    346 Jan 31 00:20 shadow-
-rw-r--r-- 1 root root     83 Jan 19 01:32 shells
drwxr-xr-x 2 root root   4096 Feb  1 19:19 skel
drwxr-xr-x 5 root root   4096 Feb  1 19:19 ssl
-rw-r--r-- 1 root root   3975 Jan 26 18:34 sudo.conf
-r--r----- 1 root root   3160 Feb  7 11:57 sudoers
drwxr-x--- 2 root root   4096 Jan 26 18:34 sudoers.d
-rw-r--r-- 1 root root   6169 Jan 26 18:34 sudo_logsrvd.conf
drwxr-xr-x 2 root root   4096 Dec 16 14:38 sysctl.d
drwxr-xr-x 1 root root   4096 Feb  7 11:57 systemd
drwxr-xr-x 2 root root   4096 Dec 16 14:38 tmpfiles.d
drwxr-xr-x 1 root root   4096 Feb  7 11:57 udev
drwxr-xr-x 1 root root   4096 Feb  1 19:19 X11
-rw-r--r-- 1 root root    642 May  7  2020 xattr.conf
drwxr-xr-x 1 root root   4096 Feb  1 19:19 xdg
drwxr-xr-x 2 root root   4096 Feb  1 19:19 xinetd.d
---
#!/hint/bash
#
# /etc/makepkg.conf
#
...
SRCEXT='.src.tar.gz'
---
0
---
==> ERROR: /etc/makepkg.conf not found.
    Aborting...

(The contents of /etc/makepkg.conf was concatenated.)

I also accidentally did [[ -r "/etc/makepkg.conf" ]] && echo 1 || echo 0 (as root) and I also got 0.

How is it possible that a file is not readable yet I can cat it? I also tried running the exact same commands in a local container and couldn't reproduce this issue, but this has happened every GitHub Actions run since it started.

This makes me think the Actions setup is causing an issue, but nothing seems odd there:

/usr/bin/docker build -t 442333:35a065f0b9f356b32f2852ba2f6b7296 -f "/home/runner/work/visual-studio-code-insiders-arch/visual-studio-code-insiders-arch/./.github/actions/pkg/Dockerfile" "/home/runner/work/visual-studio-code-insiders-arch/visual-studio-code-insiders-arch/.github/actions/pkg"
/usr/bin/docker run --name a065f0b9f356b32f2852ba2f6b7296_baf94b --label 442333 --workdir /github/workspace --rm -e pythonLocation -e LD_LIBRARY_PATH -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RETENTION_DAYS -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_ACTION_REPOSITORY -e GITHUB_ACTION_REF -e GITHUB_PATH -e GITHUB_ENV -e RUNNER_OS -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/visual-studio-code-insiders-arch/visual-studio-code-insiders-arch":"/github/workspace" 442333:35a065f0b9f356b32f2852ba2f6b7296
like image 328
Orangutan Avatar asked Oct 15 '22 22:10

Orangutan


2 Answers

Thanks for sharing this. I have precisely the same problems.

I added the following in my Dockerfile

RUN sed -i 's/\tif \[\[ -r $MAKEPKG_CONF \]\]; then/\tif \[\[ -f $MAKEPKG_CONF \]\]; then/' /usr/share/makepkg/util/config.sh

which replaces the check for read permission (-r) for the check whether the file exists and is a regular file (-f).

now my github action gets over this particular location, but fails with the next check:

==> ERROR: You do not have write permission for the directory $BUILDDIR (/tmp/aurutils).
    Aborting...

This is not a solution and does not answer what's the underlying issue, but I hope it helps anyways.

like image 151
Michael Kopp Avatar answered Oct 26 '22 02:10

Michael Kopp


This issue is caused by using glibc >= 2.33 on the container and an outdated version of the Docker engine on the host.

You can fix it by patching glibc in your container:

patched_glibc=glibc-linux4-2.33-4-x86_64.pkg.tar.zst
curl -LO https://repo.archlinuxcn.org/x86_64/$patched_glibc
bsdtar -C / -xvf $patched_glibc

Thanks to lxqt-panel for the workaround.

like image 1
mpsq Avatar answered Oct 26 '22 03:10

mpsq