VirtualBox su Slackware64 con supporto a guest a 32-bit

Se avete problemi con l'installazione e la configurazione di Slackware64 postate qui. Non usate questo forum per argomenti che trattano la Slackware32 o generali... per quelli usate rispettivamente il forum Slackware e Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware64 usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware64, se l'argomento è Slackware32 o generale usate rispettivamente il forum Slackware o Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
gian_d
Linux 3.x
Linux 3.x
Messaggi: 654
Iscritto il: mer 16 lug 2014, 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 6.6.xx
Desktop: KDE 5.27
Località: Sardinia
Contatta:

VirtualBox su Slackware64 con supporto a guest a 32-bit

Messaggio da gian_d »

Seguendo un suggerimento di Ponce di qualche anno fa (non ricordo il thread), avevo installato una Slackware 15.0 a 32 bit in macchina virtuale. Uso regolarmente questo sistema per testare i miei slackbuild su sistemi a 32 bit. Per comodità uso VirtualBox sulla current, dato che è il mio sistema predefinito, mentre i test sulla Slackware64 stable li faccio in un'altra macchina alla quale mi collego sempre con SecureShell e quindi facendo tutto da terminale.
Come al solito prima o poi saltano i problemini: oggi ho aggiornato il kernel alla versione 6.6.6 e dopo tanto tempo sono incappato in errori di compilazione dei moduli di VirtualBox.

Faccio presente che uso una vecchia versione di VirtualBox, la 6.1.32. Il motivo è che la versione funziona regolarmente con la Slack 32bit installata e ho sempre ritenuto preferibile non aggiornarla. Infatti, se provo a compilare una nuova versione (mi sembra che attualmente sia disponibile lo slackbuild per la 6.1.44) lo script si arresta impostando la variabile d'ambiente SOFTWARE_VIRTUALIZATION=yes.
Da quello che so (almeno così c'è scritto in README) questo settaggio è indispensabile per poter installare sistemi guest a 32 bit, ma è necessario che il compilatore supporti la compilazione a 32 bit e questo sembra sia possibile solo installando le multilib di AlienBob. Questo succede anche con la mia attuale versione, la 6.1.32.

A questo punto non riesco a spiegarmi l'arcano: non ricordo di aver mai installato le multilib nella mia Slackware64 e allora come è possibile che sia riuscito a compilare la 6.1.32 e farla funzionare con un guest a 32 bit? Purtroppo sono passati anni e non ricordo cosa avevo fatto, ma dubito di aver installato le multilib e poi rimosse, perché sono fortemente restio a installare pacchetti precompilati ad eccezione di quelli ufficiali rilasciati da Pat.

Ho anche provato a compilare la 6.1.44 senza impostare il flag SOFTWARE_VIRTUALIZATION ma il processo si arresta perché a quanto pare anche lo slackbuild di virtualbox deve essere riadattato per renderlo compatibile con il nuovo libxml2.

Alla fine, prima di tentare di risolvere il problema con xml, non sapendo se effettivamente mi serviva per risolvere il mio problema specifico, ho preferito cercare di risolvere il problema della compilazione dei moduli cercando la patchare la 6.1.32 e alla fine ci sono riuscito, anche se mi ci sono volute ore e pazienza.

Per ora il problema è risolto, ma prima o poi dovrò affrontare seriamente quello di un aggiornamento del pacchetto di VirtualBox, perciò chiedo: è proprio necessario installare le multilib di AlienBob o posso farne a meno? Non vorrei imbarcarmi in configurazioni che poi finirebbero per aggiungere problemi ai problemi per una macchina virtuale che uso solo per uno scopo limitato.

gian_d
Linux 3.x
Linux 3.x
Messaggi: 654
Iscritto il: mer 16 lug 2014, 17:35
Nome Cognome: Giancarlo Dessì
Slackware: 64 current
Kernel: 6.6.xx
Desktop: KDE 5.27
Località: Sardinia
Contatta:

Re: VirtualBox su Slackware64 con supporto a guest a 32-bit

Messaggio da gian_d »

Per chi avesse un problema analogo al mio, ovvero far funzionare VirtualBox 6.1.32 sulla current aggiornata con i kernel della serie 6.6, queste sono le modifiche che ho apportato:

1) nello slackbuild ho aggiunto le seguenti righe:

Codice: Seleziona tutto

sed -i ./vboxdrv/r0drv/linux/memobj-r0drv-linux.c -e "s/pte_offset_map/pte_offset_kernel/g"

patch -p1 < $CWD/linux-6.6.patch
Il codice della patch è il seguente:

Codice: Seleziona tutto

--- ./vboxdrv/r0drv/linux/memobj-r0drv-linux.c
+++ ./vboxdrv/r0drv/linux/memobj-r0drv-linux.c
@@ -1236,6 +1236,9 @@
                                 fWrite,                 /* force write access. */
 # endif
-                                &pMemLnx->apPages[0],   /* Page array. */
-                                papVMAs);               /* vmas */
+                                &pMemLnx->apPages[0]    /* Page array. */
+# if GET_USER_PAGES_API < KERNEL_VERSION(6, 5, 0)
+                                , papVMAs               /* vmas */
+# endif
+                                );
         /*
          * Actually this should not happen at the moment as call this function
@@ -1258,6 +1258,8 @@
                                 fWrite,                 /* force write access. */
 # endif
-                                &pMemLnx->apPages[0],   /* Page array. */
-                                papVMAs                 /* vmas */
+                                &pMemLnx->apPages[0]    /* Page array. */
+# if GET_USER_PAGES_API < KERNEL_VERSION(6, 5, 0)
+                                , papVMAs               /* vmas */
+# endif
 # if GET_USER_PAGES_API >= KERNEL_VERSION(4, 10, 0)
                                 , NULL                  /* locked */
@@ -1301,7 +1301,13 @@
             while (rc-- > 0)
             {
                 flush_dcache_page(pMemLnx->apPages[rc]);
+# if GET_USER_PAGES_API < KERNEL_VERSION(6, 5, 0)
+#  if RTLNX_VER_MIN(6,3,0)
+                vm_flags_set(papVMAs[rc], VM_DONTCOPY | VM_LOCKED);
+#  else
                 papVMAs[rc]->vm_flags |= VM_DONTCOPY | VM_LOCKED;
+#  endif
+# endif
             }
 
             LNX_MM_UP_READ(pTask->mm);
@@ -1771,7 +1771,10 @@
                     /* Thes flags help making 100% sure some bad stuff wont happen (swap, core, ++).
                      * See remap_pfn_range() in mm/memory.c */
-#if    RTLNX_VER_MIN(3,7,0)
+
+#if    RTLNX_VER_MIN(6,3,0)
+                    vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP);
+#elif  RTLNX_VER_MIN(3,7,0)
                     vma->vm_flags |= VM_DONTEXPAND | VM_DONTDUMP;
 #else
                     vma->vm_flags |= VM_RESERVED;
 #endif

--- ./vboxnetflt/linux/VBoxNetFlt-linux.c
+++ ./vboxnetflt/linux/VBoxNetFlt-linux.c
@@ -38,4 +38,7 @@
 # include <linux/nsproxy.h>
 #endif
+#if RTLNX_VER_MIN(6,4,10) || RTLNX_RHEL_MAJ_PREREQ(9,4)
+# include <net/gso.h>
+#endif
 #include <linux/netdevice.h>
 #if RTLNX_VER_MAX(2,6,29) || RTLNX_VER_MIN(5,11,0)

La patch l'ho elaborata per tentativi apportando le modifiche estrapolate da un confronto con i codici dei sorgenti delle nuove versioni rilasciate di VirtualBox. Mi è andata bene perché alla fine non c'era molto da modificare, se non aggiungere i nuovi fix man mano che intercettavo gli errori.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: VirtualBox su Slackware64 con supporto a guest a 32-bit

Messaggio da targzeta »

Grande! =D>
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Rispondi