FoolFuuka/Install/Ubuntu16

This guide was written by ATC of desuarchive, and is designed for Debian/Ubuntu Linux servers. This guide is designed for Ubuntu 16.04 LTS servers (xenial).

Work in progress.

PHP7 Dependencies
We actually use PHP 7 now so here are the known dependencies (substitute php7.2 for your favorite point version):

apt-get install php7.2-cli php7.2-fpm php7.2-bcmath php7.2-json php7.2-opcache php7.2-readline php7.2-curl php7.2-mysql php7.2-mbstring php7.2-gd php7.2-zip php7.2-xml apt-get install git nginx percona-server-server-5.7 imagemagick maven openjdk-9-jdk-headless redis-server apt-get install percona-server-tokudb-5.7

php7.2-pdo is also required, but php7.2-mysql should bring it in as a dependency.

Prepare things
apt-get update apt-get upgrade

Add the keys for HipHop Virtual Machine
from docs.hhvm.com sudo apt-get install software-properties-common sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xB4112585D386EB94 sudo add-apt-repository &quot;deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main&quot;

Add repo for Percona Server for MySQL 5.7
from www.percona.com

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb

Add repo for NGINX Stable
from nginx.org

wget https://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key sudo add-apt-repository &quot;deb http://nginx.org/packages/ubuntu/ $(lsb_release -sc) nginx&quot;

Add repo for sphinxsearch
from sphinxsearch.com sudo add-apt-repository ppa:builds/sphinxsearch-rel22

Install all the needed packages.
Nginx, HHVM, PHP5 Cli, PHP5 Curl, MariaDB, Maven (includes java), Sphinxsearch

sudo apt-get update sudo apt-get install git nginx hhvm percona-server-server-5.7 percona-server-tokudb-5.7 imagemagick maven openjdk-9-jdk-headless redis-server sphinxsearch

Install composer for downloading FoolFuuka dependencies.
from getcomposer.org curl -sS https://getcomposer.org/installer | php

Move composer to bin
sudo mv composer.phar /usr/local/bin/composer

Edit HHVM config to use a unix socket.
sudo mkdir /var/run/hhvm/ sudo chown www-data:www-data /var/run/hhvm/ sudo nano /etc/hhvm/server.ini Then remove the line starting with hhvm.server.port, and in its place add the following one:

hhvm.server.file_socket=/var/run/hhvm/hhvm.sock

Enable the hhvm service.
sudo systemctl enable hhvm

Download FoolFuuka and install dependencies.
cd /var/www/ git clone https://github.com/pleebe/FoolFuuka.git foolfuuka cd foolfuuka composer dump-autoload --optimize composer install Choose 'Y' to 3rd party assets.

Install Foolfuuka Plugins
You may need to find the repo on their github if their site doesn't work: https://github.com/FoolCode

cd /var/www/foolfuuka/app/foolz/foolframe/plugins mkdir foolz cd foolz git clone https://github.com/pleebe/foolframe-plugin-articles.git

cd /var/www/foolfuuka/app/foolz/foolfuuka/plugins mkdir foolz cd foolz git clone https://github.com/pleebe/foolfuuka-plugin-board-statistics.git git clone https://github.com/FoolCode/foolfuuka-plugin-dice-roll.git git clone https://github.com/pleebe/foolfuuka-plugin-intel-share.git git clone https://github.com/pleebe/foolfuuka-plugin-popup-report.git git clone https://github.com/FoolCode/foolfuuka-plugin-quests.git git clone https://github.com/pleebe/foolfuuka-plugin-spam-guard.git git clone https://github.com/pleebe/foolfuuka-plugin-thread-chunk.git git clone https://github.com/pleebe/foolfuuka-plugin-adverts.git git clone https://github.com/pleebe/foolfuuka-plugin-external-links.git git clone https://github.com/pleebe/foolfuuka-plugin-fortune.git git clone https://github.com/pleebe/foolfuuka-plugin-cloudflare-cache-purge.git git clone https://github.com/pleebe/foolfuuka-plugin-table.git

Set Permissions and Group for FoolFuuka Directory
sudo mkdir /var/www/foolfuuka/public/foolfuuka/boards/ sudo chown -Rf www-data:www-data /var/www/foolfuuka sudo chmod 777 /var/www/foolfuuka/public/foolfuuka/boards/

Install hhvm with nginx
Change the user in /etc/nginx/nginx.conf to www-data

Configure Nginx to host foolfuuka
Create this file

Disable transparent_hugepage
Add this to your /etc/rc.local file su -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' &

sudo nano /etc/default/grub

append to, then save the file

sudo update-grub

edit Percona to use utf8mb4 for correct unicode processing
Enable toku (Find and Uncomment the load module)

ps-admin --enable-tokudb -u root -p You may need to run that command again. Check the output to verify.

sudo systemctl stop mysql sudo reboot

Create the database and install Foolfuuka user accounts.
sudo mysql_secure_installation mysql -u root -p SET GLOBAL default_storage_engine=TokuDB; SET GLOBAL log_bin_trust_function_creators = 1; CREATE USER 'asagi'@'localhost' IDENTIFIED BY 'pass'; CREATE USER 'foolfuuka'@'localhost' IDENTIFIED BY 'pass'; CREATE USER 'sphinx'@'localhost' IDENTIFIED BY 'pass'; CREATE DATABASE asagi DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; CREATE DATABASE foolfuuka DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON `asagi`. * TO 'asagi'@'localhost'; GRANT ALL PRIVILEGES ON `asagi`. * TO 'foolfuuka'@'localhost'; GRANT ALL PRIVILEGES ON `foolfuuka`. * TO 'foolfuuka'@'localhost'; GRANT SELECT ON `asagi`.* TO 'sphinx'@'localhost'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, TRIGGER, SHOW VIEW ON `asagi`.`index_counters` TO 'sphinx'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; exit

Install and compile Asagi from source.
sudo adduser asagi sudo su asagi cd ~ git clone https://github.com/desuarchive/asagi.git cd asagi mvn package assembly:single mv target/asagi-0.4.0-SNAPSHOT-full.jar ./asagi.jar

Configure Asagi
nano asagi.json

Insert the following JSON into that file:

{"settings": { "dumperEngine": "DumperJSON", "sourceEngine": "YotsubaJSON",

"boardSettings": { "default": { "engine": "Mysql", "database": "asagi", "host": "localhost", "username": "asagi", "password": "pass", "charset": "utf8mb4", "path": "/var/www/foolfuuka/public/foolfuuka/boards/", "useOldDirectoryStructure": false, "webserverGroup": "www-data", "thumbThreads": 3, "mediaThreads": 0, "newThreadsThreads": 3, "deletedThreadsThresholdPage": 8, "refreshDelay": 30, "throttleAPI": true, "throttleURL": "a.4cdn.org", "throttleMillisec": 11100,

"threadRefreshRate": 10, "pageSettings": [ {"delay": 30, "pages": [0, 1]}, {"delay": 500, "pages": [2, 3, 4, 5, 6, 7, 8]}, {"delay": 30, "pages": [9, 10]} ]   },

"3": {},   "a": {}, "aco": {}, "adv": {}, "an": {}, "asp": {}, "b": {}, "biz": {}, "c": {}, "cgl": {}, "ck": {}, "cm": {}, "co": {}, "d": {}, "diy": {}, "e": {}, "f": {}, "fa": {}, "fit": {}, "g": {}, "gd": {}, "gif": {}, "h": {}, "hc": {}, "hm": {}, "his": {}, "hr": {}, "i": {}, "ic": {}, "int": {}, "jp": {}, "k": {}, "lgbt": {}, "lit": {}, "m": {}, "mlp": {}, "mu": {}, "n": {}, "news": {}, "o": {}, "out": {}, "p": {}, "po": {}, "pol": {}, "qa": {}, "qst": {}, "r": {}, "r9k": {}, "s": {}, "s4s": {}, "sci": {}, "soc": {}, "sp": {}, "t": {}, "tg": {}, "toy": {}, "trash": {}, "trv": {}, "tv": {}, "u": {}, "v": {}, "vg": {}, "vp": {}, "vr": {}, "w": {}, "wg": {}, "wsg": {}, "wsr": {}, "x": {}, "y": {} } }}

Start asagi (There is a better way to do this).
Maybe we should use systemd for it...

UseParallelGC adds Parallelization to the garbage collector, which really helps for Java.

screen java -XX:+UseParallelGC -XX:+UseParallelOldGC -verbose:gc -jar asagi.jar

ATC of Desuarchive prefers these parameters, which have two customizations.


 * 1) For the first parameter, Java by default will use 1/4th your system memory, so you can set your own hard memory roof to reduce usage or increase it. He used.
 * 2) * If you aren't archiving more than 8 boards, this probably won't be an issue that you need to deal with.
 * 3) The permsize is about the permanent generation objects: depends on your heap size.
 * 4) * This setting is probably related to how many boards are on Desuarchive, but Sunako doesn't had that sort of issue.

screen java -Xmx6144m -XX:+UseParallelGC -XX:+UseParallelOldGC -verbose:gc -XX:MaxPermSize=512m -jar asagi.jar

Install FoolFuuka
Now, Install FoolFuuka at the website using foolfuuka credentials Then, Configure asagi as the database and remove the table prefix from FoolFuuka.

The installer is quite self explanatory, just make sure to remove the Boards prefix.

Also make sure to install imagemagick and set the path in the config to it.

Add boards, Configure Sphinx
To configure Sphinx Search, take the following links:

http://IP/admin -> Search -> Generate Config. http://IP/admin -> Boards -> Edit -> Check Use SphinxSearch as search engine. On the Search panel, change the working directory (on Ubuntu) to the following: /var/lib/sphinxsearch

Start Sphinxsearch
sudo nano /etc/default/sphinxsearch Change the following line from START=no to START=yes Save and run the following command sudo /etc/init.d/sphinxsearch start

Right-click and copy this config out of Foolfuuka and add your MySQL database information for asagi. Change the following line from pid_file = /var/lib/sphinxsearch/searchd.pid to pid_file = /var/run/sphinxsearch/searchd.pid

Then, paste this to

If anything errors, kill any running instance of asagi and restart it

Build the indexes
sudo indexer *_ancient --rotate sudo indexer *_main --rotate sudo indexer *_delta --rotate

Configure Crontab
sudo crontab -e @hourly sudo -u sphinxsearch /usr/bin/indexer --rotate *_delta > /dev/null @daily sudo -u sphinxsearch /usr/bin/indexer --rotate *_main > /dev/null @monthly sudo -u sphinxsearch /usr/bin/indexer --rotate *_ancient > /dev/null

Adding Archives
Inject your sql file into the asagi database (assuming that your sql file is called "dump.sql"): mysql -u root -p asagi < dump.sql

Then, in the admin panel, simply add the board that corresponds to the board you injected.

Extra configuration
Depending on which distro you use, some configs might need to be changed.

Fixing thumbnail creation
Foolfuuka might not be able to generate thumbnails for images to be posted. If so, check: $ whereis convert convert: /usr/bin/convert /usr/share/man/man1/convert.1.gz and make sure it is the same value in Admin panel -> general -> Imagemagick Convert

Enable Redis Cache
<!-- Oddities: Create /etc/tmpfiles.d/mysql.conf