install.sh 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #!/usr/bin/env bash
  2. #=================HEADER=====================================================|
  3. #AUTHOR
  4. # Jefferson Rocha <root@slackjeff.com.br>, Blemmi Secure
  5. #
  6. #PROGRAM
  7. # Adriele Instalador
  8. #
  9. #LICENSE
  10. # MIT
  11. #
  12. #============================================================================|
  13. #=============================LIBS
  14. if [ -e "etc/adriele.conf" ]; then # Chamando conf externa
  15. . etc/adriele.conf
  16. fi
  17. #=============================TEST's
  18. # É root?
  19. [ "$UID" -ne '0' ] && { echo -e "${red}Need Root.${end}"; exit 1;}
  20. #=============================FUNCTIONS
  21. _MENU() # Menu principal
  22. {
  23. echo -e "
  24. [ ${cyan_}1${end_} ] - Slackware
  25. [ ${cyan_}2${end_} ] - Debian/Linux-Mint/Ubuntu
  26. [ ${cyan_}3${end_} ] - Fedora
  27. [ ${cyan_}4${end_} ] - Arch Linux
  28. "
  29. read -p $'\e[34;1mSelecione o ID da sua Distribuição:\e[m ' select_distro
  30. # É nulo? É somente númerico?
  31. if [ -z "$select_distro" ]; then
  32. echo -e "${red_}Você deve fornecer o ID da sua distribuição.${end_}"
  33. exit 1
  34. elif ! echo "$select_distro" | grep -q '^[0-9]\{1,2\}$' ; then # Somente números? 2 casas.
  35. echo -e "${red_}OPS. Somente Números.${end_}";
  36. exit 1
  37. fi
  38. # Verificando Qual Distribuição foi selecionada.
  39. case $select_distro in
  40. 1) DISTRO='slackware';;
  41. *) _DIE "${red_}Nenhuma ID associada.${end_}"
  42. esac
  43. }
  44. _DIE() # Função para matar em caso de erro.
  45. {
  46. echo -e "\n$1"
  47. exit 1
  48. }
  49. clear
  50. _LOGO # Chamada do logo
  51. _MENU # Chamada Menu
  52. echo -e "
  53. +++++++++++++++++++++++++++++
  54. Instalação do ${PRG}...
  55. Em Distribuição $DISTRO
  56. +++++++++++++++++++++++++++++
  57. "
  58. #===========> SYSTEMS
  59. _SLACKWARE()
  60. {
  61. local rclocal="/etc/rc.d/rc.local"
  62. # Verificando se rc.local existe e tem permissão.
  63. if [ ! -e "${rclocal}" ]; then
  64. _DIE "${red_}ERRO 130${end_} $rclocal não existe."
  65. elif [ ! -x "${rclocal}" ]; then
  66. _DIE "${red_}ERRO${end_} $rclocal não tem permissão de execução!"
  67. fi
  68. # Copiando Executavel
  69. cp "${PRG}" "/etc/rc.d/rc.${PRG}" || _DIE "${red_}Impossível copiar ${PRG} para /etc/rc.d/ ${end_}"
  70. # Enviando informação do executável para rc.local
  71. if ! grep -qo "${PRG}" "$rclocal"; then # Se existe não faça.
  72. cat >> "${rclocal}" <<EOF
  73. # Calling ${PRG}
  74. if [ -x "/etc/rc.d/rc.${PRG}" ]; then
  75. /etc/rc.d/rc.${PRG}
  76. fi
  77. EOF
  78. fi
  79. return 0
  80. }
  81. #=============================START
  82. # Pegando entrada de UUID's
  83. read -p $'\e[34;1mInforme o UUID do Pendrive:\e[m ' pendrive_uuid
  84. read -p $'\e[34;1mInforme o UUID da Raiz do Sistema:\e[m ' pc_uuid
  85. if [ -z "$pendrive_uuid" ]; then
  86. _DIE "${red_}**Você deve informa o UUID do Pendrive.${end_}"
  87. elif [ -z "$pc_uuid" ]; then
  88. _DIE "${red_}**Você deve informa o UUID da raiz ' / ' do seu sistema.${end_}"
  89. fi
  90. # Verificando Label's dos dispositivo.
  91. count='0' # Contadora
  92. for label in "$pendrive_uuid" "$pc_uuid"; do
  93. verify_device[$count]=$(blkid -U "$label")
  94. [ -z "$verify_device" ] && _DIE "${red_}ERRO 122${end_} Não identifiquei o UUID. '${label}'"
  95. echo -e "
  96. ------------------------------------------------------------------------
  97. UUID ${label}\n Identificado como: ${verify_device[$count]}
  98. ------------------------------------------------------------------------"
  99. count=$(( $count + 1 )) # Incremento
  100. done
  101. read -p $'\n\e[34;1mConfirma dispositivos? [N/y]\e[m ' confirm
  102. confirm=${confirm,,} # Tudo em minusculo
  103. confirm=${confirm:=n} # Se enter pressionado ou nulo retorna n
  104. [ "$confirm" = "n" ] && exit 0 # N? sai.
  105. ###################################
  106. # Preparação para gerar as Hashes
  107. ###################################
  108. # Se caso Pendrive estiver montado
  109. # desmonte para montar em um lugar especifico.
  110. umount "${verify_device[0]}" &>/dev/null # Pendrive
  111. directory_mount_tmp=$(mktemp -d) # Criando diretorio temporário
  112. #Montando pendrive em diretório temporário.
  113. mount "${verify_device[0]}" "$directory_mount_tmp" || _DIE "Erro ao montar ${verify_device}"
  114. # Criando Diretório no home do Root.
  115. readonly home_root="/root/.${PRG}"
  116. if [ ! -d "${home_root}" ]; then
  117. mkdir "$home_root" || _DIE "Erro ao criar diretório em ${home_root}"
  118. fi
  119. # Criando diretório dentro do Pendrive
  120. readonly directory_mount_tmp_prg="${directory_mount_tmp}/.${PRG}"
  121. if [ ! -d "${directory_mount_tmp_prg}" ]; then
  122. mkdir "${directory_mount_tmp_prg}" || _DIE "Erro ao criar diretório em ${directory_mount_tmp_prg}"
  123. fi
  124. ####################################
  125. # Gerando as Hashes Pendrive/PC
  126. ###################################
  127. # Gerando Hash único para o 'Pendrive'
  128. # no home do root.
  129. HASH_PENDRIVE=$(
  130. sha512sum <<<"$pendrive_uuid" | cut -d ' ' -f 1 || \
  131. _DIE "${red_}ERRO${end_}126, Não foi possível gerar hash para Pendrive."
  132. )
  133. cat > "${home_root}/${KEY_PENDRIVE}" <<EOF
  134. PENDRIVE_UUID="$pendrive_uuid"
  135. HASH_PENDRIVE="${HASH_PENDRIVE}"
  136. EOF
  137. # Gerando hash para o pendrive...
  138. # Hash único.
  139. HASH_PC=$(
  140. sha512sum <<<"$pc_uuid" | cut -d ' ' -f 1 || \
  141. _DIE "${red_}ERRO 127${end_} Não foi possível gerar hash para PC."
  142. )
  143. cat > "${directory_mount_tmp_prg}/${KEY_PC}" <<EOF
  144. PC_UUID="$pc_uuid"
  145. HASH_PC="${HASH_PC}"
  146. EOF
  147. echo -e "\n${cyan_}-HASH's Geradas.${end_}"
  148. ####################################
  149. # Permissões e outros enfeites
  150. # antes de ir para configurações.
  151. ###################################
  152. # Adequando permissões de arquivos
  153. archives=(
  154. "${directory_mount_tmp_prg}/${KEY_PC}"
  155. "${home_root}/${KEY_PENDRIVE}"
  156. )
  157. for perm in "${archives[@]}"; do
  158. chmod u=rwx,g=,o= "$perm" || _DIE "Não foi possível dar permissão para arquivo ${perm}"
  159. done
  160. echo -e "\n${cyan_}-PERMISSÕES Ajustadas.${end_}"
  161. # Verificação de diretórios e arquivos necessários
  162. echo -e "\n${cyan_}-Copias de diretórios e Arquivos.${end_}"
  163. cp -vra 'usr/' '/' || _DIE "Não foi possível copiar diretório usr/"
  164. cp -vra 'etc/' '/' || _DIE "Não foi possível copiar diretório etc/"
  165. ####################################
  166. # Preparando arquivos para envio
  167. # de acordo com a distribuição que
  168. # foi escolhida.
  169. ###################################
  170. # Qual distribuição usuários escolheu?
  171. # Vamos fazer as devidas configurações.
  172. case $DISTRO in
  173. slackware) _SLACKWARE ;;
  174. esac
  175. ####################################
  176. # Desmontando pendrive e limpando
  177. # arquivos/diretórios.
  178. ###################################
  179. # Desmontando Pendrive
  180. umount "${verify_device[0]}" &>/dev/null
  181. # Removendo diretório temporário criado.
  182. rm -r "$directory_mount_tmp"
  183. # Concluído
  184. echo -e "\n${PRG} INSTALADA COM SUCESSO."
  185. exit 0