-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathDockerfile
213 lines (180 loc) · 6.11 KB
/
Dockerfile
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#-------------------------------------------------------------------------------
# Base part used for ltsp-server and ltsp-client
#-------------------------------------------------------------------------------
FROM ubuntu:20.04 as ltsp
ENV VERSION=v0.13.4
ENV DEBIAN_FRONTEND=noninteractive
# Install updates and LTSP package
RUN apt-get -y update \
&& apt-get -y upgrade \
&& apt-get -y install \
curl \
&& apt-get clean
RUN printf '%s\n' \
'deb http://ppa.launchpad.net/ltsp/ppa/ubuntu focal main' \
'deb http://ppa.launchpad.net/ltsp/proposed/ubuntu focal main' \
> /etc/apt/sources.list.d/ltsp.list \
&& curl -L https://ltsp.org/misc/ltsp_ubuntu_ppa.gpg \
-o /etc/apt/trusted.gpg.d/ltsp_ubuntu_ppa.gpg
RUN apt-get -y update \
&& apt-get -y install \
ltsp-cloud \
&& apt-get clean
#-------------------------------------------------------------------------------
# Installing Kernel and basic software
#-------------------------------------------------------------------------------
FROM ltsp as rootfs-pre
# Install packages
RUN echo 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";' \
>> /etc/apt/apt.conf.d/01norecommend \
&& mkdir -p /var/lib/resolvconf \
&& touch /var/lib/resolvconf/linkified \
&& apt-get update \
&& apt-get -y install \
adduser \
apparmor-utils \
apt-transport-https \
arping \
bash-completion \
bridge-utils \
ca-certificates \
curl \
dbus-user-session \
gnupg \
gpg-agent \
htop \
ifenslave \
initramfs-tools \
ipset \
ipvsadm \
jnettop \
jq \
linux-image-generic \
lm-sensors \
lvm2 \
openssh-server \
nano \
net-tools \
nfs-common \
pciutils \
resolvconf \
rsync \
screen \
squashfs-tools \
ssh \
sysstat \
systemd \
sudo \
tcpdump \
telnet \
thin-provisioning-tools \
ubuntu-minimal \
vim \
vlan \
wget \
zfsutils-linux \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Disable systemd-resolved
RUN systemctl disable systemd-resolved.service \
&& systemctl mask systemd-resolved.service
# Install docker
ARG DOCKER_VERSION=20.10
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
&& echo "deb https://download.docker.com/linux/ubuntu focal stable" \
> /etc/apt/sources.list.d/docker.list \
&& apt-get update \
&& DOCKER_VERSION=$(apt-cache madison docker-ce | awk '{print $3}' | grep -m1 "$DOCKER_VERSION") \
&& apt-get -y install docker-ce="$DOCKER_VERSION" \
&& apt-mark hold docker-ce
# Install kubeadm, kubelet and kubectl
# https://kubernetes.io/docs/setup/independent/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl
ARG KUBE_VERSION=1.22
RUN curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - \
&& echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" \
> /etc/apt/sources.list.d/kubernetes.list \
&& apt-get update \
&& KUBE_VERSION=$(apt-cache madison kubelet | awk '{print $3}' | grep -m1 "$KUBE_VERSION") \
&& apt-get -y install kubelet=$KUBE_VERSION kubeadm=$KUBE_VERSION kubectl=$KUBE_VERSION cri-tools \
&& apt-mark hold kubelet kubeadm kubectl
# Disable automatic updates
RUN rm -f /etc/apt/apt.conf.d/20auto-upgrades
# Disable apparmor profiles
RUN find /etc/apparmor.d \
-maxdepth 1 \
-type f \
-name "sbin.*" \
-o -name "usr.*" \
-exec ln -sf "{}" /etc/apparmor.d/disable/ \;
# Setup locales
RUN printf '%s\n' \
'LANG=en_US.UTF-8' \
'LC_TIME=en_DK.UTF-8' \
'LC_CTYPE=en_US.UTF-8' \
> /etc/locale.conf \
&& locale-gen en_US.UTF-8 en_DK.UTF-8
#-------------------------------------------------------------------------------
# Build kernel modules
#-------------------------------------------------------------------------------
FROM rootfs-pre as modules
# Install kernel-headers and dkms
RUN apt-get update \
&& KERNEL_VERSION="$(ls -1 /lib/modules/ | tail -n1)" \
&& apt-get -y install "linux-headers-${KERNEL_VERSION}" dkms \
&& apt-get clean
# Install DRBD modules
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CC1B5A793C04BB3905AD837734893610CEAA9512 \
&& echo "deb http://ppa.launchpad.net/linbit/linbit-drbd9-stack/ubuntu focal main" \
> /etc/apt/sources.list.d/linbit.list \
&& apt-get update \
&& apt-get -y install drbd-dkms
#-------------------------------------------------------------------------------
# Build rootfs image
#-------------------------------------------------------------------------------
FROM rootfs-pre as rootfs
# Copy kernel modules
COPY --from=modules /lib/modules/ /lib/modules/
# Generate initramfs with new modules
RUN update-initramfs -u
# Generate motd
COPY motd /etc/motd
RUN sed -i "s/\${VERSION}/${VERSION}/" /etc/motd
# Generate image
ENV OMIT_FUNCTIONS="remove_users"
ENV ADD_IMAGE_EXCLUDES="/tmp/image.excludes"
RUN printf "%s\n" kaniko image.excludes.tmp > /tmp/image.excludes
RUN ltsp image -I /
#-------------------------------------------------------------------------------
# Build dnsmasq with tftp single port support
#-------------------------------------------------------------------------------
FROM ltsp as builder
# Common build-dependencies
RUN apt-get -y update \
&& apt-get -y install \
git \
build-essential \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
# Build dnsmasq
ARG DNSMAQ_VERSION=2.81-12-g619000a
RUN git clone git://thekelleys.org.uk/dnsmasq.git \
&& cd dnsmasq/ \
&& git checkout ${DNSMAQ_VERSION} \
&& make
#-------------------------------------------------------------------------------
# LTSP-Server
#-------------------------------------------------------------------------------
FROM ltsp
RUN apt-get -y update \
&& apt-get -y install \
grub-pc-bin \
grub-efi-amd64-bin \
inotify-tools \
nginx \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Generate nginx config
RUN ltsp http -I
COPY --from=builder /dnsmasq/src/dnsmasq /usr/sbin/dnsmasq
COPY --from=rootfs /srv/ltsp/images /srv/ltsp/images
COPY --from=rootfs /srv/tftp/ltsp /srv/tftp/ltsp