perl error building rust-openssl with maturin, ubuntu and manylinux

While building Python packages for Xvc with maturin, I was receiving in Github Actions CI for Linux packages.

Can't locate IPC/Cmd.pm in @INC (@INC contains: /home/runner/work/xvc.py/xvc.py/target/x86_64-unknown-linux-gnu/release/build/openssl-sys-844a96d66ae533b1/out/openssl-build/build/src/util/perl /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . /home/runner/work/xvc.py/xvc.py/target/x86_64-unknown-linux-gnu/release/build/openssl-sys-844a96d66ae533b1/out/openssl-build/build/src/external/perl/Text-Template-1.56/lib)

The issue seemed to be a missing perl package. Building rust-openssl now seems to require perl-core package.

I added a apt-get update && apt-get install perl-core to the CI configuration. But that didn’t work.

Because, as this Github issue comment said maturin with its manylinux support uses different kind of Docker containers to build the packages. We must detect if it’s a CentOS or Debian based container and install missing packages.

Building wheels step in the config should be similar to:

- name: Build wheels
  uses: PyO3/maturin-action@v1
  with:
    target: ${{ matrix.target }}
    manylinux: auto
    args: --release --out dist
    before-script-linux: |
      # If we're running on rhel centos, install needed packages.
      if command -v yum &> /dev/null; then
          yum update -y && yum install -y perl-core openssl openssl-devel pkgconfig libatomic

          # If we're running on i686 we need to symlink libatomic
          # in order to build openssl with -latomic flag.
          if [[ ! -d "/usr/lib64" ]]; then
              ln -s /usr/lib/libatomic.so.1 /usr/lib/libatomic.so
          fi
      else
          # If we're running on debian-based system.
          apt update -y && apt-get install -y libssl-dev openssl pkg-config
      fi

This will the specified script before running the maturin build command in the container and add missing packages.

/xvc/ /maturin/ /Github Actions/ /perl/