Correção do bug que impede montar pastas compartilhadas do Vmware Workstation

As pastas compartilhadas no VMware Workstation são um ótimo recurso para compartilhar arquivos entre a máquina hospedeira e as  suas máquinas virtuais sem necessidade de instalar softwares como NFS, Samba, FTP etc. Porém um bug no código fonte do módulo impede a sua instalação com sucesso em algumas versões do kernel. Fica aqui a dica para correção.

Durante a compilação/instalação dos módulos do vmware usando o comando “./vmware-install.pl” você provavelmente recebeu umas mensagens como as do exemplo abaixo:

tmp/modconfig-k8abm5/vmhgfs-only/link.c: In function ‘HgfsReadlink’:
/tmp/modconfig-k8abm5/vmhgfs-only/link.c:186:10: error: implicit declaration of function ‘vfs_readlink’ [-Werror=implicit-function-declaration]
          error = vfs_readlink(dentry, buffer, buflen, fileName);
          ^
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c: In function ‘HgfsPackDirOpenRequest’:
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:417:26: error: ‘struct file’ has no member named ‘f_dentry’
                      file->f_dentry) < 0) {
                          ^
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c: In function ‘HgfsDirLlseek’:
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:707:32: error: ‘struct file’ has no member named ‘f_dentry’
    struct dentry *dentry = file->f_dentry;
                                ^
In file included from /tmp/modconfig-k8abm5/vmhgfs-only/dir.c:39:0:
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c: In function ‘HgfsReaddirNextEntry’:
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:993:31: error: ‘struct file’ has no member named ‘f_dentry’
    si = HGFS_SB_TO_COMMON(file->f_dentry->d_inode->i_sb);
                               ^
/tmp/modconfig-k8abm5/vmhgfs-only/module.h:89:62: note: in definition of macro ‘HGFS_SB_TO_COMMON’
 #define HGFS_SB_TO_COMMON(sb)             ((HgfsSuperInfo *)(sb)->s_fs_info)
                                                              ^
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:1082:26: error: ‘struct file’ has no member named ‘f_dentry’
          *entryIno = file->f_dentry->d_inode->i_ino;
                          ^
In file included from /tmp/modconfig-k8abm5/vmhgfs-only/dir.c:30:0:
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:1088:44: error: ‘struct file’ has no member named ‘f_dentry’
          *entryIno = compat_parent_ino(file->f_dentry);
                                            ^
/tmp/modconfig-k8abm5/vmhgfs-only/./shared/compat_fs.h:120:46: note: in definition of macro ‘compat_parent_ino’
 #define compat_parent_ino(dentry) parent_ino(dentry)
                                              ^
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:1093:52: error: ‘struct file’ has no member named ‘f_dentry’
      *entryIno = HgfsGetFileInode(&entryAttrs, file->f_dentry->d_inode->i_sb);
                                                    ^
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c: In function ‘HgfsDoReaddir’:
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:1173:13: error: ‘struct file’ has no member named ‘f_dentry’
       !(file->f_dentry) ||
             ^
/tmp/modconfig-k8abm5/vmhgfs-only/dir.c:1174:13: error: ‘struct file’ has no member named ‘f_dentry’
       !(file->f_dentry->d_inode)) {
             ^

Partindo da permissa que você já tentou instalar vmware-tools antes e por isso já tem os cabeçalhos do kernel, gcc, make etc instalados no seu sistema. A única ferramenta adicional que você precisará instalar caso ainda não tenha é o git. Isso porque na verdade vamos usar uns scripts já prontos e disponibilizados no Github para aplicar uns patches para o problema.

O primeiro passo então é instalar o git na máquian virtual que terá o vmware-tools instalado. O que em sistemas Debian-like, como Mint e Ubuntu podem ser feitos com o comando:

sudo apt-get install git

Com isso vá até a pasta temporária da máquina e faça um clone do repositório de patches no Github:

cd /tmp
git clone https://github.com/rasa/vmware-tools-patches.git
cd vmware-tools-patches

Agora, você precisa de um pacote do vmware-tools para aplicar a correção e instalar. Você pode usar o pacote “.tar.gz” que você tentou instalar sem sucesso, ou se preferir baixar uma versão mais recente.

Em qualquer dos casos o pacote deverá estar dentro da pasta /tmp/vmware-tools-patches que foi criada durante o “git clone” que fizemos antes.

Se você listar o conteúdo desta pasta verá que há diversos scripts ali. O “mais lindo” de todos é o “untar-and-patch-and-compile.sh”. O nome já é bem sugestivo sobre a sua finalidade. Descompacta, aplica o patch de correção e compila o vvmware-tools.

Então, uma vez que você digite o comando abaixo, o vmware tools será instalado com as devidas correções e o compartilhamento de pastas do seu host estará funcional na sua vm.

sudo ./untar-and-patch-and-compile.sh

Agora que o vmware-tools corrigido foi instalado seus compartilhamentos estarão imediatamente acessíveis dentro de /mnt/hgfs.

Há vários outros scripts dentro da pasta, que podem ser interessantes, como por exemplo o “download-tools.sh” que basta ser invocado informando o número da versão a ser corrigida para que o pacote correspondente seja baixado.

Referências

Github. vmware-tools-patches. https://github.com/rasa/vmware-tools-patches

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *