FreeBSD Installation
FreeBSD 14.0+ using pkg utility.
System packages
sudo pkg updatesudo pkg install -y git gmake cmake wget pkgconf perl5 p5-App-cpanminussudo pkg install -y webp giflib jpeg-turbo png tiff libheif ImageMagick7 librsvg2 pngquantsudo pkg install -y postgresql18-server postgresql18-client redissudo pkg install -y libargon2 e2fsprogs-libuuid texlive-base texlive-texmfsudo pkg install -y nginx apache24 xorriso cdrkit-genisoimage transmission-cli
Perl modules
Install modules:
sudo cpanm Mojolicious EV Mojo::Pg Mojo::Redis DBD::Pgsudo cpanm GD Imager Imager::File::JPEG Imager::File::GIF Imager::File::PNG Imager::File::TIFF Imager::File::HEIFsudo cpanm Mojolicious::Plugin::LocaleTextDomainOO Locale::TextDomain::OO::Extractsudo cpanm Params::Classify Params::Util Params::Validate Crypt::Argon2 Crypt::PBKDF2 Crypt::Eksblowfish::Bcrypt CryptX Digest::SHA Digest::SHA1 App::bmkpasswd Bytes::Random::Secure::Tinysudo cpanm Clone Data::UUID UUID DateTime DateTime::TimeZone Date::Calc Date::Format Hash::Mergesudo cpanm Text::MultiMarkdown MojoX::MIME::Types IO::Compress::Gzip YAML::XSsudo cpanm MIME::Base64 MIME::Lite MIME::Types File::Spec File::MimeInfo Time::HiRessudo cpanm --force HTML::Parsersudo cpanm HTML::FormatText HTML::TreeBuilder Business::Tax::VAT::Validationsudo cpanm Session::Token Mojolicious::Plugin::Util::RandomString Mojolicious::Plugin::OAuth2 Crypt::OpenSSL::Bignum Crypt::OpenSSL::RSA Mojo::JWTsudo cpanm Mojolicious::Plugin::Captcha Mojolicious::Plugin::Mail Test::Harnesssudo cpanm Net::DNS::Resolver Net::IP Net::IDN::Encode
Imager::File::WEBP installation
cd /tmpfetch https://cpan.metacpan.org/authors/id/T/TO/TONYC/Imager-File-WEBP-0.005.tar.gztar xzf Imager-File-WEBP-0.005.tar.gzcd Imager-File-WEBP-0.005perl -pi -e 's/libopts => "-lwebpmux -lwebp",/libopts => "-L\/usr\/local\/lib -lwebpmux -lwebp",/' Makefile.PLperl Makefile.PL --incpath=/usr/local/include --libpath=/usr/local/libmakemake testsudo make install
Database
sudo /usr/local/etc/rc.d/postgresql oneinitdbsudo sysrc postgresql_enable=YES redis_enable=YESsudo service postgresql start && sudo service redis startsudo -u postgres createuser -P samizdatsudo -u postgres createdb -O samizdat -E UTF-8 -T template0 --locale=en_US.UTF-8 samizdat
Edit /usr/local/pgsql/data/pg_hba.conf, add: local samizdat samizdat scram-sha-256
Then: sudo service postgresql restart
Application
sudo mkdir -p /sites && cd /sitessudo git clone https://github.com/FAKEMedium/Samizdat.git && cd Samizdatsudo chown -R www:www /sites/Samizdatsudo -u www cp samizdat.dist.yml samizdat.yml && sudo -u www vi samizdat.ymlsudo -u www gmake fetchall && sudo -u www bin/samizdat migrate && sudo -u www gmake i18n
Optional Webpack frontend:
sudo pkg install -y node npm python3 vips
For single installation:
sudo -u www gmake webpackinitsudo -u www env SHARP_FORCE_GLOBAL_LIBVIPS=1 gmake webpack
For multiple sites (shared node_modules):
System-wide (requires root):
sudo mkdir -p /usr/local/share/samizdat && cd /usr/local/share/samizdatsudo cp /sites/Samizdat/package.json .sudo mkdir -p .npm-cachesudo env SHARP_FORCE_GLOBAL_LIBVIPS=1 HOME=/usr/local/share/samizdat npm_config_cache=/usr/local/share/samizdat/.npm-cache npm install
User-level (no root):
mkdir -p ~/samizdat-shared && cd ~/samizdat-sharedcp /sites/Samizdat/package.json .mkdir -p .npm-cacheenv SHARP_FORCE_GLOBAL_LIBVIPS=1 HOME=$(pwd) npm_config_cache=$(pwd)/.npm-cache npm install
Then in each site: gmake webpack (will auto-detect and link to shared node_modules)
Note: The SHARP_FORCE_GLOBAL_LIBVIPS=1 environment variable tells sharp to use the system-installed libvips instead of downloading prebuilt binaries, which are not available for BSD systems.
SSL cert (dev):
sudo -u www gmake cert
Usage
gmake debug- Dev server (https://localhost:3443)gmake serverstart/stop- Productiongmake static_all/en/sv- Generate content cachegmake i18n test routes- Dev tasksgmake webpack- Build assetsgmake iso- Build ISO filebin/samizdat migrate- DB migrations
Jails & Service
For jails: ensure network access, mount devfs, configure port forwarding.
Copy samizdat.rc to /usr/local/etc/rc.d/samizdat, then enable with: sudo chmod +x /usr/local/etc/rc.d/samizdat && sudo sysrc samizdat_enable=YES
Performance tuning in /etc/sysctl.conf:
kern.maxfiles=100000kern.maxfilesperproc=50000net.inet.tcp.sendspace=65536net.inet.tcp.recvspace=65536