11# Primeiro estágio: Construção dos módulos NVIDIA (akmods)
22FROM quay.io/fedora/fedora-bootc:44 AS builder
33RUN KERNEL_VERSION="$(rpm -q kernel-core --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')" && \
4- dnf5 -y --nodocs install "kernel-devel-${KERNEL_VERSION}" wget && \
4+ dnf5 -y install "kernel-devel-${KERNEL_VERSION}" wget && \
55 wget -O /etc/yum.repos.d/fedora-nvidia-580.repo https://negativo17.org/repos/fedora-nvidia-580.repo && \
6- dnf5 install -y --nodocs nvidia-driver nvidia-driver-cuda && \
6+ dnf5 install -y nvidia-driver nvidia-driver-cuda && \
77 akmods --force --kernels "$KERNEL_VERSION"
88
99# Segundo estágio: Configuração do sistema e imagem final
1010FROM quay.io/fedora/fedora-bootc:44 AS final
11- # 1. Ajuste do sistema de arquivos base, instação do attr e rebuild do Initramfs
12- RUN dnf5 -y --nodocs install attr && \
13- mkdir -vp /var/roothome /data /var/home && \
11+
12+ # 1. Ajuste do sistema de arquivos base e rebuild do Initramfs (Pouca variação)
13+ RUN mkdir -vp /var/roothome /data /var/home && \
1414 kver="$(rpm -q kernel-core --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')" && \
15- dnf5 -y --nodocs install "kernel-modules-extra-${kver}" && \
15+ dnf5 -y install "kernel-modules-extra-${kver}" wget && \
1616 printf 'omit_dracutmodules+=" nfs "\n omit_drivers+=" nfs nfsv3 nfsv4 nfs_acl nfs_common sunrpc rxrpc rpcrdma auth_rpcgss rpcsec_gss_krb5 "\n ' | tee /etc/dracut.conf.d/no-nfs.conf && \
17- dracut -f --reproducible "/usr/lib/modules/${kver}/initramfs.img" "${kver}" && \
18- # Isolar o initramfs gerado em uma camada dedicada
19- setfattr -n user.component -v "kernel-initramfs" "/usr/lib/modules/${kver}/initramfs.img" && \
20- dnf5 clean all && \
21- rm -rf /var/cache/* /var/log/* /tmp/* /var/tmp/*
17+ dracut -f --reproducible /usr/lib/modules/${kver}/initramfs.img ${kver} && \
18+ dnf5 clean all
2219
23- # 2. Instalação dos módulos e drivers NVIDIA compilados
24- COPY --from=builder /etc/yum.repos.d/fedora-nvidia-580.repo /etc/yum.repos.d/fedora-nvidia-580.repo
25- COPY --from=builder /var/cache/akmods/nvidia/kmod-nvidia*.rpm /tmp/nvidia-modules/
26- RUN dnf5 -y --nodocs install \
27- nvidia-kmod-common \
28- nvidia-driver-cuda \
29- /tmp/nvidia-modules/kmod-nvidia-*.rpm && \
30- rm -rf /tmp/nvidia-modules && \
31- # Isolamento dos módulos compilados da NVIDIA
32- kver="$(rpm -q kernel-core --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')" && \
33- if [ -d "/usr/lib/modules/${kver}/extra" ]; then \
34- setfattr -n user.component -v "nvidia-kmod" "/usr/lib/modules/${kver}/extra" ; \
35- fi && \
36- dnf5 clean all && \
37- rm -rf /var/cache/* /var/log/* /tmp/* /var/tmp/*
20+ # 2. Instalação dos módulos e drivers NVIDIA compilados (Camada pesada)
21+ COPY --from=builder /var/cache/akmods/nvidia/kmod-nvidia*.rpm ./
22+ RUN wget -O /etc/yum.repos.d/fedora-nvidia-580.repo https://negativo17.org/repos/fedora-nvidia-580.repo && \
23+ dnf5 download nvidia-kmod-common nvidia-driver-cuda && \
24+ rpm -vi --nodeps nvidia-kmod-common*.rpm && \
25+ rpm -vi --nodeps nvidia-driver-cuda*.rpm && \
26+ dnf5 -y install ./kmod-nvidia-*.rpm && \
27+ rm -rvf kmod-nvidia-*.rpm nvidia-kmod-common*.rpm nvidia-driver-cuda*.rpm && \
28+ dnf5 clean all
3829
3930# 3. Pacotes base do ambiente gráfico GNOME Minimalista
40- RUN dnf5 install -y --nodocs --setopt=install_weak_deps=False gnome-shell && \
41- dnf5 clean all && \
42- rm -rf /var/cache/* /var/log/* /tmp/* /var/tmp/*
31+ RUN dnf5 install gnome-shell --setopt=install_weak_deps=False -y && \
32+ dnf5 clean all
4333
4434# 4. Listas de pacotes personalizadas
45- COPY pacotes_necessarios pacotes_desktop /tmp/
46- RUN dnf5 install -y --nodocs \
47- $(grep -v '^#' /tmp/pacotes_necessarios) \
48- $(grep -v '^#' /tmp/pacotes_desktop) && \
49- rm -f /tmp/pacotes_necessarios /tmp/pacotes_desktop && \
50- dnf5 clean all && \
51- rm -rf /var/cache/* /var/log/* /tmp/* /var/tmp/*
35+ # Copiadas separadamente para evitar a invalidação do cache do GNOME e NVIDIA
36+ COPY pacotes_necessarios pacotes_desktop ./
37+ RUN grep -v '^#' pacotes_necessarios | tr '\n ' ' ' | xargs dnf5 install -y && \
38+ grep -v '^#' pacotes_desktop | tr '\n ' ' ' | xargs dnf5 install -y && \
39+ rm -fv pacotes_necessarios pacotes_desktop && \
40+ dnf5 clean all
5241
53- # 5. Configurações do sistema, scripts, links simbólicos e atribuição de user.component
54- COPY 10-nvidia-args.toml locale.conf post-install.sh post-install.service vconsole.conf zram-generator.conf /tmp/sysconfig/
55- RUN rm -rf /opt && mkdir -vp /var/opt && ln -vs /var/opt /opt && \
56- mkdir -vp /var/usrlocal && mv -v /usr/local/* / var/usrlocal/ 2>/dev/null || true && \
57- rm -rf /usr/local && ln -vs /var/usrlocal /usr/local && \
58- mv -v /tmp/sysconfig/zram-generator.conf /usr/lib/systemd/ && \
59- mv -v /tmp/sysconfig/vconsole .conf /etc/vconsole.conf && \
60- mv -v /tmp/sysconfig/locale .conf /etc/locale .conf && \
61- mkdir -p /usr/lib/bootc/kargs.d && \
62- mv -v /tmp/sysconfig/ 10-nvidia-args.toml /usr/lib/bootc/kargs.d/10-nvidia-args.toml && \
63- mv -v /tmp/sysconfig/ post-install.sh /usr/bin/post-install.sh && \
64- mv -v /tmp/sysconfig/ post-install.service /usr/lib/systemd/system/post-install.service && \
42+ # 5. Configurações do sistema, scripts e links simbólicos (Arquivos com modificações frequentes)
43+ # Mantidos por último para que edições nesses arquivos executem em instantes
44+ COPY 10-nvidia-args.toml locale.conf post-install.sh post-install.service vconsole.conf zram-generator.conf ./
45+ RUN rm -rvf /opt && mkdir -vp /var/opt && ln -vs / var/opt /opt && \
46+ mkdir -vp /var/usrlocal && mv -v /usr/local/* /var/usrlocal/ && \
47+ rm -rvf /usr/local && ln -vs /var/usrlocal /usr/local && \
48+ mv -v zram-generator .conf /etc/systemd/ && \
49+ mv -v vconsole .conf /etc/vconsole .conf && \
50+ mv -v locale.conf /etc/locale.conf && \
51+ mv -v 10-nvidia-args.toml /usr/lib/bootc/kargs.d/10-nvidia-args.toml && \
52+ mv -v post-install.sh /usr/bin/post-install.sh && \
53+ mv -v post-install.service /usr/lib/systemd/system/post-install.service && \
6554 chmod +x /usr/bin/post-install.sh && \
6655 systemctl enable post-install.service && \
6756 systemctl mask systemd-remount-fs.service && \
6857 systemctl mask akmods-keygen@akmods-keygen.service && \
6958 systemctl enable libvirtd.service && \
7059 systemctl enable spice-vdagentd.service && \
71- # Atribuição de rótulos user.component para arquivos modificáveis
72- setfattr -n user.component -v "custom-scripts" /usr/bin/post-install.sh && \
73- setfattr -n user.component -v "custom-config" /etc/vconsole.conf && \
74- setfattr -n user.component -v "custom-config" /etc/locale.conf && \
75- setfattr -n user.component -v "custom-config" /usr/lib/systemd/zram-generator.conf && \
76- setfattr -n user.component -v "bootc-kargs" /usr/lib/bootc/kargs.d/10-nvidia-args.toml && \
77- setfattr -n user.component -v "custom-services" /usr/lib/systemd/system/post-install.service && \
78- rm -rf /tmp/sysconfig \
79- /var/cache/* \
80- /var/lib/dnf/* \
81- /var/log/* \
82- /var/tmp/* \
83- /tmp/* \
84- /var/usrlocal/share/applications/mimeinfo.cache \
85- /var/roothome/.* 2>/dev/null || true
60+ rm -rfv /var/cache/* \
61+ /var/lib/* \
62+ /var/log/* \
63+ /var/tmp/* \
64+ /var/usrlocal/share/applications/mimeinfo.cache \
65+ /var/roothome/.*
8666
8767# 6. Validação do bootc
8868RUN bootc container lint
0 commit comments