1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/hotspot_ynh.git synced 2024-09-03 19:25:53 +02:00

Merge pull request #15 from labriqueinternet/jessie

Debian jessie support
This commit is contained in:
Julien Vaubourg 2015-06-19 11:07:00 +02:00
commit 935c2c94f4
9 changed files with 103 additions and 96 deletions

View file

@ -43,10 +43,5 @@ In this manner, with this example, you can provide 3 access points at the same t
## Prerequisites ## Prerequisites
This app works with a non-stable version of YunoHost. * Debian Jessie
* YunoHost >= 2.2.0
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

3
TODO
View file

@ -1,4 +1 @@
* Translate PHP interface in French * Translate PHP interface in French
* multissid
** INIT: use insserv instead of update-rc.d and update service dependencies

View file

@ -18,5 +18,10 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
phy=$(iw "${1}" info | grep wiphy | awk '{ print $NF }') 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

View file

@ -1,28 +1,19 @@
#!/bin/bash #!/bin/bash
### BEGIN INIT INFO #
# Provides: ynh-hotspot # Wifi Hotspot app for YunoHost
# 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
# Copyright (C) 2015 Julien Vaubourg <julien@vaubourg.com> # Copyright (C) 2015 Julien Vaubourg <julien@vaubourg.com>
# Contribute at https://github.com/jvaubourg/hotspot_ynh # Contribute at https://github.com/jvaubourg/hotspot_ynh
# #
# This program is free software: you can redistribute it and/or modify # 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 # 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 # the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version. # (at your option) any later version.
# #
# This program is distributed in the hope that it will be useful, # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of # but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details. # GNU Affero General Public License for more details.
# #
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
@ -89,13 +80,13 @@ is_dhcpd4_running() {
} }
is_hostapd_running() { is_hostapd_running() {
service hostapd status &> /dev/null systemctl is-active hostapd &> /dev/null
} }
is_running() { is_running() {
for i in $(seq 0 $((${ynh_multissid} - 1))); do for i in $(seq 0 $((${ynh_multissid} - 1))); do
( has_ip6delegatedprefix ${i} && is_ip6addr_set ${i} || ! has_ip6delegatedprefix ${i} )\ ( has_ip6delegatedprefix ${i} && is_ip6addr_set ${i} && is_dhcpd6_running ${i} || ! has_ip6delegatedprefix ${i} )\
&& is_ip4nataddr_set ${i} && is_dhcpd6_running ${i} && is_dhcpd4_running ${i} && is_ip4nataddr_set ${i} && is_dhcpd4_running ${i}
if [ ! $? -eq 0 ]; then if [ ! $? -eq 0 ]; then
return 1 return 1
@ -152,9 +143,7 @@ start_dhcpd6() {
dev="hotspot${i}" dev="hotspot${i}"
fi fi
rm -f /etc/dnsmasq.dhcpd/dhcpdv6-ssid*.conf cp /etc/dnsmasq.dhcpd/dhcpdv6{.conf.tpl,-ssid${i}.conf}
cp /etc/dnsmasq.dhcp/dhcpdv6{.conf.tpl,-ssid${i}.conf}
sed "s|<TPL:WIFI_DEVICE>|${dev}|g" -i /etc/dnsmasq.dhcpd/dhcpdv6-ssid${i}.conf sed "s|<TPL:WIFI_DEVICE>|${dev}|g" -i /etc/dnsmasq.dhcpd/dhcpdv6-ssid${i}.conf
sed "s|<TPL:IP6_NET>|${ynh_ip6_net[${i}]}|g" -i /etc/dnsmasq.dhcpd/dhcpdv6-ssid${i}.conf sed "s|<TPL:IP6_NET>|${ynh_ip6_net[${i}]}|g" -i /etc/dnsmasq.dhcpd/dhcpdv6-ssid${i}.conf
@ -173,8 +162,6 @@ start_dhcpd4() {
dev="hotspot${i}" dev="hotspot${i}"
fi fi
rm -f /etc/dnsmasq.dhcpd/dhcpdv4-ssid*.conf
cp /etc/dnsmasq.dhcpd/dhcpdv4{.conf.tpl,-ssid${i}.conf} cp /etc/dnsmasq.dhcpd/dhcpdv4{.conf.tpl,-ssid${i}.conf}
sed "s|<TPL:IP4_DNS0>|${ynh_ip4_dns0[${i}]}|g" -i /etc/dnsmasq.dhcpd/dhcpdv4-ssid${i}.conf sed "s|<TPL:IP4_DNS0>|${ynh_ip4_dns0[${i}]}|g" -i /etc/dnsmasq.dhcpd/dhcpdv4-ssid${i}.conf
@ -201,7 +188,7 @@ start_hostapd() {
sed "s|<TPL:WIFI_INTERFACE>|hotspot${i}|g" -i /etc/hostapd/hostapd.conf.tmp sed "s|<TPL:WIFI_INTERFACE>|hotspot${i}|g" -i /etc/hostapd/hostapd.conf.tmp
sed "s|<TPL:WIFI_SSID>|${ynh_wifi_ssid[${i}]}|g" -i /etc/hostapd/hostapd.conf.tmp sed "s|<TPL:WIFI_SSID>|${ynh_wifi_ssid[${i}]}|g" -i /etc/hostapd/hostapd.conf.tmp
sed "s|<TPL:WIFI_PASSPHRASE>|${ynh_wifi_passphrase[${i}]}|g" -i /etc/hostapd/hostapd.conf.tmp sed "s|<TPL:WIFI_PASSPHRASE>|${ynh_wifi_passphrase[${i}]}|g" -i /etc/hostapd/hostapd.conf.tmp
if [ "${ynh_wifi_secure[${i}]}" -eq 1 ]; then if [ "${ynh_wifi_secure[${i}]}" -eq 1 ]; then
sed "s|<TPL:SEC_COMMENT>||g" -i /etc/hostapd/hostapd.conf.tmp sed "s|<TPL:SEC_COMMENT>||g" -i /etc/hostapd/hostapd.conf.tmp
else else
@ -218,7 +205,7 @@ start_hostapd() {
rm /etc/hostapd/hostapd.conf.tmp rm /etc/hostapd/hostapd.conf.tmp
done done
service hostapd start systemctl start hostapd
} }
## Unsetters ## Unsetters
@ -269,33 +256,41 @@ stop_dhcpd4() {
} }
stop_hostapd() { stop_hostapd() {
service hostapd stop systemctl stop hostapd
} }
## Tools ## Tools
moulinette_get() { moulinette_get() {
var=${1} 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 if [[ "${value}" =~ "An instance is already running" ]]; then
echo "${value}" >&2 sleep $(($((RANDOM%5)) + 1))
exit 1 else
fi gotcha=1
fi
done
echo "${value}" echo "${value}"
} }
moulinette_vpnclient_get() { moulinette_vpnclient_get() {
var=${1} 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 if [[ "${value}" =~ "An instance is already running" ]]; then
echo "${value}" >&2 sleep $(($((RANDOM%5)) + 1))
exit 1 else
fi gotcha=1
fi
done
echo "${value}" 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) # Restart php5-fpm at the first start (it needs to be restarted after the slapd start)
if [ ! -e /tmp/.ynh-hotspot-boot ]; then if [ ! -e /tmp/.ynh-hotspot-boot ]; then
touch /tmp/.ynh-hotspot-boot touch /tmp/.ynh-hotspot-boot
service php5-fpm restart systemctl restart php5-fpm
fi fi
# Variables # Variables
echo -n "Retrieving Yunohost settings... " echo -n "Retrieving Yunohost settings... "
ynh_service_enabled=$(moulinette_get service_enabled) ynh_service_enabled=$(moulinette_get service_enabled)
ynh_wifi_device=$(moulinette_get wifi_device) ynh_wifi_device=$(moulinette_get wifi_device)
ynh_wifi_channel=$(moulinette_get wifi_channel) ynh_wifi_channel=$(moulinette_get wifi_channel)
@ -342,23 +337,23 @@ if [ "$1" != restart ]; then
old_internet_device=$(moulinette_get internet_device) old_internet_device=$(moulinette_get internet_device)
new_internet_device=$(ip route | awk '/default via/ { print $NF; }') new_internet_device=$(ip route | awk '/default via/ { print $NF; }')
# Switch the NAT interface if there is a VPN # Switch the NAT interface if there is a VPN
ip link show dev tun0 &> /dev/null ip link show dev tun0 &> /dev/null
if [ "$?" -eq 0 ]; then if [ "$?" -eq 0 ]; then
new_internet_device=tun0 new_internet_device=tun0
fi fi
echo "OK" echo "OK"
# Check IPv6 delegated prefix from vpnclient # Check IPv6 delegated prefix from vpnclient
# vpnclient_ip6_net=$(moulinette_vpnclient_get ip6_net) # vpnclient_ip6_net=$(moulinette_vpnclient_get ip6_net)
# #
# if [ ! -z "${vpnclient_ip6_addr}" ]; then # if [ ! -z "${vpnclient_ip6_addr}" ]; then
# if [ "${ynh_ip6_net}" == none ]; then # if [ "${ynh_ip6_net}" == none ]; then
# ynh_ip6_net=$vpnclient_ip6_net # ynh_ip6_net=$vpnclient_ip6_net
# ynh_ip6_addr=$(moulinette_vpnclient_get ip6_addr) # ynh_ip6_addr=$(moulinette_vpnclient_get ip6_addr)
# #
# moulinette_set ip6_net "${ynh_ip6_net}" # moulinette_set ip6_net "${ynh_ip6_net}"
# moulinette_set ip6_addr "${ynh_ip6_addr}" # moulinette_set ip6_addr "${ynh_ip6_addr}"
# else # else
@ -416,12 +411,16 @@ case "$1" in
exit 1 exit 1
fi fi
i=0; false || while [ $? -ne 0 ]; do if [ "${ynh_multissid}" -gt 1 ]; then
sleep 1 && (( i++ )) i=0; false || while [ $? -ne 0 ]; do
[ ${i} -gt 20 ] && stop_hostapd sleep 1 && (( i++ ))
[ ${i} -gt 20 ] && exit 1 [ ${i} -gt 20 ] && stop_hostapd
ip link show dev "mon.${ynh_wifi_device}" &> /dev/null [ ${i} -gt 20 ] && exit 1
done ip link show dev hotspot1 &> /dev/null
done
else
sleep 1
fi
fi fi
# For each registred ssid # For each registred ssid
@ -432,13 +431,13 @@ case "$1" in
echo "hotspot${i}: Set IPv4 NAT address" echo "hotspot${i}: Set IPv4 NAT address"
set_ip4nataddr ${i} set_ip4nataddr ${i}
fi fi
# Set the ipv6 address # Set the ipv6 address
if has_ip6delegatedprefix ${i} && ! is_ip6addr_set ${i}; then if has_ip6delegatedprefix ${i} && ! is_ip6addr_set ${i}; then
echo "hotspot${i}: Set IPv6 address" echo "hotspot${i}: Set IPv6 address"
set_ip6addr ${i} set_ip6addr ${i}
fi fi
# Run DHCPv6 server # Run DHCPv6 server
if has_ip6delegatedprefix ${i} && ! is_dhcpd6_running ${i}; then if has_ip6delegatedprefix ${i} && ! is_dhcpd6_running ${i}; then
echo "hotspot${i}: Start the NDP and DHCPv6 server (dnsmasq)" 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 if has_ip6delegatedprefix ${i} && is_ip6addr_set ${i}; then
echo "hotspot${i}: Unset IPv6 address" echo "hotspot${i}: Unset IPv6 address"
unset_ip6addr ${i} unset_ip6addr ${i}
fi fi
if is_dhcpd6_running ${i}; then if is_dhcpd6_running ${i}; then
echo "hotspot${i}: Stop the NDP and DHCPv6 server (dnsmasq)" echo "hotspot${i}: Stop the NDP and DHCPv6 server (dnsmasq)"
stop_dhcpd6 ${i} stop_dhcpd6 ${i}
@ -498,8 +497,9 @@ case "$1" in
stop_hostapd stop_hostapd
fi fi
# Fix configuration
if has_vpnclient_app; then if has_vpnclient_app; then
service ynh-vpnclient start ynh-vpnclient start
fi fi
;; ;;
restart) restart)
@ -541,7 +541,7 @@ case "$1" in
if has_ip6delegatedprefix ${i}; then if has_ip6delegatedprefix ${i}; then
echo "[INFO] hotspot${i}: IPv6 delegated prefix found" echo "[INFO] hotspot${i}: IPv6 delegated prefix found"
echo "[INFO] hotspot${i}: IPv6 address computed from the delegated prefix: ${ynh_ip6_addr}" echo "[INFO] hotspot${i}: IPv6 address computed from the delegated prefix: ${ynh_ip6_addr}"
if is_ip6addr_set ${i}; then if is_ip6addr_set ${i}; then
echo "[OK] hotspot${i}: IPv6 address set" echo "[OK] hotspot${i}: IPv6 address set"
else else
@ -558,14 +558,14 @@ case "$1" in
else else
echo "[INFO] hotspot${i}: No IPv6 delegated prefix found" echo "[INFO] hotspot${i}: No IPv6 delegated prefix found"
fi fi
if is_dhcpd4_running ${i}; then if is_dhcpd4_running ${i}; then
echo "[OK] hotspot${i}: DHCPv4 server (dnsmasq) is running" echo "[OK] hotspot${i}: DHCPv4 server (dnsmasq) is running"
else else
echo "[ERR] hotspot${i}: NDP and DHCPv4 (dnsmasq) is not running" echo "[ERR] hotspot${i}: NDP and DHCPv4 (dnsmasq) is not running"
exitcode=1 exitcode=1
fi fi
if is_ip4nataddr_set ${i}; then if is_ip4nataddr_set ${i}; then
echo "[OK] hotspot${i}: IPv4 NAT address set" echo "[OK] hotspot${i}: IPv4 NAT address set"
else else

13
conf/ynh-hotspot.service Normal file
View file

@ -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

View file

@ -39,10 +39,10 @@ if [ "${ynh_version}" -lt 220 ]; then
exit 1 exit 1
fi fi
sudo service dnsmasq status &> /dev/null sudo systemctl is-active dnsmasq &> /dev/null
if [ $? -ne 0 ]; then 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 exit 1
fi fi
@ -191,7 +191,8 @@ sudo sed 's|<TPL:NGINX_REALPATH>|/var/www/wifiadmin/|g' -i /etc/php5/fpm/pool.d/
sudo sed "s|<TPL:NGINX_LOCATION>|${url_path}|g" -i /var/www/wifiadmin/config.php sudo sed "s|<TPL:NGINX_LOCATION>|${url_path}|g" -i /var/www/wifiadmin/config.php
# Copy init script # 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 # Update firewall for DHCP
sudo yunohost firewall allow --no-upnp --ipv6 UDP 547 sudo yunohost firewall allow --no-upnp --ipv6 UDP 547
@ -200,15 +201,13 @@ sudo yunohost firewall allow --no-upnp UDP 67
# Set default inits # Set default inits
# The boot order of these services are important, so they are disabled by default # The boot order of these services are important, so they are disabled by default
# and the ynh-hotspot service handles them. # and the ynh-hotspot service handles them.
# All services are registred by yunohost in order to prevent conflicts after the uninstall. sudo systemctl disable hostapd
sudo yunohost service add hostapd sudo systemctl stop hostapd
sudo yunohost service stop hostapd
sudo yunohost service disable hostapd
sudo yunohost service add php5-fpm sudo systemctl enable php5-fpm
sudo yunohost service 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 # Remove IPv6 address set if there is a VPN installed
if [ "${ip6_addr}" != none ]; then if [ "${ip6_addr}" != none ]; then
@ -218,9 +217,8 @@ if [ "${ip6_addr}" != none ]; then
fi fi
fi fi
sudo yunohost service add ynh-hotspot sudo systemctl enable ynh-hotspot
sudo yunohost service enable ynh-hotspot sudo systemctl start ynh-hotspot
sudo service ynh-hotspot start
# Update SSO for wifiadmin # Update SSO for wifiadmin
sudo yunohost app ssowatconf sudo yunohost app ssowatconf

View file

@ -21,9 +21,9 @@
domain=$(sudo yunohost app setting hotspot domain) domain=$(sudo yunohost app setting hotspot domain)
# The End # The End
sudo service ynh-hotspot stop sudo systemctl stop ynh-hotspot
sudo yunohost service remove ynh-hotspot sudo systemctl disable ynh-hotspot
sudo rm -f /etc/init.d/ynh-hotspot sudo rm -f /etc/systemd/system/ynh-hotspot.service /usr/local/bin/ynh-hotspot
sudo rm -f /tmp/.ynh-hotspot-* sudo rm -f /tmp/.ynh-hotspot-*
# Update firewall for DHCP # Update firewall for DHCP
@ -41,9 +41,8 @@ sudo rm -f /lib/firmware/htc-7010.fw
sudo rm -f /lib/firmware/htc-9271.fw sudo rm -f /lib/firmware/htc-9271.fw
# Restart services # Restart services
sudo yunohost service stop php5-fpm sudo systemctl restart php5-fpm
sudo yunohost service start php5-fpm sudo systemctl reload nginx
sudo service nginx reload
# Remove sources # Remove sources
sudo rm -rf /var/www/wifiadmin/ sudo rm -rf /var/www/wifiadmin/

View file

@ -27,23 +27,23 @@ function moulinette_set($var, $value) {
} }
function stop_service() { function stop_service() {
exec('sudo service ynh-hotspot stop'); exec('sudo systemctl stop ynh-hotspot');
} }
function start_service() { function start_service() {
exec('sudo service ynh-hotspot start', $output, $retcode); exec('sudo systemctl start ynh-hotspot', $output, $retcode);
return $retcode; return $retcode;
} }
function service_status() { function service_status() {
exec('sudo service ynh-hotspot status', $output); exec('sudo ynh-hotspot status', $output);
return $output; return $output;
} }
function service_faststatus() { function service_faststatus() {
exec('sudo service hostapd status', $output, $retcode); exec('sudo systemctl is-active hostapd', $output, $retcode);
return $retcode; return $retcode;
} }
@ -146,8 +146,8 @@ dispatch('/', function() {
} }
$ip6_net = moulinette_get('ip6_net'); $ip6_net = moulinette_get('ip6_net');
$ip6_net = ($ip6_net == 'none') ? '' : $ip6_net; $ip6_net = ($ip6_net == 'none') ? '' : getArray($ip6_net);
$ip4_nat_prefix = moulinette_get('ip4_nat_prefix'); $ip4_nat_prefix = getArray(moulinette_get('ip4_nat_prefix'));
set('service_enabled', moulinette_get('service_enabled')); set('service_enabled', moulinette_get('service_enabled'));
set('ssids', $ssids); set('ssids', $ssids);

View file

@ -66,7 +66,7 @@ div#saveconfirmation {
display: none; display: none;
padding-right: 15px; padding-right: 15px;
width: 60%; width: 60%;
margin: 0 auto; margin: 15px auto 0;
} }
div#saveconfirmation div#confirm { div#saveconfirmation div#confirm {