mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-03-17 20:34:51 +08:00
159 lines
5.4 KiB
Bash
Executable File
159 lines
5.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# This file is using docker to run commands
|
|
set -e
|
|
|
|
# Detect docker can run
|
|
if ! which docker >/dev/null; then
|
|
echo "Docker is not installed, please install docker first !"
|
|
exit 1
|
|
fi
|
|
DOCKER_EXECUTABLE="docker"
|
|
# shellcheck disable=SC2046
|
|
if [ $(id -u) -ne 0 ]; then
|
|
if ! docker info > /dev/null 2>&1; then
|
|
if [ "$SPC_USE_SUDO" != "yes" ]; then
|
|
echo "Docker command requires sudo"
|
|
# shellcheck disable=SC2039
|
|
echo -n 'To use sudo to run docker, run "export SPC_USE_SUDO=yes" and run command again'
|
|
exit 1
|
|
fi
|
|
DOCKER_EXECUTABLE="sudo docker"
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
# to check if qemu-docker run
|
|
if [ "$SPC_USE_ARCH" = "" ]; then
|
|
SPC_USE_ARCH=current
|
|
fi
|
|
case $SPC_USE_ARCH in
|
|
current)
|
|
BASE_ARCH=$(uname -m)
|
|
if [ "$BASE_ARCH" = "arm64" ]; then
|
|
BASE_ARCH=aarch64
|
|
GO_ARCH=arm64
|
|
else
|
|
GO_ARCH=amd64
|
|
fi
|
|
;;
|
|
aarch64)
|
|
BASE_ARCH=aarch64
|
|
GO_ARCH=arm64
|
|
# shellcheck disable=SC2039
|
|
echo -e "\e[033m* Using different arch needs to setup qemu-static for docker !\e[0m"
|
|
$DOCKER_EXECUTABLE run --rm --privileged multiarch/qemu-user-static:register --reset > /dev/null
|
|
;;
|
|
*)
|
|
echo "Current arch is not supported to run in docker: $SPC_USE_ARCH"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Detect docker env is setup
|
|
if ! $DOCKER_EXECUTABLE images | grep -q cwcc-frankenphp-gnu-$SPC_USE_ARCH; then
|
|
echo "Docker container does not exist. Building docker image ..."
|
|
$DOCKER_EXECUTABLE build -t cwcc-frankenphp-gnu-$SPC_USE_ARCH -f- . <<EOF
|
|
FROM centos:7
|
|
RUN sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo && \
|
|
sed -i 's/^#.*baseurl=http/baseurl=http/g' /etc/yum.repos.d/*.repo && \
|
|
sed -i 's/^mirrorlist=http/#mirrorlist=http/g' /etc/yum.repos.d/*.repo
|
|
RUN yum clean all && \
|
|
yum makecache && \
|
|
yum update -y && \
|
|
localedef -c -i en_US -f UTF-8 en_US.UTF-8
|
|
|
|
RUN yum install -y centos-release-scl
|
|
|
|
RUN if [ "$BASE_ARCH" = "aarch64" ]; then \
|
|
sed -i 's|mirror.centos.org/centos|vault.centos.org/altarch|g' /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo ; \
|
|
sed -i 's|mirror.centos.org/centos|vault.centos.org/altarch|g' /etc/yum.repos.d/CentOS-SCLo-scl.repo ; \
|
|
else \
|
|
sed -i 's/mirror.centos.org/vault.centos.org/g' /etc/yum.repos.d/*.repo ; \
|
|
fi
|
|
RUN sed -i 's/^#.*baseurl=http/baseurl=http/g' /etc/yum.repos.d/*.repo && \
|
|
sed -i 's/^mirrorlist=http/#mirrorlist=http/g' /etc/yum.repos.d/*.repo
|
|
|
|
RUN yum update -y && \
|
|
yum install -y devtoolset-10-gcc-*
|
|
RUN echo "source scl_source enable devtoolset-10" >> /etc/bashrc
|
|
RUN source /etc/bashrc
|
|
|
|
RUN curl -o cmake.tgz -fsSL https://github.com/Kitware/CMake/releases/download/v3.31.4/cmake-3.31.4-linux-$BASE_ARCH.tar.gz && \
|
|
mkdir /cmake && \
|
|
tar -xzf cmake.tgz -C /cmake --strip-components 1
|
|
|
|
WORKDIR /app
|
|
ADD ./src /app/src
|
|
COPY ./composer.* /app/
|
|
ADD ./bin/setup-runtime /app/bin/setup-runtime
|
|
ADD ./bin/spc /app/bin/spc
|
|
RUN /app/bin/setup-runtime
|
|
RUN /app/bin/php /app/bin/composer install --no-dev --classmap-authoritative
|
|
ENV PATH="/app/bin:/cmake/bin:/usr/local/go/bin:$PATH"
|
|
ENV SPC_TARGET=glibc
|
|
|
|
ADD ./config/env.ini /app/config/env.ini
|
|
RUN bin/spc doctor --auto-fix --debug
|
|
|
|
RUN curl -o make.tgz -fsSL https://ftp.gnu.org/gnu/make/make-4.4.tar.gz && \
|
|
tar -zxvf make.tgz && \
|
|
cd make-4.4 && \
|
|
./configure && \
|
|
make && \
|
|
make install && \
|
|
ln -sf /usr/local/bin/make /usr/bin/make
|
|
|
|
RUN curl -o automake.tgz -fsSL https://ftp.gnu.org/gnu/automake/automake-1.17.tar.xz && \
|
|
tar -xvf automake.tgz && \
|
|
cd automake-1.17 && \
|
|
./configure && \
|
|
make && \
|
|
make install && \
|
|
ln -sf /usr/local/bin/automake /usr/bin/automake
|
|
|
|
RUN git clone https://github.com/static-php/gnu-frankenphp --depth=1 /frankenphp
|
|
WORKDIR /frankenphp
|
|
|
|
RUN curl -o go.tgz -fsSL https://go.dev/dl/go1.24.1.linux-$GO_ARCH.tar.gz && \
|
|
rm -rf /usr/local/go && tar -C /usr/local -xzf go.tgz
|
|
EOF
|
|
fi
|
|
|
|
# Check if in ci (local terminal can execute with -it)
|
|
if [ -t 0 ]; then
|
|
INTERACT=-it
|
|
else
|
|
INTERACT=''
|
|
fi
|
|
|
|
# Mounting volumes
|
|
MOUNT_LIST=""
|
|
# shellcheck disable=SC2089
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/config:/app/config"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/src:/app/src"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/buildroot:/app/buildroot"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/source:/app/source"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/dist:/app/dist"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/downloads:/app/downloads"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/pkgroot:/app/pkgroot"
|
|
MOUNT_LIST="$MOUNT_LIST -v ""$(pwd)""/frankenphp-dist:/frankenphp/dist"
|
|
|
|
# Apply env in temp env file
|
|
echo 'CC=/opt/rh/devtoolset-10/root/usr/bin/gcc' > /tmp/spc-gnu-docker.env
|
|
echo 'CXX=/opt/rh/devtoolset-10/root/usr/bin/g++' >> /tmp/spc-gnu-docker.env
|
|
echo 'AR=/opt/rh/devtoolset-10/root/usr/bin/ar' >> /tmp/spc-gnu-docker.env
|
|
echo 'LD=/opt/rh/devtoolset-10/root/usr/bin/ld' >> /tmp/spc-gnu-docker.env
|
|
echo 'SPC_DEFAULT_C_FLAGS=-fPIE -fPIC' >> /tmp/spc-gnu-docker.env
|
|
echo 'SPC_TARGET=glibc' >> /tmp/spc-gnu-docker.env
|
|
echo 'SPC_CMD_VAR_PHP_MAKE_EXTRA_LDFLAGS_PROGRAM="-Wl,-O1 -pie"' >> /tmp/spc-gnu-docker.env
|
|
echo 'SPC_CMD_VAR_PHP_MAKE_EXTRA_LIBS="-ldl -lpthread -lm -lresolv -lutil -lrt"' >> /tmp/spc-gnu-docker.env
|
|
|
|
# Run docker
|
|
# shellcheck disable=SC2068
|
|
# shellcheck disable=SC2086
|
|
# shellcheck disable=SC2090
|
|
|
|
$DOCKER_EXECUTABLE run --rm $INTERACT -e SPC_FIX_DEPLOY_ROOT="$(pwd)" --env-file /tmp/spc-gnu-docker.env $MOUNT_LIST cwcc-frankenphp-gnu-$SPC_USE_ARCH ./build-static.sh
|