Deploying to gh-pages from @ msfjarvis/adnix-rs@2c4d1b2c18 🚀

This commit is contained in:
Harsh Shandilya 2024-04-16 17:24:45 +00:00
commit 309ff559f9
8 changed files with 2644 additions and 0 deletions

314
adnix-installer.ps1.txt Normal file
View File

@ -0,0 +1,314 @@
# Licensed under the MIT license
# <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
<#
.SYNOPSIS
The installer for adnix 0.4.10
.DESCRIPTION
This script detects what platform you're on and fetches an appropriate archive from
https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10
then unpacks the binaries and installs them to $env:CARGO_HOME\bin ($HOME\.cargo\bin)
It will then add that dir to PATH by editing your Environment.Path registry key
.PARAMETER ArtifactDownloadUrl
The URL of the directory where artifacts can be fetched from
.PARAMETER NoModifyPath
Don't add the install directory to PATH
.PARAMETER Help
Print help
#>
param (
[Parameter(HelpMessage = "The URL of the directory where artifacts can be fetched from")]
[string]$ArtifactDownloadUrl = 'https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10',
[Parameter(HelpMessage = "Don't add the install directory to PATH")]
[switch]$NoModifyPath,
[Parameter(HelpMessage = "Print Help")]
[switch]$Help
)
$app_name = 'adnix'
$app_version = '0.4.10'
$receipt = @"
{"binaries":["CARGO_DIST_BINS"],"install_prefix":"AXO_CARGO_HOME","provider":{"source":"cargo-dist","version":"0.11.1"},"source":{"app_name":"adnix","name":"adnix-rs","owner":"msfjarvis","release_type":"github"},"version":"0.4.10"}
"@
$receipt_home = "${env:LOCALAPPDATA}\adnix"
function Install-Binary($install_args) {
if ($Help) {
Get-Help $PSCommandPath -Detailed
Exit
}
Initialize-Environment
# Platform info injected by cargo-dist
$platforms = @{
"x86_64-pc-windows-msvc" = @{
"artifact_name" = "adnix-x86_64-pc-windows-msvc.zip"
"bins" = "adnix.exe"
"zip_ext" = ".zip"
}
}
$fetched = Download "$ArtifactDownloadUrl" $platforms
# FIXME: add a flag that lets the user not do this step
Invoke-Installer $fetched "$install_args"
}
function Get-TargetTriple() {
try {
# NOTE: this might return X64 on ARM64 Windows, which is OK since emulation is available.
# It works correctly starting in PowerShell Core 7.3 and Windows PowerShell in Win 11 22H2.
# Ideally this would just be
# [System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture
# but that gets a type from the wrong assembly on Windows PowerShell (i.e. not Core)
$a = [System.Reflection.Assembly]::LoadWithPartialName("System.Runtime.InteropServices.RuntimeInformation")
$t = $a.GetType("System.Runtime.InteropServices.RuntimeInformation")
$p = $t.GetProperty("OSArchitecture")
# Possible OSArchitecture Values: https://learn.microsoft.com/dotnet/api/system.runtime.interopservices.architecture
# Rust supported platforms: https://doc.rust-lang.org/stable/rustc/platform-support.html
switch ($p.GetValue($null).ToString())
{
"X86" { return "i686-pc-windows-msvc" }
"X64" { return "x86_64-pc-windows-msvc" }
"Arm" { return "thumbv7a-pc-windows-msvc" }
"Arm64" { return "aarch64-pc-windows-msvc" }
}
} catch {
# The above was added in .NET 4.7.1, so Windows PowerShell in versions of Windows
# prior to Windows 10 v1709 may not have this API.
Write-Verbose "Get-TargetTriple: Exception when trying to determine OS architecture."
Write-Verbose $_
}
# This is available in .NET 4.0. We already checked for PS 5, which requires .NET 4.5.
Write-Verbose("Get-TargetTriple: falling back to Is64BitOperatingSystem.")
if ([System.Environment]::Is64BitOperatingSystem) {
return "x86_64-pc-windows-msvc"
} else {
return "i686-pc-windows-msvc"
}
}
function Download($download_url, $platforms) {
$arch = Get-TargetTriple
if (-not $platforms.ContainsKey($arch)) {
# X64 is well-supported, including in emulation on ARM64
Write-Verbose "$arch is not available, falling back to X64"
$arch = "x86_64-pc-windows-msvc"
}
if (-not $platforms.ContainsKey($arch)) {
# should not be possible, as currently we always produce X64 binaries.
$platforms_json = ConvertTo-Json $platforms
throw "ERROR: could not find binaries for this platform. Last platform tried: $arch platform info: $platforms_json"
}
# Lookup what we expect this platform to look like
$info = $platforms[$arch]
$zip_ext = $info["zip_ext"]
$bin_names = $info["bins"]
$artifact_name = $info["artifact_name"]
# Make a new temp dir to unpack things to
$tmp = New-Temp-Dir
$dir_path = "$tmp\$app_name$zip_ext"
# Download and unpack!
$url = "$download_url/$artifact_name"
Write-Information "Downloading $app_name $app_version ($arch)"
Write-Verbose " from $url"
Write-Verbose " to $dir_path"
$wc = New-Object Net.Webclient
$wc.downloadFile($url, $dir_path)
Write-Verbose "Unpacking to $tmp"
# Select the tool to unpack the files with.
#
# As of windows 10(?), powershell comes with tar preinstalled, but in practice
# it only seems to support .tar.gz, and not xz/zstd. Still, we should try to
# forward all tars to it in case the user has a machine that can handle it!
switch -Wildcard ($zip_ext) {
".zip" {
Expand-Archive -Path $dir_path -DestinationPath "$tmp";
Break
}
".tar.*" {
tar xf $dir_path --strip-components 1 -C "$tmp";
Break
}
Default {
throw "ERROR: unknown archive format $zip_ext"
}
}
# Let the next step know what to copy
$bin_paths = @()
foreach ($bin_name in $bin_names) {
Write-Verbose " Unpacked $bin_name"
$bin_paths += "$tmp\$bin_name"
}
return $bin_paths
}
function Invoke-Installer($bin_paths) {
# first try CARGO_HOME, then fallback to HOME
# (for whatever reason $HOME is not a normal env var and doesn't need the $env: prefix)
$root = if (($base_dir = $env:CARGO_HOME)) {
$base_dir
} elseif (($base_dir = $HOME)) {
Join-Path $base_dir ".cargo"
} else {
throw "ERROR: could not find your HOME dir or CARGO_HOME to install binaries to"
}
$dest_dir = Join-Path $root "bin"
# The replace call here ensures proper escaping is inlined into the receipt
$receipt = $receipt.Replace('AXO_CARGO_HOME', $dest_dir.replace("\", "\\"))
$dest_dir = New-Item -Force -ItemType Directory -Path $dest_dir
Write-Information "Installing to $dest_dir"
# Just copy the binaries from the temp location to the install dir
foreach ($bin_path in $bin_paths) {
$installed_file = Split-Path -Path "$bin_path" -Leaf
Copy-Item "$bin_path" -Destination "$dest_dir"
Remove-Item "$bin_path" -Recurse -Force
Write-Information " $installed_file"
}
# Replaces the placeholder binary entry with the actual list of binaries
$arch = Get-TargetTriple
$info = $platforms[$arch]
$formatted_bins = ($info["bins"] | ForEach-Object { '"' + $_ + '"' }) -join ","
$receipt = $receipt.Replace('"CARGO_DIST_BINS"', $formatted_bins)
# Write the install receipt
$null = New-Item -Path $receipt_home -ItemType "directory" -ErrorAction SilentlyContinue
Out-File -FilePath $receipt_home/adnix-receipt.json -InputObject $receipt -Encoding utf8
Write-Information "Everything's installed!"
if (-not $NoModifyPath) {
if (Add-Path $dest_dir) {
Write-Information ""
Write-Information "$dest_dir was added to your PATH, you may need to restart your shell for that to take effect."
}
}
}
# Try to add the given path to PATH via the registry
#
# Returns true if the registry was modified, otherwise returns false
# (indicating it was already on PATH)
function Add-Path($OrigPathToAdd) {
$RegistryPath = "HKCU:\Environment"
$PropertyName = "Path"
$PathToAdd = $OrigPathToAdd
$Item = if (Test-Path $RegistryPath) {
# If the registry key exists, get it
Get-Item -Path $RegistryPath
} else {
# If the registry key doesn't exist, create it
Write-Verbose "Creating $RegistryPath"
New-Item -Path $RegistryPath -Force
}
$OldPath = ""
try {
# Try to get the old PATH value. If that fails, assume we're making it from scratch.
# Otherwise assume there's already paths in here and use a ; separator
$OldPath = $Item | Get-ItemPropertyValue -Name $PropertyName
$PathToAdd = "$PathToAdd;"
} catch {
# We'll be creating the PATH from scratch
Write-Verbose "Adding $PropertyName Property to $RegistryPath"
}
# Check if the path is already there
#
# We don't want to incorrectly match "C:\blah\" to "C:\blah\blah\", so we include the semicolon
# delimiters when searching, ensuring exact matches. To avoid corner cases we add semicolons to
# both sides of the input, allowing us to pretend we're always in the middle of a list.
if (";$OldPath;" -like "*;$OrigPathToAdd;*") {
# Already on path, nothing to do
Write-Verbose "install dir already on PATH, all done!"
return $false
} else {
# Actually update PATH
Write-Verbose "Adding $OrigPathToAdd to your PATH"
$NewPath = $PathToAdd + $OldPath
# We use -Force here to make the value already existing not be an error
$Item | New-ItemProperty -Name $PropertyName -Value $NewPath -PropertyType String -Force | Out-Null
return $true
}
}
function Initialize-Environment() {
If (($PSVersionTable.PSVersion.Major) -lt 5) {
throw @"
Error: PowerShell 5 or later is required to install $app_name.
Upgrade PowerShell:
https://docs.microsoft.com/en-us/powershell/scripting/setup/installing-windows-powershell
"@
}
# show notification to change execution policy:
$allowedExecutionPolicy = @('Unrestricted', 'RemoteSigned', 'ByPass')
If ((Get-ExecutionPolicy).ToString() -notin $allowedExecutionPolicy) {
throw @"
Error: PowerShell requires an execution policy in [$($allowedExecutionPolicy -join ", ")] to run $app_name. For example, to set the execution policy to 'RemoteSigned' please run:
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
"@
}
# GitHub requires TLS 1.2
If ([System.Enum]::GetNames([System.Net.SecurityProtocolType]) -notcontains 'Tls12') {
throw @"
Error: Installing $app_name requires at least .NET Framework 4.5
Please download and install it first:
https://www.microsoft.com/net/download
"@
}
}
function New-Temp-Dir() {
[CmdletBinding(SupportsShouldProcess)]
param()
$parent = [System.IO.Path]::GetTempPath()
[string] $name = [System.Guid]::NewGuid()
New-Item -ItemType Directory -Path (Join-Path $parent $name)
}
# PSScriptAnalyzer doesn't like how we use our params as globals, this calms it
$Null = $ArtifactDownloadUrl, $NoModifyPath, $Help
# Make Write-Information statements be visible
$InformationPreference = "Continue"
# The default interactive handler
try {
Install-Binary "$Args"
} catch {
Write-Information $_
exit 1
}

809
adnix-installer.sh.txt Normal file
View File

@ -0,0 +1,809 @@
#!/bin/sh
# shellcheck shell=dash
#
# Licensed under the MIT license
# <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
# option. This file may not be copied, modified, or distributed
# except according to those terms.
if [ "$KSH_VERSION" = 'Version JM 93t+ 2010-03-05' ]; then
# The version of ksh93 that ships with many illumos systems does not
# support the "local" extension. Print a message rather than fail in
# subtle ways later on:
echo 'this installer does not work with this ksh93 version; please try bash!' >&2
exit 1
fi
set -u
APP_NAME="adnix"
APP_VERSION="0.4.10"
ARTIFACT_DOWNLOAD_URL="${INSTALLER_DOWNLOAD_URL:-https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10}"
PRINT_VERBOSE=${INSTALLER_PRINT_VERBOSE:-0}
PRINT_QUIET=${INSTALLER_PRINT_QUIET:-0}
NO_MODIFY_PATH=${INSTALLER_NO_MODIFY_PATH:-0}
read -r RECEIPT <<EORECEIPT
{"binaries":["CARGO_DIST_BINS"],"install_prefix":"AXO_CARGO_HOME","provider":{"source":"cargo-dist","version":"0.11.1"},"source":{"app_name":"adnix","name":"adnix-rs","owner":"msfjarvis","release_type":"github"},"version":"0.4.10"}
EORECEIPT
# Are we happy with this same path on Linux and Mac?
RECEIPT_HOME="${HOME}/.config/adnix"
# glibc provided by our Ubuntu 20.04 runners;
# in the future, we should actually record which glibc was on the runner,
# and inject that into the script.
BUILDER_GLIBC_MAJOR="2"
BUILDER_GLIBC_SERIES="31"
usage() {
# print help (this cat/EOF stuff is a "heredoc" string)
cat <<EOF
adnix-installer.sh
The installer for adnix 0.4.10
This script detects what platform you're on and fetches an appropriate archive from
https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10
then unpacks the binaries and installs them to \$CARGO_HOME/bin (\$HOME/.cargo/bin)
It will then add that dir to PATH by adding the appropriate line to your shell profiles.
USAGE:
adnix-installer.sh [OPTIONS]
OPTIONS:
-v, --verbose
Enable verbose output
-q, --quiet
Disable progress output
--no-modify-path
Don't configure the PATH environment variable
-h, --help
Print help information
EOF
}
download_binary_and_run_installer() {
downloader --check
need_cmd uname
need_cmd mktemp
need_cmd chmod
need_cmd mkdir
need_cmd rm
need_cmd tar
need_cmd which
need_cmd grep
need_cmd cat
for arg in "$@"; do
case "$arg" in
--help)
usage
exit 0
;;
--quiet)
PRINT_QUIET=1
;;
--verbose)
PRINT_VERBOSE=1
;;
--no-modify-path)
NO_MODIFY_PATH=1
;;
*)
OPTIND=1
if [ "${arg%%--*}" = "" ]; then
err "unknown option $arg"
fi
while getopts :hvq sub_arg "$arg"; do
case "$sub_arg" in
h)
usage
exit 0
;;
v)
# user wants to skip the prompt --
# we don't need /dev/tty
PRINT_VERBOSE=1
;;
q)
# user wants to skip the prompt --
# we don't need /dev/tty
PRINT_QUIET=1
;;
*)
err "unknown option -$OPTARG"
;;
esac
done
;;
esac
done
get_architecture || return 1
local _arch="$RETVAL"
assert_nz "$_arch" "arch"
local _bins
local _zip_ext
local _artifact_name
# Lookup what to download/unpack based on platform
case "$_arch" in
"aarch64-apple-darwin")
_artifact_name="adnix-aarch64-apple-darwin.tar.xz"
_zip_ext=".tar.xz"
_bins="adnix"
_bins_js_array='"adnix"'
;;
"x86_64-apple-darwin")
_artifact_name="adnix-x86_64-apple-darwin.tar.xz"
_zip_ext=".tar.xz"
_bins="adnix"
_bins_js_array='"adnix"'
;;
"x86_64-unknown-linux-gnu")
_artifact_name="adnix-x86_64-unknown-linux-gnu.tar.xz"
_zip_ext=".tar.xz"
_bins="adnix"
_bins_js_array='"adnix"'
;;
"x86_64-unknown-linux-musl-dynamic")
_artifact_name="adnix-x86_64-unknown-linux-musl.tar.xz"
_zip_ext=".tar.xz"
_bins="adnix"
_bins_js_array='"adnix"'
;;
"x86_64-unknown-linux-musl-static")
_artifact_name="adnix-x86_64-unknown-linux-musl.tar.xz"
_zip_ext=".tar.xz"
_bins="adnix"
_bins_js_array='"adnix"'
;;
*)
err "there isn't a package for $_arch"
;;
esac
# Replace the placeholder binaries with the calculated array from above
RECEIPT="$(echo "$RECEIPT" | sed s/'"CARGO_DIST_BINS"'/"$_bins_js_array"/)"
# download the archive
local _url="$ARTIFACT_DOWNLOAD_URL/$_artifact_name"
local _dir
if ! _dir="$(ensure mktemp -d)"; then
# Because the previous command ran in a subshell, we must manually
# propagate exit status.
exit 1
fi
local _file="$_dir/input$_zip_ext"
say "downloading $APP_NAME $APP_VERSION ${_arch}" 1>&2
say_verbose " from $_url" 1>&2
say_verbose " to $_file" 1>&2
ensure mkdir -p "$_dir"
if ! downloader "$_url" "$_file"; then
say "failed to download $_url"
say "this may be a standard network error, but it may also indicate"
say "that $APP_NAME's release process is not working. When in doubt"
say "please feel free to open an issue!"
exit 1
fi
# unpack the archive
case "$_zip_ext" in
".zip")
ensure unzip -q "$_file" -d "$_dir"
;;
".tar."*)
ensure tar xf "$_file" --strip-components 1 -C "$_dir"
;;
*)
err "unknown archive format: $_zip_ext"
;;
esac
install "$_dir" "$_bins" "$@"
local _retval=$?
if [ "$_retval" != 0 ]; then
return "$_retval"
fi
ignore rm -rf "$_dir"
# Install the install receipt
mkdir -p "$RECEIPT_HOME" || {
err "unable to create receipt directory at $RECEIPT_HOME"
}
echo "$RECEIPT" > "$RECEIPT_HOME/$APP_NAME-receipt.json"
# shellcheck disable=SC2320
local _retval=$?
return "$_retval"
}
# See discussion of late-bound vs early-bound for why we use single-quotes with env vars
# shellcheck disable=SC2016
install() {
# This code needs to both compute certain paths for itself to write to, and
# also write them to shell/rc files so that they can look them up to e.g.
# add them to PATH. This requires an active distinction between paths
# and expressions that can compute them.
#
# The distinction lies in when we want env-vars to be evaluated. For instance
# if we determine that we want to install to $HOME/.myapp, which do we add
# to e.g. $HOME/.profile:
#
# * early-bound: export PATH="/home/myuser/.myapp:$PATH"
# * late-bound: export PATH="$HOME/.myapp:$PATH"
#
# In this case most people would prefer the late-bound version, but in other
# cases the early-bound version might be a better idea. In particular when using
# other env-vars than $HOME, they are more likely to be only set temporarily
# for the duration of this install script, so it's more advisable to erase their
# existence with early-bounding.
#
# This distinction is handled by "double-quotes" (early) vs 'single-quotes' (late).
#
# This script has a few different variants, the most complex one being the
# CARGO_HOME version which attempts to install things to Cargo's bin dir,
# potentially setting up a minimal version if the user hasn't ever installed Cargo.
#
# In this case we need to:
#
# * Install to $HOME/.cargo/bin/
# * Create a shell script at $HOME/.cargo/env that:
# * Checks if $HOME/.cargo/bin/ is on PATH
# * and if not prepends it to PATH
# * Edits $HOME/.profile to run $HOME/.cargo/env (if the line doesn't exist)
#
# To do this we need these 4 values:
# The actual path we're going to install to
local _install_dir
# Path to the an shell script that adds install_dir to PATH
local _env_script_path
# Potentially-late-bound version of install_dir to write env_script
local _install_dir_expr
# Potentially-late-bound version of env_script_path to write to rcfiles like $HOME/.profile
local _env_script_path_expr
# first try CARGO_HOME, then fallback to HOME
if [ -n "${CARGO_HOME:-}" ]; then
_install_home="$CARGO_HOME"
_install_dir="$CARGO_HOME/bin"
_env_script_path="$CARGO_HOME/env"
# If CARGO_HOME was set but it ended up being the default $HOME-based path,
# then keep things late-bound. Otherwise bake the value for safety.
# This is what rustup does, and accurately reproducing it is useful.
if [ -n "${HOME:-}" ]; then
if [ "$HOME/.cargo/bin" = "$_install_dir" ]; then
_install_dir_expr='$HOME/.cargo/bin'
_env_script_path_expr='$HOME/.cargo/env'
else
_install_dir_expr="$_install_dir"
_env_script_path_expr="$_env_script_path"
fi
else
_install_dir_expr="$_install_dir"
_env_script_path_expr="$_env_script_path"
fi
elif [ -n "${HOME:-}" ]; then
_install_home="$HOME/.cargo"
_install_dir="$HOME/.cargo/bin"
_env_script_path="$HOME/.cargo/env"
_install_dir_expr='$HOME/.cargo/bin'
_env_script_path_expr='$HOME/.cargo/env'
else
err "could not find your CARGO_HOME or HOME dir to install binaries to"
fi
# Replace the temporary cargo home with the calculated one
RECEIPT=$(echo "$RECEIPT" | sed "s,AXO_CARGO_HOME,$_install_dir,")
say "installing to $_install_dir"
ensure mkdir -p "$_install_dir"
# copy all the binaries to the install dir
local _src_dir="$1"
local _bins="$2"
for _bin_name in $_bins; do
local _bin="$_src_dir/$_bin_name"
ensure cp "$_bin" "$_install_dir"
# unzip seems to need this chmod
ensure chmod +x "$_install_dir/$_bin_name"
say " $_bin_name"
done
say "everything's installed!"
if [ "0" = "$NO_MODIFY_PATH" ]; then
add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".profile"
exit1=$?
add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".bash_profile .bash_login .bashrc"
exit2=$?
add_install_dir_to_path "$_install_dir_expr" "$_env_script_path" "$_env_script_path_expr" ".zshrc .zshenv"
exit3=$?
if [ "${exit1:-0}" = 1 ] || [ "${exit2:-0}" = 1 ] || [ "${exit3:-0}" = 1 ]; then
say ""
say "To add $_install_dir_expr to your PATH, either restart your shell or run:"
say ""
say " source $_env_script_path_expr"
fi
fi
}
print_home_for_script() {
local script="$1"
local _home
case "$script" in
# zsh has a special ZDOTDIR directory, which if set
# should be considered instead of $HOME
.zsh*)
if [ -n "${ZDOTDIR:-}" ]; then
_home="$ZDOTDIR"
else
_home="$HOME"
fi
;;
*)
_home="$HOME"
;;
esac
echo "$_home"
}
add_install_dir_to_path() {
# Edit rcfiles ($HOME/.profile) to add install_dir to $PATH
#
# We do this slightly indirectly by creating an "env" shell script which checks if install_dir
# is on $PATH already, and prepends it if not. The actual line we then add to rcfiles
# is to just source that script. This allows us to blast it into lots of different rcfiles and
# have it run multiple times without causing problems. It's also specifically compatible
# with the system rustup uses, so that we don't conflict with it.
local _install_dir_expr="$1"
local _env_script_path="$2"
local _env_script_path_expr="$3"
local _rcfiles="$4"
if [ -n "${HOME:-}" ]; then
local _target
local _home
# Find the first file in the array that exists and choose
# that as our target to write to
for _rcfile_relative in $_rcfiles; do
_home="$(print_home_for_script "$_rcfile_relative")"
local _rcfile="$_home/$_rcfile_relative"
if [ -f "$_rcfile" ]; then
_target="$_rcfile"
break
fi
done
# If we didn't find anything, pick the first entry in the
# list as the default to create and write to
if [ -z "${_target:-}" ]; then
local _rcfile_relative
_rcfile_relative="$(echo "$_rcfiles" | awk '{ print $1 }')"
_home="$(print_home_for_script "$_rcfile_relative")"
_target="$_home/$_rcfile_relative"
fi
# `source x` is an alias for `. x`, and the latter is more portable/actually-posix.
# This apparently comes up a lot on freebsd. It's easy enough to always add
# the more robust line to rcfiles, but when telling the user to apply the change
# to their current shell ". x" is pretty easy to misread/miscopy, so we use the
# prettier "source x" line there. Hopefully people with Weird Shells are aware
# this is a thing and know to tweak it (or just restart their shell).
local _robust_line=". \"$_env_script_path_expr\""
local _pretty_line="source \"$_env_script_path_expr\""
# Add the env script if it doesn't already exist
if [ ! -f "$_env_script_path" ]; then
say_verbose "creating $_env_script_path"
write_env_script "$_install_dir_expr" "$_env_script_path"
else
say_verbose "$_env_script_path already exists"
fi
# Check if the line is already in the rcfile
# grep: 0 if matched, 1 if no match, and 2 if an error occurred
#
# Ideally we could use quiet grep (-q), but that makes "match" and "error"
# have the same behaviour, when we want "no match" and "error" to be the same
# (on error we want to create the file, which >> conveniently does)
#
# We search for both kinds of line here just to do the right thing in more cases.
if ! grep -F "$_robust_line" "$_target" > /dev/null 2>/dev/null && \
! grep -F "$_pretty_line" "$_target" > /dev/null 2>/dev/null
then
# If the script now exists, add the line to source it to the rcfile
# (This will also create the rcfile if it doesn't exist)
if [ -f "$_env_script_path" ]; then
say_verbose "adding $_robust_line to $_target"
ensure echo "$_robust_line" >> "$_target"
return 1
fi
else
say_verbose "$_install_dir already on PATH"
fi
fi
}
write_env_script() {
# write this env script to the given path (this cat/EOF stuff is a "heredoc" string)
local _install_dir_expr="$1"
local _env_script_path="$2"
ensure cat <<EOF > "$_env_script_path"
#!/bin/sh
# add binaries to PATH if they aren't added yet
# affix colons on either side of \$PATH to simplify matching
case ":\${PATH}:" in
*:"$_install_dir_expr":*)
;;
*)
# Prepending path in case a system-installed binary needs to be overridden
export PATH="$_install_dir_expr:\$PATH"
;;
esac
EOF
}
check_proc() {
# Check for /proc by looking for the /proc/self/exe link
# This is only run on Linux
if ! test -L /proc/self/exe ; then
err "fatal: Unable to find /proc/self/exe. Is /proc mounted? Installation cannot proceed without /proc."
fi
}
get_bitness() {
need_cmd head
# Architecture detection without dependencies beyond coreutils.
# ELF files start out "\x7fELF", and the following byte is
# 0x01 for 32-bit and
# 0x02 for 64-bit.
# The printf builtin on some shells like dash only supports octal
# escape sequences, so we use those.
local _current_exe_head
_current_exe_head=$(head -c 5 /proc/self/exe )
if [ "$_current_exe_head" = "$(printf '\177ELF\001')" ]; then
echo 32
elif [ "$_current_exe_head" = "$(printf '\177ELF\002')" ]; then
echo 64
else
err "unknown platform bitness"
fi
}
is_host_amd64_elf() {
need_cmd head
need_cmd tail
# ELF e_machine detection without dependencies beyond coreutils.
# Two-byte field at offset 0x12 indicates the CPU,
# but we're interested in it being 0x3E to indicate amd64, or not that.
local _current_exe_machine
_current_exe_machine=$(head -c 19 /proc/self/exe | tail -c 1)
[ "$_current_exe_machine" = "$(printf '\076')" ]
}
get_endianness() {
local cputype=$1
local suffix_eb=$2
local suffix_el=$3
# detect endianness without od/hexdump, like get_bitness() does.
need_cmd head
need_cmd tail
local _current_exe_endianness
_current_exe_endianness="$(head -c 6 /proc/self/exe | tail -c 1)"
if [ "$_current_exe_endianness" = "$(printf '\001')" ]; then
echo "${cputype}${suffix_el}"
elif [ "$_current_exe_endianness" = "$(printf '\002')" ]; then
echo "${cputype}${suffix_eb}"
else
err "unknown platform endianness"
fi
}
get_architecture() {
local _ostype
local _cputype
_ostype="$(uname -s)"
_cputype="$(uname -m)"
local _clibtype="gnu"
local _local_glibc
if [ "$_ostype" = Linux ]; then
if [ "$(uname -o)" = Android ]; then
_ostype=Android
fi
if ldd --version 2>&1 | grep -q 'musl'; then
_clibtype="musl-dynamic"
# glibc, but is it a compatible glibc?
else
# Parsing version out from line 1 like:
# ldd (Ubuntu GLIBC 2.35-0ubuntu3.1) 2.35
_local_glibc="$(ldd --version | awk -F' ' '{ if (FNR<=1) print $NF }')"
if [ "$(echo "${_local_glibc}" | awk -F. '{ print $1 }')" = $BUILDER_GLIBC_MAJOR ] && [ "$(echo "${_local_glibc}" | awk -F. '{ print $2 }')" -ge $BUILDER_GLIBC_SERIES ]; then
_clibtype="gnu"
else
say "System glibc version (\`${_local_glibc}') is too old; using musl" >&2
_clibtype="musl-static"
fi
fi
fi
if [ "$_ostype" = Darwin ] && [ "$_cputype" = i386 ]; then
# Darwin `uname -m` lies
if sysctl hw.optional.x86_64 | grep -q ': 1'; then
_cputype=x86_64
fi
fi
if [ "$_ostype" = SunOS ]; then
# Both Solaris and illumos presently announce as "SunOS" in "uname -s"
# so use "uname -o" to disambiguate. We use the full path to the
# system uname in case the user has coreutils uname first in PATH,
# which has historically sometimes printed the wrong value here.
if [ "$(/usr/bin/uname -o)" = illumos ]; then
_ostype=illumos
fi
# illumos systems have multi-arch userlands, and "uname -m" reports the
# machine hardware name; e.g., "i86pc" on both 32- and 64-bit x86
# systems. Check for the native (widest) instruction set on the
# running kernel:
if [ "$_cputype" = i86pc ]; then
_cputype="$(isainfo -n)"
fi
fi
case "$_ostype" in
Android)
_ostype=linux-android
;;
Linux)
check_proc
_ostype=unknown-linux-$_clibtype
_bitness=$(get_bitness)
;;
FreeBSD)
_ostype=unknown-freebsd
;;
NetBSD)
_ostype=unknown-netbsd
;;
DragonFly)
_ostype=unknown-dragonfly
;;
Darwin)
_ostype=apple-darwin
;;
illumos)
_ostype=unknown-illumos
;;
MINGW* | MSYS* | CYGWIN* | Windows_NT)
_ostype=pc-windows-gnu
;;
*)
err "unrecognized OS type: $_ostype"
;;
esac
case "$_cputype" in
i386 | i486 | i686 | i786 | x86)
_cputype=i686
;;
xscale | arm)
_cputype=arm
if [ "$_ostype" = "linux-android" ]; then
_ostype=linux-androideabi
fi
;;
armv6l)
_cputype=arm
if [ "$_ostype" = "linux-android" ]; then
_ostype=linux-androideabi
else
_ostype="${_ostype}eabihf"
fi
;;
armv7l | armv8l)
_cputype=armv7
if [ "$_ostype" = "linux-android" ]; then
_ostype=linux-androideabi
else
_ostype="${_ostype}eabihf"
fi
;;
aarch64 | arm64)
_cputype=aarch64
;;
x86_64 | x86-64 | x64 | amd64)
_cputype=x86_64
;;
mips)
_cputype=$(get_endianness mips '' el)
;;
mips64)
if [ "$_bitness" -eq 64 ]; then
# only n64 ABI is supported for now
_ostype="${_ostype}abi64"
_cputype=$(get_endianness mips64 '' el)
fi
;;
ppc)
_cputype=powerpc
;;
ppc64)
_cputype=powerpc64
;;
ppc64le)
_cputype=powerpc64le
;;
s390x)
_cputype=s390x
;;
riscv64)
_cputype=riscv64gc
;;
loongarch64)
_cputype=loongarch64
;;
*)
err "unknown CPU type: $_cputype"
esac
# Detect 64-bit linux with 32-bit userland
if [ "${_ostype}" = unknown-linux-gnu ] && [ "${_bitness}" -eq 32 ]; then
case $_cputype in
x86_64)
# 32-bit executable for amd64 = x32
if is_host_amd64_elf; then {
err "x32 linux unsupported"
}; else
_cputype=i686
fi
;;
mips64)
_cputype=$(get_endianness mips '' el)
;;
powerpc64)
_cputype=powerpc
;;
aarch64)
_cputype=armv7
if [ "$_ostype" = "linux-android" ]; then
_ostype=linux-androideabi
else
_ostype="${_ostype}eabihf"
fi
;;
riscv64gc)
err "riscv64 with 32-bit userland unsupported"
;;
esac
fi
# treat armv7 systems without neon as plain arm
if [ "$_ostype" = "unknown-linux-gnueabihf" ] && [ "$_cputype" = armv7 ]; then
if ensure grep '^Features' /proc/cpuinfo | grep -q -v neon; then
# At least one processor does not have NEON.
_cputype=arm
fi
fi
_arch="${_cputype}-${_ostype}"
RETVAL="$_arch"
}
say() {
if [ "0" = "$PRINT_QUIET" ]; then
echo "$1"
fi
}
say_verbose() {
if [ "1" = "$PRINT_VERBOSE" ]; then
echo "$1"
fi
}
err() {
if [ "0" = "$PRINT_QUIET" ]; then
local red
local reset
red=$(tput setaf 1 2>/dev/null || echo '')
reset=$(tput sgr0 2>/dev/null || echo '')
say "${red}ERROR${reset}: $1" >&2
fi
exit 1
}
need_cmd() {
if ! check_cmd "$1"
then err "need '$1' (command not found)"
fi
}
check_cmd() {
command -v "$1" > /dev/null 2>&1
return $?
}
assert_nz() {
if [ -z "$1" ]; then err "assert_nz $2"; fi
}
# Run a command that should never fail. If the command fails execution
# will immediately terminate with an error showing the failing
# command.
ensure() {
if ! "$@"; then err "command failed: $*"; fi
}
# This is just for indicating that commands' results are being
# intentionally ignored. Usually, because it's being executed
# as part of error handling.
ignore() {
"$@"
}
# This wraps curl or wget. Try curl first, if not installed,
# use wget instead.
downloader() {
if check_cmd curl
then _dld=curl
elif check_cmd wget
then _dld=wget
else _dld='curl or wget' # to be used in error message of need_cmd
fi
if [ "$1" = --check ]
then need_cmd "$_dld"
elif [ "$_dld" = curl ]
then curl -sSfL "$1" -o "$2"
elif [ "$_dld" = wget ]
then wget "$1" -O "$2"
else err "Unknown downloader" # should not reach here
fi
}
download_binary_and_run_installer "$@" || exit 1

245
artifacts.js Normal file
View File

@ -0,0 +1,245 @@
/* Code modified from the blender website
* https://www.blender.org/wp-content/themes/bthree/assets/js/get_os.js?x82196
*/
let options = {
windows64: "x86_64-pc-windows",
windows32: "i686-pc-windows",
windowsArm: "aarch64-pc-windows",
mac64: "x86_64-apple",
mac32: "i686-apple",
macSilicon: "aarch64-apple",
linux64: "x86_64-unknown-linux",
linux32: "i686-unknown-linux",
linuxArm: "aarch64-unknown-linux",
// ios: "ios",
// android: "linux-android",
// freebsd: "freebsd",
};
function isAppleSilicon() {
try {
var glcontext = document.createElement("canvas").getContext("webgl");
var debugrenderer = glcontext
? glcontext.getExtension("WEBGL_debug_renderer_info")
: null;
var renderername =
(debugrenderer &&
glcontext.getParameter(debugrenderer.UNMASKED_RENDERER_WEBGL)) ||
"";
if (renderername.match(/Apple M/) || renderername.match(/Apple GPU/)) {
return true;
}
return false;
} catch (e) {}
}
function getOS() {
var OS = options.windows64.default;
var userAgent = navigator.userAgent;
var platform = navigator.platform;
if (navigator.appVersion.includes("Win")) {
if (
!userAgent.includes("Windows NT 5.0") &&
!userAgent.includes("Windows NT 5.1") &&
(userAgent.indexOf("Win64") > -1 ||
platform == "Win64" ||
userAgent.indexOf("x86_64") > -1 ||
userAgent.indexOf("x86_64") > -1 ||
userAgent.indexOf("amd64") > -1 ||
userAgent.indexOf("AMD64") > -1 ||
userAgent.indexOf("WOW64") > -1)
) {
OS = options.windows64;
} else {
if (
window.external &&
window.external.getHostEnvironmentValue &&
window.external
.getHostEnvironmentValue("os-architecture")
.includes("ARM64")
) {
OS = options.windowsArm;
} else {
try {
var canvas = document.createElement("canvas");
var gl = canvas.getContext("webgl");
var debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
var renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
if (renderer.includes("Qualcomm")) OS = options.windowsArm;
} catch (e) {}
}
}
}
//MacOS, MacOS X, macOS
if (navigator.appVersion.includes("Mac")) {
if (
navigator.userAgent.includes("OS X 10.5") ||
navigator.userAgent.includes("OS X 10.6")
) {
OS = options.mac32;
} else {
OS = options.mac64;
const isSilicon = isAppleSilicon();
if (isSilicon) {
OS = options.macSilicon;
}
}
}
// linux
if (platform.includes("Linux")) {
OS = options.linux64;
// FIXME: Can we find out whether linux 32-bit or ARM are used?
}
// if (
// userAgent.includes("iPad") ||
// userAgent.includes("iPhone") ||
// userAgent.includes("iPod")
// ) {
// OS = options.ios;
// }
// if (platform.toLocaleLowerCase().includes("freebsd")) {
// OS = options.freebsd;
// }
return OS;
}
let os = getOS();
window.os = os;
// Unhide and hydrate selector with events
const archSelect = document.querySelector(".arch-select");
if (archSelect) {
archSelect.classList.remove("hidden");
const selector = document.querySelector("#install-arch-select");
if (selector) {
selector.addEventListener("change", onArchChange);
}
}
// Hydrate tab buttons with events
Array.from(document.querySelectorAll(".install-tab[data-id]")).forEach((tab) => {
tab.addEventListener("click", onTabClick);
});
function onArchChange(evt) {
// Get target
const target = evt.currentTarget.value;
// Find corresponding installer lists
const newContentEl = document.querySelector(`.arch[data-arch=${target}]`);
const oldContentEl = document.querySelector(`.arch[data-arch]:not(.hidden)`);
// Hide old content element (if applicable)
if (oldContentEl) {
oldContentEl.classList.add("hidden");
}
// Show new content element
newContentEl.classList.remove("hidden");
// Show the first tab's content if nothing was selected before
if (newContentEl.querySelectorAll(".install-tab.selected").length === 0) {
const firstContentChild = newContentEl.querySelector(".install-content:first-of-type");
const firstTabChild = newContentEl.querySelector(".install-tab:first-of-type");
firstContentChild.classList.remove("hidden");
if (firstTabChild) {
firstTabChild.classList.add("selected");
}
}
// Hide "no OS detected" message
const noDetectEl = document.querySelector(".no-autodetect");
noDetectEl.classList.add("hidden");
// Hide Mac hint
document.querySelector(".mac-switch").classList.add("hidden");
}
function onTabClick(evt) {
// Get target and ID
const {triple, id} = evt.currentTarget.dataset;
if (triple) {
// Find corresponding content elements
const newContentEl = document.querySelector(`.install-content[data-id="${String(id)}"][data-triple=${triple}]`);
const oldContentEl = document.querySelector(`.install-content[data-triple=${triple}][data-id]:not(.hidden)`);
// Find old tab to unselect
const oldTabEl = document.querySelector(`.install-tab[data-triple=${triple}].selected`);
// Hide old content element
if (oldContentEl && oldTabEl) {
oldContentEl.classList.add("hidden");
oldTabEl.classList.remove("selected");
}
// Unhide new content element
newContentEl.classList.remove("hidden");
// Select new tab element
evt.currentTarget.classList.add("selected");
}
}
const allPlatforms = Array.from(document.querySelectorAll(`.arch[data-arch]`));
let hit = allPlatforms.find(
(a) => {
// Show Intel Mac downloads if no M1 Mac downloads are available
if (
a.attributes["data-arch"].value.includes(options.mac64) &&
os.includes(options.macSilicon) &&
!allPlatforms.find(p => p.attributes["data-arch"].value.includes(options.macSilicon))) {
// Unhide hint
document.querySelector(".mac-switch").classList.remove("hidden");
return true;
}
return a.attributes["data-arch"].value.includes(os);
}
);
if (hit) {
hit.classList.remove("hidden");
const selectEl = document.querySelector("#install-arch-select");
selectEl.value = hit.dataset.arch;
const firstContentChild = hit.querySelector(".install-content:first-of-type");
const firstTabChild = hit.querySelector(".install-tab:first-of-type");
firstContentChild.classList.remove("hidden");
if (firstTabChild) {
firstTabChild.classList.add("selected");
}
} else {
const noDetectEl = document.querySelector(".no-autodetect");
if (noDetectEl) {
const noDetectElDetails = document.querySelector(".no-autodetect-details");
if (noDetectElDetails) {
noDetectElDetails.innerHTML = `We detected you're on ${os} but there don't seem to be installers for that. `
}
noDetectEl.classList.remove("hidden");
}
}
let copyButtons = Array.from(document.querySelectorAll("[data-copy]"));
if (copyButtons.length) {
copyButtons.forEach(function (element) {
element.addEventListener("click", () => {
navigator.clipboard.writeText(element.attributes["data-copy"].value);
});
});
}
// Toggle for pre releases
const checkbox = document.getElementById("show-prereleases");
if (checkbox) {
checkbox.addEventListener("click", () => {
const all = document.getElementsByClassName("pre-release");
if (all) {
for (var item of all) {
item.classList.toggle("hidden");
}
}
});
}

1
artifacts.json Normal file

File diff suppressed because one or more lines are too long

346
artifacts/index.html Normal file
View File

@ -0,0 +1,346 @@
<!DOCTYPE html>
<html lang="en" id="oranda" class="dark">
<head>
<title>adnix-rs</title>
<meta property="og:url" content="https://github.com/msfjarvis/adnix-rs" />
<link rel="icon" href="/adnix-rs/favicon.ico" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Rust binary to generate DNSMasq and Unbound configurations from UNIX host files" />
<meta property="og:description" content="Rust binary to generate DNSMasq and Unbound configurations from UNIX host files" />
<meta property="og:type" content="website" />
<meta property="og:title" content="adnix-rs" />
<meta http-equiv="Permissions-Policy" content="interest-cohort=()" />
<link rel="stylesheet" href="/adnix-rs/oranda-v0.6.1.css" />
</head>
<body>
<div class="container">
<div class="page-body">
<div class="repo_banner">
<a href="https://github.com/msfjarvis/adnix-rs">
<div class="github-icon" aria-hidden="true"></div>
Check out our GitHub!
</a>
</div>
<main>
<header>
<h1 class="title">adnix-rs</h1>
<nav class="nav">
<ul>
<li><a href="/adnix-rs/">Home</a></li>
<li><a href="/adnix-rs/artifacts/">Install</a></li>
</ul>
</nav>
</header>
<div>
<div class="package-managers-downloads">
<div>
<h3>binstall</h3>
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo binstall adnix</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo binstall adnix">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</div>
<div>
<h3>cargo</h3>
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo install adnix</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">locked</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">profile</span><span style="color:#89ddff;">=</span><span style="color:#82aaff;">dist</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo install adnix --locked --profile=dist">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</div>
<div>
<h3>homebrew</h3>
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">brew install msfjarvis/homebrew-tap/adnix</span></pre>
<button class="button copy-clipboard-button primary" data-copy="brew install msfjarvis/homebrew-tap/adnix">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</div>
<div>
<h3>nix flake</h3>
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">nix profile install github:msfjarvis/adnix-rs</span></pre>
<button class="button copy-clipboard-button primary" data-copy="nix profile install github:msfjarvis/adnix-rs">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</div>
<div>
<h3>powershell</h3>
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">irm https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.ps1 </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">iex</span></pre>
<button class="button copy-clipboard-button primary" data-copy="irm https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.ps1 | iex">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.ps1.txt">Source</a>
</div>
</div>
<div>
<h3>shell</h3>
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">curl</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">proto </span><span style="color:#89ddff;">&#39;</span><span style="color:#c3e88d;">=https</span><span style="color:#89ddff;">&#39; --</span><span style="color:#f78c6c;">tlsv1</span><span style="color:#82aaff;">.2</span><span style="color:#89ddff;"> -</span><span style="color:#f78c6c;">LsSf</span><span style="color:#82aaff;"> https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">sh</span></pre>
<button class="button copy-clipboard-button primary" data-copy="curl --proto '=https' --tlsv1.2 -LsSf https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh | sh">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.sh.txt">Source</a>
</div>
</div>
</div>
<div>
<h3>Downloads</h3>
<table class="artifacts-table">
<tbody>
<tr>
<th>File</th>
<th>Platform</th>
<th>Checksum</th>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-aarch64-apple-darwin.tar.xz">adnix-aarch64-apple-darwin.tar.xz</a></td>
<td>
macOS Apple Silicon
</td>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-aarch64-apple-darwin.tar.xz.sha256">checksum</a></td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-apple-darwin.tar.xz">adnix-x86_64-apple-darwin.tar.xz</a></td>
<td>
macOS Intel
</td>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-apple-darwin.tar.xz.sha256">checksum</a></td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-pc-windows-msvc.msi">adnix-x86_64-pc-windows-msvc.msi</a></td>
<td>
Windows x64
</td>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-pc-windows-msvc.msi.sha256">checksum</a></td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-pc-windows-msvc.zip">adnix-x86_64-pc-windows-msvc.zip</a></td>
<td>
Windows x64
</td>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-unknown-linux-gnu.tar.xz">adnix-x86_64-unknown-linux-gnu.tar.xz</a></td>
<td>
Linux x64
</td>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-unknown-linux-gnu.tar.xz.sha256">checksum</a></td>
</tr>
<tr>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-unknown-linux-musl.tar.xz">adnix-x86_64-unknown-linux-musl.tar.xz</a></td>
<td>
musl Linux x64
</td>
<td><a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-unknown-linux-musl.tar.xz.sha256">checksum</a></td>
</tr>
</tbody>
</table>
</div>
</div>
</main>
</div>
<footer>
<a href="https://github.com/msfjarvis/adnix-rs"><div class="github-icon" aria-hidden="true"></div></a>
<span>
adnix-rs, MIT/Apache-2.0
</span>
</footer>
</div>
<script src="/adnix-rs/artifacts.js"></script>
</body>
</html>

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

926
index.html Normal file
View File

@ -0,0 +1,926 @@
<!DOCTYPE html>
<html lang="en" id="oranda" class="dark">
<head>
<title>adnix-rs</title>
<meta property="og:url" content="https://github.com/msfjarvis/adnix-rs" />
<link rel="icon" href="/adnix-rs/favicon.ico" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Rust binary to generate DNSMasq and Unbound configurations from UNIX host files" />
<meta property="og:description" content="Rust binary to generate DNSMasq and Unbound configurations from UNIX host files" />
<meta property="og:type" content="website" />
<meta property="og:title" content="adnix-rs" />
<meta http-equiv="Permissions-Policy" content="interest-cohort=()" />
<link rel="stylesheet" href="/adnix-rs/oranda-v0.6.1.css" />
</head>
<body>
<div class="container">
<div class="page-body">
<div class="repo_banner">
<a href="https://github.com/msfjarvis/adnix-rs">
<div class="github-icon" aria-hidden="true"></div>
Check out our GitHub!
</a>
</div>
<main>
<header>
<h1 class="title">adnix-rs</h1>
<nav class="nav">
<ul>
<li><a href="/adnix-rs/">Home</a></li>
<li><a href="/adnix-rs/artifacts/">Install</a></li>
</ul>
</nav>
</header>
<div class="artifacts" data-tag="v0.4.10">
<div class="artifact-header target">
<h4>Install v0.4.10</h4>
<div><small class="published-date">Published on Apr 10 2024 at 20:47 UTC</small></div>
<ul class="arches">
<li class="arch hidden" data-arch="aarch64-apple-darwin">
<ul class="tabs">
<li class="install-tab" data-id="11" data-triple="aarch64-apple-darwin">
shell
</li>
<li class="install-tab" data-id="8" data-triple="aarch64-apple-darwin">
cargo
</li>
<li class="install-tab" data-id="0" data-triple="aarch64-apple-darwin">
homebrew
</li>
<li class="install-tab" data-id="7" data-triple="aarch64-apple-darwin">
nix flake
</li>
<li class="install-tab" data-id="1" data-triple="aarch64-apple-darwin">
tarball
</li>
</ul>
<ul class="contents">
<li data-id="11" data-triple="aarch64-apple-darwin" class="install-content">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">curl</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">proto </span><span style="color:#89ddff;">&#39;</span><span style="color:#c3e88d;">=https</span><span style="color:#89ddff;">&#39; --</span><span style="color:#f78c6c;">tlsv1</span><span style="color:#82aaff;">.2</span><span style="color:#89ddff;"> -</span><span style="color:#f78c6c;">LsSf</span><span style="color:#82aaff;"> https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">sh</span></pre>
<button class="button copy-clipboard-button primary" data-copy="curl --proto '=https' --tlsv1.2 -LsSf https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh | sh">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.sh.txt">Source</a>
</div>
</li>
<li data-id="8" data-triple="aarch64-apple-darwin" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo install adnix</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">locked</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">profile</span><span style="color:#89ddff;">=</span><span style="color:#82aaff;">dist</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo install adnix --locked --profile=dist">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="0" data-triple="aarch64-apple-darwin" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">brew install msfjarvis/homebrew-tap/adnix</span></pre>
<button class="button copy-clipboard-button primary" data-copy="brew install msfjarvis/homebrew-tap/adnix">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="7" data-triple="aarch64-apple-darwin" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">nix profile install github:msfjarvis/adnix-rs</span></pre>
<button class="button copy-clipboard-button primary" data-copy="nix profile install github:msfjarvis/adnix-rs">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="1" data-triple="aarch64-apple-darwin" class="install-content hidden">
<div class="download-wrapper">
<a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-aarch64-apple-darwin.tar.xz">
<button class="button primary">
<span>Download</span>
<span class="button-subtitle">adnix-aarch64-apple-darwin.tar.xz</span>
</button>
</a>
</div>
</li>
</ul>
</li>
<li class="arch hidden" data-arch="x86_64-apple-darwin">
<ul class="tabs">
<li class="install-tab" data-id="11" data-triple="x86_64-apple-darwin">
shell
</li>
<li class="install-tab" data-id="8" data-triple="x86_64-apple-darwin">
cargo
</li>
<li class="install-tab" data-id="0" data-triple="x86_64-apple-darwin">
homebrew
</li>
<li class="install-tab" data-id="7" data-triple="x86_64-apple-darwin">
nix flake
</li>
<li class="install-tab" data-id="2" data-triple="x86_64-apple-darwin">
tarball
</li>
</ul>
<ul class="contents">
<li data-id="11" data-triple="x86_64-apple-darwin" class="install-content">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">curl</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">proto </span><span style="color:#89ddff;">&#39;</span><span style="color:#c3e88d;">=https</span><span style="color:#89ddff;">&#39; --</span><span style="color:#f78c6c;">tlsv1</span><span style="color:#82aaff;">.2</span><span style="color:#89ddff;"> -</span><span style="color:#f78c6c;">LsSf</span><span style="color:#82aaff;"> https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">sh</span></pre>
<button class="button copy-clipboard-button primary" data-copy="curl --proto '=https' --tlsv1.2 -LsSf https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh | sh">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.sh.txt">Source</a>
</div>
</li>
<li data-id="8" data-triple="x86_64-apple-darwin" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo install adnix</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">locked</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">profile</span><span style="color:#89ddff;">=</span><span style="color:#82aaff;">dist</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo install adnix --locked --profile=dist">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="0" data-triple="x86_64-apple-darwin" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">brew install msfjarvis/homebrew-tap/adnix</span></pre>
<button class="button copy-clipboard-button primary" data-copy="brew install msfjarvis/homebrew-tap/adnix">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="7" data-triple="x86_64-apple-darwin" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">nix profile install github:msfjarvis/adnix-rs</span></pre>
<button class="button copy-clipboard-button primary" data-copy="nix profile install github:msfjarvis/adnix-rs">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="2" data-triple="x86_64-apple-darwin" class="install-content hidden">
<div class="download-wrapper">
<a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-apple-darwin.tar.xz">
<button class="button primary">
<span>Download</span>
<span class="button-subtitle">adnix-x86_64-apple-darwin.tar.xz</span>
</button>
</a>
</div>
</li>
</ul>
</li>
<li class="arch hidden" data-arch="x86_64-pc-windows-msvc">
<ul class="tabs">
<li class="install-tab" data-id="10" data-triple="x86_64-pc-windows-msvc">
powershell
</li>
<li class="install-tab" data-id="8" data-triple="x86_64-pc-windows-msvc">
cargo
</li>
<li class="install-tab" data-id="4" data-triple="x86_64-pc-windows-msvc">
msi
</li>
<li class="install-tab" data-id="7" data-triple="x86_64-pc-windows-msvc">
nix flake
</li>
<li class="install-tab" data-id="3" data-triple="x86_64-pc-windows-msvc">
zip
</li>
</ul>
<ul class="contents">
<li data-id="10" data-triple="x86_64-pc-windows-msvc" class="install-content">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">irm https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.ps1 </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">iex</span></pre>
<button class="button copy-clipboard-button primary" data-copy="irm https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.ps1 | iex">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.ps1.txt">Source</a>
</div>
</li>
<li data-id="8" data-triple="x86_64-pc-windows-msvc" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo install adnix</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">locked</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">profile</span><span style="color:#89ddff;">=</span><span style="color:#82aaff;">dist</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo install adnix --locked --profile=dist">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="4" data-triple="x86_64-pc-windows-msvc" class="install-content hidden">
<div class="download-wrapper">
<a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-pc-windows-msvc.msi">
<button class="button primary">
<span>Download</span>
<span class="button-subtitle">adnix-x86_64-pc-windows-msvc.msi</span>
</button>
</a>
</div>
</li>
<li data-id="7" data-triple="x86_64-pc-windows-msvc" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">nix profile install github:msfjarvis/adnix-rs</span></pre>
<button class="button copy-clipboard-button primary" data-copy="nix profile install github:msfjarvis/adnix-rs">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="3" data-triple="x86_64-pc-windows-msvc" class="install-content hidden">
<div class="download-wrapper">
<a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-pc-windows-msvc.zip">
<button class="button primary">
<span>Download</span>
<span class="button-subtitle">adnix-x86_64-pc-windows-msvc.zip</span>
</button>
</a>
</div>
</li>
</ul>
</li>
<li class="arch hidden" data-arch="x86_64-unknown-linux-gnu">
<ul class="tabs">
<li class="install-tab" data-id="11" data-triple="x86_64-unknown-linux-gnu">
shell
</li>
<li class="install-tab" data-id="8" data-triple="x86_64-unknown-linux-gnu">
cargo
</li>
<li class="install-tab" data-id="0" data-triple="x86_64-unknown-linux-gnu">
homebrew
</li>
<li class="install-tab" data-id="7" data-triple="x86_64-unknown-linux-gnu">
nix flake
</li>
<li class="install-tab" data-id="5" data-triple="x86_64-unknown-linux-gnu">
tarball
</li>
</ul>
<ul class="contents">
<li data-id="11" data-triple="x86_64-unknown-linux-gnu" class="install-content">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">curl</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">proto </span><span style="color:#89ddff;">&#39;</span><span style="color:#c3e88d;">=https</span><span style="color:#89ddff;">&#39; --</span><span style="color:#f78c6c;">tlsv1</span><span style="color:#82aaff;">.2</span><span style="color:#89ddff;"> -</span><span style="color:#f78c6c;">LsSf</span><span style="color:#82aaff;"> https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">sh</span></pre>
<button class="button copy-clipboard-button primary" data-copy="curl --proto '=https' --tlsv1.2 -LsSf https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh | sh">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.sh.txt">Source</a>
</div>
</li>
<li data-id="8" data-triple="x86_64-unknown-linux-gnu" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo install adnix</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">locked</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">profile</span><span style="color:#89ddff;">=</span><span style="color:#82aaff;">dist</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo install adnix --locked --profile=dist">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="0" data-triple="x86_64-unknown-linux-gnu" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">brew install msfjarvis/homebrew-tap/adnix</span></pre>
<button class="button copy-clipboard-button primary" data-copy="brew install msfjarvis/homebrew-tap/adnix">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="7" data-triple="x86_64-unknown-linux-gnu" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">nix profile install github:msfjarvis/adnix-rs</span></pre>
<button class="button copy-clipboard-button primary" data-copy="nix profile install github:msfjarvis/adnix-rs">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="5" data-triple="x86_64-unknown-linux-gnu" class="install-content hidden">
<div class="download-wrapper">
<a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-unknown-linux-gnu.tar.xz">
<button class="button primary">
<span>Download</span>
<span class="button-subtitle">adnix-x86_64-unknown-linux-gnu.tar.xz</span>
</button>
</a>
</div>
</li>
</ul>
</li>
<li class="arch hidden" data-arch="x86_64-unknown-linux-musl">
<ul class="tabs">
<li class="install-tab" data-id="11" data-triple="x86_64-unknown-linux-musl">
shell
</li>
<li class="install-tab" data-id="8" data-triple="x86_64-unknown-linux-musl">
cargo
</li>
<li class="install-tab" data-id="0" data-triple="x86_64-unknown-linux-musl">
homebrew
</li>
<li class="install-tab" data-id="7" data-triple="x86_64-unknown-linux-musl">
nix flake
</li>
<li class="install-tab" data-id="6" data-triple="x86_64-unknown-linux-musl">
tarball
</li>
</ul>
<ul class="contents">
<li data-id="11" data-triple="x86_64-unknown-linux-musl" class="install-content">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">curl</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">proto </span><span style="color:#89ddff;">&#39;</span><span style="color:#c3e88d;">=https</span><span style="color:#89ddff;">&#39; --</span><span style="color:#f78c6c;">tlsv1</span><span style="color:#82aaff;">.2</span><span style="color:#89ddff;"> -</span><span style="color:#f78c6c;">LsSf</span><span style="color:#82aaff;"> https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh </span><span style="color:#89ddff;">| </span><span style="color:#82aaff;">sh</span></pre>
<button class="button copy-clipboard-button primary" data-copy="curl --proto '=https' --tlsv1.2 -LsSf https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-installer.sh | sh">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
<a class="button primary" href="/adnix-rs/adnix-installer.sh.txt">Source</a>
</div>
</li>
<li data-id="8" data-triple="x86_64-unknown-linux-musl" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">cargo install adnix</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">locked</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">profile</span><span style="color:#89ddff;">=</span><span style="color:#82aaff;">dist</span></pre>
<button class="button copy-clipboard-button primary" data-copy="cargo install adnix --locked --profile=dist">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="0" data-triple="x86_64-unknown-linux-musl" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">brew install msfjarvis/homebrew-tap/adnix</span></pre>
<button class="button copy-clipboard-button primary" data-copy="brew install msfjarvis/homebrew-tap/adnix">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="7" data-triple="x86_64-unknown-linux-musl" class="install-content hidden">
<div class="install-code-wrapper">
<pre style="background-color:#263238;">
<span style="color:#82aaff;">nix profile install github:msfjarvis/adnix-rs</span></pre>
<button class="button copy-clipboard-button primary" data-copy="nix profile install github:msfjarvis/adnix-rs">
<svg stroke='currentColor' fill='currentColor' stroke-width='0' viewBox='0 0 20 20' height='1em' width='1em' xmlns='http://www.w3.org/2000/svg'><path d='M8 2a1 1 0 000 2h2a1 1 0 100-2H8z'></path><path d='M3 5a2 2 0 012-2 3 3 0 003 3h2a3 3 0 003-3 2 2 0 012 2v6h-4.586l1.293-1.293a1 1 0 00-1.414-1.414l-3 3a1 1 0 000 1.414l3 3a1 1 0 001.414-1.414L10.414 13H15v3a2 2 0 01-2 2H5a2 2 0 01-2-2V5zM15 11h2a1 1 0 110 2h-2v-2z'></path></svg>
</button>
</div>
</li>
<li data-id="6" data-triple="x86_64-unknown-linux-musl" class="install-content hidden">
<div class="download-wrapper">
<a href="https://github.com/msfjarvis/adnix-rs/releases/download/v0.4.10/adnix-x86_64-unknown-linux-musl.tar.xz">
<button class="button primary">
<span>Download</span>
<span class="button-subtitle">adnix-x86_64-unknown-linux-musl.tar.xz</span>
</button>
</a>
</div>
</li>
</ul>
</li>
</ul>
</div>
<div class="no-autodetect hidden">
<span class="no-autodetect-details">We weren't able to detect your OS.</span>
</div>
<noscript>
<a href="/adnix-rs/artifacts/">View all installation options</a>
</noscript>
<div class="mac-switch hidden">This project doesn't offer Apple Silicon downloads, but you can run Intel macOS binaries via Rosetta 2.</div>
<div class="bottom-options ">
<a href="/adnix-rs/artifacts/" class="backup-download primary">View all installation options</a>
<div class="arch-select hidden">
<select id="install-arch-select">
<option disabled="true" selected="true" value=""></option>
<option value="x86_64-unknown-linux-gnu">Linux x64</option>
<option value="aarch64-apple-darwin">macOS Apple Silicon</option>
<option value="x86_64-apple-darwin">macOS Intel</option>
<option value="x86_64-unknown-linux-musl">musl Linux x64</option>
<option value="x86_64-pc-windows-msvc">Windows x64</option>
</select>
</div>
</div>
</div>
<a href="/adnix-rs/artifacts/" class="button mobile-download primary">View all installation options</a>
<h1>adnix-rs <a href="https://crates.io/crates/adnix" rel="noopener noreferrer"><img src="https://img.shields.io/crates/v/adnix.svg" alt="Version info"></a> <a href="http://unmaintained.tech/" rel="noopener noreferrer"><img src="http://unmaintained.tech/badge.svg" alt="No Maintenance Intended"></a> <a href="https://garnix.io" rel="noopener noreferrer"><img src="https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fgarnix.io%2Fapi%2Fbadges%2Fmsfjarvis%2Fadnix-rs%3Fbranch%3Dmain" alt="Built with Garnix"></a></h1>
<p>Rust reimplementation of <a href="https://github.com/sniner/adnix" rel="noopener noreferrer">sniner/adnix</a> for educational purposes.</p>
<h2>Installation</h2>
<p>adnix is available on <a href="https://crates.io/crates/adnix" rel="noopener noreferrer">crates.io</a> and you can install it through cargo.</p>
<pre style="background-color:#263238;"><span style="color:#82aaff;">cargo install adnix
</span></pre>
<h2>Usage</h2>
<pre style="background-color:#263238;"><span style="color:#82aaff;">USAGE:
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">adnix </span><span style="font-style:italic;color:#c792ea;">[</span><span style="color:#82aaff;">OPTIONS</span><span style="font-style:italic;color:#c792ea;">]
</span><span style="color:#eeffff;">
</span><span style="color:#82aaff;">FLAGS:
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">-h,</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">help</span><span style="color:#82aaff;"> Prints help information
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">-V,</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">version</span><span style="color:#82aaff;"> Prints version information
</span><span style="color:#eeffff;">
</span><span style="color:#82aaff;">OPTIONS:
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">-f,</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">formatter </span><span style="color:#89ddff;">&lt;</span><span style="color:#82aaff;">STRING</span><span style="color:#89ddff;">&gt;</span><span style="color:#82aaff;"> Formatter </span><span style="font-style:italic;color:#c792ea;">[</span><span style="color:#82aaff;">default: dnsmasq</span><span style="font-style:italic;color:#c792ea;">] [</span><span style="color:#82aaff;">possible values: dnsmasq, dnsmasq</span><span style="color:#89ddff;">-</span><span style="color:#82aaff;">server, unbound</span><span style="font-style:italic;color:#c792ea;">]
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">--address </span><span style="color:#89ddff;">&lt;</span><span style="color:#82aaff;">ADDRESS</span><span style="color:#89ddff;">&gt;</span><span style="color:#82aaff;"> IPv4 address </span><span style="font-style:italic;color:#c792ea;">[</span><span style="color:#82aaff;">default: 127</span><span style="color:#89ddff;">.</span><span style="color:#82aaff;">0</span><span style="color:#89ddff;">.</span><span style="color:#82aaff;">0.1</span><span style="font-style:italic;color:#c792ea;">]
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">--v6address </span><span style="color:#89ddff;">&lt;</span><span style="color:#82aaff;">ADDRESS</span><span style="color:#89ddff;">&gt;</span><span style="color:#82aaff;"> IPv6 address </span><span style="font-style:italic;color:#c792ea;">[</span><span style="color:#82aaff;">default: ::1</span><span style="font-style:italic;color:#c792ea;">]
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">-o,</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">output </span><span style="color:#89ddff;">&lt;</span><span style="color:#82aaff;">OUTPUT</span><span style="color:#89ddff;">&gt;</span><span style="color:#82aaff;"> Output file
</span><span style="color:#eeffff;"> </span><span style="color:#82aaff;">-s,</span><span style="color:#89ddff;"> --</span><span style="color:#f78c6c;">sources_file </span><span style="color:#89ddff;">&lt;</span><span style="color:#82aaff;">STRING</span><span style="color:#89ddff;">&gt;</span><span style="color:#82aaff;"> File to read </span><span style="color:#89ddff;">"</span><span style="color:#c3e88d;">name|source url</span><span style="color:#89ddff;">"</span><span style="color:#82aaff;"> mappings from
</span></pre>
<p>Sample sources file for use with adnix.</p>
<pre style="background-color:#263238;"><span style="color:#eeffff;">Yoyo|http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&amp;showintro=0&amp;mimetype=plaintext
</span><span style="color:#eeffff;">Malware Domain List|http://www.malwaredomainlist.com/hostslist/hosts.txt
</span></pre>
</main>
</div>
<footer>
<a href="https://github.com/msfjarvis/adnix-rs"><div class="github-icon" aria-hidden="true"></div></a>
<span>
adnix-rs, MIT/Apache-2.0
</span>
</footer>
</div>
<script src="/adnix-rs/artifacts.js"></script>
</body>
</html>

3
oranda-v0.6.1.css Normal file

File diff suppressed because one or more lines are too long