Getting Started
Supported Linux distributions
The installer detects your distribution from /etc/os-release (or /etc/redhat-release / /etc/debian_version as a fallback) and sorts it into one of three families, each handled by its own install path:
- RedHat based — Red Hat, Fedora, CentOS, AlmaLinux, Rocky Linux, Mageia
- Debian based — Debian, Ubuntu, Kubuntu, Edubuntu, Linux Mint
- Arch Linux
If your distribution's name doesn't match a known pattern, the installer falls back to the RedHat path — so a truly unrecognized distribution will not simply refuse to run, but it also hasn't been validated against that path either. Stick to one of the distributions above unless you're prepared to troubleshoot package-manager differences yourself.
Within the Debian family, the installer branches further by version — for example it fixes up the universe repository on Ubuntu 18.04 and newer, and switches libcurl3/libcurl4 package names around Ubuntu 20 and Debian 10/13 as those distributions renamed the package. This is normal; it doesn't require any input from you.
Hardware and storage expectations
The installer does not enforce a specific CPU or RAM minimum. What it does care about is where images are stored.
By default, images live in /images on the server, and every byte captured or deployed passes through it. The install wizard asks for this location and defaults to /images if you accept it. Give this its own volume rather than letting it share the root filesystem — image capture is disk-I/O heavy and unbounded in a way the rest of the OS isn't, and a full /images volume is a much less disruptive failure than a full root filesystem.
More importantly: the imaging server re-exports /images to every client over NFS (the installer writes this export itself, unless you pass --no-exportbuild). That means whatever backs /images is read and written twice over the network for every image transfer — once between the storage device and the FOG server, and again between the FOG server and the client doing the capture or deploy. If /images is itself backed by network storage, you've doubled the network cost of every byte:
- A plain NFS or SMB/CIFS share mounted as
/imagesmeans every image byte crosses the network to reach the FOG server, then crosses the network again on its way to the client. Two network hops for one transfer. - An iSCSI LUN presented to the FOG server as a local block device avoids this. The FOG server sees it as ordinary local disk (formats it, mounts it, owns the filesystem), so only the FOG-server-to-client leg goes over the network — the same as if
/imageswere on local disks.
If you need centralized or shared storage behind /images, prefer iSCSI (or another block-level protocol) over a file-level network share for this reason.
Running the installer
Obtain the Blue View Imaging distribution from Blue View, unpack it on the server, then run the installer as root from its bin directory:
cd /path/to/blueview-imaging/bin
sudo ./installfog.sh
The installer must run as root — it refuses to start otherwise. It walks you through an interactive Q&A: network interface, IP configuration, installation type (normal server vs. storage node), image storage location, whether to use FOG's own DHCP service, and internationalization support. Confirm the summary it prints before it touches anything — it explicitly overwrites existing configuration for the services it manages (Apache/httpd, PXE/TFTP, and NFS, plus DHCP if you opt into it).
For a scripted or repeatable install, -y (or --autoaccept) accepts every default and skips the prompts. Run ./installfog.sh --help for the full flag list, including options to skip the DHCP/TFTP/NFS build steps individually, bring your own SSL/CA material, or point at a different document root.
What the installer sets up
A normal-server install configures:
- The web UI — Apache (or httpd) with PHP and a MariaDB/MySQL database, serving the management console at
http://<server-ip>/fog/by default (the path is configurable via--webroot). The first-run login is usernamefog, passwordpassword— change it immediately after logging in. - The database — created and seeded with the FOG schema.
- TFTP — the PXE boot files (iPXE binaries, boot menus) are staged into the TFTP root so PXE clients can retrieve them.
- NFS —
/images(and itsdevsubdirectory used for freshly captured images) is exported so clients can read and write images during capture and deploy.
DHCP is not set up by default. During the interactive install you're asked "Would you like to use the FOG server for DHCP service?" and the default answer is no. If you decline (or accept the default), FOG installs the imaging pieces only and expects your existing DHCP infrastructure to point PXE clients at this server: set DHCP option 66 (next-server) to this server's IP address, and option 67 (filename/bootfile) to the appropriate boot file for the client's firmware. The installer prints these exact instructions at the end of a no-DHCP install as a reminder.
Linux Mint and the PHP repository
On Ubuntu, the installer adds the ondrej/php and ondrej/apache2 PPAs to get a PHP version newer than what the distro repositories ship. On Linux Mint 19 and later, it deliberately does not do this.
The reason is practical, not political: on Mint, add-apt-repository isn't the plain Debian/Ubuntu tool — it's the mintsources GUI wrapper. Run headless (as the installer always is, over SSH or in a script), that GUI wrapper hangs waiting for a display that will never appear. Mint 19+ tracks an Ubuntu 18.04+ base whose own repository PHP is already current enough that Ubuntu itself stopped needing the PPA at that point, so skipping it on Mint costs nothing — and it avoids an installer that silently freezes partway through the repository-setup step. Older Mint releases (pre-19) don't get this exemption and will attempt the PPA add.
If your install freezes right after the "Adjusting repository (can take a long time for cleanup)" line and you're on a Mint release older than 19, this is that GUI wrapper hanging — the fix is to upgrade to Mint 19 or later (or install on Ubuntu directly), not to wait it out.