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

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

[ Hits: 999 ]

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

Backup

Script de backup que envia por FTP, gera log e envia por e-mail

Tem g-mail não lido?

DownloadVideo

Automatizador de instalação para Arch Linux


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts