install 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. #!/bin/bash
  2. # Retrieve arguments
  3. domain=${1}
  4. url_path=${2}
  5. wifi_ssid=${3}
  6. wifi_passphrase=${4}
  7. ip6_net=${5}
  8. # Check arguments
  9. if [ -z "${wifi_ssid}" -o -z "${wifi_passphrase}" ]; then
  10. echo "ERROR: Your Wifi Hotspot needs a name and a password" >&2
  11. exit 1
  12. fi
  13. wifi_passphrase_length="$(echo -n "${wifi_passphrase}" | wc -c)"
  14. if [ "${wifi_passphrase_length}" -lt 8 -o "${wifi_passphrase_length}" -gt 63 ]; then
  15. echo "ERROR: Your password must from 8 to 63 characters (WPA2 passphrase)" >&2
  16. exit 1
  17. fi
  18. echo "${wifi_passphrase}" | grep -qP '[^[:print:]]'
  19. if [ $? -eq 0 ]; then
  20. echo "ERROR: Only printable ASCII characters are permitted in your password (WPA2 passphrase)" >&2
  21. exit 1
  22. fi
  23. # Check domain/path availability
  24. sudo yunohost app checkurl ${domain}${url_path} -a hotspot
  25. if [ ! $? -eq 0 ]; then
  26. exit 1
  27. fi
  28. # Install packages
  29. # TODO: Replace isc-dhcp-server by dnsmasq (currently negotiating with the YunoHost team to
  30. # also replace bind9 by dnsmasq)
  31. #sudo apt-get update
  32. sudo apt-get --assume-yes --force-yes install hostapd radvd isc-dhcp-server iptables php5-fpm wireless-tools
  33. # Extra packages
  34. sudo apt-get --assume-yes --force-yes install sipcalc wireless-tools
  35. # Compute extra arguments
  36. if [ -z "${ip6_net}" ]; then
  37. ip6_net=none
  38. ip6_addr=none
  39. else
  40. ip6_net=$(bash ../conf/ipv6_expanded "${ip6_net}")
  41. if [ -z "${ip6_net}" ]; then
  42. echo "ERROR: The IPv6 Delegated Prefix format looks bad" >&2
  43. exit 1
  44. fi
  45. ip6_addr="$(echo "${ip6_net}" | cut -d: -f1-7):42"
  46. ip6_net=$(bash ../conf/ipv6_compressed "${ip6_net}")
  47. ip6_addr=$(bash ../conf/ipv6_compressed "${ip6_addr}")
  48. fi
  49. wifi_device=$(sudo iwconfig 2>&1 | grep 802.11 | head -n1 | awk '{ print $1 }')
  50. wifi_n=0
  51. if [ -z "${wifi_device}" ]; then
  52. echo "ERROR: No wifi interface found" >&2
  53. exit 1
  54. fi
  55. sudo iwconfig "${wifi_device}" | grep -q 'n *ESSID'
  56. if [ $? -eq 0 ]; then
  57. wifi_n=1
  58. fi
  59. # Save arguments
  60. sudo yunohost app setting hotspot wifi_ssid -v "${wifi_ssid}"
  61. sudo yunohost app setting hotspot wifi_passphrase -v "${wifi_passphrase}"
  62. sudo yunohost app setting hotspot wifi_device -v "${wifi_device}"
  63. sudo yunohost app setting hotspot wifi_channel -v 6
  64. sudo yunohost app setting hotspot wifi_n -v "${wifi_n}"
  65. sudo yunohost app setting hotspot ip6_addr -v "${ip6_addr}"
  66. sudo yunohost app setting hotspot ip6_net -v "${ip6_net}"
  67. sudo yunohost app setting hotspot ip6_dns0 -v 2001:913::8
  68. sudo yunohost app setting hotspot ip6_dns1 -v 2001:910:800::12
  69. sudo yunohost app setting hotspot ip4_dns0 -v 80.67.188.188
  70. sudo yunohost app setting hotspot ip4_dns1 -v 80.67.169.12
  71. sudo yunohost app setting hotspot ip4_nat_prefix -v 10.0.242
  72. sudo yunohost app setting hotspot vpnclient -v no
  73. # Install IPv6 scripts
  74. sudo install -o root -g root -m 0755 ../conf/ipv6_expanded /usr/local/bin/
  75. sudo install -o root -g root -m 0755 ../conf/ipv6_compressed /usr/local/bin/
  76. # Copy confs
  77. sudo install -b -o root -g root -m 0644 ../conf/hostapd.conf.tpl /etc/hostapd/
  78. sudo install -b -o root -g root -m 0644 ../conf/radvd.conf.tpl /etc/
  79. sudo install -b -o root -g root -m 0644 ../conf/dhcpd.conf.tpl /etc/dhcp/
  80. sudo install -b -o root -g root -m 0644 ../conf/nginx_wifiadmin.conf "/etc/nginx/conf.d/${domain}.d/wifiadmin.conf"
  81. sudo install -b -o root -g root -m 0644 ../conf/phpfpm_wifiadmin.conf /etc/php5/fpm/pool.d/wifiadmin.conf
  82. # Copy web sources
  83. sudo mkdir -pm 0755 /var/www/wifiadmin/
  84. sudo cp -a ../sources/* /var/www/wifiadmin/
  85. sudo chown -R root: /var/www/wifiadmin/
  86. sudo chmod -R 0644 /var/www/wifiadmin/*
  87. sudo find /var/www/wifiadmin/ -type d -exec chmod +x {} \;
  88. # Create user for the web admin
  89. sudo useradd -MUr wifiadmin
  90. # Fix confs
  91. ## hostapd
  92. sudo sed 's|^DAEMON_CONF=$|&/etc/hostapd/hostapd.conf|' -i /etc/init.d/hostapd
  93. ## nginx
  94. sudo sed "s|<TPL:NGINX_LOCATION>|${url_path}|g" -i "/etc/nginx/conf.d/${domain}.d/wifiadmin.conf"
  95. sudo sed 's|<TPL:NGINX_REALPATH>|/var/www/wifiadmin/|g' -i "/etc/nginx/conf.d/${domain}.d/wifiadmin.conf"
  96. sudo sed 's|<TPL:PHP_NAME>|wifiadmin|g' -i "/etc/nginx/conf.d/${domain}.d/wifiadmin.conf"
  97. ## php-fpm
  98. sudo sed 's|<TPL:PHP_NAME>|wifiadmin|g' -i /etc/php5/fpm/pool.d/wifiadmin.conf
  99. sudo sed 's|<TPL:PHP_USER>|admin|g' -i /etc/php5/fpm/pool.d/wifiadmin.conf
  100. sudo sed 's|<TPL:PHP_GROUP>|admins|g' -i /etc/php5/fpm/pool.d/wifiadmin.conf
  101. sudo sed 's|<TPL:NGINX_REALPATH>|/var/www/wifiadmin/|g' -i /etc/php5/fpm/pool.d/wifiadmin.conf
  102. sudo sed 's|^;\?\s*max_execution_time.\+|max_execution_time = 600|' -i /etc/php5/fpm/php.ini
  103. # Fix sources
  104. sudo sed "s|<TPL:NGINX_LOCATION>|${url_path}|g" -i /var/www/wifiadmin/config.php
  105. # Copy init script
  106. sudo install -o root -g root -m 0755 ../conf/init_ynh-hotspot /etc/init.d/ynh-hotspot
  107. # Set default inits
  108. # The boot order of these services are important, so they are disabled by default
  109. # and the ynh-hotspot service handles them.
  110. # All services are registred by yunohost in order to prevent conflicts after the uninstall.
  111. sudo yunohost service add isc-dhcp-server
  112. sudo yunohost service stop isc-dhcp-server
  113. sudo yunohost service disable isc-dhcp-server
  114. sudo yunohost service add radvd
  115. sudo yunohost service stop radvd
  116. sudo yunohost service disable radvd
  117. sudo yunohost service add hostapd
  118. sudo yunohost service stop hostapd
  119. sudo yunohost service disable hostapd
  120. sudo yunohost service add php5-fpm
  121. sudo yunohost service enable php5-fpm
  122. sudo service nginx reload
  123. # Remove IPv6 address set if there is a VPN installed
  124. if [ "${ip6_addr}" != none ]; then
  125. sudo ip -6 address show dev tun0 2> /dev/null | grep -q "${ip6_addr}/"
  126. if [ "$?" -eq 0 ]; then
  127. sudo ip address delete "${ip6_addr}/128" dev tun0 &> /dev/null
  128. fi
  129. fi
  130. sudo yunohost service add ynh-hotspot
  131. sudo yunohost service enable ynh-hotspot
  132. sudo service ynh-hotspot start
  133. # Update SSO for wifiadmin
  134. sudo yunohost app ssowatconf
  135. exit 0