GithubHelp home page GithubHelp logo

hiway / freedive Goto Github PK

View Code? Open in Web Editor NEW
1.0 0.0 0.0 668 KB

Dive into FreeBSD

License: BSD 2-Clause "Simplified" License

Elixir 31.22% CSS 0.02% JavaScript 1.23% Shell 1.18% HTML 0.20% SCSS 66.14%

freedive's Introduction

Freedive

Dive into FreeBSD

Freedive turns your fresh, vanilla FreeBSD install into a file server and an app host.

Status: Planning - features mentioned in this document might make it to v1.0, or they might not.

Features

  • System
    • Preferences
    • Packages
    • Services
    • Secrets
    • Security
    • Alerts
    • Logs
    • Metrics
    • Backups
    • Software update
  • Cluster
    • Current node
    • Connected nodes
    • Manage nodes
  • Network
    • Local
    • Private
    • Public
    • Domains
    • Endpoints
  • Data
    • Local
    • Remote
    • Share
    • Sync
  • Compute
    • Apps
    • Services
    • Functions
    • Tasks

Develop

Start Freedive server:

  • Run mix setup to install and setup dependencies
  • Start Phoenix endpoint with mix phx.server or inside IEx with iex -S mix phx.server

Now you can visit localhost:4000 from your browser.

Deploy

Create package

mix package.freebsd

Install

pkg install freedive-x.x.x.pkg

Initialize

service freedive enable
service freedive init

Configure

vi /usr/local/etc/freedive/freedive.env

Modify HOST, BIND and PORT variables to taste.

Start

service freedive start

Access

Visit https://localhost:6443 from your browser from same machine, or https://<HOST>:<PORT> from remote machine.

freedive's People

Contributors

hiway avatar

Stargazers

Kyle Taylor avatar

freedive's Issues

Create BE snapshot if name starts with `@`

BE snapshots allow less clutter while recording all steps of a long system setup or modification process. Create snapshots by prepending the BE name entered in search bar with @.

The screenshot below is made with v0.1.0, the button should read "Snapshot BE: default" - where "default" is the current BE.

If full snapshot name is provided, such as be-name@snapshot-name, then the button should read "Snapshot BE: be-name.

image

Notification API

Minimal notification API added in #af7a5de, add further enhancements:

  • table to store notifications
    • title
    • message
    • priority
    • seen/unseen
    • was sent via pushover
    • pushover response
  • phoenix channel broadcast
  • notification liveview page to show seen/new notifications
  • notification icon liveview
  • insert notification icon liveview in navbar

Improve BE workflow

Use ability to snapshot, mount and jail BEs to improve workflow as a safety-net when tinkering with or deploying to a remote server with non-trivial access to console.

  • Select fallback snapshot (auto-create BE from snapshot and mark as default)
  • Create snapshots after each change to the system (freebsd-update, pkg install/remove, etc.)
  • Mark current BE for next boot and reboot to confirm everything works
  • Make current BE default if all ok, else reboot into fallback BE
  • Mount / jail BE to perform freebsd-update from gui
  • Mount / jail BE to perform freebsd-upgrade from gui
  • #14
    • Display current and next BEs on reboot screen

Use `restic` to backup configuration and data

  • LiveView at /backups
  • Link in navbar
  • Check if restic exists
    • Offer to install
  • Configure repo using Backblaze B2 credentials in freedive.toml
    • Check if repo exists, create if not
    • If repo exists, offer to restore data and configuration
  • Backup freedive.toml, tls.key, tls.crt, freedive.db and any other files containing user config/data

Button to set any BE as default

As of v0.1.0, only a BE that is current can be set as default.

Tasks:

  • Add a button with BE name to set it as default (fallback)

Create `package-remote.sh`

Build packages on different FreeBSD versions and machine architectures.

The script will expect ssh host and path on remote machine that has development environment set up.

Move `Reboot` out of BE to separate screen

In 0.1.0, clicking Reboot next to BE name will immediately restart the host, no questions asked.

  • Rebooting a host should be a considered action, a little friction is necessary
  • A separate screen allows for more context to be displayed before restarting as a part of any workflow
    • Next Boot Environment (default or temporary)
    • Current BE
    • Default BE
    • Uptime
    • Anything else that may be relevant

Tasks:

  • Create LiveView at /reboot
  • Link from navigation
  • Add reboot and confirmation buttons
  • Add context [ afeeae7 ]
  • Display "Rebooting...", reconnect

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.