Project

General

Profile

Support #813

Updated by Daniel Curtis almost 8 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

Back