Aqui está a coisa. Estou executando o Mint 19, instalação relativamente nova. Ouvi muito hype sobre o Dwarf Fortress e instalei-o uma vez; então, precisando sair com pressa, fechou com Control-C. Desde então, toda vez que tento executá-lo, recebo a saída:
/tmp/dwarf-fortresss7j3cousrun/df: 6: /tmp/dwarf-fortresss7j3cousrun/df: ./libs/Dwarf_Fortress: not found
Traceback (most recent call last):
File "/usr/games/dwarf-fortress", line 93, in <module>
main()
File "/usr/games/dwarf-fortress", line 90, in main
run_df_in_unionfs_with_cleanup(user_run_dir, data_dirs, sys.argv)
File "/usr/games/dwarf-fortress", line 60, in run_df_in_unionfs_with_cleanup
run_df_in_unionfs(user_run_dir, data_dirs, args)
File "/usr/games/dwarf-fortress", line 54, in run_df_in_unionfs
run_df(tmp_dir, args)
File "/usr/games/dwarf-fortress", line 46, in run_df
subprocess.run(cmd).check_returncode()
File "/usr/lib/python3.6/subprocess.py", line 369, in check_returncode self.stderr)
subprocess.CalledProcessError: Command '['/tmp/dwarf-fortresss7j3cousrun/df', '/usr/games/dwarf-fortress']'
returned non-zero exit status 127.
Seguido pelo término imediato do programa. Eu tentei remover, até mesmo purgar e reinstalar, dwarf-fortress, apenas para obter o mesmo resultado. Ele funcionou perfeitamente bem exatamente uma vez e, por mais que eu tenha encarado esse erro, não consigo entender.
Não é crítico para os negócios nem nada, eu não sou tecnicamente nem um jogador; mas eu realmente gostaria de saber por que o programa está falhando agora e de que maneira ele foi quebrado por mim. É um mistério demais para deixar desmarcado. Obrigado pelo seu tempo.
TL;DR: Use o seguinte script para limpar seu
$XDG_DATA_HOME
/$HOME
de sobras e desmontar anteriorunionfs
:Por que isso acontece?
O
dwarf-fortress
pacote fornecido pelo Ubuntu usa um wrapper Python/usr/games/dwarf-fortress
. Esse wrapper cria umadata
hierarquia secundária em$XDG_DATA_HOME/.local/share/dwarf-fortress/run/.unionfs-fuse
, que é montadaunionfs(8)
junto com alguns outros diretórios.Isso permite que você coloque seus mods em seu
$XDG_DATA_HOME/.local/share/dwarf-fortress
diretório, para que você não precise alterar o conteúdo de/usr/share/games/dwarf-fortress
, o que é ótimo! No entanto, umunionfs
deve ser manuseado com cuidado e limpo corretamente. O script Python falhou quando você costumava C-csair do jogo.Portanto, o provavelmente
unionfs
ainda está montado, mas em mau estado.Como faço para corrigi-lo?
Então, antes de tudo, certifique-se de que o jogo esteja completamente fechado:
Em seguida, certifique-se de que não haja sobras
unionfs
de montagem DF:Como você pode ver, existem atualmente dois no meu sistema. Como ambos estão quebrados, vamos nos livrar deles com
fusermount -u
:E por último, mas mais importante, remova o
.unionfs-fuse
arquivo$XDG_DATA_HOME/dwarf-fortress/run/
. Eu não tenhoXDG_DATA_HOME
definido, então eu tenho que usar$HOME
. Verifiqueenv
antes de excluir acidentalmente o diretório errado!É isso. Observe que a
df_linux
versão do Bay 12 Games não apresenta esses problemas, pois não usa um wrapper Python nem um Unionfs.Dito isto, o problema foi corrigido em 2019 e é enviado para o
bullseye
. Infelizmente, ele não é corrigido no0.44.12-1
, portanto,buster
ainda pode ser afetado.Como você chegou a essa solução?
Antes de tudo, dei uma olhada em
file $(which dwarf-fortress)
, que me disse que é um script Python:Eu então verifiquei o script com qualquer editor e encontrei
que mostrou que havia pelo menos algo a ser encontrado em
xdg.BaseDirectory
, que é$HOME/.local/share
(a menos que definido de outra forma). Ao mesmo tempo,fusermount -u
mostra que há uma desmontagem pendente depois que saímos de Dwarf Fortress, emount | grep unionfs
confirmamos as montagens ativas em/tmp
. Eu me livrei de todo o$XDG_DATA_HOME/dwarf-fortress
diretório e funcionou novamente. Comstrace -ff -e trace=execve dwarf-fortress
, consegui confirmar asunionfs
montagens e encontrei o.unionfs-fuse
diretório.