diff --git a/README.md b/README.md
index 44d6535..b0e95d4 100644
--- a/README.md
+++ b/README.md
@@ -43,10 +43,5 @@ In this manner, with this example, you can provide 3 access points at the same t
## Prerequisites
-This app works with a non-stable version of YunoHost.
-
-Until this version is available (coming soon!) as an official stable release, you need to execute some commands before installing this app:
-
- # service bind9 stop
- # update-rc.d bind9 remove
- # apt-get install dnsmasq
+* Debian Jessie
+* YunoHost >= 2.2.0
diff --git a/TODO b/TODO
index 6d25e1a..1c5d23a 100644
--- a/TODO
+++ b/TODO
@@ -1,4 +1 @@
* Translate PHP interface in French
-
-* multissid
-** INIT: use insserv instead of update-rc.d and update service dependencies
diff --git a/conf/iw_multissid b/conf/iw_multissid
index 1ed65de..ca21bfb 100644
--- a/conf/iw_multissid
+++ b/conf/iw_multissid
@@ -18,5 +18,10 @@
# along with this program. If not, see .
phy=$(iw "${1}" info | grep wiphy | awk '{ print $NF }')
+multissid=$(iw "phy${phy}" info | grep -A1 'valid interface combinations' | tail -n1 | sed 's/.*{.*AP.*}\s<=\s\(.*\),.*/\1/')
-iw "phy${phy}" info | grep -A1 'valid interface combinations' | tail -n1 | sed 's/.*{.*AP.*}\s<=\s\(.*\),.*/\1/'
+if [ -z "${multissid}" ]; then
+ echo 1
+else
+ echo $multissid
+fi
diff --git a/conf/init_ynh-hotspot b/conf/ynh-hotspot
similarity index 90%
rename from conf/init_ynh-hotspot
rename to conf/ynh-hotspot
index 9614d37..57afe0c 100644
--- a/conf/init_ynh-hotspot
+++ b/conf/ynh-hotspot
@@ -1,28 +1,19 @@
#!/bin/bash
-### BEGIN INIT INFO
-# Provides: ynh-hotspot
-# Required-Start: $network $remote_fs $syslog yunohost-api
-# Required-Stop: $network $remote_fs $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Set prerequisites for wifi hotspot.
-# Description: Set prerequisites for wifi hotspot.
-### END INIT INFO
-
-# Wifi Hotspot app for YunoHost
+#
+# Wifi Hotspot app for YunoHost
# Copyright (C) 2015 Julien Vaubourg
# Contribute at https://github.com/jvaubourg/hotspot_ynh
-#
+#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
-#
+#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
-#
+#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
@@ -89,13 +80,13 @@ is_dhcpd4_running() {
}
is_hostapd_running() {
- service hostapd status &> /dev/null
+ systemctl is-active hostapd &> /dev/null
}
is_running() {
for i in $(seq 0 $((${ynh_multissid} - 1))); do
- ( has_ip6delegatedprefix ${i} && is_ip6addr_set ${i} || ! has_ip6delegatedprefix ${i} )\
- && is_ip4nataddr_set ${i} && is_dhcpd6_running ${i} && is_dhcpd4_running ${i}
+ ( has_ip6delegatedprefix ${i} && is_ip6addr_set ${i} && is_dhcpd6_running ${i} || ! has_ip6delegatedprefix ${i} )\
+ && is_ip4nataddr_set ${i} && is_dhcpd4_running ${i}
if [ ! $? -eq 0 ]; then
return 1
@@ -152,9 +143,7 @@ start_dhcpd6() {
dev="hotspot${i}"
fi
- rm -f /etc/dnsmasq.dhcpd/dhcpdv6-ssid*.conf
-
- cp /etc/dnsmasq.dhcp/dhcpdv6{.conf.tpl,-ssid${i}.conf}
+ cp /etc/dnsmasq.dhcpd/dhcpdv6{.conf.tpl,-ssid${i}.conf}
sed "s||${dev}|g" -i /etc/dnsmasq.dhcpd/dhcpdv6-ssid${i}.conf
sed "s||${ynh_ip6_net[${i}]}|g" -i /etc/dnsmasq.dhcpd/dhcpdv6-ssid${i}.conf
@@ -173,8 +162,6 @@ start_dhcpd4() {
dev="hotspot${i}"
fi
- rm -f /etc/dnsmasq.dhcpd/dhcpdv4-ssid*.conf
-
cp /etc/dnsmasq.dhcpd/dhcpdv4{.conf.tpl,-ssid${i}.conf}
sed "s||${ynh_ip4_dns0[${i}]}|g" -i /etc/dnsmasq.dhcpd/dhcpdv4-ssid${i}.conf
@@ -201,7 +188,7 @@ start_hostapd() {
sed "s||hotspot${i}|g" -i /etc/hostapd/hostapd.conf.tmp
sed "s||${ynh_wifi_ssid[${i}]}|g" -i /etc/hostapd/hostapd.conf.tmp
sed "s||${ynh_wifi_passphrase[${i}]}|g" -i /etc/hostapd/hostapd.conf.tmp
-
+
if [ "${ynh_wifi_secure[${i}]}" -eq 1 ]; then
sed "s|||g" -i /etc/hostapd/hostapd.conf.tmp
else
@@ -218,7 +205,7 @@ start_hostapd() {
rm /etc/hostapd/hostapd.conf.tmp
done
- service hostapd start
+ systemctl start hostapd
}
## Unsetters
@@ -269,33 +256,41 @@ stop_dhcpd4() {
}
stop_hostapd() {
- service hostapd stop
+ systemctl stop hostapd
}
## Tools
moulinette_get() {
var=${1}
+ gotcha=0
- value=$(yunohost app setting hotspot "${var}")
+ while [ "${gotcha}" -eq 0 ]; do
+ value=$(yunohost app setting hotspot "${var}")
- if [[ "${value}" =~ "An instance is already running" ]]; then
- echo "${value}" >&2
- exit 1
- fi
+ if [[ "${value}" =~ "An instance is already running" ]]; then
+ sleep $(($((RANDOM%5)) + 1))
+ else
+ gotcha=1
+ fi
+ done
echo "${value}"
-}
+}
moulinette_vpnclient_get() {
var=${1}
+ gotcha=0
- value=$(yunohost app setting vpnclient "${var}")
+ while [ "${gotcha}" -eq 0 ]; do
+ value=$(yunohost app setting vpnclient "${var}")
- if [[ "${value}" =~ "An instance is already running" ]]; then
- echo "${value}" >&2
- exit 1
- fi
+ if [[ "${value}" =~ "An instance is already running" ]]; then
+ sleep $(($((RANDOM%5)) + 1))
+ else
+ gotcha=1
+ fi
+ done
echo "${value}"
}
@@ -317,13 +312,13 @@ if [ "$1" != restart ]; then
# Restart php5-fpm at the first start (it needs to be restarted after the slapd start)
if [ ! -e /tmp/.ynh-hotspot-boot ]; then
touch /tmp/.ynh-hotspot-boot
- service php5-fpm restart
+ systemctl restart php5-fpm
fi
-
+
# Variables
-
+
echo -n "Retrieving Yunohost settings... "
-
+
ynh_service_enabled=$(moulinette_get service_enabled)
ynh_wifi_device=$(moulinette_get wifi_device)
ynh_wifi_channel=$(moulinette_get wifi_channel)
@@ -342,23 +337,23 @@ if [ "$1" != restart ]; then
old_internet_device=$(moulinette_get internet_device)
new_internet_device=$(ip route | awk '/default via/ { print $NF; }')
-
+
# Switch the NAT interface if there is a VPN
ip link show dev tun0 &> /dev/null
if [ "$?" -eq 0 ]; then
new_internet_device=tun0
fi
-
+
echo "OK"
-
+
# Check IPv6 delegated prefix from vpnclient
# vpnclient_ip6_net=$(moulinette_vpnclient_get ip6_net)
-#
+#
# if [ ! -z "${vpnclient_ip6_addr}" ]; then
# if [ "${ynh_ip6_net}" == none ]; then
# ynh_ip6_net=$vpnclient_ip6_net
# ynh_ip6_addr=$(moulinette_vpnclient_get ip6_addr)
-#
+#
# moulinette_set ip6_net "${ynh_ip6_net}"
# moulinette_set ip6_addr "${ynh_ip6_addr}"
# else
@@ -416,12 +411,16 @@ case "$1" in
exit 1
fi
- i=0; false || while [ $? -ne 0 ]; do
- sleep 1 && (( i++ ))
- [ ${i} -gt 20 ] && stop_hostapd
- [ ${i} -gt 20 ] && exit 1
- ip link show dev "mon.${ynh_wifi_device}" &> /dev/null
- done
+ if [ "${ynh_multissid}" -gt 1 ]; then
+ i=0; false || while [ $? -ne 0 ]; do
+ sleep 1 && (( i++ ))
+ [ ${i} -gt 20 ] && stop_hostapd
+ [ ${i} -gt 20 ] && exit 1
+ ip link show dev hotspot1 &> /dev/null
+ done
+ else
+ sleep 1
+ fi
fi
# For each registred ssid
@@ -432,13 +431,13 @@ case "$1" in
echo "hotspot${i}: Set IPv4 NAT address"
set_ip4nataddr ${i}
fi
-
+
# Set the ipv6 address
if has_ip6delegatedprefix ${i} && ! is_ip6addr_set ${i}; then
echo "hotspot${i}: Set IPv6 address"
set_ip6addr ${i}
fi
-
+
# Run DHCPv6 server
if has_ip6delegatedprefix ${i} && ! is_dhcpd6_running ${i}; then
echo "hotspot${i}: Start the NDP and DHCPv6 server (dnsmasq)"
@@ -480,8 +479,8 @@ case "$1" in
if has_ip6delegatedprefix ${i} && is_ip6addr_set ${i}; then
echo "hotspot${i}: Unset IPv6 address"
unset_ip6addr ${i}
- fi
-
+ fi
+
if is_dhcpd6_running ${i}; then
echo "hotspot${i}: Stop the NDP and DHCPv6 server (dnsmasq)"
stop_dhcpd6 ${i}
@@ -498,8 +497,9 @@ case "$1" in
stop_hostapd
fi
+ # Fix configuration
if has_vpnclient_app; then
- service ynh-vpnclient start
+ ynh-vpnclient start
fi
;;
restart)
@@ -541,7 +541,7 @@ case "$1" in
if has_ip6delegatedprefix ${i}; then
echo "[INFO] hotspot${i}: IPv6 delegated prefix found"
echo "[INFO] hotspot${i}: IPv6 address computed from the delegated prefix: ${ynh_ip6_addr}"
-
+
if is_ip6addr_set ${i}; then
echo "[OK] hotspot${i}: IPv6 address set"
else
@@ -558,14 +558,14 @@ case "$1" in
else
echo "[INFO] hotspot${i}: No IPv6 delegated prefix found"
fi
-
+
if is_dhcpd4_running ${i}; then
echo "[OK] hotspot${i}: DHCPv4 server (dnsmasq) is running"
else
echo "[ERR] hotspot${i}: NDP and DHCPv4 (dnsmasq) is not running"
exitcode=1
fi
-
+
if is_ip4nataddr_set ${i}; then
echo "[OK] hotspot${i}: IPv4 NAT address set"
else
diff --git a/conf/ynh-hotspot.service b/conf/ynh-hotspot.service
new file mode 100644
index 0000000..367601f
--- /dev/null
+++ b/conf/ynh-hotspot.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=YunoHost Wifi Hotspot.
+Requires=network.target
+After=network.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/local/bin/ynh-hotspot start
+ExecStop=/usr/local/bin/ynh-hotspot stop
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/scripts/install b/scripts/install
index 89d3db9..3724d6b 100644
--- a/scripts/install
+++ b/scripts/install
@@ -39,10 +39,10 @@ if [ "${ynh_version}" -lt 220 ]; then
exit 1
fi
-sudo service dnsmasq status &> /dev/null
+sudo systemctl is-active dnsmasq &> /dev/null
if [ $? -ne 0 ]; then
- echo "ERROR: You need to enable dnsmasq instead of bind9 (apt-get remove bind9 && service dnsmasq start)"
+ echo "ERROR: You need to enable dnsmasq instead of bind9 (apt-get remove bind9 && systemctl start dnsmasq)"
exit 1
fi
@@ -191,7 +191,8 @@ sudo sed 's||/var/www/wifiadmin/|g' -i /etc/php5/fpm/pool.d/
sudo sed "s||${url_path}|g" -i /var/www/wifiadmin/config.php
# Copy init script
-sudo install -o root -g root -m 0755 ../conf/init_ynh-hotspot /etc/init.d/ynh-hotspot
+sudo install -o root -g root -m 0755 ../conf/ynh-hotspot /usr/local/bin/
+sudo install -o root -g root -m 0644 ../conf/ynh-hotspot.service /etc/systemd/system/
# Update firewall for DHCP
sudo yunohost firewall allow --no-upnp --ipv6 UDP 547
@@ -200,15 +201,13 @@ sudo yunohost firewall allow --no-upnp UDP 67
# Set default inits
# The boot order of these services are important, so they are disabled by default
# and the ynh-hotspot service handles them.
-# All services are registred by yunohost in order to prevent conflicts after the uninstall.
-sudo yunohost service add hostapd
-sudo yunohost service stop hostapd
-sudo yunohost service disable hostapd
+sudo systemctl disable hostapd
+sudo systemctl stop hostapd
-sudo yunohost service add php5-fpm
-sudo yunohost service enable php5-fpm
+sudo systemctl enable php5-fpm
+sudo systemctl restart php5-fpm
-sudo service nginx reload
+sudo systemctl reload nginx
# Remove IPv6 address set if there is a VPN installed
if [ "${ip6_addr}" != none ]; then
@@ -218,9 +217,8 @@ if [ "${ip6_addr}" != none ]; then
fi
fi
-sudo yunohost service add ynh-hotspot
-sudo yunohost service enable ynh-hotspot
-sudo service ynh-hotspot start
+sudo systemctl enable ynh-hotspot
+sudo systemctl start ynh-hotspot
# Update SSO for wifiadmin
sudo yunohost app ssowatconf
diff --git a/scripts/remove b/scripts/remove
index 9836e94..fa90214 100644
--- a/scripts/remove
+++ b/scripts/remove
@@ -21,9 +21,9 @@
domain=$(sudo yunohost app setting hotspot domain)
# The End
-sudo service ynh-hotspot stop
-sudo yunohost service remove ynh-hotspot
-sudo rm -f /etc/init.d/ynh-hotspot
+sudo systemctl stop ynh-hotspot
+sudo systemctl disable ynh-hotspot
+sudo rm -f /etc/systemd/system/ynh-hotspot.service /usr/local/bin/ynh-hotspot
sudo rm -f /tmp/.ynh-hotspot-*
# Update firewall for DHCP
@@ -41,9 +41,8 @@ sudo rm -f /lib/firmware/htc-7010.fw
sudo rm -f /lib/firmware/htc-9271.fw
# Restart services
-sudo yunohost service stop php5-fpm
-sudo yunohost service start php5-fpm
-sudo service nginx reload
+sudo systemctl restart php5-fpm
+sudo systemctl reload nginx
# Remove sources
sudo rm -rf /var/www/wifiadmin/
diff --git a/sources/controller.php b/sources/controller.php
index e752c6d..8f15ab2 100644
--- a/sources/controller.php
+++ b/sources/controller.php
@@ -27,23 +27,23 @@ function moulinette_set($var, $value) {
}
function stop_service() {
- exec('sudo service ynh-hotspot stop');
+ exec('sudo systemctl stop ynh-hotspot');
}
function start_service() {
- exec('sudo service ynh-hotspot start', $output, $retcode);
+ exec('sudo systemctl start ynh-hotspot', $output, $retcode);
return $retcode;
}
function service_status() {
- exec('sudo service ynh-hotspot status', $output);
+ exec('sudo ynh-hotspot status', $output);
return $output;
}
function service_faststatus() {
- exec('sudo service hostapd status', $output, $retcode);
+ exec('sudo systemctl is-active hostapd', $output, $retcode);
return $retcode;
}
@@ -146,8 +146,8 @@ dispatch('/', function() {
}
$ip6_net = moulinette_get('ip6_net');
- $ip6_net = ($ip6_net == 'none') ? '' : $ip6_net;
- $ip4_nat_prefix = moulinette_get('ip4_nat_prefix');
+ $ip6_net = ($ip6_net == 'none') ? '' : getArray($ip6_net);
+ $ip4_nat_prefix = getArray(moulinette_get('ip4_nat_prefix'));
set('service_enabled', moulinette_get('service_enabled'));
set('ssids', $ssids);
diff --git a/sources/public/css/style.css b/sources/public/css/style.css
index d2f37aa..8cdf173 100644
--- a/sources/public/css/style.css
+++ b/sources/public/css/style.css
@@ -66,7 +66,7 @@ div#saveconfirmation {
display: none;
padding-right: 15px;
width: 60%;
- margin: 0 auto;
+ margin: 15px auto 0;
}
div#saveconfirmation div#confirm {