Não é possível instalar no sysroot MinGW do Cygwin (está protegido)

0

Eu construí uma biblioteca com este comando:

$ ../configure '--host=x86_64-w64-mingw32' --prefix=/usr/x86_64-w64-mingw32/sys-root/mingw && make && make install

A instalação falha porque aparentemente não há permissão para criar arquivos no mingw sysroot:

$ mkdir /usr/x86_64-w64-mingw32/sys-root/mingw/share/whatever
mkdir: cannot create directory
‘/usr/x86_64-w64-mingw32/sys-root/mingw/share/whatever’: Permission
denied

Qual é o problema e como posso resolvê-lo da maneira mais direta?

    
por Pyotr B. 05.02.2018 / 10:08

2 respostas

1

Não há sudo no Cygwin. Outras fontes sugerem usar

cygstart --action=runas command args

que foi útil, mas não no meu caso, make install estava agindo de forma irregular porque o diretório não é passado para o processo iniciado (é um problema com cygstart ) e estava sendo executado em uma janela separada do CMD em vez de mintty . A solução mais universal é iniciar o shell do Cygwin com privilégios escalados em si (você pode redirecionar a saída do comando escalado somente dessa forma):

cygstart --action=runas mintty -

mas você ainda precisa navegar de volta para o diretório onde você queria executar o comando.

Eu também encontrei a chave -d para cygstart , o que torna o comando ainda pior:

#su analog
    cygstart --action=runas -d "$(pwd)" mintty -
#sudo analog
    cygstart --action=runas -d "$(pwd)" mintty command args

Pode ser a melhor solução, mas o mintty não passa no diretório OURO sem um switch separado e não passa o diretório de trabalho para o shell ( mintty - ).

Portanto, a versão final de sudo é:

#new mintty window
    cygstart --action=runas mintty -dir "$(pwd)" command args
#new CMD window
    cygstart --action=runas -d "$(pwd)" command args

e não consegui encontrar uma boa maneira de iniciar o shell no diretório de trabalho arbitrário.

    
por 05.02.2018 / 10:51
0

Não execute apenas como root: su , sudo , runas , ele funcionará, mas deixará problemas para o futuro (há uma razão pela qual esses arquivos / diretórios estão protegidos).

Existe um local reservado para você instalar seus próprios programas.

/usr/local

Colocá-lo lá facilita a atualização do seu sistema, sem perder seu programa.

Melhor ainda, use também stow . Ele manterá o seu programa separado de todo o resto, e usará syslinks para consertá-lo. Ele irá acompanhar as ações para que seja fácil de remover ou atualizar.

    
por 05.02.2018 / 10:56