-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathContainerfile
More file actions
152 lines (115 loc) · 5.17 KB
/
Containerfile
File metadata and controls
152 lines (115 loc) · 5.17 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
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
# Estágio de build do módulo da nvidia numa imagem separada
# Para evitar poluir a imagem final com os pacotes de desenvolvimento do kernel e ferramentas de construção
FROM quay.io/fedora/fedora-bootc:44 AS builder
RUN <<ELL
set -e
echo "Atualiza o kernel da imagem"
dnf5 upgrade -y 'kernel*' --refresh
echo "Instala o kernel-devel necessário para nvidia módulo"
dnf5 -y install kernel-devel --refresh
echo "Identifica a versão do kernel instalada no container, para instalar kernel-devel para Nvidia"
KERNEL_VERSION="$(rpm -q kernel-core --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')"
echo "wget necessário para baixar repositórios"
dnf5 -y install wget
echo "Configura repositório negativo17 para drivers nvidia"
wget -O /etc/yum.repos.d/fedora-nvidia-580.repo \
https://negativo17.org/repos/fedora-nvidia-580.repo
echo "Instala o driver da nvidia"
dnf5 install -y nvidia-driver nvidia-driver-cuda --refresh
echo "Build nvidia kernel module para o kernel: $KERNEL_VERSION"
akmods --force --kernels "$KERNEL_VERSION"
ELL
# Imagem final do container
FROM quay.io/fedora/fedora-bootc:44
# Copia o módulo da nvidia construído no estágio anterior
COPY --from=builder /var/cache/akmods/nvidia/kmod-nvidia*.rpm ./
# Copia os arquivos necessários para o container
COPY 10-nvidia-args.toml locale.conf post-install.sh pacotes_rpm post-install.service vconsole.conf zram-generator.conf ./
# Bloco com a maior parte da configuração do sistema
RUN <<EOF
set -e
echo "Cria diretórios necessários"
mkdir -vp /var/roothome /data /var/home
echo "Atualiza todo o container para os pacotes mais recentes"
dnf5 -y upgrade --refresh
echo "Instala o kernel-modules-extra para um melhor suporte a hardware"
dnf5 -y install kernel-modules-extra --refresh
echo "Remove modulo do nfs desnecessário no initramfs"
tee /etc/dracut.conf.d/no-nfs.conf >/dev/null << 'NONFS'
omit_dracutmodules+=" nfs "
omit_drivers+=" nfs nfsv3 nfsv4 nfs_acl nfs_common sunrpc rxrpc rpcrdma auth_rpcgss rpcsec_gss_krb5 "
NONFS
echo "Gera um novo initramfs no local correto"
kver="$(rpm -q kernel-core --queryformat '%{VERSION}-%{RELEASE}.%{ARCH}')"
dracut -f /usr/lib/modules/${kver}/initramfs.img ${kver}
echo "wget necessário para baixar repositórios"
dnf5 -y install wget
echo "Configura o zram"
mv -v zram-generator.conf /etc/systemd/
echo "Configura repositório negativo17 para libs da nvidia necessárias"
wget -O /etc/yum.repos.d/fedora-nvidia-580.repo \
https://negativo17.org/repos/fedora-nvidia-580.repo
echo "instalar o pacote do nvidia-kmod-common e nvidia-driver-cuda necessários, mas sem toda as dependências para construção do módulo"
dnf5 download nvidia-kmod-common nvidia-driver-cuda
rpm -vi --nodeps nvidia-kmod-common*.rpm
rpm -vi --nodeps nvidia-driver-cuda*.rpm
echo "instalar o kmod-nvidia previamente construído na imagem anterior"
dnf5 -y install ./kmod-nvidia-*.rpm
echo "Para /opt gravavel"
rm -rvf /opt && mkdir -vp /var/opt && ln -vs /var/opt /opt
echo "Para /usr/local gravavel"
mkdir -vp /var/usrlocal && mv -v /usr/local/* /var/usrlocal/ 2>/dev/null
rm -rvf /usr/local && ln -vs /var/usrlocal /usr/local
echo "Configura o TTY para o layout de teclado BR, bem como o sistema de locale PT-BR"
mv -v vconsole.conf /etc/vconsole.conf
mv -v locale.conf /etc/locale.conf
echo "Configura os argumento do kernel para nvidia"
echo "veja a doc https://bit.ly/4qA7J73"
mv -v 10-nvidia-args.toml /usr/lib/bootc/kargs.d/10-nvidia-args.toml
echo "Move o script de pós instalação"
mv -v post-install.sh /usr/bin/post-install.sh
echo "Move o serviço de pós instalação"
echo "Prefira /usr sempre que possível a etc veja: https://bit.ly/4tBoFx4"
mv -v post-install.service /usr/lib/systemd/system/post-install.service
echo "Instala os flatpaks no primeiro boot"
chmod +x /usr/bin/post-install.sh
systemctl enable post-install.service
echo "Limpeza de residuos desse bloco de construção, para reduzir o tamanho da imagem final"
rm -rvf kmod-nvidia-*.rpm nvidia-kmod-common*.rpm nvidia-driver-cuda*.rpm
dnf5 clean all
rm -rfv /var/cache/* \
/var/lib/* \
/var/log/* \
/var/tmp/*
EOF
# Bloco para instalar o gnome shell minimal, e fazer uma última limpeza
RUN echo "Install gnome shell minimal" && \
dnf5 install gnome-shell --setopt=install_weak_deps=False -y && \
dnf5 clean all && \
rm -rfv /var/cache/* \
/var/lib/* \
/var/log/* \
/var/tmp/*
# Bloco para instalar os pacotes rpm listados no arquivo pacotes_rpm
# E também desativa alguns serviços desnecessários e habilita outros, além de fazer uma limpeza final
RUN <<EOR
set -e
echo "instala os pacotes rpm listados no arquivo pacotes_rpm"
tr '\n' ' ' < pacotes_rpm | xargs dnf5 install -y
echo "Desativa alguns serviços desnecessários e habilita outros"
systemctl mask systemd-remount-fs.service
systemctl mask akmods-keygen@akmods-keygen.service
systemctl enable libvirtd.service
systemctl enable spice-vdagentd.service
echo "Limpeza de resíduos de construção"
rm -rvf pacotes_rpm
dnf5 clean all
rm -rfv /var/cache/* \
/var/lib/* \
/var/log/* \
/var/tmp/* \
/var/usrlocal/share/applications/mimeinfo.cache \
/var/roothome/.*
EOR
# Verificar por erros na imagem
RUN bootc container lint