mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-15 12:13:24 +00:00
Merge remote-tracking branch 'origin/dev' into ubuntu/groovy
This commit is contained in:
commit
93b7ee5201
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2,3 +2,4 @@ external/date/test export-ignore
|
||||
external/nlohmann/doc export-ignore
|
||||
external/nlohmann/test export-ignore
|
||||
external/nlohmann/benchmarks/data export-ignore
|
||||
*.signed binary
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -26,8 +26,8 @@ callgrind.*
|
||||
|
||||
*.sig
|
||||
*.signed
|
||||
!/debian/mainnet/bootstrap.signed
|
||||
!/debian/testnet/bootstrap.signed
|
||||
!/contrib/bootstrap/mainnet.signed
|
||||
!/contrib/bootstrap/testnet.signed
|
||||
*.key
|
||||
|
||||
shadow.data
|
||||
|
@ -51,7 +51,7 @@ option(EMBEDDED_CFG "optimise for older hardware or embedded systems" OFF)
|
||||
option(BUILD_LIBLOKINET "build liblokinet.so" ON)
|
||||
option(SHADOW "use shadow testing framework. linux only" OFF)
|
||||
option(XSAN "use sanitiser, if your system has it (requires -DCMAKE_BUILD_TYPE=Debug)" OFF)
|
||||
option(WITH_JEMALLOC "use jemalloc as allocator" OFF)
|
||||
option(USE_JEMALLOC "Link to jemalloc for memory allocations, if found" ON)
|
||||
option(TESTNET "testnet build" OFF)
|
||||
option(WITH_COVERAGE "generate coverage data" OFF)
|
||||
option(USE_SHELLHOOKS "enable shell hooks on compile time (dangerous)" OFF)
|
||||
@ -299,7 +299,6 @@ endif()
|
||||
add_subdirectory(external)
|
||||
include_directories(SYSTEM external/sqlite_orm/include)
|
||||
|
||||
option(USE_JEMALLOC "Link to jemalloc for memory allocations, if found" ON)
|
||||
if(USE_JEMALLOC AND NOT STATIC_LINK)
|
||||
pkg_check_modules(JEMALLOC jemalloc IMPORTED_TARGET)
|
||||
if(JEMALLOC_FOUND)
|
||||
|
@ -388,6 +388,7 @@ foreach(curl_arch ${curl_arches})
|
||||
--disable-progress-meter --without-brotli --with-zlib=${DEPS_DESTDIR} ${curl_ssl_opts}
|
||||
--without-libmetalink --without-librtmp --disable-versioned-symbols --enable-hidden-symbols
|
||||
--without-zsh-functions-dir --without-fish-functions-dir
|
||||
--without-nghttp3 --without-zstd
|
||||
"CC=${deps_cc}" "CFLAGS=${deps_noarch_CFLAGS}${cflags_extra}" ${curl_extra}
|
||||
BUILD_COMMAND true
|
||||
INSTALL_COMMAND ${_make} -C lib install && ${_make} -C include install
|
||||
|
52
cmake/ngtcp2_lib.cmake
Normal file
52
cmake/ngtcp2_lib.cmake
Normal file
@ -0,0 +1,52 @@
|
||||
# ngtcp2's top-level CMakeLists.txt loads a bunch of crap we don't want (examples, a conflicting
|
||||
# 'check' target, etc.); instead we directly include it's lib subdirectory to build just the
|
||||
# library, but we have to set up a couple things to make that work:
|
||||
function(add_ngtcp2_lib)
|
||||
file(STRINGS ngtcp2/CMakeLists.txt ngtcp2_project_line REGEX "^project\\(ngtcp2 ")
|
||||
if(NOT ngtcp2_project_line MATCHES "^project\\(ngtcp2 VERSION ([0-9]+)\\.([0-9]+)\\.([0-9]+)\\)$")
|
||||
message(FATAL_ERROR "Unable to extract ngtcp2 version from ngtcp2/CMakeLists.txt (found '${ngtcp2_project_line}')")
|
||||
endif()
|
||||
|
||||
set(PACKAGE_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
|
||||
include(ngtcp2/cmake/Version.cmake)
|
||||
HexVersion(PACKAGE_VERSION_NUM ${CMAKE_MATCH_1} ${CMAKE_MATCH_2} ${CMAKE_MATCH_3})
|
||||
configure_file("ngtcp2/lib/includes/ngtcp2/version.h.in" "ngtcp2/lib/includes/ngtcp2/version.h" @ONLY)
|
||||
|
||||
# Checks for header files.
|
||||
include(CheckIncludeFile)
|
||||
check_include_file("arpa/inet.h" HAVE_ARPA_INET_H)
|
||||
check_include_file("netinet/in.h" HAVE_NETINET_IN_H)
|
||||
check_include_file("stddef.h" HAVE_STDDEF_H)
|
||||
check_include_file("stdint.h" HAVE_STDINT_H)
|
||||
check_include_file("stdlib.h" HAVE_STDLIB_H)
|
||||
check_include_file("string.h" HAVE_STRING_H)
|
||||
check_include_file("unistd.h" HAVE_UNISTD_H)
|
||||
check_include_file("sys/endian.h" HAVE_SYS_ENDIAN_H)
|
||||
check_include_file("endian.h" HAVE_ENDIAN_H)
|
||||
check_include_file("byteswap.h" HAVE_BYTESWAP_H)
|
||||
|
||||
include(CheckTypeSize)
|
||||
check_type_size("ssize_t" SIZEOF_SSIZE_T)
|
||||
if(SIZEOF_SSIZE_T STREQUAL "")
|
||||
set(ssize_t ptrdiff_t)
|
||||
endif()
|
||||
|
||||
include(CheckSymbolExists)
|
||||
if(HAVE_ENDIAN_H)
|
||||
check_symbol_exists(be64toh "endian.h" HAVE_BE64TOH)
|
||||
endif()
|
||||
if(NOT HAVE_BE64TO AND HAVE_SYS_ENDIAN_H)
|
||||
check_symbol_exists(be64toh "sys/endian.h" HAVE_BE64TOH)
|
||||
endif()
|
||||
|
||||
check_symbol_exists(bswap_64 "byteswap.h" HAVE_BSWAP_64)
|
||||
|
||||
configure_file(ngtcp2/cmakeconfig.h.in ngtcp2/config.h)
|
||||
include_directories("${CMAKE_CURRENT_BINARY_DIR}/ngtcp2") # for config.h
|
||||
|
||||
add_subdirectory(ngtcp2/lib EXCLUDE_FROM_ALL)
|
||||
|
||||
target_compile_definitions(ngtcp2 PRIVATE -DHAVE_CONFIG_H -D_GNU_SOURCE)
|
||||
endfunction()
|
||||
|
||||
|
@ -7,15 +7,6 @@ endif()
|
||||
include(CheckCXXSourceCompiles)
|
||||
include(CheckLibraryExists)
|
||||
|
||||
if(WITH_JEMALLOC)
|
||||
find_package(Jemalloc REQUIRED)
|
||||
if(NOT JEMALLOC_FOUND)
|
||||
message(FATAL_ERROR "did not find jemalloc")
|
||||
endif()
|
||||
add_definitions(-DUSE_JEMALLOC)
|
||||
message(STATUS "using jemalloc")
|
||||
endif()
|
||||
|
||||
add_definitions(-DUNIX)
|
||||
add_definitions(-DPOSIX)
|
||||
|
||||
|
@ -5,17 +5,12 @@ endif()
|
||||
|
||||
set(TUNTAP_URL "https://build.openvpn.net/downloads/releases/latest/tap-windows-latest-stable.exe")
|
||||
set(TUNTAP_EXE "${CMAKE_BINARY_DIR}/tuntap-install.exe")
|
||||
set(BOOTSTRAP_URL "https://seed.lokinet.org/lokinet.signed")
|
||||
set(BOOTSTRAP_FILE "${CMAKE_BINARY_DIR}/bootstrap.signed")
|
||||
set(BOOTSTRAP_FILE "${PROJECT_SOURCE_DIR}/contrib/bootstrap/mainnet.signed")
|
||||
|
||||
file(DOWNLOAD
|
||||
${TUNTAP_URL}
|
||||
${TUNTAP_EXE})
|
||||
|
||||
file(DOWNLOAD
|
||||
${BOOTSTRAP_URL}
|
||||
${BOOTSTRAP_FILE})
|
||||
|
||||
file(DOWNLOAD
|
||||
${GUI_ZIP_URL}
|
||||
${CMAKE_BINARY_DIR}/lokinet-gui.zip
|
||||
@ -26,7 +21,7 @@ execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf ${CMAKE_BINARY_DIR}/lokinet-g
|
||||
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/gui DESTINATION share COMPONENT gui)
|
||||
install(PROGRAMS ${TUNTAP_EXE} DESTINATION bin COMPONENT tuntap)
|
||||
install(FILES ${BOOTSTRAP_FILE} DESTINATION share COMPONENT lokinet)
|
||||
install(FILES ${BOOTSTRAP_FILE} DESTINATION share COMPONENT lokinet RENAME bootstrap.signed)
|
||||
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY "Lokinet")
|
||||
set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/win32-setup/lokinet.ico")
|
||||
|
BIN
contrib/bootstrap/mainnet.signed
Normal file
BIN
contrib/bootstrap/mainnet.signed
Normal file
Binary file not shown.
BIN
contrib/bootstrap/testnet.signed
Normal file
BIN
contrib/bootstrap/testnet.signed
Normal file
Binary file not shown.
@ -1,3 +1,8 @@
|
||||
set(DEFAULT_WITH_BOOTSTRAP ON)
|
||||
if(APPLE)
|
||||
set(DEFAULT_WITH_BOOTSTRAP OFF)
|
||||
endif()
|
||||
option(WITH_BOOTSTRAP "build lokinet-bootstrap tool" ${DEFAULT_WITH_BOOTSTRAP})
|
||||
|
||||
add_executable(lokinet-vpn lokinet-vpn.cpp)
|
||||
if(APPLE)
|
||||
@ -5,8 +10,12 @@ if(APPLE)
|
||||
enable_lto(lokinet)
|
||||
else()
|
||||
add_executable(lokinet lokinet.cpp)
|
||||
add_executable(lokinet-bootstrap lokinet-bootstrap.cpp)
|
||||
enable_lto(lokinet lokinet-vpn lokinet-bootstrap)
|
||||
enable_lto(lokinet lokinet-vpn)
|
||||
|
||||
if(WITH_BOOTSTRAP)
|
||||
add_executable(lokinet-bootstrap lokinet-bootstrap.cpp)
|
||||
enable_lto(lokinet-bootstrap)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
@ -30,7 +39,7 @@ if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT APPLE)
|
||||
if(WITH_BOOTSTRAP)
|
||||
target_link_libraries(lokinet-bootstrap PUBLIC cpr::cpr)
|
||||
if(NOT WIN32)
|
||||
find_package(OpenSSL REQUIRED)
|
||||
@ -40,7 +49,7 @@ if(NOT APPLE)
|
||||
endif()
|
||||
|
||||
set(exetargets lokinet lokinet-vpn)
|
||||
if(NOT APPLE)
|
||||
if(WITH_BOOTSTRAP)
|
||||
list(APPEND exetargets lokinet-bootstrap)
|
||||
endif()
|
||||
|
||||
@ -53,9 +62,6 @@ foreach(exe ${exetargets})
|
||||
target_link_directories(${exe} PRIVATE /usr/local/lib)
|
||||
endif()
|
||||
target_link_libraries(${exe} PUBLIC liblokinet)
|
||||
if(WITH_JEMALLOC)
|
||||
target_link_libraries(${exe} PUBLIC jemalloc)
|
||||
endif()
|
||||
target_include_directories(${exe} PUBLIC "${PROJECT_SOURCE_DIR}")
|
||||
target_compile_definitions(${exe} PRIVATE -DVERSIONTAG=${GIT_VERSION_REAL})
|
||||
add_log_tag(${exe})
|
||||
@ -79,10 +85,9 @@ if(APPLE)
|
||||
DEPENDS ${PROJECT_SOURCE_DIR}/contrib/lokinet.svg ${PROJECT_SOURCE_DIR}/contrib/macos/mk-icns.sh)
|
||||
add_custom_target(icons DEPENDS ${mac_icon})
|
||||
add_dependencies(lokinet icons lokinet-extension)
|
||||
file(DOWNLOAD "https://seed.lokinet.org/lokinet.signed" ${CMAKE_CURRENT_BINARY_DIR}/bootstrap.signed)
|
||||
add_custom_command(TARGET lokinet
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_BINARY_DIR}/bootstrap.signed
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${PROJECT_SOURCE_DIR}/contrib/bootstrap/mainnet.signed
|
||||
$<TARGET_BUNDLE_DIR:lokinet-extension>/Contents/Resources/bootstrap.signed
|
||||
COMMAND mkdir -p $<TARGET_BUNDLE_DIR:lokinet>/Contents/PlugIns
|
||||
COMMAND cp -a $<TARGET_BUNDLE_DIR:lokinet-extension> $<TARGET_BUNDLE_DIR:lokinet>/Contents/PlugIns/
|
||||
|
@ -18,32 +18,6 @@
|
||||
#include <iostream>
|
||||
#include <future>
|
||||
|
||||
#ifdef USE_JEMALLOC
|
||||
#include <new>
|
||||
#include <jemalloc/jemalloc.h>
|
||||
|
||||
void*
|
||||
operator new(std::size_t sz)
|
||||
{
|
||||
void* ptr = malloc(sz);
|
||||
if (ptr)
|
||||
return ptr;
|
||||
else
|
||||
throw std::bad_alloc{};
|
||||
}
|
||||
void
|
||||
operator delete(void* ptr) noexcept
|
||||
{
|
||||
free(ptr);
|
||||
}
|
||||
|
||||
void
|
||||
operator delete(void* ptr, size_t) noexcept
|
||||
{
|
||||
free(ptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
lokinet_main(int, char**);
|
||||
|
||||
|
@ -10,7 +10,7 @@ to configure lokinet to be an exit add into `lokinet.ini`:
|
||||
keyfile=/var/lib/lokinet/exit.private
|
||||
reachable=1
|
||||
ifaddr=10.0.0.1/16
|
||||
hops=1
|
||||
hops=2
|
||||
paths=8
|
||||
|
||||
|
||||
|
12
external/CMakeLists.txt
vendored
12
external/CMakeLists.txt
vendored
@ -50,15 +50,9 @@ add_library(uvw INTERFACE)
|
||||
target_include_directories(uvw INTERFACE uvw/src)
|
||||
target_link_libraries(uvw INTERFACE libuv)
|
||||
|
||||
|
||||
|
||||
# We don't need any of these as we don't use the ssl crypto helper code at all:
|
||||
set(ENABLE_GNUTLS OFF CACHE BOOL "Disable gnutls for ngtcp2")
|
||||
set(ENABLE_OPENSSL OFF CACHE BOOL "Disable openssl for ngtcp2")
|
||||
set(ENABLE_BORINGSSL OFF CACHE BOOL "Disable boringssl for ngtcp2")
|
||||
|
||||
add_definitions(-D_GNU_SOURCE)
|
||||
add_subdirectory(ngtcp2 EXCLUDE_FROM_ALL)
|
||||
# ngtcp2 needs some massaging to build nicely:
|
||||
include(ngtcp2_lib)
|
||||
add_ngtcp2_lib()
|
||||
|
||||
# cpr configuration. Ideally we'd just do this via add_subdirectory, but cpr's cmake requires
|
||||
# 3.15+, and we target lower than that (and this is fairly simple to build).
|
||||
|
@ -87,46 +87,84 @@ namespace llarp
|
||||
{
|
||||
// This passing address by bytes and using two separate calls for ipv4/ipv6 is gross, but the
|
||||
// alternative is to build up a bunch of crap with va_args, which is slightly more gross.
|
||||
const bool isStandardDNSPort = dns.getPort() == 53;
|
||||
if (dns.isIPv6())
|
||||
{
|
||||
auto ipv6 = dns.getIPv6();
|
||||
static_assert(sizeof(ipv6) == 16);
|
||||
auto* a = reinterpret_cast<const uint8_t*>(&ipv6);
|
||||
resolved_call(
|
||||
bus,
|
||||
"SetLinkDNSEx",
|
||||
"ia(iayqs)",
|
||||
(int32_t)if_ndx,
|
||||
(int)1, // number of "iayqs"s we are passing
|
||||
(int32_t)AF_INET6, // network address type
|
||||
(int)16, // network addr byte size
|
||||
// clang-format off
|
||||
a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
|
||||
a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], // yuck
|
||||
// clang-format on
|
||||
(uint16_t)dns.getPort(),
|
||||
nullptr // dns server name (for TLS SNI which we don't care about)
|
||||
);
|
||||
if (isStandardDNSPort)
|
||||
{
|
||||
resolved_call(
|
||||
bus,
|
||||
"SetLinkDNS",
|
||||
"ia(iay)",
|
||||
(int32_t)if_ndx,
|
||||
(int)1, // number of "iayqs"s we are passing
|
||||
(int32_t)AF_INET6, // network address type
|
||||
(int)16, // network addr byte size
|
||||
// clang-format off
|
||||
a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
|
||||
a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15] // yuck
|
||||
// clang-format on
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
resolved_call(
|
||||
bus,
|
||||
"SetLinkDNSEx",
|
||||
"ia(iayqs)",
|
||||
(int32_t)if_ndx,
|
||||
(int)1, // number of "iayqs"s we are passing
|
||||
(int32_t)AF_INET6, // network address type
|
||||
(int)16, // network addr byte size
|
||||
// clang-format off
|
||||
a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7],
|
||||
a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], // yuck
|
||||
// clang-format on
|
||||
(uint16_t)dns.getPort(),
|
||||
nullptr // dns server name (for TLS SNI which we don't care about)
|
||||
);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto ipv4 = dns.getIPv4();
|
||||
static_assert(sizeof(ipv4) == 4);
|
||||
auto* a = reinterpret_cast<const uint8_t*>(&ipv4);
|
||||
resolved_call(
|
||||
bus,
|
||||
"SetLinkDNSEx",
|
||||
"ia(iayqs)",
|
||||
(int32_t)if_ndx,
|
||||
(int)1, // number of "iayqs"s we are passing
|
||||
(int32_t)AF_INET, // network address type
|
||||
(int)4, // network addr byte size
|
||||
// clang-format off
|
||||
a[0], a[1], a[2], a[3], // yuck
|
||||
// clang-format on
|
||||
(uint16_t)dns.getPort(),
|
||||
nullptr // dns server name (for TLS SNI which we don't care about)
|
||||
);
|
||||
if (isStandardDNSPort)
|
||||
{
|
||||
resolved_call(
|
||||
bus,
|
||||
"SetLinkDNS",
|
||||
"ia(iay)",
|
||||
(int32_t)if_ndx,
|
||||
(int)1, // number of "iayqs"s we are passing
|
||||
(int32_t)AF_INET, // network address type
|
||||
(int)4, // network addr byte size
|
||||
// clang-format off
|
||||
a[0], a[1], a[2], a[3] // yuck
|
||||
// clang-format on
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
resolved_call(
|
||||
bus,
|
||||
"SetLinkDNSEx",
|
||||
"ia(iayqs)",
|
||||
(int32_t)if_ndx,
|
||||
(int)1, // number of "iayqs"s we are passing
|
||||
(int32_t)AF_INET, // network address type
|
||||
(int)4, // network addr byte size
|
||||
// clang-format off
|
||||
a[0], a[1], a[2], a[3], // yuck
|
||||
// clang-format on
|
||||
(uint16_t)dns.getPort(),
|
||||
nullptr // dns server name (for TLS SNI which we don't care about)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (global)
|
||||
|
65
readme.md
65
readme.md
@ -42,12 +42,17 @@ You can install these using:
|
||||
|
||||
If you are not on a platform supported by the debian packages or if you want to build a dev build, this is the most "portable" way to do it:
|
||||
|
||||
$ sudo apt install build-essential cmake git libcap-dev pkg-config automake libtool
|
||||
$ sudo apt install build-essential cmake git libcap-dev pkg-config automake libtool libuv1-dev libsodium-dev libzmq3-dev libcurl4-openssl-dev libevent-dev nettle-dev libunbound-dev libsqlite3-dev
|
||||
$ git clone --recursive https://github.com/oxen-io/lokinet
|
||||
$ cd lokinet
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ cmake .. -DBUILD_STATIC_DEPS=ON -DBUILD_SHARED_LIBS=OFF -DSTATIC_LINK=ON
|
||||
$ cmake .. -DBUILD_STATIC_DEPS=ON -DBUILD_SHARED_LIBS=OFF -DSTATIC_LINK=ON -DCMAKE_BUILD_TYPE=Release
|
||||
$ make -j$(nproc)
|
||||
|
||||
If you dont want to do a static build install the dependancies and run:
|
||||
|
||||
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
|
||||
$ make -j$(nproc)
|
||||
|
||||
install:
|
||||
@ -56,13 +61,9 @@ install:
|
||||
|
||||
### macOS
|
||||
|
||||
You can get the latest stable macos relase from https://lokinet.org/ or check the releases page on github.
|
||||
Lokinet ~~is~~ will be available on the Apple App store.
|
||||
|
||||
alternatively you can build from source, make sure you have cmake, libuv and xcode command line tools installed:
|
||||
|
||||
$ git clone --recursive https://github.com/oxen-io/lokinet
|
||||
$ cd lokinet
|
||||
$ ./contrib/mac.sh -DCODESIGN_KEY='insert your key identity here' -DCODESIGN_TEAM_ID='team id here'
|
||||
Source code compilation of Lokinet by end users is not supported or permitted by apple on their platforms, see [this](contrib/macos/README.txt) for more information. If you find this disagreeable consider using a platform that permits compiling from source.
|
||||
|
||||
### Windows
|
||||
|
||||
@ -77,7 +78,7 @@ additional build requirements:
|
||||
|
||||
setup:
|
||||
|
||||
$ sudo apt install build-essential cmake git pkg-config mingw-w64 nsis ninja-build
|
||||
$ sudo apt install build-essential cmake git pkg-config mingw-w64 nsis cpack automake libtool
|
||||
|
||||
building:
|
||||
|
||||
@ -85,30 +86,6 @@ building:
|
||||
$ cd lokinet
|
||||
$ ./contrib/windows.sh
|
||||
|
||||
### Solaris 2.10+
|
||||
|
||||
NOTE: Oracle Solaris users need to download/compile the TAP driver from http://www.whiteboard.ne.jp/~admin2/tuntap/
|
||||
|
||||
The generated binaries _may_ work on Solaris 2.10 or earlier, you're on your own. (Recommended: `-static-libstdc++ -static-libgcc`, and the TAP driver if not already installed on the target system.)
|
||||
|
||||
Building on a v2.10 or earlier system is unsupported, and may not even work; recent GCC releases have progressively dropped support for older system releases.
|
||||
|
||||
build:
|
||||
|
||||
$ sudo pkg install build-essential gcc8 wget tuntap cmake (optional: ninja ccache - from omnios extra) (OmniOS CE)
|
||||
$ sudo pkg install base-developer-utilities developer-gnu developer-studio-utilities gcc-7 wget cmake (Oracle Solaris, see note)
|
||||
$ sudo pkg install build-essential wget gcc-8 documentation/tuntap header-tun tun (optional: ninja ccache) (all other SunOS)
|
||||
$ git clone --recursive https://github.com/oxen-io/lokinet
|
||||
$ cd lokinet
|
||||
$ mkdir build
|
||||
$ cd build
|
||||
$ cmake ..
|
||||
$ make -j$(nproc)
|
||||
|
||||
install:
|
||||
|
||||
$ sudo make install
|
||||
|
||||
### FreeBSD
|
||||
|
||||
build:
|
||||
@ -131,24 +108,16 @@ install (root):
|
||||
|
||||
When running from debian package the following steps are not needed as it is already ready to use.
|
||||
|
||||
## Create default config
|
||||
|
||||
to configure as client:
|
||||
|
||||
$ lokinet -g
|
||||
$ lokinet-bootstrap
|
||||
|
||||
to configure as relay:
|
||||
|
||||
$ lokinet -r -g
|
||||
$ lokinet-bootstrap
|
||||
|
||||
|
||||
## Running on Linux
|
||||
## Running on Linux (without debs)
|
||||
|
||||
**DO NOT RUN AS ROOT**, run as normal user.
|
||||
|
||||
to run, after you create default config:
|
||||
set up the initial configs:
|
||||
|
||||
$ lokinet -g
|
||||
$ lokinet-bootstrap
|
||||
|
||||
after you create default config, run it:
|
||||
|
||||
$ lokinet
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user