File size: 2,963 Bytes
0460cdb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
FROM nvidia/cuda:12.4.1-devel-ubuntu22.04

ENV LANG C.UTF-8
ENV TZ Asia/Tokyo

# ============
# System packages
# ============
# Collect packages
RUN apt update \
    && DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends sudo wget curl ssh git zip locales ed less neovim ca-certificates jq python3 python3-pip python3-venv build-essential python3-poetry pipx libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev 

# ============
# User settings
# ============
ARG USER_NAME=vscode
ARG UID=1000
ARG GROUP_NAME=vscode
ARG GID=1000
ARG GID_WHEEL=999
ARG USER_SHELL=/bin/bash
ARG HOME="/home/${USER_NAME}"
ARG LOCAL_BIN="${HOME}/.local/bin"

ENV XDG_CONFIG_HOME="${HOME}/.config"
ENV XDG_CACHE_HOME="${HOME}/.cache"
ENV XDG_DATA_HOME="${HOME}/.local/share"
ENV XDG_STATE_HOME="${HOME}/.local/state"
ENV PATH="${LOCAL_BIN}:${PATH}"

RUN : \
    && groupadd --gid ${GID_WHEEL} wheel \
    && echo %wheel ALL=\(ALL\) NOPASSWD:ALL >> /etc/sudoers \
    && if getent group ${GID} >/dev/null 2>&1; then \
        groupmod -n ${GROUP_NAME} $(getent group ${GID} | cut -d: -f1) \
        ; \
    else \
        groupadd --gid ${GID} ${GROUP_NAME} \
        ; \
    fi \
    && if id -u ${UID} >/dev/null 2>&1; then \
        usermod \
            -l ${USER_NAME} \
            -d ${HOME} \
            -g ${GROUP_NAME} \
            -aG wheel \
            $(id -nu ${UID}) \
        && chsh -s ${USER_SHELL} ${USER_NAME} \
        && mkdir ${HOME} \
        && chown -R ${USER_NAME}:${GROUP_NAME} ${HOME} \
        ; \
    else \
        useradd --create-home \
                --uid ${UID} \
                --shell ${USER_SHELL} \
                -g ${GROUP_NAME} \
                -G wheel \
                ${USER_NAME}\
        ; \
    fi

# ============
# Packages
# ============

# ------------
# Initialization
# ------------
# do not switch shell; keep using bash
# switch user
USER ${USER_NAME}

# ensure directories
RUN mkdir -p \
    ${XDG_CONFIG_HOME} \
    ${XDG_CACHE_HOME} \
    ${XDG_DATA_HOME} \
    ${XDG_STATE_HOME} \
    ${LOCAL_BIN} \
    ${HOME}

# ------------
# Shell settings
# ------------
# RUN echo "\
# export \\\
#     XDG_CONFIG_HOME=\${HOME}/.config \\\
#     XDG_CACHE_HOME=\${HOME}/.cache \\\
#     XDG_DATA_HOME=\${HOME}/.local/share \\\
#     XDG_STATE_HOME=\${HOME}/.local/state \\\
#     ZDOTDIR=\${XDG_CONFIG_HOME}/zsh" >> /etc/zsh/zshenv

# ------------
# pyenv
# ------------
ENV DIR_PYENV=${XDG_DATA_HOME}/pyenv

RUN git clone https://github.com/pyenv/pyenv ${DIR_PYENV} \
    && cd ${DIR_PYENV} \
    && src/configure \
    && make -C src \ 
    && ln -s ${DIR_PYENV}/libexec/pyenv ${LOCAL_BIN}/pyenv

ENV PATH=${DIR_PYENV}/bin:${PATH}

RUN echo 'eval "$(pyenv init -)"' >> ${HOME}/.bashrc
RUN eval "$(pyenv init -)" \
    && pyenv install 3.11






# ============
# Entrypoint
# ============
CMD ["/bin/bash"]