init.inc 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #!/bin/bash
  2. hestia_setup_init() {
  3. echo "Initializing Hestia configuration..."
  4. mkdir -p $HESTIA/conf $HESTIA/log $HESTIA/ssl $HESTIA/data/ips \
  5. $HESTIA/data/queue $HESTIA/data/users $HESTIA/data/firewall \
  6. $HESTIA/data/sessions
  7. mkdir -p /var/run/php
  8. touch $HESTIA/data/queue/backup.pipe $HESTIA/data/queue/disk.pipe \
  9. $HESTIA/data/queue/webstats.pipe $HESTIA/data/queue/restart.pipe \
  10. $HESTIA/data/queue/traffic.pipe $HESTIA/log/system.log \
  11. $HESTIA/log/nginx-error.log $HESTIA/log/auth.log \
  12. $HESTIA/conf/hestia.conf
  13. chmod 750 $HESTIA/conf $HESTIA/data/users $HESTIA/data/ips $HESTIA/log
  14. chmod -R 750 $HESTIA/data/queue
  15. chmod 660 $HESTIA/conf/hestia.conf
  16. chmod 660 $HESTIA/log/*
  17. chmod 770 $HESTIA/data/sessions
  18. if [ "$OS_BASE" = 'rhel' ]; then
  19. # FIXME: Hestia scripts should not assume ip is located in /bin
  20. ln -s /usr/sbin/ip /bin/ip
  21. fi
  22. if [ ! -e /var/log/hestia ]; then
  23. ln -s $HESTIA/log /var/log/hestia
  24. fi
  25. # Setup repos
  26. if [ "$OS_BASE" = 'debian' ]; then
  27. cat > /etc/apt/sources.list.d/hestia.list <<EOL
  28. # This file was added by Hestia Control Panel.
  29. deb https://apt.hestiacp.com/ $OS_CODENAME main
  30. EOL
  31. apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A189E93654F0B0E5 > /dev/null 2>&1
  32. elif [ "$OS_BASE" = 'ubuntu' ]; then
  33. cat > /etc/apt/sources.list.d/hestia.list <<EOL
  34. # This file was added by Hestia Control Panel.
  35. deb https://apt.hestiacp.com/ $OS_CODENAME main
  36. EOL
  37. apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A189E93654F0B0E5 > /dev/null 2>&1
  38. elif [ "$OS_BASE" = 'rhel' ]; then
  39. dnf config-manager --set-enabled extras PowerTools
  40. dnf -y install epel-release
  41. dnf config-manager --set-enabled epel epel-modular
  42. # Enable Perl 5.26
  43. dnf -y module disable perl:*
  44. dnf -y module enable perl:5.26
  45. cat > "/etc/yum.repos.d/hestia.repo" <<EOL
  46. # This file was added by Hestia Control Panel.
  47. #[hestia]
  48. #name=Hestia Control Panel
  49. #baseurl=http://rpm.hestiacp.com/packages/centos/\$releasever/\$basearch/
  50. #gpgcheck=0
  51. #enabled=1
  52. #gpgkey=https://rpm.hestiacp.com/keys/hestia.key
  53. EOL
  54. fi
  55. HESTIA_VERSION=$(osal_package_getversion 'hestia')
  56. osal_kv_write $HESTIA/conf/hestia.conf 'VERSION' $HESTIA_VERSION
  57. echo " - Installing hosting packages and templates..."
  58. cp -rf $HESTIA_INSTALL_DIR/packages $HESTIA/data/
  59. cp -rf $HESTIA_INSTALL_DIR/templates $HESTIA/data/
  60. # General OS
  61. # Add nologin as a valid system shell
  62. if [ -z "$(grep nologin /etc/shells)" ]; then
  63. echo "/usr/sbin/nologin" >> /etc/shells
  64. fi
  65. if [ ! "$param_lang" ]; then
  66. param_lang='en'
  67. fi
  68. if [ ! "$param_server_name" ]; then
  69. param_server_name=$(hostname -f)
  70. fi
  71. if [ ! "${param_admin_email}" ]; then
  72. param_admin_email="admin@$param_server_name"
  73. fi
  74. lang=$(osal_kv_read $HESTIA/conf/hestia.conf 'LANGUAGE' '')
  75. if [ ! "$lang" ] || [ "$lang" != "$param_lang" ]; then
  76. osal_kv_write $HESTIA/conf/hestia.conf 'LANGUAGE' $param_lang
  77. lang=$param_lang
  78. fi
  79. # Default values
  80. if [ ! "$DB_PMA_ALIAS" ]; then
  81. osal_kv_write $HESTIA/conf/hestia.conf 'DB_PMA_ALIAS' 'phpMyAdmin'
  82. fi
  83. # Default values
  84. if [ ! "$DB_PMA_ALIAS" ]; then
  85. osal_kv_write $HESTIA/conf/hestia.conf 'DB_PGA_ALIAS' 'phpPgAdmin'
  86. fi
  87. if ! id "admin" &>/dev/null; then
  88. echo " - Creating admin user..."
  89. if [ ! "$param_admin_password" ]; then
  90. param_admin_password=$(osal_gen_pass)
  91. fi
  92. $HESTIA/bin/v-add-user admin ${param_admin_password} ${param_admin_email} default System Administrator
  93. $HESTIA/bin/v-change-user-shell admin nologin
  94. $HESTIA/bin/v-change-user-language admin $lang
  95. echo " Username : admin"
  96. echo " Password : $param_admin_password"
  97. echo " E-mail : $param_admin_email"
  98. fi
  99. chown admin:admin $HESTIA/data/sessions
  100. chown admin:admin $HESTIA/php/var/log
  101. chown admin:admin $HESTIA/php/var/run
  102. echo " - Configuring system environment..."
  103. echo "export HESTIA='$HESTIA'" > /etc/profile.d/hestia.sh
  104. echo 'PATH=$PATH:'$HESTIA'/bin' >> /etc/profile.d/hestia.sh
  105. echo 'export PATH' >> /etc/profile.d/hestia.sh
  106. chmod 755 /etc/profile.d/hestia.sh
  107. source /etc/profile.d/hestia.sh
  108. echo " - Installing sudo configuration..."
  109. mkdir -p /etc/sudoers.d
  110. cp -f $HESTIA_INSTALL_DIR/sudo/admin /etc/sudoers.d/
  111. chmod 440 /etc/sudoers.d/admin
  112. echo " - Configuring logrotate for Hestia logs..."
  113. cp -f $HESTIA_INSTALL_DIR/logrotate/hestia /etc/logrotate.d/
  114. echo " - Installing firewall rules..."
  115. cp -rf $HESTIA_INSTALL_DIR/firewall $HESTIA/data/
  116. echo " - Configuring server hostname..."
  117. echo " Server name : $param_server_name"
  118. $HESTIA/bin/v-change-sys-hostname $param_server_name > /dev/null 2>&1
  119. if [ ! -f $HESTIA/ssl/certificate.crt ]; then
  120. echo " - Generating default self-signed SSL certificate..."
  121. $HESTIA/bin/v-generate-ssl-cert $(hostname) $param_admin_email 'US' 'California' \
  122. 'San Francisco' 'Hestia Control Panel' 'IT' > $HESTIA/ssl/tmp.pem
  123. # Parsing certificate file
  124. crt_end=$(grep -n "END CERTIFICATE-" $HESTIA/ssl/tmp.pem |cut -f 1 -d:)
  125. key_start=$(grep -n "BEGIN RSA" $HESTIA/ssl/tmp.pem |cut -f 1 -d:)
  126. key_end=$(grep -n "END RSA" $HESTIA/ssl/tmp.pem |cut -f 1 -d:)
  127. # Adding SSL certificate
  128. echo " - Adding SSL certificate to Hestia Control Panel..."
  129. sed -n "1,${crt_end}p" $HESTIA/ssl/tmp.pem > $HESTIA/ssl/certificate.crt
  130. sed -n "$key_start,${key_end}p" $HESTIA/ssl/tmp.pem > $HESTIA/ssl/certificate.key
  131. chown root:mail $HESTIA/ssl/*
  132. chmod 660 $HESTIA/ssl/*
  133. rm $HESTIA/ssl/tmp.pem
  134. fi
  135. if [ -z "$(swapon -s)" ] && [ $memory -lt 1000000 ]; then
  136. echo " - Creating 1 GB swap file..."
  137. fallocate -l 1G /swapfile
  138. chmod 600 /swapfile
  139. mkswap /swapfile
  140. swapon /swapfile
  141. echo "/swapfile none swap sw 0 0" >> /etc/fstab
  142. fi
  143. if [ ! -f /etc/ssl/dhparam.pem ]; then
  144. cp -f $HESTIA_INSTALL_DIR/ssl/dhparam.pem /etc/ssl/
  145. fi
  146. echo " - Configuring system IP addresses..."
  147. $HESTIA/bin/v-update-sys-ip > /dev/null 2>&1
  148. echo " - Enabling and starting Hestia service..."
  149. osal_service_enable hestia
  150. osal_service_restart hestia
  151. }