init.inc 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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
  40. dnf -y install epel-release
  41. dnf config-manager --set-enabled epel epel-modular
  42. cat > "/etc/yum.repos.d/hestia.repo" <<EOL
  43. # This file was added by Hestia Control Panel.
  44. #[hestia]
  45. #name=Hestia Control Panel
  46. #baseurl=http://rpm.hestiacp.com/packages/centos/\$releasever/\$basearch/
  47. #gpgcheck=0
  48. #enabled=1
  49. #gpgkey=https://rpm.hestiacp.com/keys/hestia.key
  50. EOL
  51. fi
  52. HESTIA_VERSION=$(osal_package_getversion 'hestia')
  53. osal_kv_write $HESTIA/conf/hestia.conf 'VERSION' $HESTIA_VERSION
  54. echo " - Installing hosting packages and templates..."
  55. cp -rf $HESTIA_INSTALL_DIR/packages $HESTIA/data/
  56. cp -rf $HESTIA_INSTALL_DIR/templates $HESTIA/data/
  57. # General OS
  58. # Add nologin as a valid system shell
  59. if [ -z "$(grep nologin /etc/shells)" ]; then
  60. echo "/usr/sbin/nologin" >> /etc/shells
  61. fi
  62. if [ ! "$param_lang" ]; then
  63. param_lang='en'
  64. fi
  65. if [ ! "$param_server_name" ]; then
  66. param_server_name=$(hostname -f)
  67. fi
  68. if [ ! "${param_admin_email}" ]; then
  69. param_admin_email="admin@$param_server_name"
  70. fi
  71. lang=$(osal_kv_read $HESTIA/conf/hestia.conf 'LANGUAGE' '')
  72. if [ ! "$lang" ] || [ "$lang" != "$param_lang" ]; then
  73. osal_kv_write $HESTIA/conf/hestia.conf 'LANGUAGE' $param_lang
  74. lang=$param_lang
  75. fi
  76. # Default values
  77. if [ ! "$DB_PMA_ALIAS" ]; then
  78. osal_kv_write $HESTIA/conf/hestia.conf 'DB_PMA_ALIAS' 'phpMyAdmin'
  79. fi
  80. # Default values
  81. if [ ! "$DB_PMA_ALIAS" ]; then
  82. osal_kv_write $HESTIA/conf/hestia.conf 'DB_PGA_ALIAS' 'phpPgAdmin'
  83. fi
  84. if ! id "admin" &>/dev/null; then
  85. echo " - Creating admin user..."
  86. if [ ! "$param_admin_password" ]; then
  87. param_admin_password=$(osal_gen_pass)
  88. fi
  89. $HESTIA/bin/v-add-user admin ${param_admin_password} ${param_admin_email} default System Administrator
  90. $HESTIA/bin/v-change-user-shell admin nologin
  91. $HESTIA/bin/v-change-user-language admin $lang
  92. echo " Username : admin"
  93. echo " Password : $param_admin_password"
  94. echo " E-mail : $param_admin_email"
  95. fi
  96. chown admin:admin $HESTIA/data/sessions
  97. chown admin:admin $HESTIA/php/var/log
  98. chown admin:admin $HESTIA/php/var/run
  99. echo " - Configuring system environment..."
  100. echo "export HESTIA='$HESTIA'" > /etc/profile.d/hestia.sh
  101. echo 'PATH=$PATH:'$HESTIA'/bin' >> /etc/profile.d/hestia.sh
  102. echo 'export PATH' >> /etc/profile.d/hestia.sh
  103. chmod 755 /etc/profile.d/hestia.sh
  104. source /etc/profile.d/hestia.sh
  105. echo " - Installing sudo configuration..."
  106. mkdir -p /etc/sudoers.d
  107. cp -f $HESTIA_INSTALL_DIR/sudo/admin /etc/sudoers.d/
  108. chmod 440 /etc/sudoers.d/admin
  109. echo " - Configuring logrotate for Hestia logs..."
  110. cp -f $HESTIA_INSTALL_DIR/logrotate/hestia /etc/logrotate.d/
  111. echo " - Installing firewall rules..."
  112. cp -rf $HESTIA_INSTALL_DIR/firewall $HESTIA/data/
  113. echo " - Configuring server hostname..."
  114. echo " Server name : $param_server_name"
  115. $HESTIA/bin/v-change-sys-hostname $param_server_name > /dev/null 2>&1
  116. if [ ! -f $HESTIA/ssl/certificate.crt ]; then
  117. echo " - Generating default self-signed SSL certificate..."
  118. $HESTIA/bin/v-generate-ssl-cert $(hostname) $param_admin_email 'US' 'California' \
  119. 'San Francisco' 'Hestia Control Panel' 'IT' > $HESTIA/ssl/tmp.pem
  120. # Parsing certificate file
  121. crt_end=$(grep -n "END CERTIFICATE-" $HESTIA/ssl/tmp.pem |cut -f 1 -d:)
  122. key_start=$(grep -n "BEGIN RSA" $HESTIA/ssl/tmp.pem |cut -f 1 -d:)
  123. key_end=$(grep -n "END RSA" $HESTIA/ssl/tmp.pem |cut -f 1 -d:)
  124. # Adding SSL certificate
  125. echo " - Adding SSL certificate to Hestia Control Panel..."
  126. sed -n "1,${crt_end}p" $HESTIA/ssl/tmp.pem > $HESTIA/ssl/certificate.crt
  127. sed -n "$key_start,${key_end}p" $HESTIA/ssl/tmp.pem > $HESTIA/ssl/certificate.key
  128. chown root:mail $HESTIA/ssl/*
  129. chmod 660 $HESTIA/ssl/*
  130. rm $HESTIA/ssl/tmp.pem
  131. fi
  132. if [ -z "$(swapon -s)" ] && [ $memory -lt 1000000 ]; then
  133. echo " - Creating 1 GB swap file..."
  134. fallocate -l 1G /swapfile
  135. chmod 600 /swapfile
  136. mkswap /swapfile
  137. swapon /swapfile
  138. echo "/swapfile none swap sw 0 0" >> /etc/fstab
  139. fi
  140. if [ ! -f /etc/ssl/dhparam.pem ]; then
  141. cp -f $HESTIA_INSTALL_DIR/ssl/dhparam.pem /etc/ssl/
  142. fi
  143. echo " - Configuring system IP addresses..."
  144. $HESTIA/bin/v-update-sys-ip > /dev/null 2>&1
  145. echo " - Enabling and starting Hestia service..."
  146. osal_service_enable hestia
  147. osal_service_restart hestia
  148. }