{"id":2380,"date":"2025-06-04T10:50:22","date_gmt":"2025-06-04T08:50:22","guid":{"rendered":"https:\/\/www.sfsoft.it\/blog\/?p=2380"},"modified":"2025-06-04T10:55:32","modified_gmt":"2025-06-04T08:55:32","slug":"driver-nvidia-su-debian-12-bookworm-e-secure-boot","status":"publish","type":"post","link":"https:\/\/www.sfsoft.it\/blog\/2025\/06\/04\/driver-nvidia-su-debian-12-bookworm-e-secure-boot\/","title":{"rendered":"Driver NVIDIA su Debian 12 BookWorm e Secure Boot"},"content":{"rendered":"\n<p>fonte: <a href=\"https:\/\/r1bnc.com\/post\/93\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/r1bnc.com\/post\/93\/<\/a><\/p>\n\n\n\n<p><strong>PREMESSA: includo queste informazioni a solo scopo di annotazione, dopo le ricerche fatte ho preferito usare il metodo della disattivazione della validazione al boot piuttosto che addentrarmi poi alla firma dei driver.<\/strong><\/p>\n\n\n\n<p>I driver NVIDIA non funzionano su Debian con Secure Boot abilitato, o si disabilita il Secure Boot, o si disattiva solo la validazione o serve firmarli prima.<\/p>\n\n\n\n<p>Per disattivare la validazione (metodo pi\u00f9 veloce e senza dover agire sulle imposazioni macchina) si procede con il comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mokutil --disable-validation<\/code><\/pre>\n\n\n\n<p>Verr\u00e0 richiesta una password da 8 a 16 caratteri, conviene mettere una cosa semplice tipo 11111111 perch\u00e8 poi verranno richiesti dei caratteri a caso (tre nel mio caso) indicando la posizione nella password, dopo ogni carattere immesso va premuto INVIO per confermare.<\/p>\n\n\n\n<p>Dopo il riavvio del PC si entrer\u00e0 nella schermata di gestione MOK , si selezione l&#8217;opzione per cambiare lo stato della validazione, verranno richiesti i caratteri della password, riavviare poi al termine.<\/p>\n\n\n\n<p>Nei successivi boot uscir\u00e0 un messaggio in alto che avvisa che il boot non \u00e8 sicuro, poi partir\u00e0 senza problemi e se i driver NVIDIA erano gi\u00e0 installati \u00e8 facile che funzionino gi\u00e0 da soli, per verificare usare il comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ nvidia-smi<\/code><\/pre>\n\n\n\n<p>Usando questo metodo non serve fare altro.<\/p>\n\n\n\n<p>Per procedere invece alla firma dei driver con Secure Boot attivo occorre innanzi tutto avere i certificati MOK se non si hanno gi\u00e0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo su -\nmkdir \/root\/module-signing\ncd \/root\/module-signing\n# Replace USERNAME by your username on the machine\nopenssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj \"\/CN=USERNAME\/\"\nchmod 600 MOK.priv<\/code><\/pre>\n\n\n\n<p>Verr\u00e0 generata una coppia di chiavi MOK.priv e MOK.der<\/p>\n\n\n\n<p>Si importa la chiave nel boot PC (la password impostata verr\u00e0 richiesta dopo al boot nella fase di importazione, sar\u00e0 richiesta solo una volta):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mokutil --import \/root\/module-signing\/MOK.der\n# You will be prompted for your password twice\n# input the temporary one you just imagined<\/code><\/pre>\n\n\n\n<p>Riavviare il PC, alla schermata blu con la richiesta di importazione della chiave selezionare <em>Enroll MOK<\/em> e seguire le indicazioni (verr\u00e0 richiesta la password di prima), riavviare poi il PC.<\/p>\n\n\n\n<p>Controlliamo che il certificato sia attivo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mokutil --test-key \/root\/module-signing\/MOK.der\n\/root\/module-signing\/MOK.der is already in the enrollment\nrequest<\/code><\/pre>\n\n\n\n<p>Ora il certificato \u00e8 caricato nel boot e si pu\u00f2 procedere alla firma dei moduli.<\/p>\n\n\n\n<p>I driver quasi sicuramente sono gestiti da DKMS, gli si deve dire dove sono i certificati per le firme, si apre il file \/etc\/dkms\/framework.con e aggiunge:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mok_signing_key=\"\/root\/module-signing\/MOK.priv\"\nmok_certificate=\"\/root\/module-signing\/MOK.der\"<\/code><\/pre>\n\n\n\n<p>Se nonostante i parametri i driver non vengono firmati, si pu\u00f2 provare a indicare uno script di comando, sempre in framework.conf aggiungere:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sign_tool=\"\/etc\/dkms\/sign_helper.sh\"<\/code><\/pre>\n\n\n\n<p>Creare poi lo script \/etc\/dkms\/sign_helper.sh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/lib\/modules\/\"$1\"\/build\/scripts\/sign-file sha512 \/root\/.mok\/\nclient.priv \/root\/.mok\/client.der \"$2\"<\/code><\/pre>\n\n\n\n<p>Renderlo poi eseguibilie:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo chmod +x \/etc\/dkms\/sign_helper.sh<\/code><\/pre>\n\n\n\n<p>Per procedere alla firma le istruzioni che ho trovato parlano di driver nel formato .ko ma nel mio caso erano in formato compresso .ko.xz , ho quindi creato uno script adattandolo ai file compressi:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\n# Impostazione delle variabili d'ambiente\nVERSION=\"$(uname -r)\"\nSHORT_VERSION=\"$(uname -r | cut -d . -f 1-2)\"\nMODULES_DIR=\"\/lib\/modules\/$VERSION\"\nKBUILD_DIR=\"\/usr\/lib\/linux-kbuild-$SHORT_VERSION\"\nMOK_PRIV=\"\/root\/module-signing\/MOK.priv\"\nMOK_DER=\"\/root\/module-signing\/MOK.der\"\nKBUILD_SIGN_PIN=\"\"\n\n# Chiedi la passphrase per la chiave privata\necho -n \"Passphrase per la chiave privata: \"\nread -s KBUILD_SIGN_PIN\nexport KBUILD_SIGN_PIN\n\n# Directory dove si trovano i driver\ncd \"$MODULES_DIR\/updates\/dkms\"\n\n# Trova tutti i file .ko.xz e firmali uno per uno\nfind -name \"*.ko.xz\" | while read i; do\n    # Decomprimiamo il file .ko.xz\n    echo \"Decomprimendo $i...\"\n    xz -d \"$i\"\n\n    # Firma del file .ko\n    KO_FILE=\"${i%.xz}\"  # Rimuove l'estensione .xz\n    echo \"Firmando il modulo $KO_FILE...\"\n    sudo --preserve-env=KBUILD_SIGN_PIN \"$KBUILD_DIR\/scripts\/sign-file\" sha256 \"$MOK_PRIV\" \"$MOK_DER\" \"$KO_FILE\"\n\n    # Ricomprimi il file .ko firmato in .ko.xz\n    echo \"Ricomprimendo $KO_FILE...\"\n    xz \"$KO_FILE\"\n\n    # Rimuovi il file temporaneo senza l'estensione .xz\n    rm -f \"$KO_FILE\"\n\n    echo \"Modulo $KO_FILE firmato e ricompressione completata.\"\ndone\n\n# Aggiornamento dell'initramfs\necho \"Aggiornando initramfs...\"\nsudo update-initramfs -k all -u\n\n# Firma del kernel (serve?)\n#echo \"Firmando il kernel...\"\n#sbsign --key \"$MOK_PRIV\" --cert \"\/root\/module-signing\/MOK.pem\" \"\/boot\/vmlinuz-$VERSION\" --output \"\/boot\/vmlinuz-$VERSION.tmp\"\n# Sostituisci il kernel firmato\n#sudo mv \"\/boot\/vmlinuz-$VERSION.tmp\" \"\/boot\/vmlinuz-$VERSION\"\n\necho \"Operazione completata.\"<\/code><\/pre>\n\n\n\n<p>Riavviare e verificare con il comando nvidia-smi.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>fonte: https:\/\/r1bnc.com\/post\/93\/ PREMESSA: includo queste informazioni a solo scopo di annotazione, dopo le ricerche fatte ho preferito usare il metodo della disattivazione della validazione al boot piuttosto che addentrarmi poi alla firma dei driver. I driver NVIDIA non funzionano su Debian con Secure Boot abilitato, o si disabilita il Secure Boot, o si disattiva solo [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[166,15,3],"tags":[287,167,16,8,291],"_links":{"self":[{"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2380"}],"collection":[{"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/comments?post=2380"}],"version-history":[{"count":4,"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2380\/revisions"}],"predecessor-version":[{"id":2386,"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2380\/revisions\/2386"}],"wp:attachment":[{"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/media?parent=2380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/categories?post=2380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/tags?post=2380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}