Programs -- Script Simples e limitado pra instalação de arquivos

Publicado por Perfil removido (última atualização em 09/02/2017)

[ Hits: 2.043 ]

Download 6548.programs.txt




Script que serve para instalar programas que não estão disponiveis pelo seu Package Manager, em vez de instalar diretamente nos diretorios do seu sistema, ele é inspirado pelo GoboLinux, que instala no seguinte esquema:

/Programs/<NomeDoPrograma>/<VersãoDoPrograma>/<DiretoriosComunsAInstalação> # Diretorios como /bin /usr/share /etc
/Programs/<nomeDoPrograma>/<VersãoDoPrograma>/src # Mantem o source code

Exemplos:
/Programs/2bwm/git/{bin,/usr/bin,/usr/share/man/man1,/etc}
/Programs/2bwm/git/src


Em seguida ele faz um Symlink entre a instalação e o Diretorio especificado

Exemplos:
/usr/bin/2bwm -> /Programs/2bwm/git/usr/bin/2bwm # Binaria do 2bwm é um symlink a sua instalação
/usr/bin/hidden -> /Programs/2bwm/git/usr/bin/hidden # Binaria do Hidden, que faz parte do 2bwm
/usr/share/man/man1/2bwm.1 -> /Progarms/2bwm/git/usr/share/man/man1 # man page do 2bwm é um symlink a sua instalação

Vantagens:

--> Deletar o programa é uma questão de deletar sua pasta/versão em /Programs, não precisa caçar symlinks
--> Seguindo: um comando com find é o suficiente pra deletar symlinks quebrados em /bin, /usr/bin, etc
--> È mais organizado e voce pode ver exatamente todos os pacotes instalados com um comando ls

Desvantagens:

--> O script tem escopo limitado, ele não vai seguir mais de 1 diretorio a fundo
    --> lib/programa.so (sera linkado)
    --> lib/programa/library.so (não sera linkado, pois ele segue ate 1 diretorio )

--> O script não permite modificações nos Makefiles como package managers como Portage e Paludis
--> O script requer que o usuario baixe e crie a hireaquia /Programs/<programa>/<versão> por si mesmo.
--> Varias cosias como os diretorios que são instalados e o local que tem /Programs são hardcoded

  



Esconder código-fonte

#!/bin/sh
CMD="$1"

if [ "$(id -u)" -ne 0 ]; then
  printf "%s: must be superuser.\n" "$( basename "$0")" 2>&1
exit 1
fi
if [ -z "$1" ]; then
  printf "usage: %s [symlink|update|mkinfo|compile] <program> <version>\n" "$(basename "$0")"
  exit 1
fi

cd /Programs/infodir || exit

mkinfo() {
printf "bin\nsbin\nusr/bin\nusr/sbin\n" > BINDIR
printf "usr/share/man/man1\n" > DOCDIR
printf "lib\nusr/lib\nusr/lib64\n" > LIBDIR
}

checkprogram() {
if [ -z "$1" ]; then
  printf "Please give a program name\n"
  exit 1
fi
if [ -z "$2" ]; then
  printf "Please give a program version\n"
  exit 1
fi
}

symlink() {
TARGET="$1/$2"
grep -v '^ *#' /Programs/infodir/BINDIR \
               /Programs/infodir/LIBDIR \
               /Programs/infodir/DOCDIR \
               | cut -d : -f 2 \
               | while IFS= read -r dir
do
  for bin in /Programs/"$TARGET"/"$dir"/*; do
    if [ -f "$bin" ]; then
      ln -sv "$bin" "/$dir/$(basename "$bin")";
    fi
  done
done
}

update() {
TARGET="$1/$2"

cd /Programs/"$TARGET"/src || exit
if [ -d ".git" ]; then
  git pull -v
fi
}

compile() {
TARGET="$1/$2"

cd /Programs/"$TARGET"/src || exit
if [ -f /Programs/"$TARGET"/src/configure ]; then
  ./configure --prefix=/Programs/"$TARGET"/usr
fi

make clean
make
make install PREFIX=/Programs/"$TARGET"/usr MANPREFIX=\$\{PREFIX\}/share/man
}

case "$CMD" in
sym*)
  checkprogram "$2" "$3"
  symlink "$2" "$3"
  ;;
upd*)
  checkprogram "$2" "$3"
  update "$2" "$3"
  ;;
com*)
  checkprogram "$2" "$3"
  compile "$2" "$3"
  ;;
mki*)
  mkinfo
  ;;
*)
  printf "usage: %s [symlink|update|mkinfo|compile] <program> <version>\n" "$(basename "$0")"
  exit 1
  ;;
esac

Scripts recomendados

Gerenciador de contas de usuários

Configurar Compartilhamento NFS

Slapt CP 1.0 - salvar os pacotes baixados no Gslapt

Backup Subversion

SlackBuild para empacotar o Firefox (binário) pro Slackware


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts