From 330874a4dc12002f9021b5a0c48c83ed8f1f5b3b Mon Sep 17 00:00:00 2001 From: Michael Pilosov Date: Mon, 28 Nov 2022 15:58:37 -0700 Subject: [PATCH] add files --- Dockerfile | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 16 +++++++++++++++ app.py | 16 +++++++++++++++ entrypoint.sh | 9 +++++++++ stockfish | 2 ++ 5 files changed, 97 insertions(+) create mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 app.py create mode 100755 entrypoint.sh create mode 100755 stockfish diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c900e71 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,54 @@ +FROM alpine:latest AS builder +LABEL maintainer="tomasz@chorwat.pl" +LABEL project="https://github.com/tchorwat/stockfish" + +# Install dependencies +RUN apk add --no-cache git g++ make + +RUN git clone --depth 1 --branch sf_15 https://github.com/official-stockfish/Stockfish.git + +WORKDIR /Stockfish/src +RUN echo "arch:$( uname -m )" \ +&& case $( uname -m ) in \ + x86_64) \ + make build ARCH=x86-64-modern \ + ;; \ + aarch64) \ + make build ARCH=armv8 \ + ;; \ + armv7l) \ + make build ARCH=armv7 \ + ;; \ + ppc64le) \ + make build ARCH=ppc-64 \ + ;; \ + *) \ + exit 1 \ + ;; \ +esac + +RUN echo "Source used to build binaries from this directory could be find at: https://github.com/official-stockfish/Stockfish/tree/sf_15" > /Stockfish/source.txt + + +FROM alpine:latest +LABEL maintainer="tomasz@chorwat.pl" +LABEL project="https://github.com/tchorwat/stockfish" + +COPY ./entrypoint.sh / + +RUN chmod +x /entrypoint.sh \ + && apk add --no-cache libstdc++ ucspi-tcp6 \ + && addgroup -g 1000 stockfish \ + && adduser -u 1000 -G stockfish -HD stockfish + +WORKDIR /stockfish/ +USER stockfish:stockfish + +COPY --chown=stockfish:stockfish --from=builder /Stockfish/src/stockfish /stockfish/ +COPY --chown=stockfish:stockfish --from=builder /Stockfish/Copying.txt /stockfish/ +COPY --chown=stockfish:stockfish --from=builder /Stockfish/source.txt /stockfish/ +COPY --chown=stockfish:stockfish --from=builder /Stockfish/src/*.nnue /stockfish/ + +EXPOSE 23249 +ENTRYPOINT ["/entrypoint.sh"] + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cd6abc1 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ + +start: + docker run -d -p 23249:23249 -p 23250:23250 --name stockfish stockfish:15 + @echo "Stockfish is running on port 23249" + @echo "Interact with it using the following command (you can substitute `netcat` for `telnet`):" + @echo "nc localhost 23249" + +stop: + docker stop stockfish + docker rm stockfish + +build: Dockerfile + docker build -t stockfish:15 . + +run: + python app.py diff --git a/app.py b/app.py new file mode 100644 index 0000000..22b190c --- /dev/null +++ b/app.py @@ -0,0 +1,16 @@ +# a chess playing application using pychess +# use the stockfish binary to play chess + +import chess +import chess.engine + +stockfish = chess.engine.SimpleEngine.popen_uci("./stockfish") + +board = chess.Board() + +while not board.is_game_over(): + result = stockfish.play(board, chess.engine.Limit(time=0.1)) + board.push(result.move) + print(board, "\n") + +stockfish.quit() diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..a1e73c6 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -e + +if [ -z "$1" ]; then + tcpserver -c2 0 23249 /stockfish/stockfish +else + # else default to run whatever the user wanted like "bash" or "sh" + exec "$@" +fi diff --git a/stockfish b/stockfish new file mode 100755 index 0000000..2f85608 --- /dev/null +++ b/stockfish @@ -0,0 +1,2 @@ +#!/bin/sh +nc localhost 23249