Allow compiling to standalone binary via bakeware
This introduces a simple way of compiling Farside to a somewhat portable, standalone binary. The resulting binary isn't completely portable since it depends on the C runtime of the host system. As a result, it's advised to use systems with older library versions when compiling for true portability. Closes #50 Co-authored-by: Jason Clark <mithereal@gmail.com>
This commit is contained in:
parent
b75355ed75
commit
9eb11ed264
3 changed files with 76 additions and 5 deletions
29
README.md
29
README.md
|
@ -18,6 +18,17 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Contents
|
||||||
|
1. [About](#about)
|
||||||
|
2. [Demo](#demo)
|
||||||
|
3. [How It Works](#how-it-works)
|
||||||
|
4. [Cloudflare](#regarding-cloudflare)
|
||||||
|
5. [Development](#development)
|
||||||
|
1. [Compiling](#compiling)
|
||||||
|
1. [Environment Variables](#environment-variables)
|
||||||
|
|
||||||
|
## About
|
||||||
|
|
||||||
A redirecting service for FOSS alternative frontends.
|
A redirecting service for FOSS alternative frontends.
|
||||||
|
|
||||||
[Farside](https://farside.link) provides links that automatically redirect to
|
[Farside](https://farside.link) provides links that automatically redirect to
|
||||||
|
@ -178,11 +189,29 @@ goes against what Farside is trying to solve. Use at your own discretion.
|
||||||
## Development
|
## Development
|
||||||
- Install [elixir](https://elixir-lang.org/install.html)
|
- Install [elixir](https://elixir-lang.org/install.html)
|
||||||
- (on Debian systems) Install [erlang-dev](https://packages.debian.org/sid/erlang-dev)
|
- (on Debian systems) Install [erlang-dev](https://packages.debian.org/sid/erlang-dev)
|
||||||
|
|
||||||
|
To run Farside without compiling, you can perform the following steps:
|
||||||
|
|
||||||
- Install dependencies: `mix deps.get`
|
- Install dependencies: `mix deps.get`
|
||||||
- Initialize db contents: `mix run -e Farside.Instances.sync`
|
- Initialize db contents: `mix run -e Farside.Instances.sync`
|
||||||
- Run Farside: `mix run --no-halt`
|
- Run Farside: `mix run --no-halt`
|
||||||
- Uses localhost:4001
|
- Uses localhost:4001
|
||||||
|
|
||||||
|
### Compiling
|
||||||
|
|
||||||
|
You can create a standalone Farside app using the steps below. In the example, the
|
||||||
|
Farside executable is copied to `/usr/local/bin`, but can be moved to any preferred
|
||||||
|
destination. Note that the executable still depends on the C runtime of the machine
|
||||||
|
it is built on, so if you want a more portable binary, you should build Farside on a
|
||||||
|
system with older library versions.
|
||||||
|
|
||||||
|
```
|
||||||
|
MIX_ENV=cli && mix deps.get && mix release
|
||||||
|
cp _build/cli/rel/bakeware/farside /usr/local/bin
|
||||||
|
sudo chmod +x /usr/local/bin/farside
|
||||||
|
farside
|
||||||
|
```
|
||||||
|
|
||||||
### Environment Variables
|
### Environment Variables
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
|
50
mix.exs
50
mix.exs
|
@ -1,16 +1,31 @@
|
||||||
defmodule Farside.MixProject do
|
defmodule Farside.MixProject do
|
||||||
use Mix.Project
|
use Mix.Project
|
||||||
|
|
||||||
|
@source_url "https://github.com/benbusby/farside.git"
|
||||||
|
@version "0.1.1"
|
||||||
|
@app :farside
|
||||||
|
|
||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
app: :farside,
|
app: @app,
|
||||||
version: "0.1.0",
|
version: @version,
|
||||||
|
name: "farside",
|
||||||
elixir: "~> 1.8",
|
elixir: "~> 1.8",
|
||||||
start_permanent: Mix.env() == :prod,
|
source_url: @source_url,
|
||||||
deps: deps()
|
start_permanent: Mix.env() == :prod || Mix.env() == :cli,
|
||||||
|
deps: deps(),
|
||||||
|
aliases: aliases(),
|
||||||
|
description: description(),
|
||||||
|
package: package(),
|
||||||
|
releases: [{@app, release()}],
|
||||||
|
preferred_cli_env: [release: :cli]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp aliases do
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
|
||||||
# Run "mix help compile.app" to learn about applications.
|
# Run "mix help compile.app" to learn about applications.
|
||||||
def application do
|
def application do
|
||||||
[
|
[
|
||||||
|
@ -27,7 +42,32 @@ defmodule Farside.MixProject do
|
||||||
{:plug_attack, "~> 0.4.2"},
|
{:plug_attack, "~> 0.4.2"},
|
||||||
{:plug_cowboy, "~> 2.0"},
|
{:plug_cowboy, "~> 2.0"},
|
||||||
{:quantum, "~> 3.0"},
|
{:quantum, "~> 3.0"},
|
||||||
{:cubdb, "~> 2.0.1"}
|
{:cubdb, "~> 2.0.1"},
|
||||||
|
{:bakeware, "~> 0.2.4"}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp description() do
|
||||||
|
"A redirecting service for FOSS alternative frontends."
|
||||||
|
end
|
||||||
|
|
||||||
|
defp package() do
|
||||||
|
[
|
||||||
|
name: "farside",
|
||||||
|
files: ["lib", "mix.exs", "README*"],
|
||||||
|
maintainers: ["Ben Busby"],
|
||||||
|
licenses: ["MIT"],
|
||||||
|
links: %{"GitHub" => "https://github.com/benbusby/farside"}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp release() do
|
||||||
|
[
|
||||||
|
overwrite: true,
|
||||||
|
cookie: "#{@app}_cookie",
|
||||||
|
quiet: true,
|
||||||
|
steps: [:assemble, &Bakeware.assemble/1],
|
||||||
|
strip_beams: Mix.env() == :cli
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
2
mix.lock
2
mix.lock
|
@ -1,10 +1,12 @@
|
||||||
%{
|
%{
|
||||||
|
"bakeware": {:hex, :bakeware, "0.2.4", "0aaf49b34f4bab2aa433f9ff1485d9401e421603160abd6d269c469fc7b65212", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "7b97bcf6fbeee53bb32441d6c495bf478d26f9575633cfef6831e421e86ada6d"},
|
||||||
"certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"},
|
"certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"},
|
||||||
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
|
"cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"},
|
||||||
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
"cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"},
|
||||||
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
|
"cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"},
|
||||||
"crontab": {:hex, :crontab, "1.1.11", "4028ced51b813a5061f85b689d4391ef0c27550c8ab09aaf139e4295c3d93ea4", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "ecb045f9ac14a3e2990e54368f70cdb6e2f2abafc5bc329d6c31f0c74b653787"},
|
"crontab": {:hex, :crontab, "1.1.11", "4028ced51b813a5061f85b689d4391ef0c27550c8ab09aaf139e4295c3d93ea4", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "ecb045f9ac14a3e2990e54368f70cdb6e2f2abafc5bc329d6c31f0c74b653787"},
|
||||||
"cubdb": {:hex, :cubdb, "2.0.1", "24cab8fb4128df704c52ed641f5ed70af352f7a3a80cebbb44c3bbadc3fd5f45", [:mix], [], "hexpm", "57cf25aebfc34f4580d9075da06882b4fe3e0739f5353d4dcc213e9cc1b10cdf"},
|
"cubdb": {:hex, :cubdb, "2.0.1", "24cab8fb4128df704c52ed641f5ed70af352f7a3a80cebbb44c3bbadc3fd5f45", [:mix], [], "hexpm", "57cf25aebfc34f4580d9075da06882b4fe3e0739f5353d4dcc213e9cc1b10cdf"},
|
||||||
|
"elixir_make": {:hex, :elixir_make, "0.7.6", "67716309dc5d43e16b5abbd00c01b8df6a0c2ab54a8f595468035a50189f9169", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}], "hexpm", "5a0569756b0f7873a77687800c164cca6dfc03a09418e6fcf853d78991f49940"},
|
||||||
"gen_stage": {:hex, :gen_stage, "1.1.2", "b1656cd4ba431ed02c5656fe10cb5423820847113a07218da68eae5d6a260c23", [:mix], [], "hexpm", "9e39af23140f704e2b07a3e29d8f05fd21c2aaf4088ff43cb82be4b9e3148d02"},
|
"gen_stage": {:hex, :gen_stage, "1.1.2", "b1656cd4ba431ed02c5656fe10cb5423820847113a07218da68eae5d6a260c23", [:mix], [], "hexpm", "9e39af23140f704e2b07a3e29d8f05fd21c2aaf4088ff43cb82be4b9e3148d02"},
|
||||||
"hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"},
|
"hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"},
|
||||||
"httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"},
|
"httpoison": {:hex, :httpoison, "1.8.2", "9eb9c63ae289296a544842ef816a85d881d4a31f518a0fec089aaa744beae290", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "2bb350d26972e30c96e2ca74a1aaf8293d61d0742ff17f01e0279fef11599921"},
|
||||||
|
|
Loading…
Reference in a new issue