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