diff --git a/Dockerfile b/Dockerfile index c4f24b5..ce6e006 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/vscode/devcontainers/python:3.11 +FROM mcr.microsoft.com/devcontainers/base:bookworm ENV DEBIAN_FRONTEND=noninteractive diff --git a/Dockerfile.debian b/Dockerfile.debian new file mode 100644 index 0000000..8e4727c --- /dev/null +++ b/Dockerfile.debian @@ -0,0 +1,27 @@ +FROM debian:bookworm + +ENV DEBIAN_FRONTEND=noninteractive + +WORKDIR /root + +# 配置文件, 代码/数据目录 +VOLUME [ "/root", "/data" ] + +COPY install-*.sh /usr/local/bin/ + +# 配置文件 +COPY root /opt/root + +# 安装依赖包 +RUN /usr/local/bin/install-pkg.sh + +# 安装开发环境 +RUN /usr/local/bin/install-virtualenv.sh + +# 启动命令 +ADD ./settings /opt/vscode/settings +ADD ./dev-init.sh /usr/local/bin/ +ADD ./docker-entrypoint.sh /usr/local/bin/ +ADD ./supervisord.conf /etc/supervisord.conf + +CMD ["docker-entrypoint.sh"] diff --git a/install-pkg.sh b/install-pkg.sh index 26a4aa9..b5b1ec2 100755 --- a/install-pkg.sh +++ b/install-pkg.sh @@ -1,28 +1,26 @@ #!/bin/bash set -ex +export DEBIAN_FRONTEND=noninteractive + # Install pkgs # graphviz use for golang pprof apt-get update apt-get install -y apt-transport-https ca-certificates curl gnupg2 lsb-release iputils-ping dnsutils lrzsz apt-get install -y ascii xxd -apt-get install -y vim direnv tmux git-lfs cloc clang-format apache2-utils graphviz +apt-get install -y vim direnv tmux git-lfs clang-format apache2-utils graphviz python3 python3-venv + +# client utils +apt-get install -y redis-tools mariadb-client etcd-client # Install kernel build tools apt-get install -y flex bc libelf-dev libssl-dev bison # Install build -apt-get install -y ccache distcc clang llvm +# apt-get install -y ccache distcc clang llvm # Install android tools adb -apt-get install -y adb - -# system language -apt-get install -y golang - -# client utils -apt-get install -y redis-tools mariadb-client etcd-client - +# apt-get install -y adb # sshd apt-get install -y openssh-server @@ -41,7 +39,9 @@ cd /opt/vim/bundle grep Plugin /opt/root/.vimrc.bundles|grep -v '"'|grep -v "Vundle"|awk -F "'" '{print $2}'|xargs -L1 git clone # vscode python tools & utils -pip install virtualenvwrapper supervisor flake8 black isort s3cmd mycli ipython ipdb requests +python3 -m venv /opt/py +export PATH=/opt/py/bin:$PATH +pip install supervisor s3cmd mycli ipython ipdb requests # RUN echo "dash dash/sh boolean false" | debconf-set-selections # RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash @@ -95,20 +95,20 @@ chmod a+x kubectl && mv kubectl /usr/local/bin/ mkdir -p ${ZSH_CUSTOM}/kubectl-autocomplete kubectl completion zsh > ${ZSH_CUSTOM}/kubectl-autocomplete/kubectl-autocomplete.plugin.zsh -# Install grpcurl -GPRCCURL_VERSION=1.8.7 -wget -q https://github.com/fullstorydev/grpcurl/releases/download/v${GPRCCURL_VERSION}/grpcurl_${GPRCCURL_VERSION}_linux_x86_64.tar.gz -tar -xf grpcurl_${GPRCCURL_VERSION}_linux_x86_64.tar.gz -mv grpcurl /usr/local/bin/ - # Install protoc -export PROTOC_VERSION=24.1 +export PROTOC_VERSION=25.1 wget -q https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-x86_64.zip unzip -o protoc-${PROTOC_VERSION}-linux-x86_64.zip mkdir -p /opt/go/bin mv bin/protoc /opt/go/bin/ && /opt/go/bin/protoc --version mv include /opt/go/ +# Install grpcurl +GPRCCURL_VERSION=1.8.7 +wget -q https://github.com/fullstorydev/grpcurl/releases/download/v${GPRCCURL_VERSION}/grpcurl_${GPRCCURL_VERSION}_linux_x86_64.tar.gz +tar -xf grpcurl_${GPRCCURL_VERSION}_linux_x86_64.tar.gz +mv grpcurl /opt/go/bin/ + # Clean up mkdir -p /data/repos /data/pub /data/logs /data/etc/supervisord diff --git a/install-virtualenv.sh b/install-virtualenv.sh index 8e176e5..36d145e 100755 --- a/install-virtualenv.sh +++ b/install-virtualenv.sh @@ -1,43 +1,46 @@ #!/bin/bash set -ex +export DEBIAN_FRONTEND=noninteractive + +# remote go env +unset GOLANG_VERSION +unset GOROOT +unset GOPATH + # golang 多版本环境 export GOPATH=/opt/go export CGO_ENABLED=0 # change go version if upgrade -export GO1_15=go1.15.15 -export GO1_20=go1.20.10 # 当前版本 -export GO1_21=go1.21.3 +export GO1_20=go1.20.12 # 当前版本 +export GO1_21=go1.21.5 -go install golang.org/dl/$GO1_15@latest go install golang.org/dl/$GO1_20@latest go install golang.org/dl/$GO1_21@latest export HOME=/opt/go -$GOPATH/bin/$GO1_15 download && rm -rf $GOPATH/sdk/$GO1_15/$GO1_15.linux-amd64.tar.gz $GOPATH/bin/$GO1_20 download && rm -rf $GOPATH/sdk/$GO1_20/$GO1_20.linux-amd64.tar.gz $GOPATH/bin/$GO1_21 download && rm -rf $GOPATH/sdk/$GO1_21/$GO1_21.linux-amd64.tar.gz # 清理下载器 -rm -rf $GOPATH/bin/$GO1_15 rm -rf $GOPATH/bin/$GO1_20 rm -rf $GOPATH/bin/$GO1_21 # 软链大版本 方便升级 cd /opt/go/bin -ln -sf /opt/go/sdk/$GO1_15/bin/go go1.15 ln -sf /opt/go/sdk/$GO1_20/bin/go go1.20 ln -sf /opt/go/sdk/$GO1_21/bin/go go1.21 ln -sf /opt/go/sdk/$GO1_21/bin/go go cd /opt/go/sdk -ln -sf $GO1_15 go1.15 ln -sf $GO1_20 go1.20 ln -sf $GO1_21 go1.21 # vscode golang tools, build with latest golang # https://github.com/golang/vscode-go/blob/master/docs/tools.md export PATH=$GOPATH/bin:$PATH +env|grep GO + # vscode dev go install github.com/ramya-rao-a/go-outline@latest go install github.com/cweill/gotests/gotests@latest @@ -46,19 +49,22 @@ go install github.com/josharian/impl@latest go install github.com/haya14busa/goplay/cmd/goplay@latest go install github.com/go-delve/delve/cmd/dlv@latest go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.55.1 -# https://github.com/golang/tools -go install golang.org/x/tools/gopls@v0.14.0 + +# golang 小工具 +go install golang.org/x/tools/gopls@latest +go install golang.org/x/tools/cmd/godoc@latest +go install golang.org/x/text/cmd/gotext@latest +go install golang.org/x/perf/cmd/benchstat@latest +go install golang.org/x/tools/cmd/stringer@latest +go install github.com/boyter/scc/v3@latest # protobuf # https://github.com/protocolbuffers/protobuf-go go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.31.0 # https://github.com/grpc/grpc-go go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.3.0 -go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.16.2 -go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.16.2 - -# golang小工具 -go install golang.org/x/tools/cmd/stringer@latest +go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@v2.18.1 +go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@v2.18.1 # my dev go install github.com/ifooth/devcontainer/cmd/dev@latest @@ -72,28 +78,23 @@ export PYENV_ROOT=/opt/pyenv curl -fsSL https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash git clone https://github.com/pyenv/pyenv-virtualenvwrapper.git ${PYENV_ROOT}/plugins/pyenv-virtualenvwrapper export PATH=${PYENV_ROOT}/bin:$PATH -# change python version if upgrade -export PY2_7=2.7.18 -export PY3_6=3.6.15 -export PY3_10=3.10.11 -pyenv install $PY2_7 -pyenv install $PY3_6 -pyenv install $PY3_10 +apt-get update && apt-get install -y libreadline-dev libsqlite3-dev libbz2-dev liblzma-dev libffi-dev +export PY3_12=3.12.1 + +pyenv install $PY3_12 # 软链大版本 方便升级 cd /opt/pyenv/versions -ln -sf $PY2_7 2.7 -ln -sf $PY3_6 3.6 -ln -sf $PY3_10 3.10 +ln -sf $PY3_12 3.12 -cd /opt/pyenv && tar -zcf versions.tar.gz versions/3.10/lib/python3.10/site-packages +cd /opt/pyenv && tar -zcf versions.tar.gz versions/3.12/lib/python3.12/site-packages # 添加环境变量 cat <<\EOT >> /root/.bashrc # add go and python path -export PATH=/data/bin:/root/.go/bin:/opt/go/bin:/opt/pyenv/bin:/opt/pyenv/shims:/root/.npm-packages/bin:$PATH +export PATH=/data/bin:/root/.go/bin:/opt/go/bin:/opt/py/bin:/opt/pyenv/bin:/opt/pyenv/shims:/root/.npm-packages/bin:$PATH # ssh and vscode terminal use zsh if [[ -n "${SSH_TTY}" ]] || [[ -n "${VSCODE_GIT_IPC_HANDLE}" ]];then diff --git a/root/.zshrc b/root/.zshrc index 2f1d2a6..58d2f19 100644 --- a/root/.zshrc +++ b/root/.zshrc @@ -117,7 +117,7 @@ compinit export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 -export PATH=/data/bin:/root/.go/bin:/opt/go/bin:/opt/pyenv/bin:/opt/pyenv/shims:/root/.npm-packages/bin:$PATH +export PATH=/data/bin:/root/.go/bin:/opt/go/bin:/opt/py/bin:/opt/pyenv/bin:/opt/pyenv/shims:/root/.npm-packages/bin:$PATH # zsh plugins export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=2" @@ -135,7 +135,7 @@ export VIM_ROOT=/opt/vim # pyenv export PYENV_ROOT=/opt/pyenv -PYENV_PKG=versions/3.10/lib/python3.10/site-packages +PYENV_PKG=versions/3.12/lib/python3.12/site-packages if [ ! -d "${HOME}/.pyenv/${PYENV_PKG}" ];then mkdir -p ${HOME}/.pyenv tar -xvf ${PYENV_ROOT}/versions.tar.gz -C ${HOME}/.pyenv @@ -150,7 +150,7 @@ if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)" pyenv virtualenvwrapper fi -export PYENV_VERSION=3.10 +export PYENV_VERSION=3.12 # virtualenvwrapper export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python