Support #813
Updated by Daniel Curtis over 9 years ago
{{>toc}}
Here is a procedure on how I setup a Raspberry Pi as a wireless access point or wireless router on Arch Linux.
*NOTE*: The original project used Raspbian as the base Operating System, so I needed to adapt the existing code to work on Arch Linux.
*WARNING*: This is currently (6/4/16) a work in progress. As such some features may not work properly.
h2. Prepare the Environment
* Before installation of the components, make sure everything is up to date using the following command:
<pre>
pacman -Syu
</pre>
* Install a few dependencies:
<pre>
pacman -S sudo nginx git curl ntp dnsmasq hostapd wireless_tools
</pre>
* Edit the sudoers file:
<pre>
visudo
</pre>
#* Add the following to the end of the file:
<pre>
http ALL=(ALL) NOPASSWD:/usr/bin/ifconfig,/usr/bin/sudo,/usr/bin/ip link set wlan0 down,/usr/bin/ip link set wlan0 up,/bin/cat /etc/wpa_supplicant/wpa_supplicant-wlan0.conf,/bin/cp /tmp/wifidata /etc/wpa_supplicant/wpa_supplicant-wlan0.conf,/usr/bin/wpa_cli scan_results, /usr/bin/wpa_cli scan,/usr/bin/systemctl restart wpa_supplicant@wlan0,/usr/bin/systemctl enable wpa_supplicant@wlan0,/usr/bin/systemctl disable wpa_supplicant@wlan0,/usr/bin/systemctl is-enabled,/bin/cp /tmp/hostapddata /etc/hostapd/hostapd.conf, /bin/systemctl start hostapd,/bin/systemctl stop hostapd,/bin/systemctl stop dnsmasq, /bin/systemctl stop dnsmasq,/bin/cp /tmp/dhcpddata /etc/dnsmasq.conf
nf
</pre>
* Start and enable ntpd:
<pre>
systemctl enable ntpd
systemctl start ntpd
</pre>
* Edit the wpa_supplicant config file:
<pre>
nano /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
</pre>
#* And add the following:
<pre>
ctrl_interface=/run/wpa_supplicant
update_config=1
</pre>
* Start and enable wpa_supplicant for wlan0 at boot:
<pre>
systemctl enable wpa_supplicant@wlan0
systemctl start wpa_supplicant@wlan0
</pre>
---
h2. Install PHP
* Install fcgiwrap
<pre>
pacman -S fcgiwrap php-fpm
</pre>
* Edit the php-fpm config:
<pre>
vi /etc/php/php-fpm.conf
</pre>
#* Make the following changes:
<pre>
listen = /run/php-fpm/php-fpm.sock
listen.owner = http
listen.group = http
listen.mode = 0660
</pre>
* Create a configuration directory to make managing individual server blocks easier
<pre>
mkdir /etc/nginx/conf.d
</pre>
* Edit the main nginx config file:
<pre>
vi /etc/nginx/nginx.conf
</pre>
#* And strip down the config file and add the include statement at the end to make it easier to handle various server blocks:
<pre>
worker_processes 1;
error_log /var/log/nginx-error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;
}
</pre>
* Start and enable nginx, fcgiwrap, and php-fpm at boot:
<pre>
systemctl enable nginx
systemctl start nginx
systemctl enable fcgiwrap
systemctl start fcgiwrap
systemctl enable php-fpm
systemctl start php-fpm
</pre>
h2. Install WiFiPi AP RaspAP
* Clone the WiFiPi AP code: raspap-webgui from GitHub:
<pre>
sudo git clone https://git.gnetsolutions.net/TokinRing/wifipi-ap.git /srv/http/wifipi.example.com https://git.gnetsolutions.net/TokinRing/raspap-webgui.git /srv/http/raspap.example.com
</pre>
* Set the files ownership to the http user:
<pre>
sudo chown -R http:http /srv/http/wifipi.example.com /srv/http/raspap.example.com
</pre>
* Add a *wifipi.example.com *raspap.example.com server block*:
<pre>
vi /etc/nginx/conf.d/wifipi.example.com.conf /etc/nginx/conf.d/raspap.example.com.conf
</pre>
#* Add the following:
<pre>
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
server {
listen 80;
server_name wifipi.example.com; raspap.example.com;
root /srv/http/wifipi.example.com; /srv/http/raspap.example.com;
access_log /var/log/wifipi.example.com-access.log; /var/log/raspap.example.com-access.log;
error_log /var/log/wifipi.example.com-error.log; /var/log/raspap.example.com-error.log;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_param SCRIPT_FILENAME /srv/http/wifipi.example.com$fastcgi_script_name; /srv/http/raspap.example.com$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
location ~ \.cgi$ {
root /srv/http/wifipi.example.com; /srv/http/raspap.example.com;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_pass unix:/run/fcgiwrap.sock;
include fastcgi.conf;
}
}
</pre>
* Add the PHP files for the site and change the ownership to the http user:
<pre>
chown -R http:http /srv/http/wifipi.example.com /srv/http/raspap.example.com
</pre>
* Restart nginx:
<pre>
systemctl restart nginx
</pre>
h2. Resources
* https://github.com/billz/raspap-webgui
* http://sirlagz.net/2013/02/06/script-web-configuration-page-for-raspberry-pi/
* http://raspberrypihq.com/how-to-turn-a-raspberry-pi-into-a-wifi-router/
* http://sirlagz.net/2012/08/09/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-1/
* https://wiki.archlinux.org/index.php/Software_Access_Point