slocal 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. #!/bin/bash
  2. #---------HEADER--------------------------------------------------------------|
  3. #DATA:
  4. # 01 dezembro 2017
  5. #AUTOR:
  6. # Jefferson Rocha <lrcjefferson@gmail.com>
  7. #
  8. #PROGRAMA:
  9. # Slocal - Manutenção de pacotes locais em rede.
  10. #
  11. #CHANGELOG:
  12. # (v1.0) 01/12/2017 - Jefferson rocha
  13. # - Lançamento
  14. #
  15. # (v1.1) 01/12/2017 - Jefferson Rocha
  16. # - Retirado bug do 'PACKAGE.TXT' que ficava na lista no select.
  17. # - Retirado opção 'install' em linha
  18. # - Adicionado opção de sincronizar pacotes.
  19. #
  20. #MODO DE USO:
  21. #
  22. #
  23. #-----------------------------------------------------------------------------|
  24. #-------CONFIGURAÇÕES-----#
  25. PROGRAMA="slocal v1.1 - 01/12/2017" # Nome e versão do programa
  26. diretorio="/var/www/htdocs/slackware14.2" # DIRETORIO DOS PACOTES no servidor
  27. URL="192.168.0.4/slackware14.2" # URL DO SERVIDOR
  28. sincronizar="/home/slackjeff/Downloads" # Local onde os novos pacotes ficam
  29. nome_do_hospedeiro="darkstar" # Nome do Hospedeiro
  30. root=$(id -u)
  31. #--------FUNÇÕES-----------#
  32. hospedeira(){
  33. PACOTES=$(ls "$diretorio" > $diretorio/PACKAGE.txt) # Listagem do pascotes
  34. }
  35. baixar_package_txt(){
  36. curl "$URL/PACKAGE.txt" > PACKAGE.txt
  37. mv PACKAGE.txt /tmp
  38. }
  39. #-------VERIFICAÇÕES INICIAIS-------#
  40. [ "$root" -ne "0" ] && echo "Favor logar como root." && exit 1 # É root?
  41. # Obtendo pacotes no diretorio raiz, máquina hospedeira.
  42. [ -d "$diretorio" ] && hospedeira # Chamada função hospedeira
  43. #-------INICIO-----------#
  44. # Menu principal
  45. while [ -n "$1" ]; do
  46. case $1 in
  47. update) baixar_package_txt ;; # Update do PACKAGE.txt
  48. # Opção sync apenas para máquina HOSPEDEIRA dos pacotes.
  49. sync)
  50. if [ "$nome_do_hospedeiro" = "$(echo $HOSTNAME)" ]; then
  51. cp $sincronizar/*.t?z "$diretorio" \
  52. && echo -e "\033[35;1mConcluido! Pacotes copiados para $diretorio\033[m"
  53. else
  54. echo -e "\033[31;1mSomente máquinas hospedeiras podem rodar este comando.\033[m"
  55. exit 1
  56. fi
  57. ;;
  58. search)
  59. shift
  60. grep "^$1" /tmp/PACKAGE.txt # procura, termos que comecem com a busca
  61. [ "$?" = "1" ] && echo -e "\033[31;1mPacote não encontrado, digite outro termo de busca.\033[m"
  62. ;;
  63. select) # Selecione e instale de uma vez!
  64. packs=$(cat "/tmp/PACKAGE.txt" | sed '/PACKAGE.txt/d')
  65. PS3=$'\033[34;1mSelecione um pacote para instalar: \033[m'
  66. select i in $packs "SAIR"; do
  67. [ "$i" = "SAIR" ] && exit 0
  68. wget -P "/tmp" "$URL/$i" 2>/dev/null && \
  69. upgradepkg --install-new "/tmp/$i"
  70. rm /tmp/${i:?echo "ERRO ao remover pacote do sistema."} # Var nula dá erro!
  71. done
  72. ;;
  73. help) cat << EOF
  74. Opções disponiveis no $PROGRAMA.
  75. ------------------------------------------------------------
  76. | search |
  77. Localiza em 'linha' um pacote no repositorio local.
  78. EXEMPLO:
  79. # slocal search [Bb]re.ze
  80. breeze-icons-5.28.0-noarch-1alien.txz
  81. ------------------------------------------------------------
  82. | sync |
  83. Sincroniza pacotes de um determinado diretorio para
  84. o servidor.
  85. Este comando só pode ser executado na máquina hospedeira.
  86. ------------------------------------------------------------
  87. | select |
  88. Menu principal para escolher e instalar um pacote.
  89. ------------------------------------------------------------
  90. | update |
  91. Faz update do arquivo PACKAGE.txt, é importante,
  92. executar esta opção sempre que for sincronizado novos pacotes,
  93. no servidor!
  94. ------------------------------------------------------------
  95. EOF
  96. ;;
  97. *) echo "Consulte slocal help para receber ajuda" ;;
  98. esac
  99. shift
  100. done