The manual installation have to be done on RaspiOS or Debian.
Create KeexyBox project folder:
mkdir -p /opt/keexybox/logs
Create keexybox system user:
useradd -d /opt/keexybox/ -s /bin/bash keexybox
Update APT:
apt-get update
Install dev tools:
apt-get install gcc make git
MariaDB :
apt-get install mariadb-server mariadb-client default-libmysqlclient-dev
HTTP server:
apt-get install apache2 libapache2-mod-php
System tools:
apt-get install sudo ntp acl arp-scan
PHP:
apt-get install php php-gettext php-tcpdf php-gd php-intl php-json php-mcrypt php-mysql php-readline php-sqlite3
Perl:
apt-get install libproc-daemon-perl libfile-pid-perl
Python:
apt-get install python-pip python-dev python-mysqldb libssl-dev
Fix a bug MariaDB with python
sed '/st_mysql_options options;/a unsigned int reconnect;' /usr/include/mysql/mysql.h -i.bkp
Installation of Python modules:
pip install mysql MySQL-python mysql-connector wget
KeexyApp is the core of KeexyBox that also provide the Web Interface.
Go to KeexyBox home directory:
cd /opt/keexybox/
Clone keexybox/keexyapp from GitHub:
git clone https://github.com/keexybox/keexyapp
Create missing directories:
mkdir /opt/keexybox/keexyapp/logs
Bind is a DNS server used by KeexyBox.
Install required packages:
apt-get install libssl-dev libmariadbclient-dev python-ply
Check the lastest stable version of bind: https://www.isc.org/downloads/
Download and extract source code of Bind:
cd /usr/src/ wget https://downloads.isc.org/isc/bind9/9.11.16/bind-9.11.16.tar.gz tar xzf bind-9.11.16.tar.gz
Compile Bind:
cd bind-9.11.16/ ./configure --prefix=/opt/keexybox/bind --with-dlz-mysql --enable-threads=no make make install
The option –enable-threads=no
is added because the MySQL drivers cannot work with several threads. For more details, see: http://bind-dlz.sourceforge.net/mysql_driver.html
Create redirectories required for Bind:
mkdir -p /opt/keexybox/bind/var/log/
Generate rndc.key
:
/opt/keexybox/bind/sbin/rndc-confgen -a
Go to Bind configuration directory:
cd /opt/keexybox/bind/etc/
Download db.root
file:
wget -O db.root ftp://ftp.internic.net/domain/named.cache
Create and edit file db.0
:
; ; BIND reverse data file for broadcast zone ; $TTL 604800 @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost.
Create and edit file db.127
:
; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 1.0.0 IN PTR localhost.
Create and edit file db.255
:
; ; BIND reverse data file for broadcast zone ; $TTL 604800 @ IN SOA localhost. root.localhost. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost.
Create and edit file db.local
:
; ; BIND data file for local loopback interface ; $TTL 604800 @ IN SOA localhost. root.localhost. ( 2 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. @ IN A 127.0.0.1 @ IN AAAA ::1
Create and edit file named.conf.default-zones
:
// prime the server with knowledge of the root servers zone "." { type hint; file "/opt/keexybox/bind/etc/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/opt/keexybox/bind/etc/db.local"; }; zone "127.in-addr.arpa" { type master; file "/opt/keexybox/bind/etc/db.127"; }; zone "0.in-addr.arpa" { type master; file "/opt/keexybox/bind/etc/db.0"; }; zone "255.in-addr.arpa" { type master; file "/opt/keexybox/bind/etc/db.255"; };
It is a DHCP server used by KeexyBox.
Check the lastest stable version of dhcpd: https://www.isc.org/downloads/
Download and extract source code of DHCPd:
cd /usr/src/ wget https://downloads.isc.org/isc/dhcp/4.4.2/dhcp-4.4.2.tar.gz tar xzf dhcp-4.4.2.tar.gz
Compile DHCPd:
cd dhcp-4.4.2 ./configure --prefix=/opt/keexybox/dhcpd make make install
Create file:
touch /opt/keexybox/dhcpd/etc/dhcpd.leases
Tor is the software to anonymize your Internet connection.
Install required packages:
apt-get install libevent-dev
Check the lastest stable version of tor: https://dist.torproject.org/
Download and extract source code of Tor:
cd /usr/src/ wget https://dist.torproject.org/tor-0.4.5.7.tar.gz tar xzf tor-0.4.5.7.tar.gz
Compile Tor:
cd tor-0.4.5.7/ ./configure --prefix=/opt/keexybox/tor make make install
Create a missing directory:
mkdir -p /opt/keexybox/tor/var/run
It is the Wifi Access Point software used by KeexyBox.
apt-get install libnl-3-dev libnl-genl-3-dev libssl-dev pkg-config
Check the lastest stable version of hostapd: http://w1.fi/hostapd/
Download and extract source code of Hostapd:
cd /usr/src/ wget http://w1.fi/releases/hostapd-2.9.tar.gz tar xzf hostapd-2.9.tar.gz
Prepare config file for compilation:
cd hostapd-2.9/hostapd/ cp defconfig .config
Edit .config
and uncomment :
CONFIG_ACS=y
Compile Hostapd:
make mkdir /opt/keexybox/hostapd make install DESTDIR=/opt/keexybox/hostapd
Create config directory:
mkdir /opt/keexybox/hostapd/etc
We explain here how to create KeexyBox archive for KeexyBox installation scripts.
Clone KeexyBox/installer from GitHub:
cd ~ git clone https://github.com/keexybox/installer mv installer keexybox-x.x.x
Create archives of extra softwares (that have been compiled and install above):
cd /opt/keexybox/ tar czf ~/keexybox-x.x.x/install_pkg/keexybox-bind.tar.gz bind tar czf ~/keexybox-x.x.x/install_pkg/keexybox-tor.tar.gz tor tar czf ~/keexybox-x.x.x/install_pkg/keexybox-dhcpd.tar.gz dhcpd tar czf ~/keexybox-x.x.x/install_pkg/keexybox-hostapd.tar.gz hostapd
And then create archive for KeexyBox Application:
tar czf ~/keexybox-x.x.x/install_pkg/keexybox-keexyapp.tar.gz \ --exclude keexyapp/.git \ --exclude keexyapp/tmp \ --exclude keexyapp/logs \ --exclude keexyapp/config/app.php \ --exclude keexyapp/src/Shell/scripts/config.py keexyapp
Create final archive:
tar czf ~/keexybox-x.x.x.tar.gz --exclude keexybox-x.x.x/.git keexybox-x.x.x
We explain here how to configure KeexyBox manually to get it work.
Run MySQL client:
mysql -u root -p
In MySQL:
CREATE DATABASE keexybox; GRANT ALL PRIVILEGES on keexybox.* to "keexybox"@'localhost' IDENTIFIED BY 'MyPassword'; CREATE DATABASE keexybox_blacklist; GRANT ALL PRIVILEGES on keexybox_blacklist.* to "keexybox"@'localhost' IDENTIFIED BY 'MyPassword'; CREATE DATABASE keexybox_logs; GRANT ALL PRIVILEGES on keexybox_logs.* to "keexybox"@'localhost' IDENTIFIED BY 'MyPassword';
You have to replace MyPassword
by you own database password.
Import Schema and Keexybox DB config:
mysql -u root -p keexybox < /opt/keexybox/keexyapp/config/schema/keexybox.sql mysql -u root -p keexybox_blacklist < /opt/keexybox/keexyapp/config/schema/keexybox_blacklist.sql mysql -u root -p keexybox_logs < /opt/keexybox/keexyapp/config/schema/keexybox_logs.sql mysql -u root -p keexybox < /opt/keexybox/keexyapp/config/schema/keexybox.config.sql
Copy config template file with replacement:
sed "s/CHANGE_DATABASE_KEEXYBOX_HOST/127.0.0.1/g" /opt/keexybox/keexyapp/config/app.template.php | sed "s/CHANGE_DATABASE_KEEXYBOX_USER/keexybox/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_PASSWORD/MyPassword/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_DATABASE/keexybox/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_BLACKLIST_HOST/127.0.0.1/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_BLACKLIST_USER/keexybox/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_BLACKLIST_PASSWORD/MyPassword/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_BLACKLIST_DATABASE/keexybox_blacklist/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_LOGS_HOST/127.0.0.1/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_LOGS_USER/keexybox/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_LOGS_PASSWORD/MyPassword/g" | sed "s/CHANGE_DATABASE_KEEXYBOX_LOGS_DATABASE/keexybox_logs/g" > /opt/keexybox/keexyapp/config/app.php
You have to replace MyPassword
by you own database password.
Create admin
account with password MyPassword
:
/opt/keexybox/keexyapp/bin/cake users UpdateAdminPassword MyPassword
Create default connection profile:
/opt/keexybox/keexyapp/bin/cake profiles ResetDefaultProfile
Generate certificate:
mkdir /opt/keexybox/ssl /opt/keexybox/keexyapp/bin/cake config certificate generate
Generate Apache configuration files:
/opt/keexybox/keexyapp/bin/cake config apache all
Enable modules on apache:
cd /etc/apache2/mods-enabled/ ln -s ../mods-available/rewrite.load ln -s ../mods-available/ssl.load
Start apache:
/etc/init.d/apache2 restart
Create logrotate configuration:
/opt/keexybox/keexyapp/bin/cake config logrotate all
Set sudoers:
/opt/keexybox/keexyapp/bin/cake config sudoers all /etc/init.d/sudo restart
Set permissions for KeexyBox:
/opt/keexybox/keexyapp/src/Shell/scripts/pre-startup-keexybox.sh
KeexyBox startup script:
cd /etc/init.d/ ln -s /opt/keexybox/keexyapp/src/Shell/scripts/init_keexybox keexybox
If you want to start KeexyBox on startup:
update-rc.d keexybox defaults
Access the KeexyBox's Web interface by the current IP address of your Raspberry. For example:
http://192.168.1.254:8001
Configure Network and DHCP:
Go to Advanced config
page. Example:
http://192.168.1.254:8001/config/advanced
In the section Generate configuration files
, Generate each of configuration files:
About KeexyBox Project: