remove.inc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #!/bin/bash
  2. hestia_module_remove() {
  3. source $HESTIA/bin/module/func.inc
  4. if [ "$1" ]; then
  5. local mod_name=$1
  6. shift
  7. local mod_providers=$(hestia module what-provides $mod_name --all)
  8. #echo "$mod_providers" equals "$mod_name"
  9. if [ "$mod_providers" == "$mod_name" ]; then
  10. # It's a final module name, remove immediately
  11. local hmd="$HESTIA_INSTALL_DIR/../modules/${mod_provider}.hmd"
  12. local requiredby=$(hestia_module_remove_check_requiredby $mod_name)
  13. if [ "$requiredby" ]; then
  14. if [ "$param_force" ]; then
  15. for mod_required in $requiredby; do
  16. hestia module remove $mod_required --force
  17. local mod_provides=$(osal_kv_read $hmd 'provides')
  18. if [ "$mod_provides" ]; then
  19. # Write what this module provides
  20. for mod in $mod_provides; do
  21. local current_variant=$(hestia_module_variant_installed $mod)
  22. current_variant=$(echo "$current_variant" | sed "s/$mod_provider//")
  23. if [ ! "$current_variant" ]; then
  24. osal_kv_write $HESTIA_CONF_MODULES/$mod.conf 'installed' 0
  25. fi
  26. osal_kv_write $HESTIA_CONF_MODULES/$mod.conf $mod_provider 'no'
  27. osal_kv_write $HESTIA_CONF_MODULES/$mod.conf 'variant' $current_variant
  28. done
  29. fi
  30. done
  31. else
  32. echo "Module '${mod_name}' is required by '${requiredby}'. Use --force to remove recursively."
  33. return 1
  34. fi
  35. else
  36. hestia module $mod_name remove "$@" --no-integrate
  37. if [ ! "$param_no_integrate" ]; then
  38. hestia module $mod_name integrate
  39. fi
  40. fi
  41. else
  42. # It's provided by something else
  43. for mod in $mod_providers; do
  44. if hestia_module_isinstalled $mod; then
  45. echo "Ok, 'remove ${mod_name}' means 'remove ${mod}'"
  46. if ! hestia module remove $mod --no-integrate; then
  47. echo "Unable to remove '${mod_name}' because '${mod}' refuses to uninstall."
  48. fi
  49. fi
  50. done
  51. if [ ! "$param_no_integrate" ]; then
  52. hestia module $mod_name integrate
  53. for mod in $mod_providers; do
  54. hestia module $mod integrate
  55. done
  56. fi
  57. fi
  58. else
  59. echo "Usage: module remove module_name"
  60. return 0
  61. fi
  62. }
  63. # Check whether a module is required by other installed modules
  64. hestia_module_remove_check_requiredby() {
  65. local mod_name=$1
  66. shift
  67. local requiredby=''
  68. for mod_conf in $HESTIA_INSTALL_DIR/../modules/*.conf; do
  69. local mod_hmd=$(osal_kv_read $mod_conf 'hmd')
  70. if [ "$mod_hmd" ]; then
  71. # This module is a provider. Check it isn't needed
  72. local mod_requires=$(osal_kv_read $mod_hmd 'requires')
  73. local mod_requires_expanded=$(hestia_module_remove_expand_requires $mod_requires)
  74. #echo >&2 "uuu $mod_requires expands to $mod_requires_expanded uuu"
  75. if osal_value_in_list $mod_name $mod_requires_expanded; then
  76. local mod_requires_name=$(osal_kv_read $mod_hmd 'name')
  77. #echo >&2 "$mod_name is in the required list of $mod_requires_name (which is $mod_requires_expanded)"
  78. requiredby="$mod_requires_name $requiredby"
  79. #else
  80. #echo >&2 "$mod_name is NOT in the required list (which is $mod_requires_expanded)"
  81. fi
  82. fi
  83. done
  84. if [ "$requiredby" ]; then
  85. echo $requiredby
  86. return 1
  87. else
  88. return 0
  89. fi
  90. }
  91. # Expands 'web' to 'web apache nginx'
  92. hestia_module_remove_expand_requires() {
  93. local expanded=$@
  94. for mod in $@; do
  95. local extra_requires=$(hestia module what-provides $mod --all)
  96. for er in $extra_requires; do
  97. if ! osal_value_in_list $er $expanded; then
  98. # FIXME: allow recursive expansion?
  99. expanded="$expanded $er"
  100. fi
  101. done
  102. done
  103. echo $expanded
  104. }