diff --git a/docker/Dockerfile b/docker/Dockerfile index a3355b5e..189265d9 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,45 +1,64 @@ from alpine:latest +# define script basic information +# Version of this Dockerfile ENV SCRIPT_VERSION=1.3.0 +# Download address uses backup address +# (if downloading slowly, consider set it to yes) ENV USE_BACKUP=no -ENV HOME_DIR=/ -ENV SOURCE_DIR=/source -ENV SOFT_DIR=/usr +# Version of some manually-installed package ENV VER_PHP=7.4.19 ENV VER_SWOOLE=4.6.7 ENV VER_HASH=1.5 ENV VER_INOTIFY=3.0.0 ENV VER_REDIS=5.3.4 -ENV VER_LIBXML2=2.9.10 +ENV VER_LIBXML2=2.9.12 ENV VER_CURL=7.77.0 ENV VER_LIBLZMA=master -ENV VER_LIBZIP=1 -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories +# LINK_OF_ADDRESS_ORIGIN +ENV LINK_APK_REPO='mirrors.ustc.edu.cn' +ENV LINK_APK_REPO_BAK='dl-cdn.alpinelinux.org' -# 编译必需的 -RUN apk add cmake gcc g++ autoconf git libstdc++ linux-headers make m4 libgcc binutils ncurses -# php的zlib支持 +RUN if [ "${USE_BACKUP}" = "yes" ]; then \ + echo "Using backup address..." && sleep 3s; \ + else \ + echo "Using original address..." && sleep 3s; \ + fi + +RUN sed -i 's/dl-cdn.alpinelinux.org/'${LINK_APK_REPO}'/g' /etc/apk/repositories + +# build requirements +RUN apk add cmake gcc g++ jq autoconf git libstdc++ linux-headers make m4 libgcc binutils ncurses +# php zlib dependencies RUN apk add zlib-dev zlib-static -# php的mbstring支持 +# php mbstring dependencies RUN apk add oniguruma-dev -# php的openssl支持 +# php openssl dependencies RUN apk add openssl-libs-static openssl-dev openssl -# php的gd支持,如果不需要gd则去掉--enable-gd和下面的依赖 +# php gd dependencies RUN apk add libpng-dev libpng-static -# curl的c-ares支持,如果不需要curl则去掉 +# curl c-ares dependencies RUN apk add c-ares-static c-ares-dev RUN mkdir /app WORKDIR /app -COPY ac_override_1 /tmp/ -COPY ac_override_2 /tmp/ -COPY php-arg.sh /tmp/ +COPY download.sh /app/ +COPY compile-php.sh /app/ -RUN mkdir downloads && mkdir source && cd downloads +RUN chmod +x /app/download.sh && \ + chmod +x /app/compile-php.sh + +RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE} +RUN ./download.sh hash ${USE_BACKUP} ${VER_HASH} +RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE} +RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE} +RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE} +RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE} +RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE} RUN wget "http://mirrors.zhamao.xin/php/php-${VER_PHP}.tar.gz" -O php.tar.gz RUN wget "http://mirrors.zhamao.xin/pecl/swoole-${VER_SWOOLE}.tgz" -O swoole.tar.gz @@ -63,13 +82,13 @@ RUN cd liblzma && \ ./configure && \ make -j4 && \ make install && \ - echo "编译 liblzma 完成!" + echo "liblzma compiled!" RUN cd "libxml2-${VER_LIBXML2}" && \ ./configure --with-lzma --without-python && \ make -j4 && \ make install && \ - echo "编译 libxml2 完成!" + echo "libxml2 compiled!" RUN cd "curl-${VER_CURL}" && \ CC=gcc CXX=g++ CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure \ @@ -85,32 +104,34 @@ RUN cd "curl-${VER_CURL}" && \ --enable-ares && \ make -j4 && \ make install && \ - echo "编译 curl 完成!" + echo "curl compiled!" +COPY ac_override_1 / +COPY ac_override_2 / +COPY compile-php.sh /app/ + +RUN apk add bash + +# copy RUN mv "swoole-${VER_SWOOLE}" "php-${VER_PHP}/ext/swoole" && \ mv "redis-${VER_REDIS}" "php-${VER_PHP}/ext/redis" && \ mv "inotify-${VER_INOTIFY}" "php-${VER_PHP}/ext/inotify" -COPY merge-curl-config.sh /tmp/ +RUN cat /ac_override_1 /app/php-${VER_PHP}/ext/curl/config.m4 /ac_override_2 > /app/aa +RUN mv /app/aa /app/php-${VER_PHP}/ext/curl/config.m4 -RUN chmod +x /tmp/php-arg.sh && \ - chmod +x /tmp/merge-curl-config.sh - -RUN "php-${VER_PHP}/ext/swoole/clear.sh" && \ - cd "php-${VER_PHP}" && \ - "/tmp/merge-curl-config.sh" && \ - mv "/app/aa" "ext/curl/config.m4" && \ +RUN cd "php-${VER_PHP}/ext/swoole/" && \ + ./clear.sh && \ + cd ../../ && \ ./buildconf --force -RUN cd "php-${VER_PHP}" && \ - chmod +x /tmp/php-arg.sh && \ - echo "Using "$(/tmp/php-arg.sh ${VER_PHP}) && sleep 5s && \ - ./configure LDFLAGS=-static $(/tmp/php-arg.sh ${VER_PHP}) +RUN ./compile-php.sh ${VER_PHP} RUN cd "php-${VER_PHP}" && \ sed -ie 's/-export-dynamic//g' "Makefile" && \ sed -ie 's/-o \$(SAPI_CLI_PATH)/-all-static -o \$(SAPI_CLI_PATH)/g' "Makefile" && \ sed -ie 's/swoole_clock_gettime(CLOCK_REALTIME/clock_gettime(CLOCK_REALTIME/g' "ext/swoole/include/swoole.h" && \ make LDFLAGS=-ldl -j4 && \ - make install + make install && \ + strip diff --git a/docker/compile-php.sh b/docker/compile-php.sh new file mode 100644 index 00000000..457bad4b --- /dev/null +++ b/docker/compile-php.sh @@ -0,0 +1,87 @@ +#!/bin/sh + +VER_PHP="$1" + +function php_compile_args() { + _php_arg="--prefix=/app/php-dist" + _php_arg="$_php_arg --disable-all" + _php_arg="$_php_arg --enable-shared=no" + _php_arg="$_php_arg --enable-static=yes" + _php_arg="$_php_arg --enable-inline-optimization" + _php_arg="$_php_arg --with-layout=GNU" + _php_arg="$_php_arg --enable-calendar" + _php_arg="$_php_arg --enable-ctype" + _php_arg="$_php_arg --enable-filter" + _php_arg="$_php_arg --enable-openssl" + _php_arg="$_php_arg --enable-bcmath" + _php_arg="$_php_arg --enable-pcntl" + _php_arg="$_php_arg --enable-openssl" + _php_arg="$_php_arg --with-openssl" + _php_arg="$_php_arg --with-iconv" + _php_arg="$_php_arg --enable-mbstring" + _php_arg="$_php_arg --enable-phar" + _php_arg="$_php_arg --enable-pdo" + _php_arg="$_php_arg --with-pdo-mysql=mysqlnd" + _php_arg="$_php_arg --enable-sockets" + _php_arg="$_php_arg --enable-swoole" + _php_arg="$_php_arg --enable-inotify" + _php_arg="$_php_arg --enable-redis" + _php_arg="$_php_arg --disable-redis-session" + _php_arg="$_php_arg --enable-simplexml" + _php_arg="$_php_arg --enable-dom" + _php_arg="$_php_arg --enable-xml" + _php_arg="$_php_arg --enable-xmlwriter" + _php_arg="$_php_arg --enable-xmlreader" + _php_arg="$_php_arg --with-zlib" + _php_arg="$_php_arg --enable-posix" + _php_arg="$_php_arg --enable-mysqlnd" + _php_arg="$_php_arg --enable-tokenizer" + _php_arg="$_php_arg --with-curl" + _php_arg="$_php_arg --with-pear=no" + _php_arg="$_php_arg --disable-cgi" + _php_arg="$_php_arg --disable-phpdbg" + + for loop in $(cat extension.txt) + do + case $loop in + swoole) + esac + done + + case $1 in + 7.3.*|7.2.*) + _php_arg="$_php_arg --with-gd" + _php_arg="$_php_arg --enable-libxml" + _php_arg="$_php_arg --enable-hash" + _php_arg="$_php_arg --enable-json" + ;; + 7.4.*) + _php_arg="$_php_arg --enable-gd" + _php_arg="$_php_arg --with-libxml" + _php_arg="$_php_arg --enable-json" + ;; + 8.*) + _php_arg="$_php_arg --enable-gd" + _php_arg="$_php_arg --with-libxml" + ;; + esac + echo $_php_arg +} + +function before_configure() { + for loop in $(cat extension.txt) + do + case $loop in + swoole) + esac + done +} + +cd php-$VER_PHP && \ + before_configure && \ + ./buildconf --force && \ + ./configure LDFLAGS=-static $(php_compile_args $VER_PHP) && \ + after_configure && \ + sed -ie 's/-export-dynamic//g' "Makefile" && \ + sed -ie 's/-o $(SAPI_CLI_PATH)/-all-static -o $(SAPI_CLI_PATH)/g' "Makefile" && \ + if [ "$(cat extension.txt | grep swoole)" != "" ]; then sed -ie 's/swoole_clock_gettime(CLOCK_REALTIME/clock_gettime(CLOCK_REALTIME/g' "ext/swoole/include/swoole.h" && \ diff --git a/docker/config.json b/docker/config.json new file mode 100644 index 00000000..d47e6ba9 --- /dev/null +++ b/docker/config.json @@ -0,0 +1,3 @@ +swoole +redis +hello diff --git a/docker/download.sh b/docker/download.sh new file mode 100644 index 00000000..e4494d22 --- /dev/null +++ b/docker/download.sh @@ -0,0 +1,109 @@ +#!/bin/sh + +_use_backup="$2" + +function download_file() { + downloader="wget" + type wget >/dev/null 2>&1 || { downloader="curl"; } + if [ "$downloader" = "wget" ]; then + _down_prefix="O" + else + _down_prefix="o" + fi + _down_symbol=0 + if [ ! -f "$2" ]; then + $downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \ + echo "$1 完成! $2" && _down_symbol=1 + else + echo "$2 已存在!" && _down_symbol=1 + fi + if [ $_down_symbol == 0 ]; then + echo "下载 $1 失败!请检查网络连接!" + rm -rf "$2" + return 1 + fi + return 0 +} + +function lib_download_link() { + if [ "$_use_backup" = "yes" ]; then + case $1 in + "php") echo "https://www.php.net/distributions/php-$2.tar.gz" ;; + "swoole") echo "https://pecl.php.net/get/swoole-$2.tgz" ;; + "hash") echo "https://pecl.php.net/get/hash-$2.tgz" ;; + "inotify") echo "https://pecl.php.net/get/inotify-$2.tgz" ;; + "redis") echo "https://pecl.php.net/get/redis-$2.tgz" ;; + "libxml2") echo "http://xmlsoft.org/sources/libxml2-$2.tar.gz" ;; + "liblzma") echo "https://github.com/kobolabs/liblzma/archive/refs/heads/master.zip" ;; + "curl") echo "https://curl.haxx.se/download/curl-$2.tar.gz" ;; + *) echo "unknown" ;; + esac + else + case $1 in + "php") echo "http://mirrors.zhamao.xin/php/php-$2.tar.gz" ;; + "swoole") echo "http://mirrors.zhamao.xin/pecl/swoole-$2.tgz" ;; + "hash") echo "http://mirrors.zhamao.xin/pecl/hash-$2.tgz" ;; + "inotify") echo "http://mirrors.zhamao.xin/pecl/inotify-$2.tgz" ;; + "redis") echo "http://mirrors.zhamao.xin/pecl/redis-$2.tgz" ;; + "libxml2") echo "https://dl.zhamao.me/libxml2/libxml2-$2.tar.gz" ;; + "liblzma") echo "https://dl.zhamao.me/liblzma/liblzma.tar.gz" ;; + "curl") echo "https://dl.zhamao.me/curl/curl-$2.tar.gz" ;; + *) echo "unknown" ;; + esac + fi +} + +function lib_x_cmd() { + case $1 in + "php"|"swoole"|"hash"|"inotify"|"redis"|"libxml2"|"curl") + _x_cmd="tar" + ;; + "liblzma") if [ "$_use_backup" = "yes" ]; then _x_cmd="unzip"; else _x_cmd="tar"; fi ;; + *) _x_cmd="unknown" ;; + esac + case $2 in + "cmd") + echo $_x_cmd + ;; + "file-prefix") + case $_x_cmd in + "tar") echo "-zxvf" ;; + "unzip") echo "" ;; + esac + ;; + "out-prefix") + case $_x_cmd in + "tar") echo "-C" ;; + "unzip") echo "-d" ;; + esac + ;; + esac +} + +function lib_x() { + $(lib_x_cmd $1 cmd) $(lib_x_cmd $1 file-prefix) "$_source_dir/$(lib_x_dirname $1 file)" $(lib_x_cmd $1 out-prefix) "$_source_dir/" +} + +# 获取解压后的源码根目录 +function lib_x_dirname() { + case $1 in + "php"|"swoole"|"hash"|"inotify"|"redis"|"libxml2"|"curl") + if [ "$2" = "file" ]; then _name_prefix=".tar.gz"; else _name_prefix=""; fi + echo "$1-$(lib_ver $1)$_name_prefix" + ;; + "liblzma") + if [ "$_use_backup" = "yes" ]; then + if [ "$2" = "file" ]; then _name_prefix=".zip"; else _name_prefix=""; fi + echo "$1-$(lib_ver $1)$_name_prefix" + else + if [ "$2" = "file" ]; then _name_prefix=".tar.gz"; else _name_prefix=""; fi + echo "$1""$_name_prefix" + fi + ;; + *) + echo "unknown" + ;; + esac +} + +download_file $(lib_download_link $1 $3) $(lib_x_firname $1 file) \ No newline at end of file diff --git a/docker/merge-curl-config.sh b/docker/merge-curl-config.sh deleted file mode 100644 index 8e33ff6c..00000000 --- a/docker/merge-curl-config.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -cat /tmp/ac_override_1 ext/curl/config.m4 /tmp/ac_override_2 > /app/aa diff --git a/docker/php-arg.sh b/docker/php-arg.sh deleted file mode 100644 index 7a71a5c0..00000000 --- a/docker/php-arg.sh +++ /dev/null @@ -1,52 +0,0 @@ -_php_arg="--prefix=/app/php-dist" -_php_arg="$_php_arg --disable-all" -_php_arg="$_php_arg --enable-shared=no" -_php_arg="$_php_arg --enable-static=yes" -_php_arg="$_php_arg --enable-inline-optimization" -_php_arg="$_php_arg --with-layout=GNU" -_php_arg="$_php_arg --enable-calendar" -_php_arg="$_php_arg --enable-ctype" -_php_arg="$_php_arg --enable-filter" -_php_arg="$_php_arg --enable-openssl" -_php_arg="$_php_arg --enable-bcmath" -_php_arg="$_php_arg --with-openssl-dir=/usr" -_php_arg="$_php_arg --enable-pcntl" -_php_arg="$_php_arg --enable-openssl" -_php_arg="$_php_arg --with-openssl" -_php_arg="$_php_arg --with-iconv" -_php_arg="$_php_arg --enable-json" -_php_arg="$_php_arg --enable-mbstring" -_php_arg="$_php_arg --enable-phar" -_php_arg="$_php_arg --enable-pdo" -_php_arg="$_php_arg --with-pdo-mysql=mysqlnd" -_php_arg="$_php_arg --enable-sockets" -_php_arg="$_php_arg --enable-swoole" -_php_arg="$_php_arg --enable-inotify" -_php_arg="$_php_arg --enable-redis" -_php_arg="$_php_arg --disable-redis-session" -_php_arg="$_php_arg --enable-simplexml" -_php_arg="$_php_arg --enable-dom" -_php_arg="$_php_arg --enable-xml" -_php_arg="$_php_arg --enable-xmlwriter" -_php_arg="$_php_arg --enable-xmlreader" -_php_arg="$_php_arg --with-zlib" -_php_arg="$_php_arg --enable-posix" -_php_arg="$_php_arg --enable-mysqlnd" -_php_arg="$_php_arg --enable-tokenizer" -_php_arg="$_php_arg --with-curl" -_php_arg="$_php_arg --with-pear=no" -_php_arg="$_php_arg --disable-cgi" -_php_arg="$_php_arg --disable-phpdbg" - -case $1 in -7.3.*|7.2.*) - _php_arg="$_php_arg --with-gd" - _php_arg="$_php_arg --enable-libxml" - _php_arg="$_php_arg --enable-hash" - ;; -*) - _php_arg="$_php_arg --enable-gd" - _php_arg="$_php_arg --with-libxml" - ;; -esac -echo $_php_arg