diff --git a/.dappnode_profile b/.dappnode_profile
new file mode 100755
index 00000000..baefcefe
--- /dev/null
+++ b/.dappnode_profile
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+# Script sourced by installer script `dappnode_install.sh`
+# It is sourced to grab and download the core packages content from github and/or IPFS
+# - Github: i.e `BIND_VERSION=0.2.11`
+# - IPFS: i.e `DAPPMANAGER_VERSION=/ipfs/QmRe6V5vZYFv68WeX3vh2N9hVEeDnp8f7rmxP47xjGNrNF:0.2.71` This string will be splitted by the semicolon `:`
+# - `/ipfs/QmRe6...` -> indicates the ipfs hash used to download the content
+# - `0.2.71` -> indicates the version. It must be the one uploaded to such IPFS hash
+
+export BIND_VERSION="${BIND_VERSION:-0.2.11}"
+export IPFS_VERSION="${IPFS_VERSION:-0.2.23}"
+export VPN_VERSION="${VPN_VERSION:-0.2.10}"
+export DAPPMANAGER_VERSION="${DAPPMANAGER_VERSION:-0.2.99}"
+export WIFI_VERSION="${WIFI_VERSION:-0.2.9}"
+export WIREGUARD_VERSION="${WIREGUARD_VERSION:-0.1.3}"
+export HTTPS_VERSION="${HTTPS:-0.2.2}"
+
+export DAPPNODE_DIR="/usr/src/dappnode"
+export DAPPNODE_CORE_DIR="${DAPPNODE_DIR}/DNCORE"
+
+#!ISOBUILD Do not modify, variables above imported for ISO build
+DNCORE_YMLS=$(find $DAPPNODE_CORE_DIR -name "docker-compose-*.yml" -printf "-f %p ")
+# shellcheck disable=SC2207
+# shellcheck disable=SC2034
+DNCORE_YMLS_ARRAY=($(find /usr/src/dappnode/DNCORE -name "docker-compose-*.yml" | sort))
+
+# Returns docker core containers status
+alias dappnode_status='docker compose $DNCORE_YMLS ps'
+# Stop docker core containers
+alias dappnode_stop='docker compose $DNCORE_YMLS stop && docker stop $(docker container ls -a -q -f name=DAppNode*)'
+# Start docker core containers
+alias dappnode_start='docker compose $DNCORE_YMLS up -d && docker start $(docker container ls -a -q -f name=DAppNode*)'
+# Remove docker core containers. This does not remove named volumes
+alias dappnode_down='docker compose $DNCORE_YMLS down'
+# Return open-vpn credentials from a specific user. e.g: dappnode_get dappnode_admin
+alias dappnode_openvpn_get='docker exec -i DAppNodeCore-vpn.dnp.dappnode.eth vpncli get'
+# Return open-vpn admin credentials
+alias dappnode_openvpn='docker exec -i DAppNodeCore-vpn.dnp.dappnode.eth getAdminCredentials'
+# Return wifi credentials (ssid and password)
+alias dappnode_wifi='cat /usr/src/dappnode/DNCORE/docker-compose-wifi.yml | grep "SSID\|WPA_PASSPHRASE"'
+# Return remote credentials in plain text. OPTIONS:
+# --qr (QR format). --local (local creds for NAT loopback issues)
+alias dappnode_wireguard='docker exec -i DAppNodeCore-api.wireguard.dnp.dappnode.eth getWireguardCredentials'
+# Execute access_credentials.sh script to check for connectivity methods
+alias dappnode_connect='/usr/bin/bash /usr/src/dappnode/scripts/dappnode_access_credentials.sh'
+# Return all available commands
+alias dappnode_help='echo -e "\n\tDAppNode commands available:\n\n\tdappnode_help\t\tprints out this message\n\n\tdappnode_wifi\t\tget wifi credentials (SSID and password)\n\n\tdappnode_openvpn\tget Open VPN credentials\n\n\tdappnode_wireguard\tget Wireguard VPN credentials (dappnode_wireguard --help for more info)\n\n\tdappnode_connect\tcheck connectivity methods available in DAppNode\n\n\tdappnode_status\t\tget status of dappnode containers\n\n\tdappnode_start\t\tstart dappnode containers\n\n\tdappnode_stop\t\tstop dappnode containers\n"'
+# Compose alias for backward compatibility
+if docker compose version >/dev/null 2>&1; then
+ alias docker-compose='docker compose'
+fi
+
+return
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 00000000..3bd40ef1
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,7 @@
+LICENSE
+*.md
+.gitignore
+.github
+images
+test
+doc
\ No newline at end of file
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 00000000..7e0d66f0
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @dappnode/core
diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md
new file mode 100644
index 00000000..0316c4a7
--- /dev/null
+++ b/.github/CODE_OF_CONDUCT.md
@@ -0,0 +1,46 @@
+# Contributor Covenant Code of Conduct
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+- Using welcoming and inclusive language
+- Being respectful of differing viewpoints and experiences
+- Gracefully accepting constructive criticism
+- Focusing on what is best for the community
+- Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+- The use of sexualized language or imagery and unwelcome sexual attention or advances
+- Trolling, insulting/derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or electronic address, without explicit permission
+- Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [Element channel](https://app.element.io/#/room/#DAppNode:matrix.org). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
+
+[homepage]: http://contributor-covenant.org
+[version]: http://contributor-covenant.org/version/1/4/
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
new file mode 100644
index 00000000..f4fc6156
--- /dev/null
+++ b/.github/CONTRIBUTING.md
@@ -0,0 +1,57 @@
+# Contributing
+
+When bringing people on as contributors we prefer that they start with an issue tagged [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
+
+After a contributor has shown they're a good fit and have completed 1 or 2 issues labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) with pull requests that have been accepted feel free of moving on to other issues. We're thrilled to see new contributors.
+
+If you want to better understand how does the development process works, please refer to our [wiki pages](https://github.com/dappnode/DAppNode/wiki)
+
+## Setup
+
+In order to get the repositories setup before contributions refer to the [README.md](https://github.com/dappnode/DAppNode/blob/master/README.md) file.
+
+## Contribution Steps
+
+1. _Find a suitable issue_
+
+ If this is your first time look for an issue labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) otherwise look for issues labeled [help wanted](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) . If another issue jumps out at you please engage on the issue before starting it.
+
+2. _Assign yourself the issue_
+
+ Let us know you're working on it! We hate wasted labour so it's always helpful to know what our community contributors are working on.
+
+3. _Fork and clone [DAppNode](://github.com/dappnode/DAppNode)_
+
+ In general it's a good practice to fork into your own repository. We prefer if issues
+ are addressed in a branch with the issue number in it's name.
+ i.e. `29_this_is_an_issue`
+
+4. _Make contributions_
+
+ Make all the changes needed to address the given issue.
+
+5. _Add testing_
+
+ In general we aim for full test coverage. For this reason most issues completed should include full testing. If you think there should be an exception for your issue please reach out.
+
+6. _Run previous tests_
+
+ Make sure that the changes that you've made don't break anything! Ensure that running `npm test` and `npm eslint` doesn't throw any new and unexpected errors.
+
+7. _Push all your work_
+
+ At this point the issue should be addressed, new testing should be in place, and all old tests should be passing.
+
+8. _Create a Pull Request_
+
+ At this point you should either have a forked repository with your issue fixes and it is time to put in a PR. Make sure that your PR has something like `addresses #26` or `closes #26` The most important thing is that it has the relevant issue number referenced in the body of the PR.
+
+9. _Make noise!_
+
+ Get in our [Element](https://app.element.io/#/room/#DAppNode:matrix.org) and point to your new PR. Let us know you've tackled your first, third or 90th issue with us. We'll review it and everybody will get a warm feeling of accomplishment.
+
+10. _rinse, repeat_
+
+ Find another issue, get more involved, make noise in our Riot, or find issues we may have missed. You've completed your first step to becoming a contributor. **You're helping to Decentralize the FUTURE**!
+
+If you still have any further questions about contribution feel free to reach out to `@eduadiez:matrix.org`, `@yalormewn:matrix.org`, `@liondapp:matrix.org`, or just make noise in the `#DAppNode` channel on [Element](https://app.element.io/#/room/#DAppNode:matrix.org).
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000..a765d828
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,42 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title:
+labels:
+assignees:
+---
+
+
+
+
+**Describe the bug**
+
+
+
+**To Reproduce**
+
+
+
+**Expected behavior**
+
+
+
+**Screenshots**
+
+
+
+**DAppNode version:**
+
+
+
+- Package version:
+- OS:
+- Browser
+
+**Additional context**
+
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000..11bbebfd
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,26 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ""
+labels: ""
+assignees: ""
+---
+
+
+
+
+**Is your feature request related to a problem? Please describe.**
+
+
+
+**Describe the solution you'd like**
+
+
+
+**Describe alternatives you've considered**
+
+
+
+**Additional context**
+
+
diff --git a/.github/ISSUE_TEMPLATE/pull_request.md b/.github/ISSUE_TEMPLATE/pull_request.md
new file mode 100644
index 00000000..27bc45f5
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/pull_request.md
@@ -0,0 +1,43 @@
+# Pull Request Template
+
+## Description
+
+Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change.
+
+Fixes # (issue)
+
+## Type of change
+
+Please delete options that are not relevant.
+
+- [ ] Bug fix (non-breaking change which fixes an issue)
+- [ ] New feature (non-breaking change which adds functionality)
+- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
+- [ ] This change requires a documentation update
+
+## How Has This Been Tested?
+
+Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration
+
+- [ ] ISO install
+- [ ] Script install
+- [ ] Other (please detail)
+
+**Test Configuration**:
+
+- DAppNode version:
+- Hardware:
+- Toolchain:
+- SDK:
+
+## Checklist
+
+- [ ] My code follows the style guidelines of this project
+- [ ] I have performed a self-review of my own code
+- [ ] I have commented my code, particularly in hard-to-understand areas
+- [ ] I have made corresponding changes to the documentation
+- [ ] My changes generate no new warnings
+- [ ] I have added tests that prove my fix is effective or that my feature works
+- [ ] New and existing unit tests pass locally with my changes
+- [ ] Any dependent changes have been merged and published in downstream modules
+- [ ] I have checked my code and corrected any misspellings
diff --git a/.github/stale.yml b/.github/stale.yml
new file mode 100644
index 00000000..ba6578aa
--- /dev/null
+++ b/.github/stale.yml
@@ -0,0 +1,34 @@
+# Config for https://github.com/apps/stale
+
+# Number of days of inactivity before an issue becomes stale
+daysUntilStale: 60
+
+# Number of days of inactivity before a stale issue is closed
+daysUntilClose: 30
+
+# Issues with these labels will never be considered stale
+exemptLabels:
+ - pinned
+ - security
+
+# Set to true to ignore issues in a project (defaults to false)
+exemptProjects: false
+
+# Set to true to ignore issues in a milestone (defaults to false)
+exemptMilestones: true
+
+# Set to true to ignore issues with an assignee (defaults to false)
+exemptAssignees: true
+
+# Label to use when marking as stale
+staleLabel: bot:stale
+
+# Comment to post when marking an issue as stale. Set to `false` to disable
+markComment: >
+ This issue has been automatically marked as stale because it has not had
+ recent activity. It will be closed if no further activity occurs. Thank you
+ for your contributions!
+
+# Comment to post when closing a stale Issue or Pull Request.
+closeComment: >
+ This issue or pull request has been automatically been closed due to inactivity.
diff --git a/.github/workflows/artifacts.yml b/.github/workflows/artifacts.yml
new file mode 100644
index 00000000..e48a1e8f
--- /dev/null
+++ b/.github/workflows/artifacts.yml
@@ -0,0 +1,163 @@
+name: Artifacts
+on:
+ workflow_dispatch:
+ inputs:
+ core:
+ description: "Version of the Core. Must be prefixed with v (e.g v0.2.47)"
+ required: true
+ dappmanager:
+ description: "Version of the Dappmanager. Only numbers"
+ required: true
+ wifi:
+ description: "Version of the WiFi Package. Only numbers"
+ required: true
+ bind:
+ description: "Version of the Bind Package. Only numbers"
+ required: true
+ ipfs:
+ description: "Version of the IPFS Package. Only numbers"
+ required: true
+ https:
+ description: "Version of the HTTPS Package. Only numbers"
+ required: true
+ wireguard:
+ description: "Version of the Wireguard Package. Only numbers"
+ required: true
+ vpn:
+ description: "Version of the OpenVPN Package. Only numbers"
+ required: true
+
+env:
+ BIND_VERSION: ${{ github.event.inputs.bind }}
+ IPFS_VERSION: ${{ github.event.inputs.ipfs }}
+ DAPPMANAGER_VERSION: ${{ github.event.inputs.dappmanager }}
+ WIFI_VERSION: ${{ github.event.inputs.wifi }}
+ WIREGUARD_VERSION: ${{ github.event.inputs.wireguard }}
+ HTTPS_VERSION: ${{ github.event.inputs.https }}
+ VPN_VERSION: ${{ github.event.inputs.vpn }}
+ CORE_VERSION: ${{ github.event.inputs.core }}
+
+jobs:
+ pre-release:
+ name: create artifacts
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ shell: bash
+
+ steps:
+ # Regex for versions introduced
+ - name: Check versions regex
+ run: |
+ [[ $BIND_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $IPFS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $DAPPMANAGER_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
+ [[ $WIFI_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $WIREGUARD_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $HTTPS_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
+ [[ $VPN_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ $CORE_VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "versions introduced in wrong format"; exit 1; }
+
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ # Edit the profile with the new versions introduced
+ - name: Set new versions
+ run: |
+ sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${BIND_VERSION}"/" .dappnode_profile
+ sed -i -e "/IPFS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${IPFS_VERSION}"/" .dappnode_profile
+ sed -i -e "/VPN_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${VPN_VERSION}"/" .dappnode_profile
+ sed -i -e "/DAPPMANAGER_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${DAPPMANAGER_VERSION}"/" .dappnode_profile
+ sed -i -e "/WIFI_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${WIFI_VERSION}"/" .dappnode_profile
+ sed -i -e "/WIREGUARD_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${WIREGUARD_VERSION}"/" .dappnode_profile
+ sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${HTTPS_VERSION}"/" .dappnode_profile
+ cat .dappnode_profile
+
+ # Debian ISO ATTENDED
+ - name: Build Debian attended
+ run: |
+ export BASE_OS=debian
+ export UNATTENDED=false
+ docker compose up --build
+
+ - name: Check Debian ISO attended
+ run: |
+ ls -lrt images/Dappnode-debian-*.iso
+
+ - name: Set Debian Dappnode attended ISO name
+ run: |
+ file=$(ls images/Dappnode-debian-*.iso)
+ attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ mv "$file" "$attended_filename"
+
+ # Debian ISO UNATTENDED
+ - name: Build Debian unattended
+ run: |
+ export BASE_OS=debian
+ export UNATTENDED=true
+ docker compose up --build
+
+ - name: Check Debian ISO unattended
+ run: |
+ ls -lrt images/Dappnode-debian-*.iso
+
+ # Set new name for the release asset
+ - name: Set Dappnode unttended ISO name
+ run: |
+ file=$(ls images/Dappnode-debian-*.iso)
+
+ core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+
+ mv "$file" "$unattended_filename"
+
+ # Ubuntu ISO ATTENDED
+ - name: Build Ubuntu attended
+ run: |
+ export BASE_OS=ubuntu
+ export UNATTENDED=false
+ docker compose up --build
+
+ - name: Check Ubuntu ISO attended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode attended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ attended_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ mv "$file" "$attended_filename"
+
+ # Ubuntu ISO UNATTENDED
+ - name: Build Ubuntu unattended
+ run: |
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
+ docker compose up --build
+
+ - name: Check Ubuntu ISO unattended
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
+
+ - name: Set Ubuntu Dappnode unattended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ core_filename="${file/images\/Dappnode-/Dappnode-${CORE_VERSION}-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ mv "$file" "$unattended_filename"
+
+ - name: Create dappnode_profile.sh
+ run: |
+ cp .dappnode_profile dappnode_profile.sh
+
+ # ARTIFACTS ASSETS
+ - name: Artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: test-artifact
+ path: |
+ ./Dappnode-debian-*.iso
+ ./Dappnode-ubuntu-*.iso
+ ./scripts/dappnode_install.sh
+ ./scripts/dappnode_install_pre.sh
+ ./scripts/dappnode_uninstall.sh
+ ./scripts/dappnode_access_credentials.sh
+ dappnode_profile.sh
+
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml
new file mode 100644
index 00000000..58b25b85
--- /dev/null
+++ b/.github/workflows/linter.yml
@@ -0,0 +1,35 @@
+name: Lint Code Base
+
+#
+# Documentation:
+# https://help.github.com/en/articles/workflow-syntax-for-github-actions
+#
+on:
+ workflow_dispatch:
+ push:
+ branches-ignore:
+ - "master"
+ pull_request:
+ branches:
+ - "master"
+
+jobs:
+ build:
+ name: Lint Code Base
+ runs-on: ubuntu-latest
+ continue-on-error: true
+
+ steps:
+ - name: Checkout Code
+ uses: actions/checkout@v4
+ with:
+ # Full git history is needed to get a proper list of changed files within `super-linter`
+ fetch-depth: 0
+
+ - name: Lint Code Base
+ uses: super-linter/super-linter@v5
+ env:
+ VALIDATE_ALL_CODEBASE: false
+ FILTER_REGEX_EXCLUDE: .github/*
+ DEFAULT_BRANCH: master
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 00000000..94223b52
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,251 @@
+name: Pre-release
+on:
+ workflow_dispatch:
+ inputs:
+ core:
+ description: "Version of the Core. Must be prefixed with v (e.g v0.2.47)"
+ required: true
+ dappmanager:
+ description: "Version of the Dappmanager. Only numbers"
+ required: true
+ wifi:
+ description: "Version of the WiFi Package. Only numbers"
+ required: true
+ bind:
+ description: "Version of the Bind Package. Only numbers"
+ required: true
+ ipfs:
+ description: "Version of the IPFS Package. Only numbers"
+ required: true
+ https:
+ description: "Version of the HTTPS Package. Only numbers"
+ required: true
+ wireguard:
+ description: "Version of the Wireguard Package. Only numbers"
+ required: true
+ vpn:
+ description: "Version of the OpenVPN Package. Only numbers"
+ required: true
+
+jobs:
+ set-versions:
+ name: Set versions and check regex
+ runs-on: ubuntu-latest
+ outputs:
+ bind: ${{ steps.set_outputs.outputs.bind }}
+ ipfs: ${{ steps.set_outputs.outputs.ipfs }}
+ dappmanager: ${{ steps.set_outputs.outputs.dappmanager }}
+ wifi: ${{ steps.set_outputs.outputs.wifi }}
+ wireguard: ${{ steps.set_outputs.outputs.wireguard }}
+ https: ${{ steps.set_outputs.outputs.https }}
+ vpn: ${{ steps.set_outputs.outputs.vpn }}
+ core: ${{ steps.set_outputs.outputs.core }}
+ steps:
+ - name: Check versions regex
+ run: |
+ [[ "${{ github.event.inputs.bind }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.ipfs }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.dappmanager }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
+ [[ "${{ github.event.inputs.wifi }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.wireguard }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.https }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && \
+ [[ "${{ github.event.inputs.vpn }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && [[ "${{ github.event.inputs.core }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo "versions introduced in wrong format"; exit 1; }
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Set new versions
+ run: |
+ sed -i -e "/BIND_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.bind }}"/" .dappnode_profile
+ sed -i -e "/IPFS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.ipfs }}"/" .dappnode_profile
+ sed -i -e "/VPN_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.vpn }}"/" .dappnode_profile
+ sed -i -e "/DAPPMANAGER_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.dappmanager }}"/" .dappnode_profile
+ sed -i -e "/WIFI_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.wifi }}"/" .dappnode_profile
+ sed -i -e "/WIREGUARD_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.wireguard }}"/" .dappnode_profile
+ sed -i -e "/HTTPS_VERSION/s/[0-9]*\.[0-9]*\.[0-9]*/"${{ github.event.inputs.https }}"/" .dappnode_profile
+ cat .dappnode_profile
+ - name: Create dappnode_profile.sh
+ run: cp .dappnode_profile dappnode_profile.sh
+ - name: Upload dappnode_profile.sh
+ uses: actions/upload-artifact@v4
+ with:
+ name: dappnode_profile
+ path: dappnode_profile.sh
+ - name: Set outputs
+ id: set_outputs
+ run: |
+ echo "core=${{ github.event.inputs.core }}" >> $GITHUB_OUTPUT
+ echo "bind=${{ github.event.inputs.bind }}" >> $GITHUB_OUTPUT
+ echo "ipfs=${{ github.event.inputs.ipfs }}" >> $GITHUB_OUTPUT
+ echo "dappmanager=${{ github.event.inputs.dappmanager }}" >> $GITHUB_OUTPUT
+ echo "wifi=${{ github.event.inputs.wifi }}" >> $GITHUB_OUTPUT
+ echo "wireguard=${{ github.event.inputs.wireguard }}" >> $GITHUB_OUTPUT
+ echo "https=${{ github.event.inputs.https }}" >> $GITHUB_OUTPUT
+ echo "vpn=${{ github.event.inputs.vpn }}" >> $GITHUB_OUTPUT
+
+ build-debian-attended:
+ name: Build Debian attended ISO
+ runs-on: ubuntu-latest
+ needs: set-versions
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download dappnode_profile
+ uses: actions/download-artifact@v4
+ with:
+ name: dappnode_profile
+ - name: Rename dappnode_profile.sh to .dappnode_profile
+ run: mv dappnode_profile.sh .dappnode_profile
+ - name: Build Debian attended
+ run: |
+ export BASE_OS=debian
+ export UNATTENDED=false
+ docker compose up --build
+ - name: Set Debian Dappnode attended ISO name
+ run: |
+ file=$(ls images/Dappnode-debian-*.iso)
+ filename=$(basename "$file")
+ core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-debian-${filename#Dappnode-debian-}"
+ attended_filename="${core_filename/%.iso/-attended.iso}"
+ sudo cp "$file" "images/$attended_filename"
+ - name: Upload Debian attended ISO
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-attended-iso
+ path: images/*-attended.iso
+ - name: Get SHA-256 Debian attended
+ run: |
+ file=$(find images/ -type f -name '*-attended.iso')
+ shasum -a 256 $file > SHASUM_DEBIAN_ATTENDED.txt
+ - name: Upload Debian attended SHA256
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-attended-sha
+ path: SHASUM_DEBIAN_ATTENDED.txt
+
+ build-debian-unattended:
+ name: Build Debian unattended ISO
+ runs-on: ubuntu-latest
+ needs: set-versions
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download dappnode_profile
+ uses: actions/download-artifact@v4
+ with:
+ name: dappnode_profile
+ - name: Rename dappnode_profile.sh to .dappnode_profile
+ run: mv dappnode_profile.sh .dappnode_profile
+ - name: Build Debian unattended
+ run: |
+ export BASE_OS=debian
+ export UNATTENDED=true
+ docker compose build
+ docker compose up
+ - name: Set Debian Dappnode unattended ISO name
+ run: |
+ file=$(ls images/Dappnode-debian-*.iso)
+ filename=$(basename "$file")
+ core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-debian-${filename#Dappnode-debian-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ sudo cp "$file" "images/$unattended_filename"
+ - name: Upload Debian unattended ISO
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-unattended-iso
+ path: images/*-unattended.iso
+ - name: Get SHA-256 Debian unattended
+ run: |
+ file=$(find images/ -type f -name '*-unattended.iso')
+ shasum -a 256 $file > SHASUM_DEBIAN_UNATTENDED.txt
+ - name: Upload Debian unattended SHA256
+ uses: actions/upload-artifact@v4
+ with:
+ name: debian-unattended-sha
+ path: SHASUM_DEBIAN_UNATTENDED.txt
+
+ build-ubuntu-unattended:
+ name: Build Ubuntu unattended ISO
+ runs-on: ubuntu-latest
+ needs: set-versions
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download dappnode_profile
+ uses: actions/download-artifact@v4
+ with:
+ name: dappnode_profile
+ - name: Rename dappnode_profile.sh to .dappnode_profile
+ run: mv dappnode_profile.sh .dappnode_profile
+ - name: Build Ubuntu unattended
+ run: |
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
+ docker compose up --build
+ - name: Set Ubuntu Dappnode unattended ISO name
+ run: |
+ file=$(ls images/Dappnode-ubuntu-*.iso)
+ filename=$(basename "$file")
+ core_filename="Dappnode-${{ needs.set-versions.outputs.core }}-ubuntu-${filename#Dappnode-ubuntu-}"
+ unattended_filename="${core_filename/%.iso/-unattended.iso}"
+ sudo cp "$file" "images/$unattended_filename"
+ - name: Get SHA-256 Ubuntu unattended
+ run: |
+ file=$(find images/ -type f -name '*-ubuntu-*-unattended.iso')
+ shasum -a 256 $file > SHASUM_UBUNTU_UNATTENDED.txt
+ - name: Upload Ubuntu unattended ISO and SHA256 to SSH
+ uses: appleboy/scp-action@v0.1.7
+ with:
+ host: ${{ secrets.ISO_SSH_HOST }}
+ username: ${{ secrets.ISO_SSH_USER }}
+ key: ${{ secrets.ISO_SSH_PRIVATE_KEY }}
+ port: ${{ secrets.SSH_PORT }}
+ source: SHASUM_UBUNTU_UNATTENDED.txt,images/*-ubuntu-*-unattended.iso
+ target: ${{ secrets.ISO_SSH_PATH }}
+ overwrite: true
+ - name: Upload Ubuntu unattended SHA256 as artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: ubuntu-unattended-sha
+ path: SHASUM_UBUNTU_UNATTENDED.txt
+
+ release:
+ name: Combine, release, and upload
+ runs-on: ubuntu-latest
+ needs:
+ - set-versions
+ - build-debian-attended
+ - build-debian-unattended
+ - build-ubuntu-unattended
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download all artifacts
+ uses: actions/download-artifact@v4
+ with:
+ path: ./artifacts
+ - name: Move ISOs and SHAs
+ run: |
+ mkdir -p images
+ mv artifacts/debian-attended-iso/* images/
+ mv artifacts/debian-unattended-iso/* images/
+ mv artifacts/debian-attended-sha/* .
+ mv artifacts/debian-unattended-sha/* .
+ mv artifacts/ubuntu-unattended-sha/* .
+ mv artifacts/dappnode_profile/* .
+ - name: Write release content
+ run: |
+ SHASUM_DEBIAN_ATTENDED=$(cat SHASUM_DEBIAN_ATTENDED.txt)
+ SHASUM_DEBIAN_UNATTENDED=$(cat SHASUM_DEBIAN_UNATTENDED.txt)
+ SHASUM_UBUNTU_UNATTENDED=$(cat SHASUM_UBUNTU_UNATTENDED.txt)
+ echo -en "# Versions\n| Package | Version |\n|---|---|\nbind.dnp.dappnode.eth|${{ needs.set-versions.outputs.bind }}|\n|ipfs.dnp.dappnode.eth|${{ needs.set-versions.outputs.ipfs }}|\n|vpn.dnp.dappnode.eth |${{ needs.set-versions.outputs.vpn }}|\n|dappmanager.dnp.dappnode.eth|${{ needs.set-versions.outputs.dappmanager }}|\n|wifi.dnp.dappnode.eth|${{ needs.set-versions.outputs.wifi }}|\n|https.dnp.dappnode.eth|${{ needs.set-versions.outputs.https }}|\n|wireguard.dnp.dappnode.eth|${{ needs.set-versions.outputs.wireguard }}|\n# Changes\nChanges implemented in release ${{ needs.set-versions.outputs.core }}\n# Debian Attended version\nInstall and customize DAppNode using the attended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso**\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64.iso\n$SHASUM_DEBIAN_ATTENDED\n```\n# Debian Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso**\nDo a reboot right after the installation\n:warning: **Warning**: This ISO will install Dappnode automatically, deleting all existing partitions on the disk\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-debian-bookworm-amd64-unattended.iso\n$SHASUM_DEBIAN_UNATTENDED\n```\n# Ubuntu Unattended version\nInstall DAppNode easily using the unattended ISO: **DAppNode-${{ needs.set-versions.outputs.core }}-ubuntu-bookworm-amd64-unattended.iso**\n\n## ISO SHA-256 Checksum\n```\nshasum -a 256 DAppNode-${{ needs.set-versions.outputs.core }}-ubuntu-bookworm-amd64-unattended.iso\n$SHASUM_UBUNTU_UNATTENDED\n```\nUploaded at https://ubuntu.iso.dappnode.io\n# DAppNode for Raspberry Pi 4 64bit\n[Instructions](https://github.com/dappnode/DAppNode/wiki/DAppNodeARM-Installation-Guide)\n\ndefault login data:\n - **__user__**: dappnode\n - **__password__**: dappnodepi" > CHANGELOG.md
+ cat CHANGELOG.md
+ - name: Print images directory
+ run: |
+ echo "Images directory content:"
+ ls -lrt images/
+ - name: Create pre-release
+ uses: softprops/action-gh-release@v2
+ with:
+ tag_name: ${{ needs.set-versions.outputs.core }}
+ prerelease: true
+ files: |
+ ./images/Dappnode-*-debian-*-attended.iso
+ ./images/Dappnode-*-debian-*-unattended.iso
+ ./scripts/dappnode_install*.sh
+ ./scripts/dappnode_uninstall*.sh
+ ./scripts/dappnode_access_credentials*.sh
+ dappnode_profile.sh
+ body_path: CHANGELOG.md
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 00000000..d7c85e1b
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,66 @@
+name: Scripts
+on:
+ workflow_dispatch:
+ push:
+ branches-ignore: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ scripts:
+ name: test scripts
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup Test Environment
+ run: |
+ sudo /bin/bash ./test/environment_setup.sh
+ - name: Install Prerequisites
+ run: |
+ sudo /bin/bash ./scripts/dappnode_install_pre.sh UPDATE
+ - name: Install DAppNode
+ run: |
+ sudo /bin/bash ./scripts/dappnode_install.sh
+ - name: Show installation logs
+ run: |
+ cat /usr/src/dappnode/logs/install.log
+ cat /usr/src/dappnode/logs/dappnode_install.log
+ - name: Uninstall DAppNode
+ run: |
+ sudo /bin/bash ./scripts/dappnode_uninstall.sh y
+
+ iso:
+ name: test Debian and Ubuntu ISO
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ # Create Debian ISO
+ - name: create Debian ISO
+ run: |
+ export BASE_OS=debian
+ export UNATTENDED=true
+ docker compose up --build
+ ls images/
+
+ # Verify Debian ISO creation
+ - name: verify Debian ISO
+ run: |
+ ls -lrt images/Dappnode-debian-*.iso
+
+ # Create Ubuntu ISO
+ - name: create Ubuntu ISO
+ run: |
+ export BASE_OS=ubuntu
+ export UNATTENDED=true
+ docker compose up --build
+ ls images/
+
+ # Verify Ubuntu ISO creation
+ - name: verify Ubuntu ISO
+ run: |
+ ls -lrt images/Dappnode-ubuntu-*.iso
diff --git a/.github/workflows/validate_autoinstall.yml b/.github/workflows/validate_autoinstall.yml
new file mode 100644
index 00000000..45b71ac0
--- /dev/null
+++ b/.github/workflows/validate_autoinstall.yml
@@ -0,0 +1,42 @@
+name: Validate Ubuntu autoinstall YAML Files
+
+on:
+ push:
+ pull_request:
+
+jobs:
+ validate:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install check-jsonschema yamllint yq
+
+ - name: Lint attended autoinstall.yaml
+ run: yamllint -c .yamllint iso/preseeds/ubuntu/autoinstall.yaml
+
+ - name: Lint unattended autoinstall.yaml
+ run: yamllint -c .yamllint iso/preseeds/ubuntu/autoinstall_unattended.yaml
+
+ - name: Download JSON schema
+ run: curl -o schema.json https://raw.githubusercontent.com/canonical/subiquity/main/autoinstall-schema.json
+
+ - name: Extract autoinstall properties from YAML files
+ run: |
+ yq '.autoinstall' iso/preseeds/ubuntu/autoinstall.yaml > attended.yaml
+ yq '.autoinstall' iso/preseeds/ubuntu/autoinstall_unattended.yaml > unattended.yaml
+
+ - name: Validate attended autoinstall.yaml
+ run: |
+ check-jsonschema --schemafile schema.json attended.yaml
+
+ - name: Validate unattended autoinstall.yaml
+ run: |
+ check-jsonschema --schemafile schema.json unattended.yaml
diff --git a/.gitignore b/.gitignore
index 9e3a5f25..ed3c1e18 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-docs/_build
\ No newline at end of file
+docs/_build
+images
\ No newline at end of file
diff --git a/.yamllint b/.yamllint
new file mode 100644
index 00000000..c9b624e1
--- /dev/null
+++ b/.yamllint
@@ -0,0 +1,6 @@
+# .yamllint
+extends: default
+
+rules:
+ line-length:
+ max: 150
\ No newline at end of file
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 887d3a92..0316c4a7 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -8,19 +8,19 @@ In the interest of fostering an open and welcoming environment, we as contributo
Examples of behavior that contributes to creating a positive environment include:
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
+- Using welcoming and inclusive language
+- Being respectful of differing viewpoints and experiences
+- Gracefully accepting constructive criticism
+- Focusing on what is best for the community
+- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
-* The use of sexualized language or imagery and unwelcome sexual attention or advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a professional setting
+- The use of sexualized language or imagery and unwelcome sexual attention or advances
+- Trolling, insulting/derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or electronic address, without explicit permission
+- Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
@@ -34,7 +34,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe
## Enforcement
-Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [Riot channel](https://riot.im/app/#/room/#dappnode:matrix.org). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [Element channel](https://app.element.io/#/room/#DAppNode:matrix.org). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 096997e7..f4fc6156 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,54 +1,57 @@
-# Contributing
-When bringing people on as contributors we prefer that they start with an issue tagged [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). After a contributor has shown they're a good fit and have completed 1 or 2 issues labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) with pull requests that have been accepted feel free of moving on to other issues. We're thrilled to see new contributors.
-
-If you want to better understand how does the development process works, please refer to our [wiki pages](https://github.com/dappnode/DAppNode/wiki)
-
-## Setup
-In order to get the repositories setup before contributions refer to the [README.md](https://github.com/dappnode/DAppNode/blob/master/README.md) file.
-
-## Contribution Steps
-
-1. *Find a suitable issue*
-
- If this is your first time look for an issue labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) otherwise look for issues labeled [help wanted](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) . If another issue jumps out at you please engage on the issue before starting it.
-
-2. *Assign yourself the issue*
-
- Let us know you're working on it! We hate wasted labour so it's always helpful to know what our community contributors are working on.
-
-3. *Fork and clone [DAppNode](://github.com/dappnode/DAppNode)*
-
- In general it's a good practice to fork into your own repository. We prefer if issues
- are addressed in a branch with the issue number in it's name.
- i.e. `29_this_is_an_issue`
-
-4. *Make contributions*
-
- Make all the changes needed to address the given issue.
-
-5. *Add testing*
-
- In general we aim for full test coverage. For this reason most issues completed should include full testing. If you think there should be an exception for your issue please reach out.
-
-6. *Run previous tests*
-
- Make sure that the changes that you've made don't break anything! Ensure that running `npm test` and `npm eslint` doesn't throw any new and unexpected errors.
-
-7. *Push all your work*
-
- At this point the issue should be addressed, new testing should be in place, and all old tests should be passing.
-
-8. *Create a Pull Request*
-
- At this point you should either have a forked repository with your issue fixes and it is time to put in a PR. Make sure that your PR has something like `addresses #26` or `closes #26` The most important thing is that it has the relevant issue number referenced in the body of the PR.
-
-9. *Make noise!*
-
- Get in our [Riot](https://riot.im/app/#/room/#dappnode:matrix.org) and point to your new PR. Let us know you've tackled your first, third or 90th issue with us. We'll review it and everybody will get a warm feeling of accomplishment.
-
-10. *rinse, repeat*
-
- Find another issue, get more involved, make noise in our Riot, or find issues we may have missed. You've completed your first step to becoming a contributor. **You're helping to Decentralize the FUTURE**!
-
-
-If you still have any further questions about contribution feel free to reach out to `@eduadiez:matrix.org`, `@yalormewn:matrix.org`, `@liondapp:matrix.org`, or just make noise in the `#DAppNode` channel on [Riot](https://riot.im/app/#/room/#DAppNode:matrix.org).
+# Contributing
+
+When bringing people on as contributors we prefer that they start with an issue tagged [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
+
+After a contributor has shown they're a good fit and have completed 1 or 2 issues labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) with pull requests that have been accepted feel free of moving on to other issues. We're thrilled to see new contributors.
+
+If you want to better understand how does the development process works, please refer to our [wiki pages](https://github.com/dappnode/DAppNode/wiki)
+
+## Setup
+
+In order to get the repositories setup before contributions refer to the [README.md](https://github.com/dappnode/DAppNode/blob/master/README.md) file.
+
+## Contribution Steps
+
+1. _Find a suitable issue_
+
+ If this is your first time look for an issue labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) otherwise look for issues labeled [help wanted](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) . If another issue jumps out at you please engage on the issue before starting it.
+
+2. _Assign yourself the issue_
+
+ Let us know you're working on it! We hate wasted labour so it's always helpful to know what our community contributors are working on.
+
+3. _Fork and clone [DAppNode](://github.com/dappnode/DAppNode)_
+
+ In general it's a good practice to fork into your own repository. We prefer if issues
+ are addressed in a branch with the issue number in it's name.
+ i.e. `29_this_is_an_issue`
+
+4. _Make contributions_
+
+ Make all the changes needed to address the given issue.
+
+5. _Add testing_
+
+ In general we aim for full test coverage. For this reason most issues completed should include full testing. If you think there should be an exception for your issue please reach out.
+
+6. _Run previous tests_
+
+ Make sure that the changes that you've made don't break anything! Ensure that running `npm test` and `npm eslint` doesn't throw any new and unexpected errors.
+
+7. _Push all your work_
+
+ At this point the issue should be addressed, new testing should be in place, and all old tests should be passing.
+
+8. _Create a Pull Request_
+
+ At this point you should either have a forked repository with your issue fixes and it is time to put in a PR. Make sure that your PR has something like `addresses #26` or `closes #26` The most important thing is that it has the relevant issue number referenced in the body of the PR.
+
+9. _Make noise!_
+
+ Get in our [Element](https://app.element.io/#/room/#DAppNode:matrix.org) and point to your new PR. Let us know you've tackled your first, third or 90th issue with us. We'll review it and everybody will get a warm feeling of accomplishment.
+
+10. _rinse, repeat_
+
+ Find another issue, get more involved, make noise in our Riot, or find issues we may have missed. You've completed your first step to becoming a contributor. **You're helping to Decentralize the FUTURE**!
+
+If you still have any further questions about contribution feel free to reach out to `@eduadiez:matrix.org`, `@yalormewn:matrix.org`, `@liondapp:matrix.org`, or just make noise in the `#DAppNode` channel on [Element](https://app.element.io/#/room/#DAppNode:matrix.org).
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 00000000..a09836ef
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,10 @@
+FROM docker:dind
+
+# Install required packages
+RUN apk update && \
+ apk add --no-cache xorriso git xz curl ca-certificates iptables cpio bash perl-utils
+
+WORKDIR /usr/src/app
+COPY . .
+
+CMD ["/usr/src/app/iso/scripts/generate_ISO.sh"]
diff --git a/README.md b/README.md
index 70e733a0..89817f1c 100644
--- a/README.md
+++ b/README.md
@@ -1,110 +1,233 @@
# DAppNode
[](https://dappnode.io/)
-[](https://github.com/dappnode/DAppNode/wiki)
-[](https://alpha.giveth.io/campaigns/OcKJryNwjeidMXi9)
-[](https://riot.im/app/#/room/#DAppNode:matrix.org)
+[](https://docs.dappnode.io)
+[](https://beta.giveth.io/campaigns/5b44b198647f33526e67c262)

+[](https://www.gitpoap.io/gh/dappnode/DAppNode)
[](https://twitter.com/DAppNODE?lang=es)
+[](https://discord.gg/dappnode)
-[](https://github.com/dappnode/DAppNode/wiki/DAppNode-Installation-Guide)
+
+
-What happens when you want to use a Decentralized P2P network, but securing your own nodes takes a lot of time and effort?
+## Infrastructure for the decentralized world
+
+DAppNode is empowering people by creating a simple, transparent system for hosting P2P clients for DApps, Cryptocurrencies, VPNs, IPFS and more
+
+- Read about our purpose and mission on [Our Website](https://dappnode.com/)
+- Join our community and find support on [Our Discord](https://discord.gg/dappnode)
+- Check out what we are up to on [Our Medium](https://medium.com/dappnode)
+- Share your ideas and find how to guides on [Our Forum](https://discourse.dappnode.io/)
+
+## Discover DAppNode
+
+DAppNode lowers the barrier of entry for non tech-savvy participants. It allows you to deploy, update, and manage P2P clients and nodes without leaving your browser. No terminal or command line interface.
+
+
+
+## Develop with DAppNode
+
+DAppNode modular architecture allows any team to or project to publish a dockerized application to the DAppNode packages eco-system. Benefit from an enthusiastic crypto savvy user based and offer a user interface-only experience to lower onboarding friction.
+
+Check out the [DAppNodeSDK](https://github.com/dappnode/DAppNodeSDK) to learn how to get started.
+
+_Note: packages are published to Ethereum mainnet and incur costs. Given the current high gas prices the DAppNode team is willing to subsidize gas costs for packages of great interest to users._
+
+## Packages eco-system
+
+The community and core team members have created many useful packages for users. Checkout the [**package explorer**](https://explorer.dappnode.io) to browse an up-to-date list of all packages and their versions.
+
+
Open System Preferences and go to the Network section.
-
Click the + button in the lower-left corner of the window.
-
Select VPN from the Interface drop-down menu.
-
Select L2TP over IPSec from the VPN Type drop-down menu.
-
Enter anything you like for the Service Name.
-
Click Create.
-
Enter _VPN_SERVER_ for the Server Address.
-
Enter _VPN_USER_ for the Account Name.
-
Click the Authentication Settings button.
-
In the User Authentication section, select the Password radio button and enter _VPN_PASS_.
-
In the Machine Authentication section, select the Shared Secret radio button and enter _VPN_PSK_.
-
Click OK.
-
Check the Show VPN status in menu bar checkbox.
-
Click the Advanced button and make sure the Send all traffic over VPN connection checkbox is checked.
-
Click the TCP/IP tab, and make sure Link-local only is selected in the Configure IPv6 section.
-
Click OK to close the Advanced settings, and then click Apply to save the VPN connection information.
-
-
-
-
-
-
Windows 10 and 8.x setup guide
-
-
Right-click on the wireless/network icon in your system tray.
-
Select Open Network and Sharing Center.
-
Click Set up a new connection or network.
-
Select Connect to a workplace and click Next.
-
Click Use my Internet connection (VPN).
-
Enter _VPN_SERVER_ in the Internet address field.
-
Enter anything you like in the Destination name field, and then click Create.
-
Return to Network and Sharing Center. On the left, click Change adapter settings.
-
Right-click on the new VPN entry and choose Properties.
-
Click the Security tab. Select "Layer 2 Tunneling Protocol with IPsec (L2TP/IPSec)" for the Type of VPN.
-
Click Allow these protocols. Be sure to select the "Challenge Handshake Authentication Protocol (CHAP)" checkbox.
-
Click the Advanced settings button.
-
Select Use preshared key for authentication and enter _VPN_PSK_ for the Key.
-
Click OK to close the Advanced settings.
-
Click OK to save the VPN connection details.
-
-
-
-
-
Windows 7, Vista and XP setup guide
-
-
Click on the Start Menu and go to the Control Panel.
-
Go to the Network and Internet section.
-
Click Network and Sharing Center.
-
Click Set up a new connection or network.
-
Select Connect to a workplace and click Next.
-
Click Use my Internet connection (VPN).
-
Enter _VPN_SERVER_ in the Internet address field.
-
Enter anything you like in the Destination name field.
-
Check the Don't connect now; just set it up so I can connect later checkbox.
-
Click Next.
-
Enter _VPN_USER_ in the User name field.
-
Enter _VPN_PASS_ in the Password field.
-
Check the Remember this password checkbox.
-
Click Create, and then Close.
-
Return to Network and Sharing Center. On the left, click Change adapter settings.
-
Right-click on the new VPN entry and choose Properties.
-
Click the Options tab and uncheck Include Windows logon domain.
-
Click the Security tab. Select "Layer 2 Tunneling Protocol with IPsec (L2TP/IPSec)" for the Type of VPN.
-
Click Allow these protocols. Be sure to select the "Challenge Handshake Authentication Protocol (CHAP)" checkbox.
-
Click the Advanced settings button.
-
Select Use preshared key for authentication and enter _VPN_PSK_ for the Key.
-
Click OK to close the Advanced settings.
-
Click OK to save the VPN connection details.
-
-
-
-
-
-
-
iOS setup guide
-
-
Go to Settings -> General -> VPN.
-
Tap Add VPN Configuration....
-
Tap Type. Select L2TP and go back.
-
Tap Description and enter anything you like.
-
Tap Server and enter _VPN_SERVER_.
-
Tap Account and enter _VPN_USER_.
-
Tap Password and enter _VPN_PASS_.
-
Tap Secret and enter _VPN_PSK_.
-
Make sure the Send All Traffic switch is ON.
-
Tap Done.
-
Slide the VPN switch ON.
-
-
-
-
-
Android setup guide
-
-
Launch the Settings application.
-
Tap More... in the Wireless & Networks section.
-
Tap VPN.
-
Tap Add VPN Profile or the + icon at top-right of screen.
-
Enter anything you like in the Name field.
-
Select L2TP/IPSec PSK in the Type drop-down menu.
-
Enter _VPN_SERVER_ in the Server address field.
-
Enter _VPN_PSK_ in the IPSec pre-shared key field.
-
Tap Save.
-
Tap the new VPN connection.
-
Enter _VPN_USER_ in the Username field.
-
Enter _VPN_PASS_ in the Password field.
-
Check the Save account information checkbox.
-
Tap Connect.
-
-
-
-
-
Chromebook setup guide
-
-
If you haven't already, sign in to your Chromebook.
-
Click the status area, where your account picture appears.
-
Click Settings.
-
In the Internet connection section, click Add connection.
-
Click Add OpenVPN / L2TP.
-
Enter _VPN_SERVER_ for the Server hostname.
-
Enter anything you like for the Service name.
-
Make sure Provider type is L2TP/IPSec + pre-shared key.
-
Enter _VPN_PSK_ for the Pre-shared key.
-
Enter _VPN_USER_ for the Username.
-
Enter _VPN_PASS_ for the Password.
-
Click Connect.
-
-
-
-
-
Please, connect with us to request support for your device
-
-
-
-
-
-
-
-
diff --git a/doc/openvpn/android1.jpg b/doc/openvpn/android1.jpg
new file mode 100644
index 00000000..9cc6972f
Binary files /dev/null and b/doc/openvpn/android1.jpg differ
diff --git a/doc/openvpn/android2.jpg b/doc/openvpn/android2.jpg
new file mode 100644
index 00000000..7dfb2ab0
Binary files /dev/null and b/doc/openvpn/android2.jpg differ
diff --git a/doc/openvpn/android3.jpg b/doc/openvpn/android3.jpg
new file mode 100644
index 00000000..eb5d6923
Binary files /dev/null and b/doc/openvpn/android3.jpg differ
diff --git a/doc/openvpn/android4.jpg b/doc/openvpn/android4.jpg
new file mode 100644
index 00000000..b1379a1c
Binary files /dev/null and b/doc/openvpn/android4.jpg differ
diff --git a/doc/openvpn/android5.jpg b/doc/openvpn/android5.jpg
new file mode 100644
index 00000000..2dc617fe
Binary files /dev/null and b/doc/openvpn/android5.jpg differ
diff --git a/doc/openvpn/android6.jpg b/doc/openvpn/android6.jpg
new file mode 100644
index 00000000..3e2b5cdf
Binary files /dev/null and b/doc/openvpn/android6.jpg differ
diff --git a/doc/openvpn/android7.jpg b/doc/openvpn/android7.jpg
new file mode 100644
index 00000000..af675583
Binary files /dev/null and b/doc/openvpn/android7.jpg differ
diff --git a/doc/openvpn/ios1.png b/doc/openvpn/ios1.png
new file mode 100644
index 00000000..f228fbc1
Binary files /dev/null and b/doc/openvpn/ios1.png differ
diff --git a/doc/openvpn/ios10.png b/doc/openvpn/ios10.png
new file mode 100644
index 00000000..613a964c
Binary files /dev/null and b/doc/openvpn/ios10.png differ
diff --git a/doc/openvpn/ios4.png b/doc/openvpn/ios4.png
new file mode 100644
index 00000000..b43d5de0
Binary files /dev/null and b/doc/openvpn/ios4.png differ
diff --git a/doc/openvpn/ios5.png b/doc/openvpn/ios5.png
new file mode 100644
index 00000000..79df0048
Binary files /dev/null and b/doc/openvpn/ios5.png differ
diff --git a/doc/openvpn/ios6.png b/doc/openvpn/ios6.png
new file mode 100644
index 00000000..20bddd4d
Binary files /dev/null and b/doc/openvpn/ios6.png differ
diff --git a/doc/openvpn/ios7.png b/doc/openvpn/ios7.png
new file mode 100644
index 00000000..f0888755
Binary files /dev/null and b/doc/openvpn/ios7.png differ
diff --git a/doc/openvpn/ios8.png b/doc/openvpn/ios8.png
new file mode 100644
index 00000000..98d285a6
Binary files /dev/null and b/doc/openvpn/ios8.png differ
diff --git a/doc/openvpn/ios9.png b/doc/openvpn/ios9.png
new file mode 100644
index 00000000..f638b4ab
Binary files /dev/null and b/doc/openvpn/ios9.png differ
diff --git a/doc/openvpn/mac1.png b/doc/openvpn/mac1.png
new file mode 100644
index 00000000..8cc4af2e
Binary files /dev/null and b/doc/openvpn/mac1.png differ
diff --git a/doc/openvpn/mac2.png b/doc/openvpn/mac2.png
new file mode 100644
index 00000000..4d71cc40
Binary files /dev/null and b/doc/openvpn/mac2.png differ
diff --git a/doc/openvpn/mac3.png b/doc/openvpn/mac3.png
new file mode 100644
index 00000000..e5508cb4
Binary files /dev/null and b/doc/openvpn/mac3.png differ
diff --git a/doc/openvpn/mac4.png b/doc/openvpn/mac4.png
new file mode 100644
index 00000000..e96bbb37
Binary files /dev/null and b/doc/openvpn/mac4.png differ
diff --git a/doc/openvpn/mac5.png b/doc/openvpn/mac5.png
new file mode 100644
index 00000000..5657db2e
Binary files /dev/null and b/doc/openvpn/mac5.png differ
diff --git a/doc/openvpn/mac6.png b/doc/openvpn/mac6.png
new file mode 100644
index 00000000..376d1d02
Binary files /dev/null and b/doc/openvpn/mac6.png differ
diff --git a/doc/openvpn/mac7.png b/doc/openvpn/mac7.png
new file mode 100644
index 00000000..31c1e00a
Binary files /dev/null and b/doc/openvpn/mac7.png differ
diff --git a/doc/openvpn/mac8.png b/doc/openvpn/mac8.png
new file mode 100644
index 00000000..a48ef59f
Binary files /dev/null and b/doc/openvpn/mac8.png differ
diff --git a/doc/openvpn/ubuntu1.png b/doc/openvpn/ubuntu1.png
new file mode 100644
index 00000000..cf868052
Binary files /dev/null and b/doc/openvpn/ubuntu1.png differ
diff --git a/doc/openvpn/ubuntu2.png b/doc/openvpn/ubuntu2.png
new file mode 100644
index 00000000..95ed63a6
Binary files /dev/null and b/doc/openvpn/ubuntu2.png differ
diff --git a/doc/openvpn/ubuntu3.png b/doc/openvpn/ubuntu3.png
new file mode 100644
index 00000000..76897e64
Binary files /dev/null and b/doc/openvpn/ubuntu3.png differ
diff --git a/doc/openvpn/ubuntu4.png b/doc/openvpn/ubuntu4.png
new file mode 100644
index 00000000..79d7d290
Binary files /dev/null and b/doc/openvpn/ubuntu4.png differ
diff --git a/doc/openvpn/ubuntu5.png b/doc/openvpn/ubuntu5.png
new file mode 100644
index 00000000..ce11c46e
Binary files /dev/null and b/doc/openvpn/ubuntu5.png differ
diff --git a/doc/openvpn/ubuntu6.png b/doc/openvpn/ubuntu6.png
new file mode 100644
index 00000000..141ecbca
Binary files /dev/null and b/doc/openvpn/ubuntu6.png differ
diff --git a/doc/openvpn/windows1.png b/doc/openvpn/windows1.png
new file mode 100644
index 00000000..c7108848
Binary files /dev/null and b/doc/openvpn/windows1.png differ
diff --git a/doc/openvpn/windows2.png b/doc/openvpn/windows2.png
new file mode 100644
index 00000000..48fea773
Binary files /dev/null and b/doc/openvpn/windows2.png differ
diff --git a/doc/openvpn/windows3.png b/doc/openvpn/windows3.png
new file mode 100644
index 00000000..1eca217b
Binary files /dev/null and b/doc/openvpn/windows3.png differ
diff --git a/doc/openvpn/windows4.png b/doc/openvpn/windows4.png
new file mode 100644
index 00000000..395988a8
Binary files /dev/null and b/doc/openvpn/windows4.png differ
diff --git a/doc/openvpn/windows5.png b/doc/openvpn/windows5.png
new file mode 100644
index 00000000..06ecdb85
Binary files /dev/null and b/doc/openvpn/windows5.png differ
diff --git a/doc/openvpn/windows6.png b/doc/openvpn/windows6.png
new file mode 100644
index 00000000..737193df
Binary files /dev/null and b/doc/openvpn/windows6.png differ
diff --git a/doc/openvpn/windows7.png b/doc/openvpn/windows7.png
new file mode 100644
index 00000000..0be015d9
Binary files /dev/null and b/doc/openvpn/windows7.png differ
diff --git a/doc/openvpn/windows8.png b/doc/openvpn/windows8.png
new file mode 100644
index 00000000..3cd8e736
Binary files /dev/null and b/doc/openvpn/windows8.png differ
diff --git a/doc/openvpn/windows9.png b/doc/openvpn/windows9.png
new file mode 100644
index 00000000..b114e4de
Binary files /dev/null and b/doc/openvpn/windows9.png differ
diff --git a/doc/restorescreen.jpg b/doc/restorescreen.jpg
new file mode 100644
index 00000000..a13a2d05
Binary files /dev/null and b/doc/restorescreen.jpg differ
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..b358db40
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,14 @@
+version: "3.4"
+
+services:
+ dappnode_installer:
+ build: .
+ privileged: true
+ environment:
+ - BUILD=false # In case you want to re-generate a all the images, not recommended
+ - CLEAN=true # it remove the images directory
+ - UNATTENDED=${UNATTENDED} # UNATTENDED version
+ - BASE_OS=${BASE_OS} # Base OS version (debian or ubuntu)
+ volumes:
+ - ./images:/images
+ - "/var/run/docker.sock:/var/run/docker.sock"
diff --git a/docs/Makefile b/docs/Makefile
deleted file mode 100644
index 0303db5c..00000000
--- a/docs/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-# Minimal makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-SPHINXPROJ = DAppNode
-SOURCEDIR = .
-BUILDDIR = _build
-
-# Put it first so that "make" without argument is like "make help".
-help:
- @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
-
-.PHONY: help Makefile
-
-# Catch-all target: route all unknown targets to Sphinx using the new
-# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
-%: Makefile
- @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
\ No newline at end of file
diff --git a/docs/conf.py b/docs/conf.py
deleted file mode 100644
index c89619eb..00000000
--- a/docs/conf.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Configuration file for the Sphinx documentation builder.
-#
-# This file does only contain a selection of the most common options. For a
-# full list see the documentation:
-# http://www.sphinx-doc.org/en/master/config
-
-# -- Path setup --------------------------------------------------------------
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-# import os
-# import sys
-# sys.path.insert(0, os.path.abspath('.'))
-
-
-# -- Project information -----------------------------------------------------
-
-project = u'DAppNode'
-copyright = u'2018, DAppNode'
-author = u'DAppNode'
-
-# The short X.Y version
-version = u''
-# The full version, including alpha/beta/rc tags
-release = u''
-
-
-# -- General configuration ---------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ['_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-# source_suffix = ['.rst', '.md']
-source_suffix = '.rst'
-
-# The master toctree document.
-master_doc = 'index'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = None
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This pattern also affects html_static_path and html_extra_path .
-exclude_patterns = [u'_build', 'Thumbs.db', '.DS_Store']
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = 'sphinx'
-
-
-# -- Options for HTML output -------------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = 'sphinx_rtd_theme'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#
-# html_theme_options = {}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
-
-# Custom sidebar templates, must be a dictionary that maps document names
-# to template names.
-#
-# The default sidebars (for documents that don't match any pattern) are
-# defined by theme itself. Builtin themes are using these templates by
-# default: ``['localtoc.html', 'relations.html', 'sourcelink.html',
-# 'searchbox.html']``.
-#
-# html_sidebars = {}
-
-
-# -- Options for HTMLHelp output ---------------------------------------------
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = 'DAppNodedoc'
-
-
-# -- Options for LaTeX output ------------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #
- # 'papersize': 'letterpaper',
-
- # The font size ('10pt', '11pt' or '12pt').
- #
- # 'pointsize': '10pt',
-
- # Additional stuff for the LaTeX preamble.
- #
- # 'preamble': '',
-
- # Latex figure (float) alignment
- #
- # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (master_doc, 'DAppNode.tex', u'DAppNode Documentation',
- u'jbaylina GriffGreen eduadiez dapplion YalorMewn', 'manual'),
-]
-
-
-# -- Options for manual page output ------------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- (master_doc, 'dappnode', u'DAppNode Documentation',
- [author], 1)
-]
-
-
-# -- Options for Texinfo output ----------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (master_doc, 'DAppNode', u'DAppNode Documentation',
- author, 'DAppNode', 'One line description of project.',
- 'Miscellaneous'),
-]
\ No newline at end of file
diff --git a/docs/contributing.rst b/docs/contributing.rst
deleted file mode 100644
index 930b5bb5..00000000
--- a/docs/contributing.rst
+++ /dev/null
@@ -1,110 +0,0 @@
-############
-Contributing
-############
-
-Help is always appreciated!
-
-In particular, we need help in the following areas:
-
-* Improving the documentation
-* Fixing and responding to `DAppNode's GitHub issues
- `_, especially those tagged as
- `up-for-grabs `_ which are
- meant as introductory issues for external contributors.
-
-
-How to Contribute
-=================
-
-When bringing people on as contributors we prefer that they start with an issue tagged [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22). After a contributor has shown they're a good fit and have completed 1 or 2 issues labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) with pull requests that have been accepted feel free of moving on to other issues. We're thrilled to see new contributors.
-
-If you want to better understand how does the development process works, please refer to our [wiki pages](https://github.com/dappnode/DAppNode/wiki)
-
-In order to get the repositories setup before contributions refer to the [README.md](https://github.com/dappnode/DAppNode/blob/master/README.md) file.
-
-1. *Find a suitable issue*
-
- If this is your first time look for an issue labeled [good first issue](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) otherwise look for issues labeled [help wanted](https://github.com/dappnode/DNP_BIND/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22) . If another issue jumps out at you please engage on the issue before starting it.
-
-2. *Assign yourself the issue*
-
- Let us know you're working on it! We hate wasted labour so it's always helpful to know what our community contributors are working on.
-
-3. *Fork and clone [DAppNode](://github.com/dappnode/DAppNode)*
-
- In general it's a good practice to fork into your own repository. We prefer if issues
- are addressed in a branch with the issue number in it's name.
- i.e. `29_this_is_an_issue`
-
-4. *Make contributions*
-
- Make all the changes needed to address the given issue.
-
-5. *Add testing*
-
- In general we aim for full test coverage. For this reason most issues completed should include full testing. If you think there should be an exception for your issue please reach out.
-
-6. *Run previous tests*
-
- Make sure that the changes that you've made don't break anything! Ensure that running `npm test` and `npm eslint` doesn't throw any new and unexpected errors.
-
-7. *Push all your work*
-
- At this point the issue should be addressed, new testing should be in place, and all old tests should be passing.
-
-8. *Create a Pull Request*
-
- At this point you should either have a forked repository with your issue fixes and it is time to put in a PR. Make sure that your PR has something like `addresses #26` or `closes #26` The most important thing is that it has the relevant issue number referenced in the body of the PR.
-
-9. *Make noise!*
-
- Get in our [Riot](https://riot.im/app/#/room/#dappnode:matrix.org) and point to your new PR. Let us know you've tackled your first, third or 90th issue with us. We'll review it and everybody will get a warm feeling of accomplishment.
-
-10. *rinse, repeat*
-
- Find another issue, get more involved, make noise in our Riot, or find issues we may have missed. You've completed your first step to becoming a contributor. **You're helping to Decentralize the FUTURE**!
-
-
-If you still have any further questions about contribution feel free to reach out to `@eduadiez:matrix.org`, `@yalormewn:matrix.org`, `@liondapp:matrix.org`, or just make noise in the `#DAppNode` channel on [Riot](https://riot.im/app/#/room/#DAppNode:matrix.org).
-
-
-How to Report Issues
-====================
-
-To report an issue, please use the
-`GitHub issues tracker `_. When
-reporting issues, please mention the following details:
-
-* Which version of Solidity you are using
-* What was the source code (if applicable)
-* Which platform are you running on
-* How to reproduce the issue
-* What was the result of the issue
-* What the expected behaviour is
-
-Reducing the source code that caused the issue to a bare minimum is always
-very helpful and sometimes even clarifies a misunderstanding.
-
-
-Workflow for Pull Requests
-==========================
-
-In order to contribute, please fork off of the ``develop`` branch and make your
-changes there. Your commit messages should detail *why* you made your change
-in addition to *what* you did (unless it is a tiny change).
-
-If you need to pull in any changes from ``develop`` after making your fork (for
-example, to resolve potential merge conflicts), please avoid using ``git merge``
-and instead, ``git rebase`` your branch.
-
-Additionally, if you are writing a new feature, please ensure you write appropriate
-Boost test cases and place them under ``test/``.
-
-New features and bugfixes should be added to the ``Changelog.md`` file: please
-follow the style of previous entries, when applicable.
-
-Please note that this project is released with a `Contributor Code of Conduct
-`_.
-By participating in this project you agree to abide by its terms.
-
-Thank you for your help!
\ No newline at end of file
diff --git a/docs/dappnode-by-example.rst b/docs/dappnode-by-example.rst
deleted file mode 100644
index 4c3ffd85..00000000
--- a/docs/dappnode-by-example.rst
+++ /dev/null
@@ -1,38 +0,0 @@
-.. index:: ! examples
-
-.. _dappnode-by-example:
-
-###################
-DAppNode by Example
-###################
-
-Examples to describe its functionality and purpose
-
-
-********************************
-Accessing decentralized websites
-********************************
-
-
-What is a decentralized website?
-################################
-
-A decentralized website is not controlled by a central entity, rather by its users. It is unstoppable and uncensorable, therefore it doesn't rely on any centralized service.
-
-To navigate to decentralized websites using human readable names (i.e. decentral.eth) you need:
-- IPFS to store the website contents
-- ENS (or similar) to point users to the hash of the website contents
-
-================= =============================== ===================================
-Step Centralized Decentralized
-================= =============================== ===================================
-Resolve domain Use a DNS (i.e. google's) Use ENS, an ethereum smart contract
-Get the website GET request to the server's IP Get the hash's content from IPFS
-================= =============================== ===================================
-
-.. image:: images/dappnode-dweb.png
-
-
-*****************************************
-Using DApps without centralized providers
-*****************************************
\ No newline at end of file
diff --git a/docs/dappnode-core.rst b/docs/dappnode-core.rst
deleted file mode 100644
index ca90275f..00000000
--- a/docs/dappnode-core.rst
+++ /dev/null
@@ -1,184 +0,0 @@
-.. index:: ! core
-
-.. _dappnode-core:
-
-#############
-DAppNode Core
-#############
-
-****
-BIND
-****
-
-Local DAppNode DNS. Links each package docker IP to a name in the format of my.[package-name].dnp.dappnode.eth. I also redirects .eth domains to the ethforward. All rules can be consulted at `eth.hosts `_.
-
-It runs the native linux bind package with with a configuration specified at `named.conf `_. It attempts resolution and otherwise forwards to the Google Public DNS 8.8.8.8 / 8.8.4.4.
-
-***
-VPN
-***
-
-Provides a basic VPN for users to consume dappnode's services.
-
-It runs a `xl2tpd `_ process alongside a nodejs app, both controlled by a supervisord process. The nodejs app connects with the WAMP to manage VPN users directly editing the `/etc/ppp/chap-secrets `_ file, which holds the users credentials.
-
-The user IP is static and set when that user is created. The static IP is used by the WAMP for authentication to allow only admin users to perform certain actions. Currently there are three types of users:
-
-- 172.33.10.1: Super admin. It is created when DAppNode is installed and can never be deleted
-- 172.33.10.x: Admin user.
-- 172.33.100.x: Non-admin user.
-
-VPN procedures
-**************
-
-
-.. code-block:: javascript
-
- domain: .vpn.dnp.dappnode.eth
-
-
-================= ====== =================================
-event kwargs result
-================= ====== =================================
-addDevice id {}
-removeDevice id {}
-toggleAdmin id {}
-listDevices ~ [{ deviceObject }] |
-getParams ~ {param: paramValue, ...}
-statusUPnP ~ {openPorts, UPnP, msg} |
-statusExternalIp ~ {externalIpResolves, INT_IP, ...}
-================= ====== =================================
-
-
-.. code-block:: javascript
-
- deviceObject = {
- name: 'string',
- password: 'string',
- ip: 'string'
- }
-
-
-********
-ETHCHAIN
-********
-
-Local full mainnet ethereum node. Right now it uses parity, but we are testing Geth against Parity to take a decision based on each client's efficiency, memory usage, time to use among other parameters.
-
-**********
-ETHFORWARD
-**********
-
-Resolves .eth domains by intercepting outgoing requests, calling ENS, and redirecting to the local IPFS node.
-
-It is a nodejs http proxy server, which also returns custom 404 pages if the content is not found or available or if the chain is still not synced.
-
-****
-IPFS
-****
-
-Local IFPS node. Its gateaway is available at:
-
-.. code-block:: javascript
-
- host: my.ipfs.dnp.dappnode.eth
- port: 5001
- protocol: http
-
-
-****
-WAMP
-****
-
-Handles inter-package communications. Restricts certain operations to only admin users.
-
-We are using `crossbar.io `_ and its javascript client `autobahn.js `_. Please refer to their documentation for more details.
-
-WAMP response specifications
-
-.. code-block:: javascript
-
- {
- success:
- message:
- result: