223 lines
6.1 KiB
Markdown
223 lines
6.1 KiB
Markdown
# Freedive
|
|
Dive into FreeBSD with `Freedive`!
|
|
|
|
Freedive emerges as an innovative standalone tool for FreeBSD,
|
|
offering a graphical user interface (GUI) that revolutionizes
|
|
the way systems are managed,
|
|
enabling both newcomers and experienced users
|
|
to administer their FreeBSD installations with ease.
|
|
|
|
This GUI, accessible through a mobile-friendly web interface,
|
|
democratizes the use of FreeBSD by allowing beginners
|
|
to engage with the operating system
|
|
without the need to delve into the complexities of the command-line shell.
|
|
Designed with responsiveness in mind,
|
|
Freedive's interface adapts seamlessly to various screen sizes,
|
|
ensuring that system administrators can perform essential tasks
|
|
from virtually any device, be it a smartphone, tablet, or desktop.
|
|
|
|
The intuitive design of Freedive's web interface lowers
|
|
the barrier to entry for managing FreeBSD systems,
|
|
making it more approachable for users
|
|
who may not be familiar with Unix-like environments.
|
|
By providing a full spectrum of
|
|
system management capabilities through its GUI,
|
|
Freedive empowers users to perform tasks
|
|
ranging from user account management to service configuration,
|
|
all without writing a single line of shell code.
|
|
|
|
Freedive stands as a testament to the versatility of FreeBSD,
|
|
extending its appeal beyond the traditional tech-savvy audience
|
|
to a broader range of users who can now leverage
|
|
the power of FreeBSD
|
|
with the convenience of a modern web-based interface.
|
|
|
|
## Features
|
|
Made by and for users of FreeBSD as their:
|
|
|
|
- Home lab
|
|
- Tailscale / Wireguard VPN
|
|
- Manage PF rules (firewall)
|
|
- Manage Jails via Bastille
|
|
- Network attached storage
|
|
- Samba shares
|
|
- Backups via Restic
|
|
- Manage ZFS datasets, snapshots and backups
|
|
- Personal/ public web server
|
|
- Manage domains and TLS certificates
|
|
- Host static sites
|
|
- Reverse proxy to any jail:port
|
|
|
|
Freedive works in immediate mode:
|
|
|
|
- Queries host, caches some results in memory
|
|
- No database except for acounts
|
|
- Executes commands when actions taken in UI
|
|
|
|
> Status: planning/alpha.
|
|
You can use Freedive to manage system services.
|
|
Package management coming soon.
|
|
Other features will be developed as time/help is available.
|
|
This is currently a hobby project and makes no guarantees
|
|
about what features will be implemented and when.
|
|
|
|
## Screenshots
|
|
![Services](https://brew.bsd.cafe/attachments/92821625-db44-41ce-8806-6c361f2160fb)
|
|
![Service details](https://brew.bsd.cafe/attachments/d9f27295-c537-42f8-ad08-8c8b3d63393f)
|
|
![Service commands](https://brew.bsd.cafe/attachments/6cafe055-68fd-41d9-90b7-812146d19e30)
|
|
|
|
|
|
## Quick Steps
|
|
|
|
### Get pre-built package
|
|
|
|
Try Freedive on FreeBSD 14.0-RELEASE and newer:
|
|
* amd64: [freedive-0.1.0.pkg](https://cdn.gyptazy.ch/files/amd64/freebsd/freedive/freedive-0.1.0.pkg) [hosted at gyptazy.ch]
|
|
* arm64: [freedive-0.1.0_arm64.pkg](https://cdn.gyptazy.ch/files/arm64/freebsd/freedive/freedive-0.1.0_arm64.pkg) [hosted at gyptazy.ch]
|
|
|
|
|
|
### Install package
|
|
|
|
Another solution directly leads into using the built package. This can be installed by running:
|
|
|
|
```
|
|
pkg install -U -y freedive-0.1.0.pkg
|
|
```
|
|
|
|
Next, edit the configuration at `/usr/local/etc/freedive/freedive.env`
|
|
and define following settings:
|
|
|
|
```
|
|
HOST="hostname"
|
|
BIND="ip-to-bind"
|
|
PORT=3443
|
|
```
|
|
|
|
Ensure that the host is set to the hostname you'll use
|
|
to access the service from browser.
|
|
For example, if you bind to the Tailscale/Wireguard IP,
|
|
use the hostname that points to this IP.
|
|
Port can be anything suitable in your environmet
|
|
that's open and accessible from your mobile/laptop.
|
|
|
|
Enable Freedive
|
|
|
|
- `service freedive enable`
|
|
|
|
Initialize Freedive
|
|
|
|
- `service freedive init`
|
|
|
|
Create an account for yourself
|
|
|
|
- `service freedive account_create`
|
|
|
|
> Accounts have full access to every part of the system via Freedive,
|
|
do NOT create accounts for people you do not trust to have root access
|
|
on this machine.
|
|
|
|
Start Freedive
|
|
|
|
- `service freedive start`
|
|
|
|
Check logs
|
|
|
|
- `tail -f /var/log/freedive/freedive.log`
|
|
|
|
|
|
Visit `https://hostname:port` from your browser and
|
|
log in with the account created above.
|
|
|
|
---
|
|
|
|
## Development
|
|
|
|
### Requirements
|
|
|
|
If you have `ports` active on your system, this step can be skipped.
|
|
If you have not installed `ports` (the `/usr/ports` directory is missing)
|
|
then you need to copy a file which is referenced and used
|
|
by Freedive when building its own package.
|
|
|
|
Run the following commands:
|
|
|
|
```
|
|
mkdir -p /usr/ports/Keywords/
|
|
curl -O /usr/ports/Keywords/ https://raw.githubusercontent.com/freebsd/freebsd-ports/main/Keywords/sample.ucl
|
|
```
|
|
|
|
You also want to setup your own doas account (passwordless) by running:
|
|
|
|
```
|
|
echo "permit nopass <USERNAME> as root" >> /usr/local/etc/doas.conf
|
|
```
|
|
|
|
Freedive will only function as expected if `doas` is installed
|
|
and configured to allow the user running the server
|
|
to execute commands as root without requiring a password.
|
|
|
|
|
|
### Development Environment
|
|
|
|
Install build tools and depedencies
|
|
```
|
|
pkg install -y ca_root_nss doas elixir gcc git gmake inotify-tools
|
|
```
|
|
|
|
Get code
|
|
```
|
|
git clone https://brew.bsd.cafe/hiway/freedive.git
|
|
cd freedive
|
|
```
|
|
|
|
Setup dev environment
|
|
```
|
|
mix setup
|
|
```
|
|
|
|
> It is safe to ignore warning about `mix_freebsd_pkg` requiring Elixir 1.6, it will go away
|
|
> when Elixir 1.6 becomes available in quarterly packages.
|
|
|
|
|
|
### Development Server
|
|
|
|
Freedive dev server can be started by running `mix` or inside `IEx` by executing:
|
|
|
|
```
|
|
mix phx.server
|
|
|
|
# or
|
|
|
|
iex -S mix phx.server
|
|
```
|
|
|
|
Now you can visit [`localhost:4000`](http://localhost:4000) from your browser.
|
|
|
|
> Note:
|
|
> Registering accounts via browser is enabled in dev environment.
|
|
|
|
Visit [/users/register](http://localhost:4000/users/register) to create an account.
|
|
Then visit [/dev/mailbox](http://localhost:4000/dev/mailbox) to confirm the account.
|
|
|
|
Now, you can ue these credentials to log in and explore Freedive.
|
|
|
|
|
|
### Packaging
|
|
|
|
Create and build a distributable `.pkg` file that can be installed on target machines.
|
|
|
|
Run the following command in `freedive` directory:
|
|
|
|
```
|
|
mix package
|
|
```
|
|
|
|
This creates the file `freedive-0.x.x.pkg` within your project directory.
|
|
|
|
|
|
## Chat / Community
|
|
|
|
The chat and community are on Matrix hosted at the BSD.cafe:
|
|
* #BSDCafe:bsd.cafe
|
|
|
|
You can join by clicking: https://matrix.to/#/#BSDCafe:bsd.cafe
|