GNU armazenam todos os arquivos em vez de apenas binários

4

O que devo fazer para ter o stow apenas vinculando os binários (e talvez as man pages) corretamente?

Eu quero usar o GNU stow para gerenciar instalações locais na minha máquina. No entanto, stow simplesmente não vincula simbolicamente o binário, mas todos os arquivos na pasta do programa. O que eu fiz até agora:

  • criou um arquivo stow-ignore estendido
  • use uma subpasta src/ em que todos os arquivos, exceto o binário, vão e alteram manualmente o Makefile para criar uma subpasta bin/ . Em seguida, exclua a pasta local/src/ vinculada

Eu acho que deve haver uma maneira melhor e estou usando stow errado.

Exemplo

Estrutura das pastas

~home/
 |~local/
   |+bin/     <-- binarys should go here
   |+share/   <-- man page
   |~stow/
     |-.stowrc
     |~dwm-6.0/
       |-Makefile
       |-dwm.c
       |-dwm.h
       |-dwm
       |-config.mk
       |-README
     |~hub-1.11/
       |~bin/
         |-hub
       |+etc/
       |+feature/
       |+githook/
       |+lib/
       |-Gemfile
       |-Rakefile
       |-hub.gemspec

A partir daqui, eu iria para o tipo de pasta stow/

stow dwm-6.0

Em seguida, armazene os arquivos all na pasta local/ , em vez de apenas o binário dwm na pasta local/bin/ . Agora posso alterar o Makefile para que ele crie uma pasta dwm-6.0/bin/ e mova o binário para lá. Então, stow , pelo menos, vinculará dwm a local/bin/ , mas todos os outros arquivos também serão vinculados a local/ .

O mesmo vale para hub :

[9962]../stow:$stow hub-1.11.1
Loading defaults from .stowrc
stow dir is /home/myusername/local/stow
stow dir path relative to target /home/myusername/local is stow
Planning stow of package hub-1.11.1...
LINK: man => stow/hub-1.11.1/man
LINK: test => stow/hub-1.11.1/test
LINK: hub.gemspec => stow/hub-1.11.1/hub.gemspec
LINK: script => stow/hub-1.11.1/script
LINK: etc => stow/hub-1.11.1/etc
LINK: lib => stow/hub-1.11.1/lib
LINK: hub => stow/hub-1.11.1/hub
LINK: bin/hub => ../stow/hub-1.11.1/bin/hub
LINK: git-hooks => stow/hub-1.11.1/git-hooks
LINK: Rakefile => stow/hub-1.11.1/Rakefile
LINK: Gemfile => stow/hub-1.11.1/Gemfile
LINK: features => stow/hub-1.11.1/features
Planning stow of package hub-1.11.1... done
Processing tasks...
Processing tasks... done

Agora, stow vincula os arquivos man a uma pasta separada, em vez de usar share/

===

.stow-global-ignore

# Comments and blank lines are allowed.

RCS
.+,v

CVS
\.\#.+       # CVS conflict files / emacs lock files
\.cvsignore

\.svn
_darcs
\.hg

\.git
\.gitignore


.+~          # emacs backup files
\#.*\#       # emacs autosave files
.*\.c        # c src files 
.*\.cc       # c++ src files 
#.*\.\d       # compile temporary files 
#.*\.\d\..*       # compile temporary files 
.*\.o        # object files
.*\.h        # include files
.*\.info
.*\.mk       # make configs
.*\.swp      # vim temp buffer file
.*\.lock     # vim temp buffer file
.*\.md       # mark down 
.*\.yml      # YAML
#.*\.gemspec  # gem file
#.*\.rb       # ruby file
#.*\.sh       # shell file
#.*\.feature  # shell file
README.*
LICENSE
FAQ
LEGACY
TODO
Makefile

.stowrc

--dir=/home/myusername/local/stow
--target=/home/myusername/local
    
por Da Frenk 22.05.2014 / 12:14

3 respostas

5

Uma abordagem seria usar listas de ignorados locais , um por pacote.

No entanto, acredito que sua abordagem é fundamentalmente errada, o que está tornando a sua vida desnecessariamente difícil. O problema é que você não está distinguindo entre arquivos necessários no momento da criação versus arquivos necessários em tempo de execução. Diretórios como ~/local/stow/dwm-6.0/ são diretórios de pacotes que devem conter imagens de instalação , não o código-fonte ou outros recursos destinados apenas para uso em tempo de construção.

O fluxo de trabalho correto é o seguinte:

  1. Faça o download do código-fonte em um diretório totalmente ignorado pelo Stow (por exemplo, ~/src ).
  2. Compile e instale a partir da origem em ~/local/stow/dwm-6.0/ ( o manual tem vários de dicas sobre como conseguir isso
  3. Verifique se ~/local/stow/dwm-6.0/ contém apenas arquivos de diretórios necessários no tempo de execução (arquivos em bin/ , man/ etc.)
  4. stow dwm-6.0
por 22.05.2014 / 16:29
1

Veja B. Comnes ' 10/10/14 entrada do blog " Incluir arquivos GNU Stow ". Para resumir, o regex:

^((?!(\/)bin|include|lib|lib64|local|sbin|share|tmp).)*$

na lista global de ignorados armazenará "apenas" os diretórios (bin, include, etc.).

    
por 04.07.2016 / 05:11
0

Parece que você está armazenando diretórios com código-fonte.

Use configure (ou qualquer sistema de compilação que o software esteja usando) e defina um prefixo de instalação no diretório stow . Execute o make e make install e, em seguida, armazene o programa instalado.

Foi assim que stow foi usado ...

    
por 04.07.2016 / 07:42

Tags