-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrootfs.Containerfile
More file actions
116 lines (101 loc) · 4.54 KB
/
Copy pathrootfs.Containerfile
File metadata and controls
116 lines (101 loc) · 4.54 KB
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
# syntax=docker/dockerfile:1.4
ARG ARCHIVE_YEAR=2026
ARG ARCHIVE_MONTH=10
ARG ARCHIVE_DAY=02
ARG PACSTRAP_TAG=20260104.0.477168
ARG GOLANG_VERSION=1.25.5
ARG HASH VERSION_ID
FROM golang:${GOLANG_VERSION}-alpine as dockerfile2llbjson
WORKDIR /app
COPY tools/dockerfile2llbjson/go.mod tools/dockerfile2llbjson/go.sum ./
RUN go mod download
COPY tools/dockerfile2llbjson/main.go ./
RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o /app/dockerfile2llbjson .
FROM docker.io/library/archlinux:base-devel-${PACSTRAP_TAG} AS pacstrap
ARG \
ARCHIVE_YEAR \
ARCHIVE_MONTH \
ARCHIVE_DAY
COPY overlay/rootfs/etc/pacman.d/base.config.conf /etc/pacman.d/base.config.conf
COPY overlay/rootfs/etc/pacman.conf /etc/pacman.conf
RUN \
echo "Server = https://archive.archlinux.org/repos/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/${ARCHIVE_DAY}/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist \
&& echo "Server = https://umea.archive.pkgbuild.com/repos/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/${ARCHIVE_DAY}/\$repo/os/\$arch" >> /etc/pacman.d/mirrorlist
RUN for repo in core extra multilib; do \
echo "[repo] $repo" \
&& echo "[$repo]" > /etc/pacman.d/"$repo".repo.conf \
&& echo "Include = /etc/pacman.d/mirrorlist" >> /etc/pacman.d/"$repo".repo.conf; \
done \
&& sed -i '/\[options\]/aInclude=/etc/pacman.d/base.config.conf' /etc/pacman.conf
RUN pacman-key --init \
&& pacman -Sy --needed --noconfirm archlinux-keyring moreutils
RUN mkdir /rootfs
WORKDIR /rootfs
RUN mkdir -m 0755 -p var/{cache/pacman/pkg,lib/pacman,log} dev run etc \
&& mkdir -m 1777 tmp \
&& mkdir -m 0555 sys proc
RUN chronic fakeroot pacman -r . -Sy --noconfirm base mkinitcpio moreutils
COPY overlay/rootfs /overlay
COPY --from=dockerfile2llbjson /app/dockerfile2llbjson /overlay/usr/bin/dockerfile2llbjson
RUN rm usr/share/libalpm/hooks/60-mkinitcpio-remove.hook \
&& rm usr/share/libalpm/hooks/90-mkinitcpio-install.hook \
&& cp -a {/,}etc/pacman.d/mirrorlist \
&& cp -a /etc/pacman.d/*.repo.conf etc/pacman.d/ \
&& rm -rf home && ln -s var/home home \
&& rm -rf mnt && ln -s var/mnt mnt \
&& rm -rf root && ln -s var/roothome root \
&& rm -rf srv && ln -s var/srv srv \
&& rm -rf usr/local && ln -s ../var/usrlocal usr/local \
&& truncate -s 0 etc/machine-id \
&& cp -a /overlay/. /rootfs/. \
&& cd / \
&& tar --sort=name \
--owner=0 --group=0 \
--numeric-owner \
--pax-option=exthdr.name=%d/PaxHeaders/%p,delete=atime,delete=ctime \
--mtime="@1735689640" \
-C rootfs \
-cf rootfs.tar . \
&& rm -rf rootfs \
&& mkdir rootfs \
&& tar -C rootfs -xf rootfs.tar \
&& rm rootfs.tar
FROM scratch AS rootfs
ARG \
ARCHIVE_YEAR \
ARCHIVE_MONTH \
ARCHIVE_DAY \
PACSTRAP_TAG \
HASH
LABEL \
os-release.NAME="Arkēs" \
os-release.PRETTY_NAME="Arkēs Arch Linux" \
os-release.ID="arkes" \
os-release.HOME_URL="https://github.com/Eeems/arkes" \
os-release.BUG_REPORT_URL="https://github.com/Eeems/arkes/issues" \
os-release.VERSION="${ARCHIVE_YEAR}.${ARCHIVE_MONTH}.${ARCHIVE_DAY}" \
os-release.VERSION_ID="${ARCHIVE_YEAR}.${ARCHIVE_MONTH}.${ARCHIVE_DAY}" \
org.opencontainers.image.authors="eeems@eeems.email" \
org.opencontainers.image.source="https://github.com/Eeems/arkes" \
org.opencontainers.image.ref.name="rootfs" \
org.opencontainers.image.description="Atomic and immutable Linux distribution as a container." \
hash="${HASH}" \
mirrorlist="[ \
\"https://archive.archlinux.org/repos/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/${ARCHIVE_DAY}/\$repo/os/\$arch\", \
\"https://america.archive.pkgbuild.com/repos/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/${ARCHIVE_DAY}/\$repo/os/\$arch\", \
\"https://asia.archive.pkgbuild.com/repos/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/${ARCHIVE_DAY}/\$repo/os/\$arch\", \
\"https://europe.archive.pkgbuild.com/repos/${ARCHIVE_YEAR}/${ARCHIVE_MONTH}/${ARCHIVE_DAY}/\$repo/os/\$arch\" \
]"
WORKDIR /
COPY --from=pacstrap /rootfs /
RUN echo 'NAME="Arkēs"' > /usr/lib/os-release \
&& echo 'PRETTY_NAME="Arkēs Arch Linux"' >> /usr/lib/os-release \
&& echo 'ID=arkes' >> /usr/lib/os-release \
&& echo 'HOME_URL="https://github.com/Eeems/arkes"' >> /usr/lib/os-release \
&& echo 'SUPPORT_URL="https://github.com/Eeems/arkes/issues"' >> /usr/lib/os-release \
&& echo 'BUG_REPORT_URL="https://github.com/Eeems/arkes/issues"' >> /usr/lib/os-release \
&& echo "VERSION=${ARCHIVE_YEAR}.${ARCHIVE_MONTH}.${ARCHIVE_DAY}" >> /usr/lib/os-release \
&& echo "VERSION_ID=${ARCHIVE_YEAR}.${ARCHIVE_MONTH}.${ARCHIVE_DAY}" >> /usr/lib/os-release \
&& echo "VARIANT=Base" >> /usr/lib/os-release \
&& echo "VARIANT_ID=base" >> /usr/lib/os-release
ENTRYPOINT [ "/bin/bash" ]