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>
|
||||
|
||||
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.
|
||||
|
||||
[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
|
||||
- Install [elixir](https://elixir-lang.org/install.html)
|
||||
- (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`
|
||||
- Initialize db contents: `mix run -e Farside.Instances.sync`
|
||||
- Run Farside: `mix run --no-halt`
|
||||
- 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
|
||||
|
||||
<table>
|
||||
|
|
50
mix.exs
50
mix.exs
|
@ -1,16 +1,31 @@
|
|||
defmodule Farside.MixProject do
|
||||
use Mix.Project
|
||||
|
||||
@source_url "https://github.com/benbusby/farside.git"
|
||||
@version "0.1.1"
|
||||
@app :farside
|
||||
|
||||
def project do
|
||||
[
|
||||
app: :farside,
|
||||
version: "0.1.0",
|
||||
app: @app,
|
||||
version: @version,
|
||||
name: "farside",
|
||||
elixir: "~> 1.8",
|
||||
start_permanent: Mix.env() == :prod,
|
||||
deps: deps()
|
||||
source_url: @source_url,
|
||||
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
|
||||
|
||||
defp aliases do
|
||||
[]
|
||||
end
|
||||
|
||||
# Run "mix help compile.app" to learn about applications.
|
||||
def application do
|
||||
[
|
||||
|
@ -27,7 +42,32 @@ defmodule Farside.MixProject do
|
|||
{:plug_attack, "~> 0.4.2"},
|
||||
{:plug_cowboy, "~> 2.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
|
||||
|
|
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"},
|
||||
"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"},
|
||||
"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"},
|
||||
"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"},
|
||||
"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"},
|
||||
|
|
Loading…
Reference in a new issue