14 |
15 | )
16 | }
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | __ __ _ _ _ _
2 | | \/ (_) | | | | |
3 | | \ / |_ ___ _ __ ___ | |__ ___ | | |_
4 | | |\/| | |/ __| '__/ _ \| '_ \ / _ \| | __|
5 | | | | | | (__| | | (_) | |_) | (_) | | |_
6 | |_| |_|_|\___|_| \___/|_.__/ \___/|_|\__| https://microbolt.guide
7 | ________________________________________________________________________________
8 |
9 |
10 | This repository contains all sources and is used for Issue tracking.
--------------------------------------------------------------------------------
/crowdin.yml:
--------------------------------------------------------------------------------
1 | # Put the commented values in your .crowdin.yml file
2 | # project_id: "CROWDIN_PROJECT_ID"
3 | # api_token: "CROWDIN_PERSONAL_TOKEN"
4 | base_path: "."
5 | base_url: "https://api.crowdin.com"
6 |
7 | preserve_hierarchy: true
8 |
9 | files: [
10 | {
11 | source: "/locales/en.js",
12 | translation: "/locales/%two_letters_code%.js"
13 | },
14 | {
15 | source: "/pages/en/**/*",
16 | translation: "/pages/%two_letters_code%/**/%original_file_name%"
17 | }
18 | ]
--------------------------------------------------------------------------------
/locales/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | LANGUAGE_NAME: 'English',
3 | FEEDBACK: 'Question? Give us feedback →',
4 | DESCRIPTION: 'Build your own DIY Bitcoin full node. No need to trust anyone else.',
5 | SEARCH_PLACEHOLDER: 'Search documentation…',
6 | BANNER_TEXT: '🎉 Microbolt 2.0.2 is out! Read more →',
7 | TOC_TITLE: 'On This Page',
8 | TOC_L10N_TEXT: 'Help translate Microbolt',
9 | BACK_TO_TOP: 'Scroll to top',
10 | EDIT_TEXT: 'Edit this page on GitHub →',
11 | GIT_TIMESTAMP: 'Last updated on'
12 | }
--------------------------------------------------------------------------------
/pages/en/_meta.js:
--------------------------------------------------------------------------------
1 | export default {
2 | index: {
3 | type: "page",
4 | title: "Microbolt",
5 | display: "hidden",
6 | theme: {
7 | layout: "raw"
8 | }
9 | },
10 | docs: {
11 | type: "page",
12 | title: "Documentation"
13 | },
14 | ansible: {
15 | type: "page",
16 | title: "Ansible"
17 | },
18 | about: {
19 | type: "page",
20 | title: "About",
21 | theme: {
22 | typesetting: "article"
23 | }
24 | },
25 | faq: {
26 | type: "page",
27 | title: "FAQ"
28 | }
29 | }
--------------------------------------------------------------------------------
/pages/ca/_meta.js:
--------------------------------------------------------------------------------
1 | export default {
2 | index: {
3 | type: "page",
4 | title: "Microbolt",
5 | display: "hidden",
6 | theme: {
7 | layout: "raw"
8 | }
9 | },
10 | docs: {
11 | type: "page",
12 | title: "Documentació"
13 | },
14 | ansible: {
15 | type: "page",
16 | title: "Ansible"
17 | },
18 | about: {
19 | type: "page",
20 | title: "Quant a",
21 | theme: {
22 | typesetting: "article"
23 | }
24 | },
25 | faq: {
26 | type: "page",
27 | title: "FAQ"
28 | }
29 | }
--------------------------------------------------------------------------------
/locales/ca.js:
--------------------------------------------------------------------------------
1 | export default {
2 | LANGUAGE_NAME: 'Català',
3 | FEEDBACK: 'APM? Dona\'ns feedback →',
4 | DESCRIPTION: 'Construeix el teu propi node complet de Bitcoin. No cal confiar en ningú més.',
5 | SEARCH_PLACEHOLDER: 'Cerca a la documentació…',
6 | BANNER_TEXT: '🎉 Microbolt 2.0.2 ja està disponible! Llegeix més →',
7 | TOC_TITLE: 'En aquesta pàgina',
8 | TOC_L10N_TEXT: 'Ajuda a traduir Microbolt',
9 | BACK_TO_TOP: 'Torna a dalt',
10 | EDIT_TEXT: 'Edita aquesta pàgina a GitHub →',
11 | GIT_TIMESTAMP: 'Última actualització el'
12 | }
--------------------------------------------------------------------------------
/public/.well-known/lnurlp/notepad:
--------------------------------------------------------------------------------
1 | {
2 | "status": "OK",
3 | "tag": "payRequest",
4 | "commentAllowed": 255,
5 | "callback": "https://getalby.com/lnurlp/doitwithnotepad/callback",
6 | "metadata": "[[\"text/identifier\",\"doitwithnotepad@getalby.com\"],[\"text/plain\",\"Sats for doitwithnotepad\"]]",
7 | "minSendable": 1000,
8 | "maxSendable": 250000000,
9 | "payerData": {
10 | "name": {
11 | "mandatory": false
12 | },
13 | "email": {
14 | "mandatory": false
15 | },
16 | "pubkey": {
17 | "mandatory": false
18 | }
19 | },
20 | "nostrPubkey": "79f00d3f5a19ec806189fcab03c1be4ff81d18ee4f653c88fac41fe03570f432",
21 | "allowsNostr": true
22 | }
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | import nextra from 'nextra'
2 | import path from 'path'
3 |
4 | const withNextra = nextra({
5 | theme: 'nextra-theme-docs',
6 | themeConfig: './theme.config.jsx'
7 | //defaultShowCopyCode: true,
8 | })
9 |
10 | export default withNextra({
11 | i18n: {
12 | locales: ['ca', 'en'],
13 | defaultLocale: 'ca',
14 | },
15 | webpack: (config) => {
16 | config.resolve.alias['@components'] = path.join(process.cwd(), 'components');
17 | return config;
18 | },
19 | redirects: () => {
20 | return [
21 | {
22 | source: '/docs',
23 | destination: '/docs/index',
24 | statusCode: 302
25 | }
26 | ]
27 | },
28 | reactStrictMode: true
29 | })
--------------------------------------------------------------------------------
/crowdin.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | # rename ./pages/*/index.mdx to ./pages/*/index.mdx.html or vice versa
5 | # if argument is .mdx, the script will rename .mdx to .mdx.html
6 | # if no argument is passed, the script will rename .mdx.html to .mdx
7 | process_file() {
8 | find ./pages/* \
9 | -maxdepth 1 \
10 | -name "index${1:-.mdx.html}" \
11 | -exec sh \
12 | -c 'mv "$1" "${1%.html}${2}"' _ {} "${1:+.html}" \;
13 | }
14 |
15 | trap process_file INT EXIT
16 |
17 | case "$1" in
18 | push)
19 | process_file .mdx
20 | crowdin "$1" --identity ./.crowdin.yml
21 | crowdin "$1" translations --identity ./.crowdin.yml
22 | ;;
23 | pull)
24 | crowdin "$1" sources --identity ./.crowdin.yml
25 | crowdin "$1" --identity ./.crowdin.yml
26 | ;;
27 | *)
28 | printf "%s\n" "Usage: ${0##*/} {push|pull}"
29 | trap - INT EXIT; exit 1
30 | ;;
31 | esac
--------------------------------------------------------------------------------
/pages/en/docs/bitcoin.md:
--------------------------------------------------------------------------------
1 | # Bitcoin
2 |
3 | The base of a sovereign Bitcoin node is a fully validating Bitcoin client.
4 | It will download the whole blockchain and validate every single transaction that
5 | ever happened. After this verification, the client can check the validity of all
6 | future transactions.
7 |
8 | Your Bitcoin client also acts as a data source for other applications, like the
9 | Electrum server (to use with your software and hardware wallets), blockchain
10 | explorer or Lightning client.
11 |
12 | ---
13 |
14 | We first install Bitcoin Client and *crum on the node.
15 | We then set up the powerful Sparrow desktop wallet on your computer and connect
16 | it to your *crum server for secure and private base layer operations, such as
17 | sending and receiving payments from and to your hardware wallet.
18 | Finally, we install BTC RPC Explorer on the node, a lite blockchain explorer
19 | with a clean web UI for privately checking your transactions and the mempool.
--------------------------------------------------------------------------------
/pages/en/docs/bitcoin/bitcoin_client.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Cards } from 'nextra/components'
2 |
3 | import { FaBitcoin } from "react-icons/fa"
4 | import { GiKnot } from "react-icons/gi"
5 |
6 | # Bitcoin client
7 |
8 |
9 | This may take some time
10 |
11 | Bitcoin will download the full Bitcoin blockchain, and validate all
12 | transactions since 2009. We're talking about more than 800.000 blocks with a
13 | size of over 500 GB, so this is not an easy task.
14 |
15 |
16 | Choose your client, when you're done jump to the Electrum server section
17 |
18 |
19 | }
21 | title="Bitcoin Knots"
22 | href="bitcoin_client/bitcoin_knots"
23 | />
24 | }
26 | title="Bitcoin Core"
27 | href="bitcoin_client/bitcoin_core"
28 | />
29 |
30 |
31 |
32 | Installing more than one client is not recommended and not compatible, we do not
33 | support it
34 |
--------------------------------------------------------------------------------
/pages/ca/docs/bitcoin/bitcoin_client.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Cards } from 'nextra/components'
2 |
3 | import { FaBitcoin } from "react-icons/fa"
4 | import { GiKnot } from "react-icons/gi"
5 |
6 | # Client Bitcoin
7 |
8 |
9 | Això pot trigar una mica
10 |
11 | Bitcoin descarregarà la cadena de blocs completa de Bitcoin i validarà totes les
12 | transaccions des del 2009. Estem parlant de més de 800.000 blocs amb una mida de
13 | més de 500 GB, per la qual cosa no és una tasca fàcil.
14 |
15 |
16 | Trieu el vostre client, quan hàgiu acabat, aneu a la secció del servidor
17 | Electrum
18 |
19 |
20 | }
22 | title="Bitcoin Knots"
23 | href="bitcoin_client/bitcoin_knots"
24 | />
25 | }
27 | title="Bitcoin Core"
28 | href="bitcoin_client/bitcoin_core"
29 | />
30 |
31 |
32 |
33 | No es recomana instal·lar més d'un client i no és compatible, no donem suport
34 |
--------------------------------------------------------------------------------
/pages/ca/docs/bitcoin.md:
--------------------------------------------------------------------------------
1 | # Bitcoin
2 |
3 | La base d'un node sobirà de Bitcoin és un client de Bitcoin totalment validat.
4 | Baixarà tota la cadena de blocs i validarà cada transacció que s'hagi produït.
5 | Després d'aquesta verificació, el client pot comprovar la validesa de totes les
6 | transaccions futures.
7 |
8 | El vostre client Bitcoin també actua com a font de dades per a altres
9 | aplicacions, com ara el servidor Electrum (per utilitzar-lo amb les vostres
10 | carteres de programari i maquinari), l'explorador de cadena de blocs o el client
11 | Lightning.
12 |
13 | ---
14 |
15 | Primer instal·lem Bitcoin Client i *crum al node. A continuació, configurem la
16 | potent cartera d'escriptori Sparrow al vostre ordinador i la connectem al vostre
17 | servidor *crum per a operacions de capa base segures i privades, com ara enviar
18 | i rebre pagaments des de i cap a la vostra cartera de maquinari. Finalment,
19 | instal·lem BTC RPC Explorer al node, un explorador de cadena de blocs lleuger
20 | amb una interfície d'usuari web neta per comprovar de manera privada les vostres
21 | transaccions i el mempool.
--------------------------------------------------------------------------------
/pages/en/docs/bitcoin/blockchain_explorer.mdx:
--------------------------------------------------------------------------------
1 | import { Cards } from 'nextra/components'
2 |
3 | import { FaSwimmingPool } from "react-icons/fa"
4 | import { SiGooglemaps } from "react-icons/si"
5 |
6 | # Blockchain explorer
7 |
8 | After the Microbolt runs your own fully validated node, and even acts as a
9 | backend for your hardware signing device with Electrum server, an
10 | important puzzle piece to improve privacy and financial sovereignty is your own
11 | Blockchain Explorer.
12 | It lets you query transactions, addresses, and blocks of your choice.
13 | You no longer need to leak information by querying a third-party blockchain
14 | explorer that can be used to get your location and cluster addresses.
15 |
16 | Choose your explorer, when you're done jump to the Mining Pool section
17 |
18 |
19 | }
21 | title="Mempool Space"
22 | href="blockchain_explorer/mempool_space"
23 | />
24 | }
26 | title="BTC RPC Explorer"
27 | href="blockchain_explorer/btc_rpc_explorer"
28 | />
29 |
--------------------------------------------------------------------------------
/public/assets/logos/btcrpcexpl.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/ca/docs/bitcoin/blockchain_explorer.mdx:
--------------------------------------------------------------------------------
1 | import { Cards } from 'nextra/components'
2 |
3 | import { FaSwimmingPool } from "react-icons/fa"
4 | import { SiGooglemaps } from "react-icons/si"
5 |
6 | # Explorador de cadena de blocs
7 |
8 | Després que Microbolt executi el vostre propi node totalment validat, i fins i
9 | tot actuï com a backend per al vostre dispositiu de signatura de maquinari amb
10 | el servidor Electrum, una peça important del trencaclosques per millorar la
11 | privadesa i la sobirania financera és el vostre propi explorador de cadena de
12 | blocs.
13 | Us permet consultar transaccions, adreces i blocs que trieu. Ja no necessiteu
14 | filtrar informació consultant un explorador de cadena de blocs de tercers que es
15 | pot utilitzar per obtenir la vostra ubicació i adreces de clúster.
16 |
17 | Trieu el vostre explorador, quan hàgiu acabat, aneu a la secció de Pool de
18 | Mineria
19 |
20 |
21 | }
23 | title="Mempool Space"
24 | href="blockchain_explorer/mempool_space"
25 | />
26 | }
28 | title="BTC RPC Explorer"
29 | href="blockchain_explorer/btc_rpc_explorer"
30 | />
31 |
--------------------------------------------------------------------------------
/pages/en/docs/lightning.md:
--------------------------------------------------------------------------------
1 | # Lightning
2 |
3 | Now you're all set up for Bitcoin. But Bitcoin is not primarily designed for
4 | fast and cheap payments. The blockchain that records all transactions cannot
5 | grow without limit if we want to keep the whole system decentralized and nodes
6 | like this Microbolt feasible.
7 |
8 | Building on top of the Bitcoin base layer, the Lightning Network enables instant
9 | and cheap everyday payments. Your coffee purchase doesn't necessarily need to be
10 | validated and recorded by all Bitcoin nodes worldwide if you think about it.
11 |
12 | Check out
13 | [Understanding the Lightning Network](https://bitcoinmagazine.com/technical/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791)
14 | from Bitcoin Magazine to learn more about how it works.
15 |
16 | ---
17 |
18 | To enable the Lightning Network on your Microbolt, we install a Lightning
19 | Client. We then set up an automatic Static Channel Backup to protect ourselves
20 | in case of failure of the SSD drives. We'll then add a web-based node management
21 | tool. Finally, we'll install a mobile app to make on-chain and LN payments and
22 | manage our node while we're on the go. Together, they make operating your node a
23 | breeze.
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017-2020 Stadicus
4 | Copyright (c) 2021-2023 RaspiBolt contributors
5 | Copyright (c) 2022-2023 2FakTor
6 | Copyright (c) 2024 doitwithnotepad
7 |
8 | Permission is hereby granted, free of charge, to any person obtaining a copy
9 | of this software and associated documentation files (the "Software"), to deal
10 | in the Software without restriction, including without limitation the rights
11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 | copies of the Software, and to permit persons to whom the Software is
13 | furnished to do so, subject to the following conditions:
14 |
15 | The above copyright notice and this permission notice shall be included in all
16 | copies or substantial portions of the Software.
17 |
18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 | SOFTWARE.
--------------------------------------------------------------------------------
/pages/en/docs/system/remote_access.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Steps } from 'nextra/components'
2 |
3 | # Remote access
4 |
5 | We connect to our personal computer by using `ssh` (Secure Shell).
6 |
7 | ## Enable the use of hostname to connect to the node
8 |
9 | To be able to use the `nakamoto01` hostname instead of the IP address, we must
10 | install this necessary software package
11 |
12 |
13 | ### Install `avahi`
14 |
15 | ```sh copy
16 | apk add avahi
17 | ```
18 |
19 | ### Add service to runlevel
20 |
21 | ```sh copy
22 | rc-update add avahi-daemon
23 | ```
24 |
25 | ### Start service
26 |
27 | ```sh copy
28 | rc-service avahi-daemon start
29 | ```
30 |
31 | ### Log out
32 |
33 | ```sh copy
34 | exit
35 | ```
36 |
37 |
38 | ## Access with Secure Shell
39 |
40 | Now it’s time to connect to the Microbolt via `ssh` and get to work.
41 |
42 |
43 | Since windows 10 1809 and higher, windows have
44 | [`openSSH`](https://github.com/PowerShell/openssh-portable) installed by
45 | default.
46 |
47 | macOS have also `openSSH` installed by default.
48 |
49 | If you are on a Linux/*BSD/plan9 systems you know what to do ;)
50 |
51 |
52 | ```sh copy
53 | ssh root@nakamoto01
54 | ```
55 |
56 |
57 | You will be prompted for the password you have chosen previously
58 |
--------------------------------------------------------------------------------
/pages/ca/docs/lightning.md:
--------------------------------------------------------------------------------
1 | # Lightning
2 |
3 | Ara ja esteu preparat per a Bitcoin. Però Bitcoin no està dissenyat
4 | principalment per a pagaments ràpids i barats. La cadena de blocs que registra
5 | totes les transaccions no pot créixer sense límits si volem mantenir tot el
6 | sistema descentralitzat i els nodes com Microbolt factibles.
7 |
8 | A sobre de la capa base de Bitcoin, Lightning Network permet pagaments
9 | quotidians instantanis i econòmics. Comprar un cafè no necessàriament ha de ser
10 | validat i registrat per tots els nodes de Bitcoin a tot el món si ho penseu
11 | fredament.
12 |
13 | Consulteu
14 | [Understanding the Lightning Network](https://bitcoinmagazine.com/technical/understanding-the-lightning-network-part-building-a-bidirectional-payment-channel-1464710791)
15 | de la revista Bitcoin per obtenir més informació sobre com funciona.
16 |
17 | ---
18 |
19 | Per habilitar la xarxa Lightning al vostre Microbolt, instal·lem un client
20 | Lightning. A continuació, configurem una còpia de seguretat automàtica del canal
21 | estàtic per protegir-nos en cas de fallada de les unitats SSD. A continuació,
22 | afegirem una eina de gestió de nodes basada en la web. I finalment, instal·larem
23 | una aplicació mòbil per fer pagaments on-chain i LN, i poder gestionar el nostre
24 | node enqualsevol lloc i moment. Junts, fan que operar el vostre node sigui molt
25 | fàcil.
--------------------------------------------------------------------------------
/pages/ca/docs/system/remote_access.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Steps } from 'nextra/components'
2 |
3 | # Accés remot
4 |
5 | Ens connectem al nostre ordinador personal mitjançant `ssh` (Secure Shell).
6 |
7 | ## Habiliteu l'ús del nom d'amfitrió per connectar-vos al node
8 |
9 | Per poder utilitzar el nom d'amfitrió `nakamoto01` en comptes de l'adreça IP,
10 | és necessari instal·lar aquest paquet de programari
11 |
12 |
13 | ### Instal·leu `avahi`
14 |
15 | ```sh copy
16 | apk add avahi
17 | ```
18 |
19 | ### Afegeix el servei al nivell d'execució
20 |
21 | ```sh copy
22 | rc-update add avahi-daemon
23 | ```
24 |
25 | ### Inicia el servei
26 |
27 | ```sh copy
28 | rc-service avahi-daemon start
29 | ```
30 |
31 | ### Tancar sessió
32 |
33 | ```sh copy
34 | exit
35 | ```
36 |
37 |
38 | ## Accés with Secure Shell
39 |
40 | Ara és el moment de connectar-se al Microbolt mitjançant `ssh` i posar-se a
41 | treballar.
42 |
43 |
44 | Des de windows 10 1809 i posterior, windows té
45 | [`openSSH`](https://github.com/PowerShell/openssh-portable) instal·lat per
46 | defecte.
47 |
48 | macOS també té `openSSH` instal·lat per defecte.
49 |
50 | Si esteu en un sistema Linux/*BSD/plan9, ja sabeu què fer ;)
51 |
52 |
53 | ```sh copy
54 | ssh root@nakamoto01
55 | ```
56 |
57 |
58 | Se us demanarà la contrasenya que heu escollit anteriorment
59 |
--------------------------------------------------------------------------------
/public/assets/logos/nginx.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/assets/logos/bitcoin.svg:
--------------------------------------------------------------------------------
1 |
2 |
8 |
--------------------------------------------------------------------------------
/pages/en/about.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: About
3 | ---
4 |
5 | # About Microbolt
6 |
7 | Microbolt was created by `doitwithnotepad` to provide a clear and understandable
8 | guide for building a Bitcoin and Lightning node on Alpine Linux. It was also
9 | designed with the idea of offering options, not being restricted to a single
10 | stack, and being as lightweight, security-oriented, and simple as possible.
11 |
12 | ## Credits
13 |
14 | Microbolt nodes are powered by the following open source projects, many of which
15 | you can contribute to in various ways:
16 |
17 | - https://raspibolt.org
18 | - https://v2.minibolt.info
19 | - https://alpinelinux.org
20 | - https://kernel.org
21 | - https://www.busybox.net
22 | - https://musl.libc.org
23 | - https://man.openbsd.org/doas
24 | - https://www.sudo.ws
25 | - https://caddyserver.com
26 | - https://nginx.org
27 | - https://git.alpinelinux.org/awall/about
28 | - https://bitcoinknots.org
29 | - https://bitcoin.org
30 | - https://fulcrumserver.org
31 | - https://github.com/romanz/electrs
32 | - https://mempool.space
33 | - https://bitcoinexplorer.org
34 | - https://web.public-pool.io
35 | - https://www.sparrowwallet.com
36 | - https://lightning.network
37 | - https://corelightning.org
38 | - https://github.com/lightningnetwork/lnd
39 | - https://www.thunderhub.io
40 | - https://zeusln.com
41 | - https://sr.ht/~gheartsfield/nostr-rs-relay
42 | - https://github.com/getumbrel/umbrel
43 | - and many more
44 |
45 | ## Donations
46 |
47 | If you like Microbolt and want to support the project, consider making a
48 | donation via Lightning. Donations help us maintain and improve the project.
49 |
50 | You can send donations to the following Lightning address:
51 |
52 | 
53 |
54 |
55 | notepad@microbolt.guide
56 |
57 | Thank you for your support! 🎉
--------------------------------------------------------------------------------
/pages/ca/about.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Quant a
3 | ---
4 |
5 | # Quant a Microbolt
6 |
7 | Microbolt va ser creat per `doitwithnotepad` per proporcionar una guia clara i
8 | comprensible per construir un node de Bitcoin i Lightning a Alpine Linux. També
9 | es va dissenyar amb la idea d'oferir opcions, no restringint-se a un sol
10 | "stack", i sent el més lleuger, orientat a la seguretat i senzill possible.
11 |
12 | ## Crèdits
13 |
14 | Els nodes de Microbolt estan impulsats pels següents projectes de codi obert,
15 | molts dels quals podeu contribuir de diverses maneres:
16 |
17 | - https://raspibolt.org
18 | - https://v2.minibolt.info
19 | - https://alpinelinux.org
20 | - https://kernel.org
21 | - https://www.busybox.net
22 | - https://musl.libc.org
23 | - https://man.openbsd.org/doas
24 | - https://www.sudo.ws
25 | - https://caddyserver.com
26 | - https://nginx.org
27 | - https://git.alpinelinux.org/awall/about
28 | - https://bitcoinknots.org
29 | - https://bitcoin.org
30 | - https://fulcrumserver.org
31 | - https://github.com/romanz/electrs
32 | - https://mempool.space
33 | - https://bitcoinexplorer.org
34 | - https://web.public-pool.io
35 | - https://www.sparrowwallet.com
36 | - https://lightning.network
37 | - https://corelightning.org
38 | - https://github.com/lightningnetwork/lnd
39 | - https://www.thunderhub.io
40 | - https://zeusln.com
41 | - https://sr.ht/~gheartsfield/nostr-rs-relay
42 | - https://github.com/getumbrel/umbrel
43 | - i molts més
44 |
45 | ## Donatius
46 |
47 | Si t'agrada Microbolt i vols donar suport al projecte, considera fer una donació
48 | via Lightning. Les donacions ens ajuden a mantenir i millorar el projecte.
49 |
50 | Pots enviar donacions a la següent adreça Lightning:
51 |
52 | 
53 |
54 |
55 | notepad@microbolt.guide
56 |
57 | Gràcies pel teu suport! 🎉
--------------------------------------------------------------------------------
/pages/en/docs/nostr.md:
--------------------------------------------------------------------------------
1 | # Nostr
2 |
3 | 
4 |
5 | ## What is Nostr?
6 |
7 | Nostr is a straightforward and open protocol for global, decentralized, and
8 | censorship-resistant social media. It offers numerous advantages for users and
9 | is completely free, requiring no ID or third-party verification to begin
10 | connecting with like-minded individuals and expanding your community. While
11 | nostr is sometimes confused as just another social media platform, it goes
12 | beyond that. Explore the resources provided here to discover its significant
13 | potential.
14 |
15 | This protocol is based on relays. Relays are servers that can be operated by
16 | anyone. By opening a persistent connection with the server, clients (or apps)
17 | can push and pull events in real-time.
18 |
19 | [Relays](https://usenostr.org/#relays) are the central element of the nostr
20 | protocol, responsible for storing events received from clients.
21 |
22 | Crucially, relays do not communicate with each other. Only the relays you're
23 | connected to will receive and store your events. This is a key feature of nostr,
24 | emphasizing the lack of communication between relays. Therefore, you should
25 | connect to as many relays as you wish to share your data with.
26 |
27 | Clients should always provide users the flexibility to connect to multiple
28 | relays. Users can also decide whether they want to read, write, or do both with
29 | the relays they're connected to. This means I can choose to connect to a
30 | specific relay to access content without necessarily sharing my own events
31 | there, or vice versa.
32 |
33 | You can obtain more info about nostr on these additional resources:
34 |
35 | * [austritch.net](https://www.austrich.net/nostr)
36 | * [awesome-nostr](https://www.nostr.net)
37 | * [use-nostr](https://usenostr.org)
38 | * [Nostr.how](https://nostr.how/en/what-is-nostr)
39 | * [gzuuus slideshow](https://www.canva.com/design/DAFcs32eM7k/1twoK\_IqInXQm5txlZBLCg/view)
40 | * [nostr.com](https://nostr.com)
--------------------------------------------------------------------------------
/pages/ca/docs/nostr.md:
--------------------------------------------------------------------------------
1 | # Nostr
2 |
3 | 
4 |
5 | ## Què és Nostr?
6 |
7 | Nostr és un protocol senzill i obert per a les xarxes socials globals,
8 | descentralitzades i resistents a la censura. Ofereix nombrosos avantatges per
9 | als usuaris i és totalment gratuït, i no requereix cap identificació ni
10 | verificació de tercers per començar a connectar-se amb persones afins i expandir
11 | la teva comunitat. Tot i que nostr de vegades es confon com una altra plataforma
12 | de xarxes socials, va més enllà d'això. Explora els recursos que s'ofereixen
13 | aquí per descobrir el seu potencial significatiu.
14 |
15 | Aquest protocol es basa en relés. Els relés són servidors que poden ser operats
16 | per qualsevol persona. En obrir una connexió persistent amb el servidor, els
17 | clients (o les aplicacions) poden "enviar i rebre" esdeveniments en temps real.
18 |
19 | Els [Relés](https://usenostr.org/#relays) són l'element central del protocol
20 | nostr, responsable d'emmagatzemar els esdeveniments rebuts dels clients.
21 |
22 | Crucialment, els relés no es comuniquen entre si. Només els relés als quals
23 | esteu connectats rebran i emmagatzemaran els vostres esdeveniments. Aquesta és
24 | una característica clau de nostr, emfatitzant la falta de comunicació entre els
25 | relés. Per tant, heu de connectar-vos a tants relés com vulgueu compartir les
26 | vostres dades.
27 |
28 | Els clients sempre haurien de proporcionar als usuaris la flexibilitat per
29 | connectar-se a múltiples relés. Els usuaris també poden decidir si volen llegir,
30 | escriure o fer tots dos amb els relés als quals estan connectats. Això significa
31 | que puc triar connectar-me a un relé específic per accedir al contingut sense
32 | necessàriament compartir els meus propis esdeveniments allà, o viceversa.
33 |
34 | Podeu obtenir més informació sobre nostr en aquests recursos addicionals:
35 |
36 | * [austritch.net](https://www.austrich.net/nostr)
37 | * [awesome-nostr](https://www.nostr.net)
38 | * [use-nostr](https://usenostr.org)
39 | * [Nostr.how](https://nostr.how/en/what-is-nostr)
40 | * [gzuuus slideshow](https://www.canva.com/design/DAFcs32eM7k/1twoK\_IqInXQm5txlZBLCg/view)
41 | * [nostr.com](https://nostr.com)
--------------------------------------------------------------------------------
/pages/en/docs/bitcoin/electrum_server.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Cards } from 'nextra/components'
2 |
3 | import { FaFulcrum } from "react-icons/fa"
4 | import { FaReact } from "react-icons/fa"
5 |
6 | # Electrum server
7 |
8 |
9 | This may take some time
10 |
11 | Electrum must first fully index the blockchain and compact its database before
12 | you can connect to it with your signing devices. This can take up to ~1.5 - 4
13 | days or more, depending on the hardware.
14 |
15 |
16 | We will set up an Electrum server for use with your Bitcoin software or hardware
17 | signing device.
18 |
19 |
20 | Make sure that you have reduced the database cache of Bitcoin client
21 |
22 |
23 | ## Bitcoin with signing devices
24 |
25 | The best way to safely keep your bitcoin key pairs (meaning the best combination
26 | of security and usability) is to use a signing device (like
27 | [SeedSigner](https://seedsigner.com),
28 | [Passport](https://foundationdevices.com),
29 | [BitBox](https://shiftcrypto.ch/bitbox02), [Coldcard](https://coldcard.com),
30 | [Jade](https://blockstream.com/jade) or [Trezor](https://trezor.io)) in
31 | combination with your own Bitcoin node. This gives you security, privacy and
32 | eliminates the need to trust a third party to verify transactions.
33 |
34 | Bitcoin client on the Microbolt itself is not meant to hold funds.
35 |
36 | One possibility to use Bitcoin client with your Bitcoin signing devices is to
37 | use an Electrum server as middleware. It imports data from Bitcoin client and
38 | provides it to signing software supporting the Electrum protocol. Desktop
39 | signing apps like [Sparrow](https://sparrowwallet.com), the
40 | [BitBoxApp](https://shiftcrypto.ch/app), [Electrum](https://electrum.org) or
41 | [Specter Desktop](https://specter.solutions/desktop) that support signing
42 | devices can then be used with your own sovereign Bitcoin node.
43 |
44 | Choose your server, when you're done jump to the Desktop wallet section
45 |
46 |
47 | }
49 | title="Fulcrum"
50 | href="electrum_server/fulcrum"
51 | />
52 | }
54 | title="Electrs"
55 | href="electrum_server/electrs"
56 | />
57 |
58 |
59 |
60 | Installing more than one server is not recommended and not compatible, we do not
61 | support it
62 |
--------------------------------------------------------------------------------
/pages/_app.jsx:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef, useMemo } from 'react'
2 | import { useRouter } from 'nextra/hooks'
3 |
4 | export default function MyApp({ Component, pageProps }) {
5 | const { route, events } = useRouter()
6 | const hueRef = useRef(0) // Initial hue value
7 | const intervalIdRef = useRef() // Ref to store interval ID
8 |
9 | const styles = useMemo(() => ({
10 | '/system': { hue: '204', sat: '100%' },
11 | '/bitcoin': { hue: '34', sat: '93%' },
12 | '/lightning': { hue: '52', sat: '98%' },
13 | '/nostr': { hue: '281', sat: '58%' },
14 | '/faq': { hue: '5', sat: '97%' },
15 | }), [])
16 |
17 | useEffect(() => {
18 | const handleRouteChange = (url) => {
19 | // Clear any existing interval
20 | if (intervalIdRef.current) {
21 | clearInterval(intervalIdRef.current);
22 | intervalIdRef.current = null;
23 | }
24 |
25 | const matchingStyle = Object.entries(styles).find(([route, style]) => url.includes(route));
26 |
27 | if (!matchingStyle) {
28 | intervalIdRef.current = setInterval(() => {
29 | hueRef.current++;
30 | if (hueRef.current > 360) { // Upper limit
31 | hueRef.current = 0; // Reset to lower limit
32 | }
33 | document.documentElement.style.setProperty(
34 | '--nextra-primary-hue',
35 | hueRef.current
36 | );
37 | document.documentElement.style.setProperty(
38 | '--nextra-primary-saturation',
39 | '100%'
40 | );
41 | }, 30); // Change hue every 30ms
42 | } else {
43 | const [, style] = matchingStyle;
44 | document.documentElement.style.setProperty(
45 | '--nextra-primary-hue',
46 | style.hue
47 | );
48 | document.documentElement.style.setProperty(
49 | '--nextra-primary-saturation',
50 | style.sat
51 | );
52 | }
53 | }
54 |
55 | // Call handleRouteChange immediately with the current URL
56 | handleRouteChange(route)
57 |
58 | // When the component is mounted, subscribe to router events
59 | events.on('routeChangeComplete', handleRouteChange)
60 |
61 | // If the component is unmounted, unsubscribe from the event
62 | return () => {
63 | events.off('routeChangeComplete', handleRouteChange)
64 | // Clear any existing interval when the component is unmounted
65 | if (intervalIdRef.current) {
66 | clearInterval(intervalIdRef.current)
67 | }
68 | }
69 | }, [events, route, styles])
70 |
71 | return
72 | }
--------------------------------------------------------------------------------
/pages/ca/docs/bitcoin/electrum_server.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Cards } from 'nextra/components'
2 |
3 | import { FaFulcrum } from "react-icons/fa"
4 | import { FaReact } from "react-icons/fa"
5 |
6 | # Servidor Electrum
7 |
8 |
9 | Això pot trigar una mica
10 |
11 | Electrum primer ha d'indexar completament la cadena de blocs i compactar la seva
12 | base de dades abans de poder connectar-hi amb els vostres dispositius de
13 | signatura. Això pot trigar fins a ~1,5 - 4 dies o més, depenent del maquinari.
14 |
15 |
16 |
17 | Assegureu-vos que heu reduït la memòria cau de la base de dades del client
18 | Bitcoin
19 |
20 |
21 | Configurarem un servidor Electrum per utilitzar-lo amb el vostre programari o
22 | dispositiu de signatura de maquinari de Bitcoin.
23 |
24 | ## Bitcoin amb dispositius de signatura
25 |
26 | La millor manera de mantenir de manera segura els vostres parells de claus de
27 | bitcoins (és a dir, la millor combinació de seguretat i usabilitat) és utilitzar
28 | un dispositiu de signatura (com [SeedSigner](https://seedsigner.com),
29 | [Passaport](https://foundationdevices.com),
30 | [BitBox](https://shiftcrypto.ch/bitbox02), [Coldcard](https://coldcard.com),
31 | [Jade](https://blockstream.com/jade/) o [Trezor](https://trezor.io)) en
32 | ombinació amb el vostre propi node Bitcoin. Això us proporciona seguretat,
33 | privadesa i elimina la necessitat de confiar en un tercer per verificar les
34 | transaccions.
35 |
36 | El client de Bitcoin al mateix Microbolt no està destinat a contenir fons.
37 |
38 | Una possibilitat d'utilitzar el client Bitcoin amb els vostres dispositius de
39 | signatura de Bitcoin és utilitzar un servidor Electrum com a programari
40 | intermediari. Importa dades del client Bitcoin i les proporciona al programari
41 | de signatura que admet el protocol Electrum. Aplicacions de signatura
42 | d'escriptori com [Sparrow](https://sparrowwallet.com),
43 | [BitBoxApp](https://shiftcrypto.ch/app), [Electrum](https://electrum.org) o
44 | [Specter Desktop](https://specter.solutions/desktop) que admet els dispositius
45 | de signatura es pot utilitzar amb el vostre propi node sobirà de Bitcoin.
46 |
47 | Trieu el vostre servidor, quan hàgiu acabat, aneu a la secció de Cartera
48 | d'escriptori
49 |
50 |
51 | }
53 | title="Fulcrum"
54 | href="electrum_server/fulcrum"
55 | />
56 | }
58 | title="Electrs"
59 | href="electrum_server/electrs"
60 | />
61 |
62 |
63 |
64 | No es recomana instal·lar més d'un servidor i no és compatible, no donem suport
65 |
--------------------------------------------------------------------------------
/pages/en/index.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Home
3 | ---
4 |
5 | import styles from '../index.module.css'
6 |
7 |
8 |
9 |
10 |
11 |
12 |
Make your own Bitcoin node with Microbolt
13 |
Simple, powerful, secure and flexible node implementation with
14 | everything you love from Bitcoin and more
I discovered your guide while looking for a better alternative to
96 | RaspiBolt. I truly appreciate the support for Alpine, which is
97 | arguably one of the best distros available, as well as Bitcoin Knots
I discovered your guide while looking for a better alternative to
96 | RaspiBolt. I truly appreciate the support for Alpine, which is
97 | arguably one of the best distros available, as well as Bitcoin Knots
98 |
- Usuari Anònim de Telegram
99 |
100 |
101 |
102 |
103 |
104 |
--------------------------------------------------------------------------------
/public/assets/logos/nostr.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/pages/en/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Introduction
3 | ---
4 |
5 | # Microbolt
6 |
7 | 
8 |
9 | Build your own “do-everything-yourself” Bitcoin full node that will make you a
10 | sovereign peer in the Bitcoin and Lightning network.
11 |
12 | No need to trust anyone else.
13 |
14 | ## What is the Microbolt?
15 |
16 | Microbolt is more than a fork of [RaspiBolt](https://raspibolt.org) and
17 | [MiniBolt](https://minibolt.info), made for all kind of computers, not only
18 | Raspberry Pi's.
19 |
20 | With this guide, you can set up a Bitcoin and Lightning node from scratch, doing
21 | everything yourself. You will learn about Linux, Bitcoin, and Lightning. As a
22 | result, you'll have your very own Microbolt node, built by you and no one else.
23 |
24 | There are many reasons why you should run your own Bitcoin node.
25 |
26 | * **Keep Bitcoin decentralized.** Use your node to help enforce your Bitcoin
27 | consensus rules.
28 | * **Take back your sovereignty.** Let your node validate your own Bitcoin
29 | transactions. No need to ask someone else to tell you what's happening in the
30 | Bitcoin network.
31 | * **Improve your privacy.** Connect your wallets to your node so that you no
32 | longer need to reveal their whole financial history to external servers.
33 | * **Be part of Lightning.** Run your own Lightning node for everyday
34 | payments and help building a robust, decentralized Bitcoin Lightning network.
35 |
36 | Did we mention that it's fun, as well?
37 |
38 | ## Microbolt overview
39 |
40 | This guide explains how to set up your own Bitcoin node on a Computer. But it
41 | works on most hardware platforms because it only uses standard Alpine Linux
42 | commands.
43 |
44 | ### Features
45 |
46 | Your Bitcoin node will offer the following functionality:
47 |
48 | 🟠 **Bitcoin**: direct and trustless participation in the Bitcoin peer-to-peer
49 | network, full validation of blocks and transactions
50 |
51 | ⚛️ **Electrum server**: connect your compatible wallets (including hardware
52 | wallets) to your own node
53 |
54 | ⛓️ **Blockchain Explorer**: web-based Explorer to privately look up
55 | transactions, blocks, and more
56 |
57 | ⚡ **Lightning**: full client with stable long-term channels and web-based and
58 | mobile-based management interfaces
59 |
60 | 🪽 **Nostr**: global, decentralized, and censorship-resistant social media
61 |
62 | 🔋 **Always on**: services are constantly synced and available 24/7
63 |
64 | 🧅 **Reachable from anywhere**: connect to all your services through the Tor
65 | network
66 |
67 | ### Target audience
68 |
69 | We strive to give foolproof instructions. But the goal is also to do everything
70 | ourselves. Shortcuts that involve trusting someone else are not allowed. This
71 | makes this guide quite technical, but we try to make it as straightforward as
72 | possible. You'll gain a basic understanding of the how and why.
73 |
74 | If you like to learn about Linux, Bitcoin, and Lightning, then this guide is for
75 | you.
76 |
77 | ### Structure
78 |
79 | We aim to keep the core of this guide well maintained and up-to-date:
80 |
81 | 1. [System](./docs/system.md): prepare the hardware and set up the operating
82 | system
83 | 1. [Bitcoin](./docs/bitcoin.md): sync your own Bitcoin full node, Electrum
84 | server, and Blockchain Explorer
85 | 1. [Lightning](./docs/lightning.md): run your own Lightning client with
86 | web-based node management
87 | 1. [Nostr](./docs/nostr.md): utilize decentralized and censorship-resistant
88 | social networks
89 |
90 | ## Community
91 |
92 | This is NOT a community project. `doitwithnotepad` retain the final say in
93 | disputes or arguments within the community.
94 |
95 | Find help and other Microbolt users on the following platforms:
96 |
97 | * [Github Issues](https://github.com/microbolt-guide/microbolt/issues)
98 | * Telegram group: [t.me/microbolt_official](https://t.me/microbolt_official)
99 |
100 | And feel free to join the many other contributors if you see something that can
101 | be improved!
--------------------------------------------------------------------------------
/pages/ca/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Introducció
3 | ---
4 |
5 | # Microbolt
6 |
7 | 
8 |
9 | Construeix el teu propi node complet de Bitcoin "fes-ho tot tu mateix" que et
10 | convertirà en un parell sobirà a la xarxa de Bitcoin i Lightning.
11 |
12 | No cal confiar en ningú més.
13 |
14 | ## Què és el Microbolt?
15 |
16 | Microbolt és més que una bifurcació de [RaspiBolt](https://raspibolt.org) i
17 | [MiniBolt](https://minibolt.info), feta per a tota mena d'ordinadors, no només
18 | Raspberry Pi's.
19 |
20 | Amb aquesta guia, pots configurar un node de Bitcoin i Lightning des de zero,
21 | fent-ho tot tu mateix. Aprendràs sobre Linux, Bitcoin i Lightning. Com a
22 | resultat, tindreu el vostre propi node Microbolt, construït per tu i per ningú
23 | més.
24 |
25 | Hi ha moltes raons per les quals hauries d'executar el teu propi node de
26 | Bitcoin.
27 |
28 | * **Mantingueu Bitcoin descentralitzat.** Utilitzeu el vostre node per ajudar a
29 | fer complir les vostres regles de consens de Bitcoin.
30 | * **Recupera la teva sobirania.** Deixa que el teu node validi les teves pròpies
31 | transaccions de Bitcoin. No cal demanar a algú més que us expliqui què està
32 | passant a la xarxa Bitcoin.
33 | * **Millora la teva privadesa.** Connecta les teves carteres al teu node perquè
34 | ja no hagis de revelar tot el seu historial financer a servidors externs.
35 | * **Forma part de Lightning.** Executeu el vostre propi node Lightning per als
36 | pagaments diaris i ajudeu a crear una xarxa Bitcoin Lightning robusta i
37 | descentralitzada.
38 |
39 | Hem esmentat que també és divertit?
40 |
41 | ## Visió general de Microbolt
42 |
43 | Aquesta guia explica com configurar el vostre propi node Bitcoin en un
44 | ordinador. Però funciona a la majoria de plataformes de maquinari perquè només
45 | utilitza ordres estàndard de Alpine Linux.
46 |
47 | ### Característiques
48 |
49 | El vostre node Bitcoin oferirà la següent funcionalitat:
50 |
51 | 🟠 **Bitcoin**: participació directa i sense confiança a la xarxa peer-to-peer
52 | de Bitcoin, validació completa de blocs i transaccions
53 |
54 | ⚛️ **Servidor Electrum**: connecteu les vostres carteres compatibles (incloses
55 | les carteres de maquinari) al vostre propi node
56 |
57 | ⛓️ **Explorador de cadena de blocs**: explorador web per cercar de manera
58 | privada transaccions, blocs i molt més
59 |
60 | ⚡ **Lightning**: client complet amb canals estables a llarg termini i
61 | interfícies de gestió web i mòbil
62 |
63 | 🪽 **Nostr**: xarxes socials globals, descentralitzades i resistents a la
64 | censura
65 |
66 | 🔋 **Sempre actiu**: els serveis es sincronitzen constantment i estan
67 | disponibles les 24 hores del dia
68 |
69 | 🧅 **Arribable des de qualsevol lloc**: connecteu-vos a tots els vostres serveis
70 | a través de la xarxa Tor
71 |
72 | ### Públic objectiu
73 |
74 | Ens esforcem per donar instruccions infal·libles. Però l'objectiu també és
75 | fer-ho tot nosaltres mateixos. No es permeten les dreceres que impliquin confiar
76 | en una altra persona. Això fa que aquesta guia sigui força tècnica, però
77 | intentem que sigui el més senzill possible. Aconseguiràs una comprensió bàsica
78 | del com i el perquè.
79 |
80 | Si voleu aprendre sobre Linux, Bitcoin i Lightning, aquesta guia és per tu.
81 |
82 | ### Estructura
83 |
84 | El nostre objectiu és mantenir el nucli d'aquesta guia ben mantingut i
85 | actualitzat:
86 |
87 | 1. [Sistema](./docs/system.md): prepareu el maquinari i configureu el sistema
88 | operatiu
89 | 1. [Bitcoin](./docs/bitcoin.md): sincronitza el vostre propi node complet de
90 | Bitcoin, el servidor Electrum i l'explorador de cadena de blocs
91 | 1. [Lightning](./docs/lightning.md): executeu el vostre propi client Lightning
92 | amb la gestió de nodes web
93 | 1. [Nostr](./docs/nostr.md): utilitzeu xarxes socials descentralitzades i
94 | resistents a la censura
95 |
96 | ## Comunitat
97 |
98 | Aquest NO és un projecte comunitari. `doitwithnotepad` te l'última paraula en
99 | disputes o discussions dins de la comunitat.
100 |
101 | Trobeu ajuda i altres usuaris de Microbolt a les plataformes següents:
102 |
103 | * [Problemes de Github](https://github.com/microbolt-guide/microbolt/issues)
104 | * Grup de Telegram: [t.me/microbolt_official](https://t.me/microbolt_official)
105 |
106 | I no dubteu a unir-vos a altres col·laboradors si veieu alguna cosa que es pot
107 | millorar!
--------------------------------------------------------------------------------
/pages/en/docs/system/system_config.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Steps, Tabs } from 'nextra/components'
2 |
3 | # System configuration
4 |
5 | You are now on the command line of your own Bitcoin node. Let's start with the
6 | configuration.
7 |
8 | ## Defaults
9 |
10 | This guide have no defaults in mind, you can choose whathever tools you want
11 |
12 |
13 | However, from Microbolt we recommend `EDITOR=vim` and `SU=doas`
14 |
15 |
16 |
17 | ### Define which **text editor**, **root privileges tool** and **compile flags** defaults you want
18 |
19 | ```sh
20 | vi /etc/profile.d/defaults.sh
21 | ```
22 |
23 | ```sh copy filename="/etc/profile.d/defaults.sh"
24 | # Text editor
25 | export EDITOR=vim # or notepad,vi,neovim,emacs,nano,micro...
26 | # Root privileges tool
27 | export SU=doas # or sudo...
28 | # Compile flags
29 | export CC="clang"
30 | export CXX="${CC}++"
31 | export CFLAGS="-O3 -pipe -march=native -fPIE"
32 | export CXXFLAGS="$CFLAGS"
33 | export LDFLAGS="-pie -Wl,--as-needed"
34 | export MAKEFLAGS="-j$(nproc)"
35 | # Environment variables
36 | export CARGO_HOME="./.cargo"
37 | export npm_config_cache="./npm-cache"
38 | export npm_config_devdir="./.gyp"
39 | export ROCKSDB_INCLUDE_DIR=/usr/include
40 | export ROCKSDB_LIB_DIR=/usr/lib
41 | export PROTOC=protoc-c
42 | ```
43 |
44 | ### Source the changes
45 |
46 | ```sh copy
47 | . /etc/profile.d/defaults.sh
48 | ```
49 |
50 | ### Install
51 |
52 |
53 | Your choice may need additional steps, it's your responsibility
54 |
55 |
56 | ```sh copy
57 | apk add $EDITOR $SU
58 | ```
59 |
60 | ### Install other necessary tools
61 |
62 | ```sh copy
63 | apk add logrotate
64 | ```
65 |
66 |
67 | ## Add the admin user
68 |
69 | We will use the primary user `satoshi` instead of `root` to make this guide more
70 | universal.
71 |
72 |
73 | ### Create a new user called `satoshi` with your `password [A]`
74 |
75 | ```sh copy
76 | adduser satoshi
77 | ```
78 |
79 | ### Make this new user a superuser by adding it to the `wheel` user group
80 |
81 | ```sh copy
82 | adduser satoshi wheel
83 | ```
84 |
85 | ### Allow members of the **wheel** group to use root privileges with `$SU`
86 |
87 |
88 |
89 | ```sh copy
90 | sed 's/# permit persist :wheel/permit persist keepenv :wheel/' /etc/doas.conf > _
91 | mv -f _ /etc/doas.conf
92 | ```
93 |
94 |
95 | ```sh copy
96 | printf "%s\n" \
97 | "%wheel ALL=(ALL) ALL" \
98 | "Defaults env_keep += \"*\"" \
99 | > /etc/sudoers.d/wheel
100 | ```
101 |
102 |
103 |
104 | ### Log out
105 |
106 | ```sh copy
107 | exit
108 | ```
109 |
110 | ### Log in with `satoshi` admin user
111 |
112 | ```sh copy
113 | ssh satoshi@nakamoto01
114 | ```
115 |
116 |
117 | ## System update
118 |
119 |
120 | Do this regularly every few weeks/months for security-related updates.
121 |
122 |
123 |
124 | ### Update the operating system and all installed software packages
125 |
126 | ```sh copy
127 | $SU apk update
128 | ```
129 |
130 | ### Upgrade the Alpine Package Manager itself
131 |
132 | ```sh copy
133 | $SU apk add --upgrade apk-tools
134 | ```
135 |
136 | ### Upgrade all installed packages
137 |
138 | ```sh copy
139 | $SU apk upgrade --available
140 | ```
141 |
142 |
143 |
144 | All services that have been upgraded need to be restarted, to begin using the
145 | upgraded version
146 |
147 | ```sh copy
148 | $SU rc-service restart
149 | ```
150 |
151 | If the kernel is upgraded, it's required to reboot to begin using the upgraded
152 | version
153 |
154 | ```sh copy
155 | sync && reboot
156 | ```
157 |
158 |
159 | ## Check drive performance
160 |
161 | Performant unit storage is essential for your node.
162 |
163 | Let's check if your drive works well as-is.
164 |
165 | * Your disk should be detected as `/dev/`. Check if this is the case by
166 | listing the names of connected block devices
167 |
168 | ```sh copy
169 | blkid
170 | ```
171 |
172 | * Install the software to measure the performance of your \
173 | ```sh copy
174 | $SU apk add hdparm
175 | ```
176 |
177 | * Measure the speed of your drive
178 | ```sh copy
179 | $SU hdparm -t --direct /dev/
180 | ```
181 |
182 | ```output filename="output"
183 | /dev/sda:
184 | Timing O_DIRECT disk reads: 690 MB in 3.00 seconds = 229.82 MB/sec
185 | ```
186 |
187 |
188 | If the measured speeds are more than 150 MB/sec, you're good
189 |
--------------------------------------------------------------------------------
/pages/ca/docs/system/system_config.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Steps, Tabs } from 'nextra/components'
2 |
3 | # Configuració del sistema
4 |
5 | Ara esteu a la línia d'ordres del vostre propi node Bitcoin. Comencem amb la
6 | configuració.
7 |
8 | ## Valors per defecte
9 |
10 | Aquesta guia no té cap valor predeterminat en ment, podeu triar les eines que
11 | vulgueu
12 |
13 |
14 | Tot i aixi, desde Microbolt recomanem `EDITOR=vim` i `SU=doas`
15 |
16 |
17 |
18 | ### Definiu quin **editor de text**, **eina d'escalada de privilegis** i **indicadors del compilador** que voleu
19 |
20 | ```sh
21 | vi /etc/profile.d/defaults.sh
22 | ```
23 |
24 | ```sh copy filename="/etc/profile.d/defaults.sh"
25 | # Text editor
26 | export EDITOR=vim # or notepad,vi,neovim,emacs,nano,micro...
27 | # Root privileges tool
28 | export SU=doas # or sudo...
29 | # Compile flags
30 | export CC="clang"
31 | export CXX="${CC}++"
32 | export CFLAGS="-O3 -pipe -march=native -fPIE"
33 | export CXXFLAGS="$CFLAGS"
34 | export LDFLAGS="-pie -Wl,--as-needed"
35 | export MAKEFLAGS="-j$(nproc)"
36 | # Environment variables
37 | export CARGO_HOME="./.cargo"
38 | export npm_config_cache="./npm-cache"
39 | export npm_config_devdir="./.gyp"
40 | export ROCKSDB_INCLUDE_DIR=/usr/include
41 | export ROCKSDB_LIB_DIR=/usr/lib
42 | export PROTOC=protoc-c
43 | ```
44 |
45 | ### Aplica els canvis
46 |
47 | ```sh copy
48 | . /etc/profile.d/defaults.sh
49 | ```
50 |
51 | ### Instal·leu
52 |
53 |
54 | La vostra elecció pot necessitar passos addicionals, és la vostra
55 | responsabilitat
56 |
57 |
58 | ```sh copy
59 | apk add $EDITOR $SU
60 | ```
61 |
62 | ### Instal·leu altres eines necessaries
63 |
64 | ```sh copy
65 | apk add logrotate
66 | ```
67 |
68 |
69 | ## Afegeix l'usuari administrador
70 |
71 | Utilitzarem l'usuari principal `satoshi` en comptes de `root` per fer que
72 | aquesta guia sigui més universal.
73 |
74 |
75 | ### Creeu un usuari nou anomenat `satoshi` amb la vostra `contrasenya [A]`
76 |
77 | ```sh copy
78 | adduser satoshi
79 | ```
80 |
81 | ### Fes d'aquest nou usuari un superusuari afegint-lo al grup d'usuaris `wheel`
82 |
83 | ```sh copy
84 | adduser satoshi wheel
85 | ```
86 |
87 | ### Permet als membres del grup **wheel** utilitzar privilegis de root amb `$SU`
88 |
89 |
90 |
91 | ```sh copy
92 | sed 's/# permit persist :wheel/permit persist keepenv :wheel/' /etc/doas.conf > _
93 | mv -f _ /etc/doas.conf
94 | ```
95 |
96 |
97 | ```sh copy
98 | printf "%s\n" \
99 | "%wheel ALL=(ALL) ALL" \
100 | "Defaults env_keep += \"*\"" \
101 | > /etc/sudoers.d/wheel
102 | ```
103 |
104 |
105 |
106 | ### Tancar sessió
107 |
108 | ```sh copy
109 | exit
110 | ```
111 |
112 | ### Inicieu sessió amb l'usuari administrador `satoshi`
113 |
114 | ```sh copy
115 | ssh satoshi@nakamoto01
116 | ```
117 |
118 |
119 | ## Actualització del sistema
120 |
121 |
122 | Feu-ho regularment cada poques setmanes/mesos per obtenir actualitzacions
123 | relacionades amb la seguretat.
124 |
125 |
126 |
127 | ### Actualitzeu el sistema operatiu i tots els paquets de programari instal·lats
128 |
129 | ```sh copy
130 | $SU apk update
131 | ```
132 |
133 | ### Actualitzeu el Alpine Package Manager
134 |
135 | ```sh copy
136 | $SU apk add --upgrade apk-tools
137 | ```
138 |
139 | ### Actualitza tots els paquets instal·lats
140 |
141 | ```sh copy
142 | $SU apk upgrade --available
143 | ```
144 |
145 |
146 |
147 | Tots els serveis que s'han actualitzat s'han de reiniciar per començar a
148 | utilitzar la versió actualitzada
149 |
150 | ```sh copy
151 | $SU rc-service restart
152 | ```
153 |
154 | Si s'actualitza el nucli, cal que es reiniciï per començar a utilitzar la versió
155 | actualitzada
156 |
157 | ```sh copy
158 | sync && reboot
159 | ```
160 |
161 |
162 | ## Comproveu el rendiment de la unitat de disc
163 |
164 | És essencial per al node un emmagatzematge amb un cert rendiment.
165 |
166 | Comprovem si la vostra unitat funciona bé tal com està.
167 |
168 | * El vostre disc s'hauria de detectar com a `/dev/`. Comproveu si aquest
169 | és el cas enumerant els noms dels dispositius de bloc connectats
170 |
171 | ```sh copy
172 | blkid
173 | ```
174 |
175 | * Instal·leu el programari per mesurar el rendiment del vostre \
176 |
177 | ```sh copy
178 | $SU apk add hdparm
179 | ```
180 |
181 | * Mesureu la velocitat de la vostra unitat
182 |
183 | ```sh copy
184 | $SU hdparm -t --direct /dev/
185 | ```
186 |
187 | ```output filename="output"
188 | /dev/sda:
189 | Timing O_DIRECT disk reads: 690 MB in 3.00 seconds = 229.82 MB/sec
190 | ```
191 |
192 |
193 | Si les velocitats mesurades són superiors a 150 MB/s, està bé
194 |
--------------------------------------------------------------------------------
/pages/en/docs/system/preparations.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 |
3 | # Preparations
4 |
5 | Let's get all the necessary hardware parts and prepare some passwords.
6 |
7 | ## Computer
8 |
9 | This guide builds on the readily available personal computer.
10 |
11 | While a personal computer is the best choice for most, this guide also works
12 | with other computing platforms, cloud servers, or virtual machines that run
13 | Alpine Linux. It only uses standard Linux instructions.
14 |
15 | ### Hardware requirements
16 |
17 | You need the following:
18 | * CPU: >2010 gen processor
19 | * RAM: >2GB (Bitcoin client only), >4GB (everything else)
20 | * Internal storage: >=2TB HDD, an SSD is recommended
21 | * USB/SD drive: >=1GB
22 | * Temporary monitor screen
23 | * Temporary keyboard USB/PS2
24 |
25 | You might also want to get this optional hardware:
26 | * UPS (uninterruptible power supply)
27 |
28 | ## Write down your passwords
29 |
30 | You will need several passwords, and it's easiest to write them all down in the
31 | beginning, instead of bumping into them throughout the guide. They should be
32 | unique and very secure, at least 12 characters in length. Do **not use uncommon
33 | special characters**, spaces, or quotes (‘ or “).
34 |
35 | ```
36 | [ A ] Master user password
37 | [ B ] Bitcoin RPC password
38 | [ C ] LND wallet password
39 | [ D ] BTC-RPC-Explorer password (optional)
40 | [ E ] ThunderHub password
41 | ```
42 |
43 | 
44 |
45 | If you need inspiration for creating your passwords: the
46 | [xkcd: Password Strength](https://xkcd.com/936/) comic is funny and contains a
47 | lot of truth. Store a copy of your passwords somewhere safe (preferably in an
48 | open-source password manager like [KeePassXC](https://keepassxc.org/)), or
49 | whatever password manager you're already using, and keep your original notes out
50 | of sight once your system is up and running.
51 |
52 | ## The command line
53 |
54 | We will work on the command line of the PC, which may be new to you. Find some
55 | basic information below. It will help you navigate and interact with your PC.
56 |
57 | You enter commands and the PC answers by printing the results below your
58 | command.
59 |
60 | To clarify where a command begins, every command in this guide are contained in
61 | a highlight box:
62 |
63 | ```sh
64 | example command # don't use me on real terminal
65 | ```
66 |
67 | The system response is marked with the `output` title on the box:
68 |
69 | ```sh filename="output"
70 | example output # i'm the result of the `example command`
71 | ```
72 |
73 | Some boxes have the path to the file we need to edit, with the `desired changes`
74 | also highlighted:
75 |
76 | ```nginx filename="/path/to/config/file" {2}
77 | # Comment
78 | config_variable="desired changes"
79 | ```
80 |
81 | * **Auto-complete commands**: You can use the `` key for auto-completion
82 | when you enter commands, i.e., for commands, directories, or filenames.
83 | * **Command history**: by pressing ⬆️ (arrow up) and ⬇️ (arrow down) on your
84 | keyboard, you can recall previously entered commands.
85 | * **Use admin privileges**: Our regular user has no direct admin privileges. If
86 | a command needs to edit the system configuration, we must use the desired
87 | **root privileged tool** command as a prefix. Instead of editing a system file
88 | with, `$EDITOR /path/to/config/file`, we use `$SU $EDITOR /path/to/config/file`.
89 |
90 |
91 | For security reasons, service users like `bitcoin` cannot use the `$SU` command
92 | and are not able to login.
93 |
94 |
95 | * **Copy / Paste**: Copy usually works with `` or ``.
96 | Paste usually works with `` or ``.
97 |
98 | * **Using your favorite text editor**: We do not assume the text editor you want
99 | to use. Here are examples of how to use a couple of popular text editors:
100 |
101 |
102 |
103 | If you use the `vi` editor (installed by default) to create new text files or
104 | edit existing ones, you might know that it's not complicated, but saving and
105 | exiting are not intuitive.
106 |
107 | **Insert**: hit ``, write/delete/edit/paste text, and hit the `` key
108 | when you're done editing
109 |
110 | **Save**: hit `<:>`, and hit the `` key
111 |
112 | **Exit**: hit `<:>`, and hit the `` key
113 |
114 |
115 | If you use the `nano` editor (needs to be installed manually) to create new text
116 | files or edit existing ones, you might know that it's not complicated, but
117 | saving and exiting are not intuitive.
118 |
119 | **Save**: hit ``, confirm the filename, and hit the `` key
120 |
121 | **Exit**: hit ``
122 |
123 |
124 |
125 | ## Secure your home network and devices
126 |
127 | While the guide will show you how to secure your node, you will interact with it
128 | from your computer and mobile phone and use your home internet network. Before
129 | building your Microbolt, it is recommended to secure your home network and
130 | devices. Follow Parts 1 and 2 of this ["How to Secure Your Home Network Against
131 | Threats"](https://restoreprivacy.com/secure-home-network/) tutorial by Heinrich
132 | Long, and try to implement as many points as possible (some might not apply to
133 | your router/device).
--------------------------------------------------------------------------------
/pages/ca/docs/system/preparations.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 |
3 | # Preparacions
4 |
5 | Aconseguim totes les peces de maquinari necessàries i preparem algunes
6 | contrasenyes.
7 |
8 | ## Ordinador
9 |
10 | Aquesta guia es basa en ordinadors personals, ja que son fàcilment disponibles.
11 |
12 | Tot i que un ordinador personal és la millor opció per a la majoria, aquesta
13 | guia també funciona amb altres plataformes informàtiques, servidors en núvol o
14 | màquines virtuals que executen Alpine Linux. Només utilitza instruccions
15 | estàndard de Linux.
16 |
17 | ### Requisits de maquinari
18 |
19 | Necessites el següent:
20 | * CPU: processador > 2010 gen
21 | * RAM: > 2 GB (només client Bitcoin), > 4 GB (tota la resta)
22 | * Emmagatzematge intern: >=2TB HDD, es recomana un SSD
23 | * Unitat USB/SD: >=1 GB
24 | * Pantalla de monitor temporal
25 | * Teclat temporal USB/PS2
26 |
27 | És possible que també vulgueu obtenir aquest maquinari opcional:
28 | * SAI (font d'alimentació ininterrompuda)
29 |
30 | ## Anoteu les vostres contrasenyes
31 |
32 | Necessitareu diverses contrasenyes, i és més fàcil escriure-les totes al
33 | principi, en lloc de trobar-les al llarg de la guia. Han de ser úniques i molt
34 | segures, almenys 12 caràcters. **No utilitzeu caràcters especials**, espais o
35 | cometes poc habituals (‘ o “).
36 |
37 | ```
38 | [ A ] Contrasenya mestre d'usuari
39 | [ B ] Contrasenya de Bitcoin RPC
40 | [ C ] Contrasenya de cartera LND
41 | [ D ] Contrasenya de BTC-RPC-Explorer (opcional)
42 | [ E ] Contrasenya de ThunderHub
43 | ```
44 |
45 | 
46 |
47 | Si necessiteu inspiració per crear les vostres contrasenyes: el còmic
48 | [xkcd: Password Strength](https://xkcd.com/936/) és divertit i conté molta
49 | veritat. Emmagatzemeu una còpia de les vostres contrasenyes en un lloc segur
50 | (preferiblement en un gestor de contrasenyes de codi obert com
51 | [KeePassXC](https://keepassxc.org/)), o qualsevol gestor de contrasenyes que ja
52 | estigueu utilitzant, i manteniu les vostres notes originals fora de vista una
53 | vegada que el vostre sistema estigui en funcionament.
54 |
55 | ## La línia d'ordres
56 |
57 | Treballarem en la línia de comandament del PC, que pot ser nova per a tu.
58 | Trobareu informació bàsica a continuació. T'ajudarà a navegar i interactuar amb
59 | el teu PC.
60 |
61 | Introduïu ordres i el PC respon imprimint els resultats sota la vostra ordre.
62 |
63 | Per a aclarir on comença una ordre, totes les ordres d'aquesta guia es troben en
64 | un quadre ressaltat:
65 |
66 | ```sh
67 | ordre exemple # no em facis servir en el terminal real
68 | ```
69 |
70 | La resposta del sistema està marcada amb el títol `output` al quadre:
71 |
72 | ```sh filename="output"
73 | sortida exemple # sóc el resultat de "ordre exemple".
74 | ```
75 |
76 | Alguns quadres tenen el camí al fitxer que necessitem editar, amb els
77 | `canvis desitjats` també ressaltats:
78 |
79 | ```nginx filename="/path/to/config/file" {2}
80 | # Comentari
81 | config_variable="canvis desitjats"
82 | ```
83 |
84 | * **Compleció automàtica d'ordres**: Podeu utilitzar la tecla `` per a la
85 | compleció automàtica quan introduïu ordres, és a dir, per a ordres, directoris o
86 | noms de fitxer.
87 | * **Historial d'ordres**: en prémer ⬆️ (fletxa amunt) i ⬇️ (fletxa avall) al
88 | teclat, podreu trobar les ordres introduïdes prèviament.
89 | * **Utilitza privilegis d'administrador**: El nostre usuari normal no té
90 | privilegis d'administrador directes. Si una ordre necessita editar la
91 | configuració del sistema, hem d'utilitzar l'ordre desitjada
92 | **eina privilegiada de root** com a prefix. En lloc d'editar un fitxer de
93 | sistema amb, `$EDITOR /path/to/config/file`, utilitzem
94 | `$SU $EDITOR /path/to/config/file`.
95 |
96 |
97 | Per raons de seguretat, els usuaris de servei com `bitcoin` no poden utilitzar
98 | l'ordre `$SU` i no poden iniciar sessió.
99 |
100 |
101 | * **Copiar / Enganxar**: Copiar normalment funciona amb `` o
102 | ``. Enganxar normalment funciona amb `` o
103 | ``.
104 |
105 | * **Ús del vostre editor de text preferit**: No assumim l'editor de text que
106 | voleu utilitzar. A continuació us expliquem com utilitzar un parell d'editors de
107 | text populars:
108 |
109 |
110 |
111 | Si utilitzeu l'editor `vi` (instal·lat per defecte) per a crear fitxers de text
112 | nous o editar-ne d'existents, heu de saber que no és complicat, però desar i
113 | sortir no són intuïtius.
114 |
115 | **Insertar**: premeu ``, escriviu/suprimiu/editeu/enganxeu text, i premeu
116 | la tecla `` quan hàgiu acabat d'editar
117 |
118 | **Desar**: premeu `<:>`, i premeu la tecla ``
119 |
120 | **Sortir**: premeu `<:>`, i premeu la tecla ``
121 |
122 |
123 | Si utilitzeu l'editor `nano` (cal instal·lar-lo manualment) per a crear fitxers
124 | de text nous o editar-ne d'existents, heu de saber que no és complicat, però
125 | desar i sortir no són intuïtius.
126 |
127 | **Desar**: premeu ``, confirmeu el nom del fitxer, i premeu la tecla
128 | ``
129 |
130 | **Sortir**: premeu ``
131 |
132 |
133 |
134 | ## Assegureu la vostra xarxa domèstica i els vostres dispositius
135 |
136 | Tot i que la guia us mostrarà com protegir el vostre node, interactuareu amb ell
137 | des del vostre ordinador i telèfon mòbil i utilitzareu la vostra xarxa
138 | d'internet domèstica. Abans de construir el vostre Microbolt, es recomana
139 | protegir la vostra xarxa domèstica i els vostres dispositius. Seguiu les parts 1
140 | i 2 d'aquest tutorial ["How to Secure Your Home Network Against
141 | Threats"](https://restoreprivacy.com/secure-home-network/) de Heinrich Long i
142 | intenteu implementar tants punts com sigui possible (alguns poden no aplicar-se
143 | al vostre router/dispositiu).
--------------------------------------------------------------------------------
/public/assets/logos/electrs.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
73 |
--------------------------------------------------------------------------------
/pages/en/docs/nostr/nostr_relay.mdx:
--------------------------------------------------------------------------------
1 | import { Steps } from 'nextra/components'
2 |
3 | # Nostr Relay
4 |
5 | A [nostr relay written in Rust](https://sr.ht/~gheartsfield/nostr-rs-relay) with
6 | support for the entire relay protocol and data persistence using SQLite.
7 |
8 | 
9 |
10 | ## Preparations
11 |
12 |
13 | ### Install dependencies
14 |
15 | These are build dependencies (safe to remove after installation, if you want)
16 |
17 | ```sh copy
18 | $SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \
19 | make pkgconf protobuf-c-compiler sqlite-dev
20 | ```
21 |
22 | These are runtime dependencies
23 |
24 | ```sh copy
25 | $SU apk add sqlite
26 | ```
27 |
28 | ### Create the `nostr` user/group
29 |
30 | ```sh copy
31 | $SU addgroup -S nostr
32 | ```
33 |
34 | ```sh copy
35 | $SU adduser \
36 | -S \
37 | -D \
38 | -H \
39 | -h /dev/null \
40 | -s /sbin/nologin \
41 | -G nostr \
42 | -g nostr \
43 | nostr
44 | ```
45 |
46 | ### Add the user `satoshi` to the group `nostr` as well
47 |
48 | ```sh copy
49 | $SU adduser satoshi nostr && exec su -l satoshi
50 | ```
51 |
52 |
53 | ## Installation
54 |
55 |
56 | ### Clone the source code
57 |
58 | We get the latest release of the nostr-rs-relay source code, compile it to an
59 | executable binary and install it.
60 |
61 | * Download the source code for the latest nostr-rs-relay release. You can check
62 | the [release page](https://git.sr.ht/~gheartsfield/nostr-rs-relay/refs) to see
63 | if a newer release is available. Other releases might not have been properly
64 | tested with the rest of the Microbolt configuration, though.
65 |
66 | ```sh copy
67 | cd /tmp
68 | ```
69 |
70 | ```sh copy
71 | VERSION=0.9.0
72 | ```
73 |
74 | ```sh copy
75 | git clone --branch $VERSION https://git.sr.ht/~gheartsfield/nostr-rs-relay && cd nostr-rs-relay
76 | ```
77 |
78 | ### Configure, compile and install
79 |
80 | * Now compile the source code into an executable binary and install it.
81 |
82 | ```sh copy
83 | cargo auditable build \
84 | --bin nostr-rs-relay \
85 | --release \
86 | --locked \
87 | --jobs "$(nproc)"
88 | ```
89 |
90 | ```sh copy
91 | $SU install -m 0755 -o root -g root -t /usr/bin ./target/release/nostr-rs-relay
92 | ```
93 |
94 | ```sh copy
95 | $SU install -D -m 0660 -o nostr -g nostr ./config.toml /etc/nostr-rs-relay/config.toml
96 | ```
97 |
98 | ### Strip installed binaries
99 |
100 | ```sh copy
101 | $SU strip /usr/bin/nostr-rs-relay
102 | ```
103 |
104 | ### Cleanup
105 |
106 | ```sh copy
107 | cd
108 | rm -rf /tmp/nostr-rs-relay
109 | $SU apk del .build-deps
110 | ```
111 |
112 |
113 | ## Configuration
114 |
115 | * Modify the config file with the following content
116 |
117 | ```sh copy
118 | $SU $EDITOR /etc/nostr-rs-relay/config.toml
119 | ```
120 |
121 | ```toml filename="/etc/nostr-rs-relay/config.toml" {2,4,6,8,10}
122 | [...]
123 | #relay_url = "wss://nostr.example.com/"
124 | [...]
125 | name = "Microbolt Nostr Relay"
126 | [...]
127 | description = "A Nostr Relay running on Microbolt"
128 | [...]
129 | address = "127.0.0.1"
130 | [...]
131 | port = 8880
132 | [...]
133 | ```
134 |
135 | ### Autostart on boot
136 |
137 | Nostr Relay needs to start automatically on system boot.
138 |
139 | * Create the nostr-rs-relay init.d unit and copy/paste the following configuration
140 |
141 | ```sh copy
142 | $SU $EDITOR /etc/init.d/nostr-rs-relay
143 | ```
144 |
145 | ```sh copy filename="/etc/init.d/nostr-rs-relay"
146 | #!/sbin/openrc-run
147 |
148 | : ${NOSTR_RELAY_CONFIGFILE:=/etc/nostr-rs-relay/config.toml}
149 | : ${NOSTR_RELAY_DATADIR:=/var/lib/nostr-rs-relay}
150 | : ${NOSTR_RELAY_LOGDIR:=/var/log/nostr-rs-relay}
151 | : ${NOSTR_RELAY_USER:=nostr}
152 | : ${NOSTR_RELAY_GROUP:=nostr}
153 | : ${NOSTR_RELAY_BIN:=/usr/bin/nostr-rs-relay}
154 | : ${NOSTR_RELAY_RUST_LOG:=info,nostr_rs_relay=info}
155 | : ${NOSTR_RELAY_OPTS=${NOSTR_RELAY_OPTS}}
156 | : ${NOSTR_RELAY_SIGTERM_TIMEOUT:=600}
157 |
158 | NOSTR_RELAY_PIDDIR="/run/nostr-rs-relay"
159 |
160 | required_files="${NOSTR_RELAY_CONFIGFILE}"
161 | pidfile="${NOSTR_RELAY_PIDDIR}/${SVCNAME}.pid"
162 | retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}"
163 |
164 | name="Nostr Relay"
165 | description="A Rust implementation of Nostr relay"
166 |
167 | command="${NOSTR_RELAY_BIN}"
168 | command_args="--db ${NOSTR_RELAY_DATADIR}
169 | --config ${NOSTR_RELAY_CONFIGFILE}
170 | ${NOSTR_RELAY_OPTS}"
171 | command_user="${NOSTR_RELAY_USER}:${NOSTR_RELAY_GROUP}"
172 | command_background="true"
173 |
174 | start_stop_daemon_args="--env RUST_LOG=${NOSTR_RELAY_RUST_LOG}
175 | --stdout ${NOSTR_RELAY_LOGDIR}/debug.log
176 | --stderr ${NOSTR_RELAY_LOGDIR}/debug.log"
177 |
178 | depend() {
179 | need net
180 | after logger firewall
181 | }
182 |
183 | start_pre() {
184 | checkpath --file --mode 0660 --owner "${command_user}" "${NOSTR_RELAY_CONFIGFILE}"
185 | checkpath --directory --mode 0750 --owner "${command_user}" "${NOSTR_RELAY_DATADIR}"
186 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_LOGDIR}"
187 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_PIDDIR}"
188 | }
189 |
190 | stop() {
191 | ebegin "Stopping ${SVCNAME}"
192 | pkill -TERM -P "$(cat ${pidfile})" > /dev/null 2>&1
193 | start-stop-daemon \
194 | --stop \
195 | --pidfile="${pidfile}" \
196 | --retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" \
197 | --exec="${NOSTR_RELAY_BIN}"
198 | eend $?
199 | }
200 | ```
201 |
202 | * Enable execution permission
203 |
204 | ```sh copy
205 | $SU chmod +x /etc/init.d/nostr-rs-relay
206 | ```
207 |
208 | ### Enable logrotate
209 |
210 | * Enter the complete next configuration. Save and exit
211 |
212 | ```sh copy filename="/etc/logrotate.d/nostr-rs-relay"
213 | /var/log/nostr-rs-relay/*.log {
214 | weekly
215 | missingok
216 | rotate 104
217 | compress
218 | delaycompress
219 | notifempty
220 | create 0640 nostr nostr
221 | sharedscripts
222 | postrotate
223 | kill -HUP `cat /run/nostr-rs-relay/nostr-rs-relay.pid`
224 | endscript
225 | }
226 | ```
227 |
228 | * Test
229 |
230 | ```sh copy
231 | $SU logrotate /etc/logrotate.d/nostr-rs-relay --debug
232 | ```
233 |
234 | ## Enable and start Nostr relay
235 |
236 | ```sh copy
237 | $SU rc-update add nostr-rs-relay
238 | ```
239 |
240 | ```sh copy
241 | $SU rc-service nostr-rs-relay start
242 | ```
243 |
244 | * Check the log to see Nostr relay output. Exit with Ctrl-C
245 |
246 | ```sh copy
247 | tail -f /var/log/nostr-rs-relay/debug.log
248 | ```
249 |
250 | * Ensure the service is working and listening at the default `8880` port
251 |
252 | ```sh copy
253 | $SU netstat -lntup | grep LISTEN | grep nostr
254 | ```
255 |
256 | ```output filename="output"
257 | tcp 0 0 0.0.0.0:8880 0.0.0.0:* LISTEN 7030/nostr-rs-relay
258 | ```
259 |
260 | ## For the future: Nostr relay update
261 |
262 | Follow again [Nostr relay](./nostr_relay) page replacing the environment
263 | variable `VERSION=x.xx` value for the latest if it has not been already changed
264 | in this guide.
265 |
266 | * Update the Nostr relay configuration if necessary (see release notes)
267 |
268 | ```sh copy
269 | $SU $EDITOR /etc/nostr-rs-relay/config.toml
270 | ```
271 |
272 | * Restart the service to apply the changes
273 |
274 | ```sh copy
275 | $SU rc-service nostr-rs-relay restart
276 | ```
--------------------------------------------------------------------------------
/pages/ca/docs/nostr/nostr_relay.mdx:
--------------------------------------------------------------------------------
1 | import { Steps } from 'nextra/components'
2 |
3 | # Relé Nostr
4 |
5 | Un [relé de nostr escrit en Rust](https://sr.ht/~gheartsfield/nostr-rs-relay)
6 | amb suport per a tot el protocol de relés i persistència de dades utilitzant
7 | SQLite.
8 |
9 | 
10 |
11 | ## Preparacions
12 |
13 |
14 | ### Instal·leu dependències
15 |
16 | Aquestes són dependències de construcció (es pot eliminar després de la
17 | instal·lació, si voleu)
18 |
19 | ```sh copy
20 | $SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \
21 | make pkgconf protobuf-c-compiler sqlite-dev
22 | ```
23 |
24 | Aquestes són dependències en temps d'execució
25 |
26 | ```sh copy
27 | $SU apk add sqlite
28 | ```
29 |
30 | ### Creeu l'usuari/grup `nostr`
31 |
32 | ```sh copy
33 | $SU addgroup -S nostr
34 | ```
35 |
36 | ```sh copy
37 | $SU adduser \
38 | -S \
39 | -D \
40 | -H \
41 | -h /dev/null \
42 | -s /sbin/nologin \
43 | -G nostr \
44 | -g nostr \
45 | nostr
46 | ```
47 |
48 | ### Afegiu també l'usuari `satoshi` al grup `nostr`
49 |
50 | ```sh copy
51 | $SU adduser satoshi nostr && exec su -l satoshi
52 | ```
53 |
54 |
55 | ## Instal·lació
56 |
57 |
58 | ### Clona el codi font
59 |
60 | Obtenim l'última versió del codi font de nostr-rs-relay, el compilem en un
61 | binari executable i l'instal·lem.
62 |
63 | * Baixeu el codi font de la darrera versió de nostr-rs-relay. Podeu consultar la
64 | [pàgina de llançament](https://git.sr.ht/~gheartsfield/nostr-rs-relay/refs) per
65 | veure si hi ha disponible una versió més recent. Tanmateix, és possible que
66 | altres versions no s'hagin provat correctament amb la resta de la configuració
67 | de Microbolt.
68 |
69 | ```sh copy
70 | cd /tmp
71 | ```
72 |
73 | ```sh copy
74 | VERSION=0.9.0
75 | ```
76 |
77 | ```sh copy
78 | git clone --branch $VERSION https://git.sr.ht/~gheartsfield/nostr-rs-relay && cd nostr-rs-relay
79 | ```
80 |
81 | ### Configurar, compilar i instal·lar
82 |
83 | * Ara compileu el codi font en un binari executable i instal·leu-lo.
84 |
85 | ```sh copy
86 | cargo auditable build \
87 | --bin nostr-rs-relay \
88 | --release \
89 | --locked \
90 | --jobs "$(nproc)"
91 | ```
92 |
93 | ```sh copy
94 | $SU install -m 0755 -o root -g root -t /usr/bin ./target/release/nostr-rs-relay
95 | ```
96 |
97 | ```sh copy
98 | $SU install -D -m 0660 -o nostr -g nostr ./config.toml /etc/nostr-rs-relay/config.toml
99 | ```
100 |
101 | ### "Strip" els binaris instal·lats
102 |
103 | ```sh copy
104 | $SU strip /usr/bin/nostr-rs-relay
105 | ```
106 |
107 | ### Neteja
108 |
109 | ```sh copy
110 | cd
111 | rm -rf /tmp/nostr-rs-relay
112 | $SU apk del .build-deps
113 | ```
114 |
115 |
116 | ## Configuració
117 |
118 | * Modifiqueu el fitxer de configuració amb el contingut següent
119 |
120 | ```sh copy
121 | $SU $EDITOR /etc/nostr-rs-relay/config.toml
122 | ```
123 |
124 | ```toml filename="/etc/nostr-rs-relay/config.toml" {2,4,6,8,10}
125 | [...]
126 | #relay_url = "wss://nostr.example.com/"
127 | [...]
128 | name = "Microbolt Nostr Relay"
129 | [...]
130 | description = "A Nostr Relay running on Microbolt"
131 | [...]
132 | address = "127.0.0.1"
133 | [...]
134 | port = 8880
135 | [...]
136 | ```
137 |
138 | ### Inici automàtic a l'arrencada
139 |
140 | Nostr Relay s'ha d'iniciar automàticament a l'arrencada del sistema.
141 |
142 | * Creeu la unitat nostr-rs-relay init.d i copieu/enganxeu la configuració
143 | següent
144 |
145 | ```sh copy
146 | $SU $EDITOR /etc/init.d/nostr-rs-relay
147 | ```
148 |
149 | ```sh copy filename="/etc/init.d/nostr-rs-relay"
150 | #!/sbin/openrc-run
151 |
152 | : ${NOSTR_RELAY_CONFIGFILE:=/etc/nostr-rs-relay/config.toml}
153 | : ${NOSTR_RELAY_DATADIR:=/var/lib/nostr-rs-relay}
154 | : ${NOSTR_RELAY_LOGDIR:=/var/log/nostr-rs-relay}
155 | : ${NOSTR_RELAY_USER:=nostr}
156 | : ${NOSTR_RELAY_GROUP:=nostr}
157 | : ${NOSTR_RELAY_BIN:=/usr/bin/nostr-rs-relay}
158 | : ${NOSTR_RELAY_RUST_LOG:=info,nostr_rs_relay=info}
159 | : ${NOSTR_RELAY_OPTS=${NOSTR_RELAY_OPTS}}
160 | : ${NOSTR_RELAY_SIGTERM_TIMEOUT:=600}
161 |
162 | NOSTR_RELAY_PIDDIR="/run/nostr-rs-relay"
163 |
164 | required_files="${NOSTR_RELAY_CONFIGFILE}"
165 | pidfile="${NOSTR_RELAY_PIDDIR}/${SVCNAME}.pid"
166 | retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}"
167 |
168 | name="Nostr Relay"
169 | description="A Rust implementation of Nostr relay"
170 |
171 | command="${NOSTR_RELAY_BIN}"
172 | command_args="--db ${NOSTR_RELAY_DATADIR}
173 | --config ${NOSTR_RELAY_CONFIGFILE}
174 | ${NOSTR_RELAY_OPTS}"
175 | command_user="${NOSTR_RELAY_USER}:${NOSTR_RELAY_GROUP}"
176 | command_background="true"
177 |
178 | start_stop_daemon_args="--env RUST_LOG=${NOSTR_RELAY_RUST_LOG}
179 | --stdout ${NOSTR_RELAY_LOGDIR}/debug.log
180 | --stderr ${NOSTR_RELAY_LOGDIR}/debug.log"
181 |
182 | depend() {
183 | need net
184 | after logger firewall
185 | }
186 |
187 | start_pre() {
188 | checkpath --file --mode 0660 --owner "${command_user}" "${NOSTR_RELAY_CONFIGFILE}"
189 | checkpath --directory --mode 0750 --owner "${command_user}" "${NOSTR_RELAY_DATADIR}"
190 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_LOGDIR}"
191 | checkpath --directory --mode 0755 --owner "${command_user}" "${NOSTR_RELAY_PIDDIR}"
192 | }
193 |
194 | stop() {
195 | ebegin "Stopping ${SVCNAME}"
196 | pkill -TERM -P "$(cat ${pidfile})" > /dev/null 2>&1
197 | start-stop-daemon \
198 | --stop \
199 | --pidfile="${pidfile}" \
200 | --retry="${NOSTR_RELAY_SIGTERM_TIMEOUT}" \
201 | --exec="${NOSTR_RELAY_BIN}"
202 | eend $?
203 | }
204 | ```
205 |
206 | * Habilita el permís d'execució
207 |
208 | ```sh copy
209 | $SU chmod +x /etc/init.d/nostr-rs-relay
210 | ```
211 |
212 | ### Habilita logrotate
213 |
214 | * Introduïu la configuració següent completa. Guardar i sortir
215 |
216 | ```sh copy filename="/etc/logrotate.d/nostr-rs-relay"
217 | /var/log/nostr-rs-relay/*.log {
218 | weekly
219 | missingok
220 | rotate 104
221 | compress
222 | delaycompress
223 | notifempty
224 | create 0640 nostr nostr
225 | sharedscripts
226 | postrotate
227 | kill -HUP `cat /run/nostr-rs-relay/nostr-rs-relay.pid`
228 | endscript
229 | }
230 | ```
231 |
232 | * Prova
233 |
234 | ```sh copy
235 | $SU logrotate /etc/logrotate.d/nostr-rs-relay --debug
236 | ```
237 |
238 | ## Activa i inicia Nostr relay
239 |
240 | ```sh copy
241 | $SU rc-update add nostr-rs-relay
242 | ```
243 |
244 | ```sh copy
245 | $SU rc-service nostr-rs-relay start
246 | ```
247 |
248 | * Comproveu el registre per veure la sortida del relé Nostr. Sortiu amb `Ctrl-C`
249 |
250 | ```sh copy
251 | tail -f /var/log/nostr-rs-relay/debug.log
252 | ```
253 |
254 | * Assegureu-vos que el servei estigui funcionant i escoltant al port
255 | predeterminat `8880`
256 |
257 | ```sh copy
258 | $SU netstat -lntup | grep LISTEN | grep nostr
259 | ```
260 |
261 | ```output filename="output"
262 | tcp 0 0 0.0.0.0:8880 0.0.0.0:* LISTEN 7030/nostr-rs-relay
263 | ```
264 |
265 | ## Per al futur: actualització de Nostr relay
266 |
267 | Torneu a seguir la pàgina [Relé Nostr](./nostr_relay) substituint el valor de la
268 | variable d'entorn `VERSION=x.xx` per l'últim si encara no s'ha modificat en
269 | aquesta guia.
270 |
271 | * Actualitzeu la configuració del relé Nostr si cal (vegeu les notes de la
272 | versió)
273 |
274 | ```sh copy
275 | $SU $EDITOR /etc/nostr-rs-relay/config.toml
276 | ```
277 |
278 | * Reinicieu el servei per aplicar els canvis
279 |
280 | ```sh copy
281 | $SU rc-service nostr-rs-relay restart
282 | ```
--------------------------------------------------------------------------------
/pages/en/ansible.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Steps, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Microbolt ❤️ Cloud
5 |
6 | Ansible is a simple IT automation tool that can make your applications and
7 | systems easier to deploy. It is a powerful tool that can be used to automate the
8 | deployment and configuration of your Microbolt node(s).
9 |
10 | Someone once said,
11 |
12 |
13 | "Ain't nobody got time to sit through RaspiBolt more than once. Once you've
14 | learned how to build a Bitcoin node with your hands the next ones should just
15 | build themselves."
16 |
17 | — 1ma (Unhosted Marcellus)
18 |
19 |
20 | and here we are.
21 |
22 |
23 | This guide assumes you have a basic understanding of Proxmox/Debian and can read
24 | basic shell commands or scripts, identify variables, and modify them as needed.
25 | Default values are provided for all variables, but you can customize them to
26 | suit your requirements. You don't need to be a Proxmox/Debian expert, but you
27 | should be able to SSH into your system. Installing Proxmox/Debian is out of
28 | scope.
29 |
30 |
31 | ## Prerequisites
32 |
33 |
34 | | Variable | Description | Default |
35 | | ---------------- | ------------------- | ------------------------------- |
36 | | `blank` | Blank template ID | `9000` |
37 | | `alpine` | Alpine template ID | `9010` |
38 | | `storage` | Storage ID | `local-zfs` |
39 | | `ssd` | SSD flag | `1` |
40 | | `username` | Cloud-init username | `satoshi` |
41 | | `ssh_keyfile` | SSH key file | `/etc/pve/priv/authorized_keys` |
42 | | `password` | Cloud-init password | `changeme` |
43 | | `microbolt` | Microbolt VM ID | `2140` |
44 | | `name` | Microbolt VM name | `nakamoto01` |
45 | | `cores` | Microbolt VM cores | `4` |
46 | | `memory` | Microbolt VM memory | `8192` |
47 | | `vlan` | Microbolt VM VLAN | `1` |
48 | | `second_storage` | Second storage ID | `local-zfs` |
49 | | `second_ssd` | Second SSD flag | `1` |
50 |
51 |
52 | SSH into your Proxmox/Debian server and run the following commands.
53 |
54 |
55 | ### Blank template
56 |
57 | It is highly recommended to create a blank Linux template if you are using
58 | Proxmox/Debian. You'll thank me later.
59 |
60 | ```sh copy
61 | qm create "${blank:-9000}" \
62 | --name template \
63 | --ostype l26 \
64 | --agent enabled=1,fstrim_cloned_disks=1 \
65 | --cpu host \
66 | --balloon 0 \
67 | --vga serial0 \
68 | --scsihw virtio-scsi-pci \
69 | --net0 virtio,bridge=vmbr0,firewall=1 \
70 | --serial0 socket
71 | qm template "${blank:-9000}"
72 | ```
73 |
74 | ### Alpine cloud template
75 |
76 | Clone the blank template
77 |
78 | ```sh copy
79 | qm clone "${blank:-9000}" "${alpine:-9010}" \
80 | --name alpine-3.20 \
81 | --full
82 | ```
83 |
84 | Download the cloud image
85 |
86 | ```sh copy
87 | wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/cloud/\
88 | nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2
89 | ```
90 |
91 | Create the Alpine cloud template
92 |
93 |
94 | To use your own SSH keys from GitHub, simply replace `` with your
95 | actual GitHub username.
96 |
97 | ```sh
98 | wget -qO- https://github.com/.keys > ./github_keys
99 | export ssh_keyfile=./github_keys
100 | ```
101 |
102 |
103 | ```sh copy
104 | qm set "${alpine:-9010}" \
105 | --scsi0 "${storage:-local-zfs}:0,import-from=$(pwd)/nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2,iothread=1,discard=on,ssd=${ssd:-1}" \
106 | --ide0 "${storage:-local-zfs}:cloudinit" \
107 | --tags alpine \
108 | --ciuser "${username:-satoshi}" \
109 | --sshkeys "${ssh_keyfile:-/etc/pve/priv/authorized_keys}" \
110 | --cipassword "${password:-changeme}" \
111 | --ipconfig0 "ip6=auto,ip=dhcp" \
112 | --boot order=scsi0 \
113 | --ciupgrade 1 \
114 | --scsihw virtio-scsi-single
115 | qm template "${alpine:-9010}"
116 | ```
117 |
118 | Clean up
119 |
120 | ```sh copy
121 | rm nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2
122 | ```
123 |
124 | ### Microbolt VM
125 |
126 | Clone the Alpine cloud template
127 |
128 | ```sh copy
129 | qm clone "${alpine:-9010}" "${microbolt:-2140}" \
130 | --name "${name:-nakamoto01}" \
131 | --full
132 | ```
133 |
134 | Set the Microbolt VM
135 |
136 | ```sh copy
137 | qm set "${microbolt:-2140}" \
138 | --onboot 1 \
139 | --cores "${cores:-2}" \
140 | --memory "${memory:-8192}" \
141 | --net0 "virtio,bridge=vmbr0,firewall=1,tag=${vlan:-1}" \
142 | --tags "alpine,microbolt"
143 | ```
144 |
145 | Rezise the disk(s)
146 |
147 |
148 |
149 | ```sh copy
150 | qm disk resize "${microbolt:-2140}" scsi0 2048G
151 | ```
152 |
153 |
154 | ```sh copy
155 | qm set "${microbolt:-2140}" \
156 | --scsi1 "${second_storage:-local-zfs}:2048,iothread=1,discard=on,ssd=${second_ssd:-1}"
157 | qm disk resize "${microbolt:-2140}" scsi0 32G
158 | ```
159 |
160 |
161 |
162 | Start the VM
163 |
164 | ```sh copy
165 | qm start "${microbolt:-2140}"
166 | ```
167 |
168 |
169 | ## Installation
170 |
171 | Run the following commands on your main machine.
172 |
173 |
174 | ### Install Ansible
175 |
176 |
177 |
178 | ```sh copy
179 | apk add ansible
180 | ```
181 |
182 |
183 |
184 | For some Linux distributions, refer to the [installation
185 | guide](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html).
186 | Other Unix-like systems can also check the [installation
187 | instructions](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html).
188 |
189 |
190 |
191 |
192 | First, install [Homebrew](https://brew.sh).
193 |
194 |
195 | ```sh copy
196 | brew install ansible
197 | ```
198 |
199 |
200 |
201 | Ansible does not support Windows natively. For more information, refer to the
202 | [Windows FAQ](https://docs.ansible.com/ansible/latest/os_guide/windows_faq.html#windows-faq-ansible).
203 | To use Ansible on Windows, consider using WSL. Learn more about the reasons
204 | [here](https://blog.rolpdog.com/2020/03/why-no-ansible-controller-for-windows.html).
205 |
206 |
207 |
208 |
209 | ### Clone the repository
210 |
211 | ```sh copy
212 | git clone https://github.com/microbolt-guide/ansible.git && cd ansible
213 | ```
214 |
215 | ### Configure the inventory
216 |
217 | ```sh copy
218 | cp inventory/hosts.ini.example inventory/hosts.ini
219 | ```
220 |
221 | Edit the `hosts.ini` file
222 |
223 | ```sh copy
224 | vi inventory/hosts.ini
225 | ```
226 |
227 | ### Configure the variables
228 |
229 | Edit the global variables in `group_vars/all.yaml` file
230 |
231 | ```sh copy
232 | vi inventory/group_vars/all.yaml
233 | ```
234 |
235 | And/or modify for a single host, view examples inside the `host_vars` directory
236 |
237 | ```sh copy
238 | cat inventory/host_vars/nakamoto01.yaml.example
239 | ```
240 |
241 | ### Run the playbook
242 |
243 | ```sh copy
244 | ./deploy.sh
245 | ```
246 |
247 | ### Start and enable the services
248 |
249 | ```sh copy
250 | ./services.sh start enable
251 | ```
252 |
253 |
254 | {
DONE 🎉
}
--------------------------------------------------------------------------------
/pages/en/docs/lightning/mobile_app.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Mobile app
5 |
6 | We install [Zeus](https://zeusln.app), a cross-platform mobile app that connect
7 | to your LN node over local network or over Tor. Make payments with lightning or
8 | on-chain and manage your channels while you're on the go.
9 |
10 | 
11 |
12 | ## Preparations
13 |
14 | ### Configure LND
15 |
16 | * Edit this line
17 |
18 | ```sh copy
19 | $SU $EDITOR /etc/lnd/lnd.conf
20 | ```
21 |
22 | ```conf filename="/etc/lnd/lnd.conf" {2}
23 | [...]
24 | restlisten=localhost:8080
25 | [...]
26 | ```
27 |
28 | ### Reverse proxy
29 |
30 | In the [Security section](../system/security#reverse-proxy), we set up a reverse
31 | proxy. Now we can add the LND rest configuration.
32 |
33 | * Enable the reverse proxy to route external encrypted HTTPS traffic internally
34 | to the LND rest.
35 |
36 |
37 |
38 | ```sh copy
39 | $SU $EDITOR /etc/caddy/streams/lnd-rest.caddy
40 | ```
41 |
42 | ```nginx copy filename="/etc/caddy/streams/lnd-rest.caddy"
43 | :8081 {
44 | route {
45 | proxy 127.0.0.1:8080
46 | }
47 | }
48 | ```
49 |
50 | * Reload Caddy
51 |
52 | ```sh copy
53 | $SU rc-service caddy restart
54 | ```
55 |
56 |
57 | ```sh copy
58 | $SU $EDITOR /etc/nginx/sites-available/lnd-rest-reverse-proxy.conf
59 | ```
60 |
61 | ```nginx copy filename="/etc/nginx/sites-available/lnd-rest-reverse-proxy.conf"
62 | server {
63 | listen 8081 ssl;
64 |
65 | location / {
66 | proxy_pass https://127.0.0.1:8080;
67 | proxy_ssl_verify off;
68 | proxy_set_header Host $host;
69 | proxy_set_header Upgrade $http_upgrade;
70 | proxy_set_header Connection "Upgrade";
71 | proxy_set_header X-Real-IP $remote_addr;
72 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
73 | proxy_set_header X-Forwarded-Proto $scheme;
74 | }
75 | }
76 | ```
77 |
78 | ```sh copy
79 | $SU ln \
80 | -s \
81 | ../sites-available/lnd-rest-reverse-proxy.conf \
82 | /etc/nginx/sites-enabled/lnd-rest-reverse-proxy.conf
83 | ```
84 |
85 | * Test and reload NGINX configuration
86 |
87 | ```sh copy
88 | $SU nginx -t
89 | $SU rc-service nginx restart
90 | ```
91 |
92 |
93 |
94 | ### Firewall
95 |
96 | * Configure the firewall to allow incoming HTTPS requests
97 |
98 |
99 |
100 | ```sh copy
101 | $SU $EDITOR /etc/awall/optional/lnd-rest.json
102 | ```
103 |
104 | ```json copy filename="/etc/awall/optional/lnd-rest.json"
105 | {
106 | "description": "Allow LND rest SSL",
107 |
108 | "filter": [
109 | {
110 | "in": "internet",
111 | "out": "_fw",
112 | "service": { "proto": "tcp", "port": 8081 },
113 | "action": "accept",
114 | "conn-limit": { "count": 10, "interval": 60 }
115 | }
116 | ]
117 | }
118 | ```
119 |
120 | * Enable it
121 |
122 | ```sh copy
123 | $SU awall enable lnd-rest
124 | $SU awall activate
125 | ```
126 |
127 |
128 | ```sh copy
129 | $SU ufw limit 8081/tcp comment 'Allow LND rest SSL'
130 | ```
131 |
132 |
133 |
134 |
135 | * Add the following lines in the section for “location-hidden services” in the
136 | `torrc` file. Save and exit.
137 |
138 | ```sh copy
139 | $SU $EDITOR /etc/tor/torrc
140 | ```
141 |
142 | ```sh copy filename="/etc/tor/torrc"
143 | # Hidden Service LND REST
144 | HiddenServiceDir /var/lib/tor/lnd-rest/
145 | HiddenServiceVersion 3
146 | HiddenServicePoWDefensesEnabled 1
147 | HiddenServicePort 8081 127.0.0.1:8081
148 | ```
149 |
150 | * Reload Tor configuration and get your connection address.
151 |
152 | ```sh copy
153 | $SU rc-service tor reload
154 | $SU cat /var/lib/tor/lnd-rest/hostname
155 | ```
156 |
157 | ```output filename="output"
158 | abcdefg..............xyz.onion
159 | ```
160 |
161 | * Save the onion address in a safe place (e.g., password manager). You should
162 | now be able to connect to your LND rest remotely via Tor using your hostname and
163 | port `8081`
164 |
165 |
166 | ### Create a lndconnect QR code
167 |
168 | * Install `qrencode`
169 |
170 | ```sh copy
171 | $SU apk add libqrencode-tools
172 | ```
173 |
174 | * There is a utility tool called `lndconnect`, but instead of installing it we
175 | can generate a qr with a valid lndconnect url very easily like this
176 |
177 |
178 |
179 |
180 | Define the hostname or IP address of your node in the `HOP` variable. Leave
181 | blank to use the default value `nakamoto01.local`.
182 |
183 | ```sh
184 | HOP=192.168.21.40
185 | ```
186 |
187 |
188 | ```sh copy
189 | printf "%s" \
190 | "lndconnect://" \
191 | "${HOP:-nakamoto01.local}" \
192 | ":8081" \
193 | "?cert=" \
194 | "$(
195 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\
196 | tr -d '=' |\
197 | tr '/+' '_-'
198 | )" \
199 | "&macaroon=" \
200 | "$(
201 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\
202 | tr -d '=' |\
203 | tr '/+' '_-'
204 | )" |\
205 | tr -d '\n' |\
206 | qrencode -t ansiutf8 -o -
207 | ```
208 |
209 |
210 | ```sh copy
211 | printf "%s" \
212 | "lndconnect://" \
213 | "$($SU cat /var/lib/tor/lnd-rest/hostname)" \
214 | ":8081" \
215 | "?cert=" \
216 | "$(
217 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\
218 | tr -d '=' |\
219 | tr '/+' '_-'
220 | )" \
221 | "&macaroon=" \
222 | "$(
223 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\
224 | tr -d '=' |\
225 | tr '/+' '_-'
226 | )" |\
227 | tr -d '\n' |\
228 | qrencode -t ansiutf8 -o -
229 | ```
230 |
231 |
232 |
233 | * It will be a big QR code, so maximize your terminal window and use `<->`
234 | to shrink the code further to fit the screen
235 |
236 | * Keep the SSH session with the QR code opened, it will be needed later
237 |
238 | ## Installation
239 |
240 | ### Install the Zeus app
241 |
242 | Download the Zeus app for your mobile phone. Check the [Zeus
243 | website](https://zeusln.app) for the direct download links to the Apple App
244 | Store or Google Play.
245 |
246 | On Android, if you can't or do not want to use Google Play, you can use
247 | [Obtanium](https://github.com/ImranR98/Obtainium) [how-to add
248 | app](https://github.com/ImranR98/Obtainium/wiki#add-app-page), the [F-Droid
249 | store](https://f-droid.org/en/packages/app.zeusln.zeus) or simply [download the
250 | APK](https://zeusln.app), tap it and install it. If it's the first time you
251 | install an APK on your phone you will be asked to authorize the app to install
252 | unknown apps, simply follow the on-screen instructions to do so.
253 |
254 | ## Configuration
255 |
256 | ### Connect Zeus to your node
257 |
258 | * Open Zeus and tap on `ADVANCED SET-UP`
259 | * Tap on `+ Connect a node`
260 | * Enter a Nickname for your node (e.g., "Microbolt")
261 | * Click on "scan button" at the top right and, if prompted, allow Zeus to use
262 | the camera
263 | * Scan the QR code generated earlier
264 | * Click on `SAVE NODE CONFIG`. Zeus is now connecting to your node, and it might
265 | take a while the first time.
266 |
267 | ### Security
268 |
269 | Anyone using Zeus on your phone has control over your node and all its funds. It
270 | is strongly recommended to set up a password for the app.
271 |
272 | * In the app, tap on the `node icon` in the top-left corner
273 | * Click on `Security` and `Set/Change Password` or `Set/Change PIN` to enter a
274 | password or PIN
275 | * Save your password or PIN somewhere safe, e.g., in your password manager
276 |
277 | ## Zeus in action
278 |
279 | Below is a list of Zeus existing and planned features at 2024-03-16:
280 |
281 | 
282 |
283 | ## Update
284 |
285 | To update Zeus, update the app using the same method you used to install it.
--------------------------------------------------------------------------------
/pages/ca/ansible.mdx:
--------------------------------------------------------------------------------
1 | ---
2 | title: Ansible
3 | ---
4 |
5 | import { Callout, Steps, Tabs } from 'nextra/components'
6 | import { FAQBox } from '@components'
7 |
8 | # Microbolt ❤️ Cloud
9 |
10 | Ansible és una eina senzilla d'automatització informàtica que pot facilitar el
11 | desplegament de les teves aplicacions i sistemes. És una eina potent que es pot
12 | utilitzar per automatitzar el desplegament i la configuració del(s) vostre(s)
13 | node(s) Microbolt.
14 |
15 | Algú va dir una vegada:
16 |
17 |
18 | "Ain't nobody got time to sit through RaspiBolt more than once. Once you've
19 | learned how to build a Bitcoin node with your hands the next ones should just
20 | build themselves."
21 |
22 | — 1ma (Unhosted Marcellus)
23 |
24 |
25 | i aquí estem.
26 |
27 |
28 | Aquesta guia assumeix que teniu un coneixement bàsic de Proxmox/Debian i que
29 | podeu llegir ordres o scripts bàsics de l'intèrpret d'ordres, identificar
30 | variables i modificar-les segons sigui necessari. Es proporcionen valors per
31 | defecte per a totes les variables, però podeu personalitzar-los perquè s'adaptin
32 | a les vostres necessitats. No cal que sigueu un expert Proxmox/Debian, però
33 | hauríeu de ser capaços de fer SSH al teu sistema. Instal·lar Proxmox/Debian està
34 | fora d'abast.
35 |
36 |
37 | ## Prerequisits
38 |
39 |
40 | | Variable | Descripció | Valor per defecte |
41 | | ---------------- | ------------------- | ------------------------------- |
42 | | `blank` | Blank template ID | `9000` |
43 | | `alpine` | Alpine template ID | `9010` |
44 | | `storage` | Storage ID | `local-zfs` |
45 | | `ssd` | SSD flag | `1` |
46 | | `username` | Cloud-init username | `satoshi` |
47 | | `ssh_keyfile` | SSH key file | `/etc/pve/priv/authorized_keys` |
48 | | `password` | Cloud-init password | `changeme` |
49 | | `microbolt` | Microbolt VM ID | `2140` |
50 | | `name` | Microbolt VM name | `nakamoto01` |
51 | | `cores` | Microbolt VM cores | `4` |
52 | | `memory` | Microbolt VM memory | `8192` |
53 | | `vlan` | Microbolt VM VLAN | `1` |
54 | | `second_storage` | Second storage ID | `local-zfs` |
55 | | `second_ssd` | Second SSD flag | `1` |
56 |
57 |
58 | SSH al vostre servidor Proxmox/Debian i executeu les ordres següents.
59 |
60 |
61 | ### Plantilla en blanc
62 |
63 | Es recomana molt crear una plantilla en blanc de Linux si estàs utilitzant
64 | Proxmox/Debian. M'ho agrairàs més tard.
65 |
66 | ```sh copy
67 | qm create "${blank:-9000}" \
68 | --name template \
69 | --ostype l26 \
70 | --agent enabled=1,fstrim_cloned_disks=1 \
71 | --cpu host \
72 | --balloon 0 \
73 | --vga serial0 \
74 | --scsihw virtio-scsi-pci \
75 | --net0 virtio,bridge=vmbr0,firewall=1 \
76 | --serial0 socket
77 | qm template "${blank:-9000}"
78 | ```
79 |
80 | ### Plantilla d'Alpine cloud
81 |
82 | Clona la plantilla en blanc
83 |
84 | ```sh copy
85 | qm clone "${blank:-9000}" "${alpine:-9010}" \
86 | --name alpine-3.20 \
87 | --full
88 | ```
89 |
90 | Descarrega la imatge de cloud d'Alpine
91 |
92 | ```sh copy
93 | wget https://dl-cdn.alpinelinux.org/alpine/v3.20/releases/cloud/\
94 | nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2
95 | ```
96 |
97 | Crea la plantilla d'Alpine cloud
98 |
99 |
100 | Per utilitzar les teves pròpies claus SSH de GitHub, simplement substitueix
101 | `` pel teu nom d'usuari real de GitHub.
102 |
103 | ```sh
104 | wget -qO- https://github.com/.keys > ./github_keys
105 | export ssh_keyfile=./github_keys
106 | ```
107 |
108 |
109 | ```sh copy
110 | qm set "${alpine:-9010}" \
111 | --scsi0 "${storage:-local-zfs}:0,import-from=$(pwd)/nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2,iothread=1,discard=on,ssd=${ssd:-1}" \
112 | --ide0 "${storage:-local-zfs}:cloudinit" \
113 | --tags alpine \
114 | --ciuser "${username:-satoshi}" \
115 | --sshkeys "${ssh_keyfile:-/etc/pve/priv/authorized_keys}" \
116 | --cipassword "${password:-changeme}" \
117 | --ipconfig0 "ip6=auto,ip=dhcp" \
118 | --boot order=scsi0 \
119 | --ciupgrade 1 \
120 | --scsihw virtio-scsi-single
121 | qm template "${alpine:-9010}"
122 | ```
123 |
124 | Neteja
125 |
126 | ```sh copy
127 | rm nocloud_alpine-3.20.3-x86_64-bios-cloudinit-r0.qcow2
128 | ```
129 |
130 | ### Microbolt VM
131 |
132 | Clona la plantilla d'Alpine cloud
133 |
134 | ```sh copy
135 | qm clone "${alpine:-9010}" "${microbolt:-2140}" \
136 | --name "${name:-nakamoto01}" \
137 | --full
138 | ```
139 |
140 | Configura la Microbolt VM
141 |
142 | ```sh copy
143 | qm set "${microbolt:-2140}" \
144 | --onboot 1 \
145 | --cores "${cores:-2}" \
146 | --memory "${memory:-8192}" \
147 | --net0 "virtio,bridge=vmbr0,firewall=1,tag=${vlan:-1}" \
148 | --tags "alpine,microbolt"
149 | ```
150 |
151 | Redimensiona el(s) disc(s)
152 |
153 |
154 |
155 | ```sh copy
156 | qm disk resize "${microbolt:-2140}" scsi0 2048G
157 | ```
158 |
159 |
160 | ```sh copy
161 | qm set "${microbolt:-2140}" \
162 | --scsi1 "${second_storage:-local-zfs}:2048,iothread=1,discard=on,ssd=${second_ssd:-1}"
163 | qm disk resize "${microbolt:-2140}" scsi0 32G
164 | ```
165 |
166 |
167 |
168 | Inicia la VM
169 |
170 | ```sh copy
171 | qm start "${microbolt:-2140}"
172 | ```
173 |
174 |
175 | ## Instal·lació
176 |
177 | Executeu les ordres següents a la màquina principal.
178 |
179 |
180 | ### Instal·la Ansible
181 |
182 |
183 |
184 | ```sh copy
185 | apk add ansible
186 | ```
187 |
188 |
189 |
190 | Per a algunes distribucions de Linux, consulta la [guia
191 | d'instal·lació](https://docs.ansible.com/ansible/latest/installation_guide/installation_distros.html).
192 | Altres sistemes Unix-like també poden consultar les [instruccions
193 | d'instal·lació](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html).
194 |
195 |
196 |
197 |
198 | Primer, instal·la [Homebrew](https://brew.sh).
199 |
200 |
201 | ```sh copy
202 | brew install ansible
203 | ```
204 |
205 |
206 |
207 | Ansible no suporta Windows nativament. Per a més informació, consulta les [FAQ
208 | de Windows](https://docs.ansible.com/ansible/latest/os_guide/windows_faq.html#windows-faq-ansible).
209 | Per utilitzar Ansible a Windows, considera utilitzar WSL. Aprèn més sobre les
210 | raons
211 | [aquí](https://blog.rolpdog.com/2020/03/why-no-ansible-controller-for-windows.html).
212 |
213 |
214 |
215 |
216 | ### Clona el repositori
217 |
218 | ```sh copy
219 | git clone https://github.com/microbolt-guide/ansible.git && cd ansible
220 | ```
221 |
222 | ### Configura l'inventari
223 |
224 | ```sh copy
225 | cp inventory/hosts.ini.example inventory/hosts.ini
226 | ```
227 |
228 | Edita el fitxer `hosts.ini`
229 |
230 | ```sh copy
231 | vi inventory/hosts.ini
232 | ```
233 |
234 | ### Configura les variables
235 |
236 | Edita les variables globals al fitxer `group_vars/all.yaml`
237 |
238 | ```sh copy
239 | vi inventory/group_vars/all.yaml
240 | ```
241 |
242 | I/o modifica per a un sol host, consulta exemples dins del directori `host_vars`
243 |
244 | ```sh copy
245 | cat inventory/host_vars/nakamoto01.yaml.example
246 | ```
247 |
248 | ### Executa el playbook
249 |
250 | ```sh copy
251 | ./deploy.sh
252 | ```
253 |
254 | ### Inicia i habilita els serveis
255 |
256 | ```sh copy
257 | ./services.sh start enable
258 | ```
259 |
260 |
261 | {
FET 🎉
}
--------------------------------------------------------------------------------
/pages/ca/docs/lightning/mobile_app.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Aplicació mòbil
5 |
6 | Instal·lem [Zeus](https://zeusln.app), una aplicació mòbil multiplataforma que
7 | es connecta al teu node de LN a través de la xarxa local o a través de Tor. Fes
8 | pagaments amb lightning o a la cadena de blocs i gestiona els teus canals mentre
9 | ets en remot.
10 |
11 | 
12 |
13 | ## Preparatius
14 |
15 | ### Configura LND
16 |
17 | * Edita aquesta línia
18 |
19 | ```sh copy
20 | $SU $EDITOR /etc/lnd/lnd.conf
21 | ```
22 |
23 | ```conf filename="/etc/lnd/lnd.conf" {2}
24 | [...]
25 | restlisten=localhost:8080
26 | [...]
27 | ```
28 |
29 | ### Servidor intermediari invers
30 |
31 | A la secció de [Seguretat](../system/security#servidor-intermediari-invers), hem
32 | configurat un servidor intermediari invers. Ara podem afegir la configuració de
33 | LND rest.
34 |
35 | * Habilita el servidor intermediari invers per encaminar el trànsit HTTPS extern
36 | xifrat internament cap a LND rest
37 |
38 |
39 |
40 | ```sh copy
41 | $SU $EDITOR /etc/caddy/streams/lnd-rest.caddy
42 | ```
43 |
44 | ```nginx copy filename="/etc/caddy/streams/lnd-rest.caddy"
45 | :8081 {
46 | route {
47 | proxy 127.0.0.1:8080
48 | }
49 | }
50 | ```
51 |
52 | * Torna a carregar el Caddy
53 |
54 | ```sh copy
55 | $SU rc-service caddy restart
56 | ```
57 |
58 |
59 | ```sh copy
60 | $SU $EDITOR /etc/nginx/sites-available/lnd-rest-reverse-proxy.conf
61 | ```
62 |
63 | ```nginx copy filename="/etc/nginx/sites-available/lnd-rest-reverse-proxy.conf"
64 | server {
65 | listen 8081 ssl;
66 |
67 | location / {
68 | proxy_pass https://127.0.0.1:8080;
69 | proxy_ssl_verify off;
70 | proxy_set_header Host $host;
71 | proxy_set_header Upgrade $http_upgrade;
72 | proxy_set_header Connection "Upgrade";
73 | proxy_set_header X-Real-IP $remote_addr;
74 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
75 | proxy_set_header X-Forwarded-Proto $scheme;
76 | }
77 | }
78 | ```
79 |
80 | ```sh copy
81 | $SU ln \
82 | -s \
83 | ../sites-available/lnd-rest-reverse-proxy.conf \
84 | /etc/nginx/sites-enabled/lnd-rest-reverse-proxy.conf
85 | ```
86 |
87 | * Prova i torna a carregar la configuració de NGINX
88 |
89 | ```sh copy
90 | $SU nginx -t
91 | $SU rc-service nginx restart
92 | ```
93 |
94 |
95 |
96 | ### Firewall
97 |
98 | * Configura el tallafoc per permetre les sol·licituds HTTPS entrants
99 |
100 |
101 |
102 | ```sh copy
103 | $SU $EDITOR /etc/awall/optional/lnd-rest.json
104 | ```
105 |
106 | ```json copy filename="/etc/awall/optional/lnd-rest.json"
107 | {
108 | "description": "Allow LND rest SSL",
109 |
110 | "filter": [
111 | {
112 | "in": "internet",
113 | "out": "_fw",
114 | "service": { "proto": "tcp", "port": 8081 },
115 | "action": "accept",
116 | "conn-limit": { "count": 10, "interval": 60 }
117 | }
118 | ]
119 | }
120 | ```
121 |
122 | * Habilitar-ho
123 |
124 | ```sh copy
125 | $SU awall enable lnd-rest
126 | $SU awall activate
127 | ```
128 |
129 |
130 | ```sh copy
131 | $SU ufw limit 8081/tcp comment 'Allow LND rest SSL'
132 | ```
133 |
134 |
135 |
136 |
137 | * Afegiu les línies següents a la secció de "location-hidden services" al fitxer
138 | `torrc`.
139 |
140 | ```sh copy
141 | $SU $EDITOR /etc/tor/torrc
142 | ```
143 |
144 | ```sh copy filename="/etc/tor/torrc"
145 | # Hidden Service LND REST
146 | HiddenServiceDir /var/lib/tor/lnd-rest/
147 | HiddenServiceVersion 3
148 | HiddenServicePoWDefensesEnabled 1
149 | HiddenServicePort 8081 127.0.0.1:8081
150 | ```
151 |
152 | * Torneu a carregar la configuració de Tor i obteniu la vostra adreça de
153 | connexió.
154 |
155 | ```sh copy
156 | $SU rc-service tor reload
157 | $SU cat /var/lib/tor/lnd-rest/hostname
158 | ```
159 |
160 | ```output filename="output"
161 | abcdefg..............xyz.onion
162 | ```
163 |
164 | * Desa l'adreça onion en un lloc segur (per exemple, un gestor de contrasenyes).
165 | Ara hauries de poder connectar-te al teu LND de forma remota a través de Tor
166 | utilitzant el teu nom d'amfitrió i el port `8081`.
167 |
168 |
169 | ### Crea un codi QR de lndconnect
170 |
171 | * Instal·la `qrencode`
172 |
173 | ```sh copy
174 | $SU apk add libqrencode-tools
175 | ```
176 |
177 | * Hi ha una eina utilitària anomenada `lndconnect`, però en lloc d'instal·lar-la
178 | podem generar fàcilment un codi QR amb una URL de lndconnect vàlida de la
179 | següent manera
180 |
181 |
182 |
183 |
184 | Definiu el nom d'amfitrió o l'adreça IP del vostre node a la variable `HOP`.
185 | Deixeu-ho en blanc per a utilitzar el valor per defecte `nakamoto01.local`.
186 |
187 | ```sh
188 | HOP=192.168.21.40
189 | ```
190 |
191 |
192 | ```sh copy
193 | printf "%s" \
194 | "lndconnect://" \
195 | "${HOP:-nakamoto01.local}" \
196 | ":8081" \
197 | "?cert=" \
198 | "$(
199 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\
200 | tr -d '=' |\
201 | tr '/+' '_-'
202 | )" \
203 | "&macaroon=" \
204 | "$(
205 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\
206 | tr -d '=' |\
207 | tr '/+' '_-'
208 | )" |\
209 | tr -d '\n' |\
210 | qrencode -t ansiutf8 -o -
211 | ```
212 |
213 |
214 | ```sh copy
215 | printf "%s" \
216 | "lndconnect://" \
217 | "$($SU cat /var/lib/tor/lnd-rest/hostname)" \
218 | ":8081" \
219 | "?cert=" \
220 | "$(
221 | grep -v 'CERTIFICATE' /var/lib/lnd/tls.cert |\
222 | tr -d '=' |\
223 | tr '/+' '_-'
224 | )" \
225 | "&macaroon=" \
226 | "$(
227 | base64 /var/lib/lnd/data/chain/bitcoin/mainnet/admin.macaroon |\
228 | tr -d '=' |\
229 | tr '/+' '_-'
230 | )" |\
231 | tr -d '\n' |\
232 | qrencode -t ansiutf8 -o -
233 | ```
234 |
235 |
236 |
237 | * Serà un codi QR gran, així que maximitza la finestra del terminal i utilitza
238 | `<->` per reduir encara més el codi perquè s'ajusti a la pantalla
239 |
240 | * Mantén oberta la sessió SSH amb el codi QR, serà necessària més endavant
241 |
242 | ## Instal·lació
243 |
244 | ### Instal·la l'aplicació Zeus
245 |
246 | Descarrega l'aplicació Zeus per al teu telèfon mòbil. Consulta el [lloc web de
247 | Zeus](https://zeusln.app) per obtenir els enllaços de descàrrega directa a l'App
248 | Store d'Apple o a Google Play.
249 |
250 | A Android, si no pots o no vols utilitzar Google Play, pots utilitzar
251 | [Obtanium](https://github.com/ImranR98/Obtainium) [com afegir
252 | l'aplicació](https://github.com/ImranR98/Obtainium/wiki#add-app-page), la
253 | [botiga F-Droid](https://f-droid.org/en/packages/app.zeusln.zeus) o simplement
254 | [descarregar el fitxer APK](https://zeusln.app), clica'l i instal·la'l. Si és la
255 | primera vegada que instal·les un APK al teu telèfon, se't demanarà autorització,
256 | simplement segueix les instruccions que apareixen a la pantalla per fer-ho.
257 |
258 | ## Configuració
259 |
260 | ### Connecta Zeus al teu node
261 |
262 | * Obre Zeus i toca `ADVANCED SET-UP`
263 | * Clica `+ Connect a node`
264 | * Introdueix un Nickname per al teu node (per exemple, "Microbolt")
265 | * Fes clic al "botó d'escanejar" a la part superior dreta i, si se't demana,
266 | permet a Zeus utilitzar la càmera
267 | * Escaneja el codi QR generat anteriorment
268 | * Fes clic a `SAVE NODE CONFIG`. Ara Zeus s'està connectant al teu node, i pot
269 | trigar una estona la primera vegada.
270 |
271 | ### Seguretat
272 |
273 | Anyone using Zeus on your phone has control over your node and all its funds. It
274 | is strongly recommended to set up a password for the app.
275 |
276 | Qualsevol que utilitzi Zeus al teu telèfon té control sobre el teu node i tots
277 | els seus fons. Es recomana encaridament configurar una contrasenya per a
278 | l'aplicació.
279 |
280 | * A l'aplicació, toca la `icona del node` a la part superior esquerra
281 | * Fes clic a `Security` i `Set/Change Password` o `Set/Change PIN` per introduir
282 | una contrasenya o PIN
283 | * Desa la teva contrasenya o PIN en algun lloc segur, per exemple, en el teu
284 | gestor de contrasenyes
285 |
286 | ## Zeus en acció
287 |
288 | A continuació es mostra una llista de les funcions actuals i planificades de
289 | Zeus a 2024-03-16:
290 |
291 | 
292 |
293 | ## Actualització
294 |
295 | Per actualitzar Zeus, actualitza l'aplicació utilitzant el mateix mètode que vas
296 | utilitzar per instal·lar-la.
--------------------------------------------------------------------------------
/theme.config.jsx:
--------------------------------------------------------------------------------
1 | import { useRouter } from 'nextra/hooks'
2 | import { useConfig } from 'nextra-theme-docs'
3 |
4 | // Start of l10n strings on /locales/*.js
5 | // Dynamically import all locale files
6 | const locales = require.context('./locales', false, /\.js$/)
7 | const localizedStrings = {}
8 |
9 | // Loop through each locale file and add its strings to the localizedStrings object
10 | locales.keys().forEach((key) => {
11 | const locale = key.replace('./', '').replace('.js', '')
12 | localizedStrings[locale] = locales(key).default
13 | })
14 |
15 | // Generate the list of locales
16 | const i18n = Object.keys(localizedStrings).map(locale => ({
17 | locale,
18 | name: localizedStrings[locale].LANGUAGE_NAME
19 | }))
20 |
21 | // Extract localized strings
22 | const l10n = (key) => {
23 | return Object.fromEntries(
24 | Object.entries(localizedStrings).map(([locale, strings]) => [locale, strings[key]])
25 | )
26 | }
27 |
28 | // Extract localized strings
29 | const FEEDBACK = l10n('FEEDBACK')
30 | const DESCRIPTION = l10n('DESCRIPTION')
31 | const SEARCH_PLACEHOLDER = l10n('SEARCH_PLACEHOLDER')
32 | const BANNER_TEXT = l10n('BANNER_TEXT')
33 | const TOC_TITLE = l10n('TOC_TITLE')
34 | const TOC_L10N_TEXT = l10n('TOC_L10N_TEXT')
35 | const BACK_TO_TOP = l10n('BACK_TO_TOP')
36 | const EDIT_TEXT = l10n('EDIT_TEXT')
37 | const GIT_TIMESTAMP = l10n('GIT_TIMESTAMP')
38 |
39 | const BANNER_KEY = 'microbolt-2'
40 | const BANNER_LINK = 'https://t.me/microbolt_official'
41 | const TOC_L10N_LINK = 'https://crowdin.com/project/microbolt'
42 | // End of l10n strings
43 |
44 | export const MOBLogo = (props) => (
45 |
71 | )
72 |
73 | export const TGLogo = (props) => (
74 |
80 | )
81 |
82 | export default {
83 | docsRepositoryBase: "https://github.com/microbolt-guide/microbolt/blob/main",
84 | feedback: {
85 | content() {
86 | const { locale } = useRouter()
87 | return FEEDBACK[locale]
88 | },
89 | labels: 'feedback'
90 | },
91 | head: function useHead() {
92 | const config = useConfig()
93 | const { locale } = useRouter()
94 | const description =
95 | config.frontMatter.description || DESCRIPTION[locale]
96 | const image =
97 | config.frontMatter.image ||
98 | 'https://raw.githubusercontent.com/microbolt-guide/microbolt/main/public/img/microbolt-banner.webp'
99 | const title = `${config.title} – Microbolt`
100 | return (
101 | <>
102 | {title}
103 |
104 |
105 |
106 | {/* Favicons, meta */}
107 |
112 |
113 |
114 |
115 |
116 |
117 |
118 | >
119 | )
120 | },
121 | i18n,
122 | logo: (
123 | <>
124 |
125 |
128 | Microbolt
129 |
130 | >
131 | ),
132 | project: {
133 | link: 'https://github.com/microbolt-guide/microbolt'
134 | },
135 | chat: {
136 | link: 'https://t.me/microbolt_official',
137 | icon:
138 | },
139 | search: {
140 | placeholder() {
141 | const { locale } = useRouter()
142 | return SEARCH_PLACEHOLDER[locale]
143 | }
144 | },
145 | banner: {
146 | dismissible: true,
147 | key: BANNER_KEY,
148 | content() {
149 | const { locale } = useRouter()
150 | return (
151 | {BANNER_TEXT[locale]}
152 | )
153 | }
154 | },
155 | sidebar: {
156 | defaultMenuCollapseLevel: 1,
157 | autoCollapse: true,
158 | toggleButton: true
159 | },
160 | toc: {
161 | title() {
162 | const { locale } = useRouter()
163 | return TOC_TITLE[locale]
164 | },
165 | backToTop: function BackToTop() {
166 | const { locale } = useRouter()
167 | return BACK_TO_TOP[locale]
168 | },
169 | extraContent() {
170 | const { locale } = useRouter()
171 | return (
172 |
177 | {TOC_L10N_TEXT[locale]}
178 |
179 | )
180 | }
181 | },
182 | editLink: {
183 | content() {
184 | const { locale } = useRouter()
185 | return EDIT_TEXT[locale]
186 | }
187 | },
188 | navigation: {
189 | prev: true,
190 | next: true
191 | },
192 | gitTimestamp: function useGitTimestamp({ timestamp }) {
193 | const { locale } = useRouter()
194 | return (
195 | <>
196 | {GIT_TIMESTAMP[locale]}{' '}
197 |
204 | >
205 | )
206 | },
207 | footer: {
208 | content: (
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 | )
217 | }
218 | }
--------------------------------------------------------------------------------
/pages/en/docs/system/privacy.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Privacy
5 |
6 | We configure Tor and I2P to run your node anonymously.
7 |
8 | Running your own Bitcoin and Lightning node at home makes you a direct,
9 | sovereign peer on the Bitcoin network. However, if not configured without
10 | privacy in mind, it also tells the world that there is someone with Bitcoin at
11 | that address.
12 |
13 | We'll also make it easy to connect to your node from outside your home network
14 | as an added benefit.
15 |
16 | True, it's only your IP address that is revealed, but using services like
17 | [iplocation.net](https://www.iplocation.net), your physical address can be
18 | determined quite accurately. Especially with Lightning, your IP address would be
19 | widely used. We need to make sure that you keep your privacy.
20 |
21 | ## Tor Project
22 |
23 | We use Tor, a free software built by the
24 | [Tor Project](https://www.torproject.org). It allows you to anonymize internet
25 | traffic by routing it through a network of nodes, hiding your location and usage
26 | profile.
27 |
28 | It is called "Tor" for "The Onion Router": information is routed through many
29 | hops and encrypted multiple times. Each node decrypts only the layer of
30 | information addressed to it, learning only the previous and the next hop of the
31 | whole route. The data package is peeled like an onion until it reaches the final
32 | destination.
33 |
34 | ### Preparation
35 |
36 | Create `tor` group and user
37 |
38 | ```sh copy
39 | $SU addgroup -S tor
40 | ```
41 |
42 | ```sh copy
43 | $SU adduser \
44 | -S \
45 | -D \
46 | -H \
47 | -h /dev/null \
48 | -s /sbin/nologin \
49 | -G tor \
50 | -g tor \
51 | tor
52 | ```
53 |
54 | ### Install
55 |
56 | ```sh copy
57 | $SU apk add tor
58 | ```
59 |
60 | ### Tor configuration
61 |
62 | Bitcoin client will communicate directly with the Tor daemon to route all
63 | traffic through the Tor network. We need to enable Tor to accept instructions
64 | through its control port, with the proper authentication.
65 |
66 | * Edit the Tor configuration
67 |
68 | ```sh copy
69 | $SU cp /etc/tor/torrc.sample /etc/tor/torrc
70 | $SU $EDITOR /etc/tor/torrc
71 | ```
72 |
73 | * Uncomment the following lines
74 |
75 | ```conf filename="/etc/tor/torrc" {4,8}
76 | ...
77 | ## The port on which Tor will listen for local connections from Tor
78 | ## controller applications, as documented in control-spec.txt.
79 | ControlPort 9051
80 | ## If you enable the controlport, be sure to enable one of these
81 | ## authentication methods, to prevent attackers from accessing it.
82 | #HashedControlPassword 24:972860B76453A77B40CA2BB8C1A7982072093276A3D701AD685353
83 | CookieAuthentication 1
84 |
85 | ############### This section is just for location-hidden services ###
86 | ...
87 | ```
88 |
89 | * Add under `CookieAuthentication 1`
90 |
91 | ```conf copy filename="/etc/tor/torrc"
92 | CookieAuthFile /var/lib/tor/control_auth_cookie
93 | CookieAuthFileGroupReadable 1
94 | DataDirectoryGroupReadable 1
95 | ```
96 |
97 | * Start Tor and add service to runlevel
98 |
99 | ```sh copy
100 | $SU rc-service tor start
101 | $SU rc-update add tor default
102 | ```
103 |
104 | * Ensure that the Tor service is working and listening at the default ports
105 | `9050` and `9051`
106 |
107 | ```sh copy
108 | $SU netstat -lntup | grep LISTEN | grep tor
109 | ```
110 |
111 | ```output filename="output"
112 | tcp 0 0 127.0.0.1:9051 0.0.0.0:* LISTEN 3359/tor
113 | tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 3359/tor
114 | ```
115 |
116 | * Check the logs to see Tor in real time updates output logs. Exit with `Ctrl-C`
117 |
118 | ```sh copy
119 | $SU tail -f /var/log/tor/notices.log
120 | ```
121 |
122 | Not all network traffic is routed over the Tor network. But we now have the base
123 | to configure sensitive applications to use it.
124 |
125 |
126 | If you want to log into your Microbolt with SSH when you're away, you can easily
127 | do so by adding a Tor hidden service. This makes "calling home" very easy,
128 | without the need to configure anything on your internet router.
129 |
130 | {
Server
}
131 |
132 | * Add the following lines in the "location hidden services" section, below
133 | "`## This section is just for location-hidden services ##`" in the torrc file
134 |
135 |
136 | It's interesting to put the same port as done on `dropbear`/`openssh`, default
137 | `22`
138 |
139 |
140 | ```sh copy
141 | $SU $EDITOR /etc/tor/torrc
142 | ```
143 |
144 | ```conf copy filename="/etc/tor/torrc" {5}
145 | # Hidden Service SSH server
146 | HiddenServiceDir /var/lib/tor/ssh/
147 | HiddenServiceVersion 3
148 | HiddenServicePoWDefensesEnabled 1
149 | HiddenServicePort 2222 127.0.0.1:2222
150 | ```
151 |
152 | * Reload the Tor configuration to apply the configuration
153 |
154 | ```sh copy
155 | $SU rc-service tor reload
156 | ```
157 |
158 | * Get the SSH Onion address
159 |
160 | ```sh copy
161 | $SU cat /var/lib/tor/ssh/hostname
162 | ```
163 |
164 | ```output filename="output"
165 | abcdefg..............xyz.onion
166 | ```
167 |
168 | * Save the Tor address in a secure location, e.g. your password manager
169 |
170 | {
Client
}
171 |
172 | You also need to have Tor installed on your regular computer where you start the
173 | SSH connection. Usage of SSH over Tor differs by client and operating system.
174 |
175 |
176 |
177 | Popular tools like `torify` or `torsocks` are not available on Windows, and
178 | `torifier` are abandoned.
179 |
180 | To work around this, first, make sure Tor is installed and running on your
181 | Windows. Run as admin:
182 |
183 |
184 | First you need to install [chocolatey](https://chocolatey.org/install)
185 |
186 |
187 | ```sh copy
188 | choco install tor
189 | choco install nmap --version=7.92.0.20220321
190 | tor --service start
191 | ```
192 |
193 | Check tor service are working
194 |
195 | ```sh copy
196 | netstat -aon | findstr ":9050"
197 | ```
198 |
199 | ```output filename="output"
200 | TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 23656
201 | ```
202 |
203 | You can SSH to your PC "out of the box" with the following proxy command:
204 |
205 | ```sh copy
206 | ssh `
207 | -o "ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p" `
208 | satoshi@abcdefg..............xyz.onion -p 2222
209 | ```
210 |
211 | * For a more permanent solution, add these six lines below to your local SSH
212 | config file. Choose any HOSTNICKNAME you want, save, and exit
213 |
214 | ```sh copy
215 | notepad .ssh/config
216 | ```
217 |
218 | ```conf filename="~/.ssh/config"
219 | Host HOSTNICKNAME
220 | Hostname abcdefg..............xyz.onion
221 | User satoshi
222 | Port 2222
223 | CheckHostIP no
224 | ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p
225 | ```
226 |
227 | * Restart Tor
228 |
229 | ```sh copy
230 | tor --service stop
231 | tor --service start
232 | ```
233 |
234 | * You should now be able to SSH to your PC with
235 |
236 | ```sh copy
237 | ssh HOSTNICKNAME
238 | ```
239 |
240 |
241 | Using `torify` or `torsocks` may not work due to Apple's
242 | _System Integrity Protection (SIP)_ which will deny access to `/usr/bin/ssh`.
243 |
244 | To work around this, first, make sure Tor is installed and running on your Mac:
245 |
246 |
247 | First you need to install [homebrew](https://brew.sh/)
248 |
249 |
250 | ```sh copy
251 | brew install tor && brew services start tor
252 | ```
253 |
254 | You can SSH to your PC "out of the box" with the following proxy command:
255 |
256 | ```sh
257 | ssh \
258 | -o "ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p" \
259 | satoshi@abcdefg..............xyz.onion -p 2222
260 | ```
261 |
262 | * For a more permanent solution, add these six lines below to your local SSH
263 | config file. Choose any HOSTNICKNAME you want, save, and exit
264 |
265 | ```sh copy
266 | vi .ssh/config
267 | ```
268 |
269 | ```conf filename="~/.ssh/config"
270 | Host HOSTNICKNAME
271 | Hostname abcdefg..............xyz.onion
272 | User satoshi
273 | Port 2222
274 | CheckHostIP no
275 | ProxyCommand /usr/bin/nc -x localhost:9050 %h %p
276 | ```
277 |
278 | * Restart Tor
279 |
280 | ```sh copy
281 | brew services restart tor
282 | ```
283 |
284 | * You should now be able to SSH to your PC with
285 |
286 | ```sh copy
287 | ssh HOSTNICKNAME
288 | ```
289 |
290 |
291 | * Use `torify` or `torsocks`, both work similarly; just use whatever you have
292 | available
293 |
294 | ```sh
295 | torify ssh admin@abcdefg..............xyz.onion -p 2222
296 | ```
297 |
298 | ```sh
299 | torsocks ssh admin@abcdefg..............xyz.onion -p 2222
300 | ```
301 |
302 |
303 |
304 |
305 | ## I2P Project
306 |
307 | [I2P](https://geti2p.net) is a universal anonymous network layer. All
308 | communications over I2P are anonymous and end-to-end encrypted, participants
309 | don't reveal their real IP addresses. I2P allows people from all around the
310 | world to communicate and share information without restrictions.
311 |
312 | I2P client is software used for building and using anonymous I2P networks. Such
313 | networks are commonly used for anonymous peer-to-peer applications (filesharing,
314 | cryptocurrencies) and anonymous client-server applications (websites, instant
315 | messengers, chat-servers).
316 |
317 | We are to use [i2pd](https://i2pd.readthedocs.io/en/latest/) (I2P Daemon), a
318 | full-featured C++ implementation of the I2P client, as a Tor network complement.
319 |
320 | ### I2P installation
321 |
322 | ```sh copy
323 | $SU apk add i2pd
324 | ```
325 |
326 | * Start the i2p service and add to runlevel
327 |
328 | ```sh copy
329 | $SU rc-service i2pd start
330 | $SU rc-update add i2pd default
331 | ```
332 | * Ensure that the i2pd service is working and listening at the default ports
333 |
334 | ```sh copy
335 | $SU netstat -lntup | grep LISTEN | grep i2pd
336 | ```
337 |
338 | ```output filename="output"
339 | tcp 0 0 127.0.0.1:4447 0.0.0.0:* LISTEN 3571/i2pd
340 | tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 3571/i2pd
341 | tcp 0 0 127.0.0.1:7656 0.0.0.0:* LISTEN 3571/i2pd
342 | tcp 0 0 0.0.0.0:26697 0.0.0.0:* LISTEN 3571/i2pd
343 | tcp 0 0 127.0.0.1:6668 0.0.0.0:* LISTEN 3571/i2pd
344 | tcp 0 0 127.0.0.1:7070 0.0.0.0:* LISTEN 3571/i2pd
345 | ```
346 |
347 | * See `i2p` in action by monitoring its log file. Exit with `Ctrl-C`
348 |
349 | ```sh copy
350 | $SU tail -f /var/log/i2pd/i2pd.log
351 | ```
--------------------------------------------------------------------------------
/pages/ca/docs/system/privacy.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Privacitat
5 |
6 | Configurem Tor i I2P per executar el vostre node de manera anònima.
7 |
8 | Fer funcionar el vostre propi node Bitcoin i Lightning a casa us converteix en
9 | un parell directe i sobirà de la xarxa Bitcoin. Tanmateix, si no es configura
10 | sense tenir en compte la privadesa, també diu al món que hi ha algú amb Bitcoin
11 | a aquesta adreça.
12 |
13 | També us facilitarem la connexió al vostre node des de fora de la vostra xarxa
14 | domèstica com a avantatge addicional.
15 |
16 | És cert que només es revela la vostra adreça IP, però utilitzant serveis com
17 | [iplocation.net](https://www.iplocation.net), la vostra adreça física es pot
18 | determinar amb força precisió. Especialment amb Lightning, la vostra adreça IP
19 | seria àmpliament utilitzada. Hem d'assegurar-nos que mantingueu la vostra
20 | privadesa.
21 |
22 | ## Projecte Tor
23 |
24 | Utilitzem Tor, un programari lliure creat pel
25 | [Projecte Tor](https://www.torproject.org). Us permet anonimitzar el trànsit
26 | d'Internet encaminant-lo a través d'una xarxa de nodes, amagant la vostra
27 | ubicació i perfil d'ús.
28 |
29 | Es diu "Tor" per "The Onion Router": la informació s'encamina a través de molts
30 | salts i es xifra diverses vegades. Cada node desxifra només la capa d'informació
31 | adreçada a ell, aprenent només el salt anterior i el següent de tota la ruta. El
32 | paquet de dades es pela com una ceba fins que arriba a la destinació final.
33 |
34 | ### Preparatius
35 |
36 | Crea un grup i un usuari `tor`
37 |
38 | ```sh copy
39 | $SU addgroup -S tor
40 | ```
41 |
42 | ```sh copy
43 | $SU adduser \
44 | -S \
45 | -D \
46 | -H \
47 | -h /dev/null \
48 | -s /sbin/nologin \
49 | -G tor \
50 | -g tor \
51 | tor
52 | ```
53 |
54 | ### Instal·lació
55 |
56 | ```sh copy
57 | $SU apk add tor
58 | ```
59 |
60 | ### Configuració de Tor
61 |
62 | El client Bitcoin es comunicarà directament amb el 'daemon' Tor per encaminar
63 | tot el trànsit a través de la xarxa Tor. Hem d'habilitar Tor perquè accepti
64 | instruccions a través del seu port de control, amb l'autenticació adequada.
65 |
66 | * Editeu la configuració de Tor
67 |
68 | ```sh copy
69 | $SU cp /etc/tor/torrc.sample /etc/tor/torrc
70 | $SU $EDITOR /etc/tor/torrc
71 | ```
72 |
73 | * Descomenteu les següents línies
74 |
75 | ```conf filename="/etc/tor/torrc" {4,8}
76 | ...
77 | ## The port on which Tor will listen for local connections from Tor
78 | ## controller applications, as documented in control-spec.txt.
79 | ControlPort 9051
80 | ## If you enable the controlport, be sure to enable one of these
81 | ## authentication methods, to prevent attackers from accessing it.
82 | #HashedControlPassword 24:972860B76453A77B40CA2BB8C1A7982072093276A3D701AD685353
83 | CookieAuthentication 1
84 |
85 | ############### This section is just for location-hidden services ###
86 | ...
87 | ```
88 |
89 | * Afegiu sota `Cookie Authentication 1`
90 |
91 | ```conf copy filename="/etc/tor/torrc"
92 | CookieAuthFile /var/lib/tor/control_auth_cookie
93 | CookieAuthFileGroupReadable 1
94 | DataDirectoryGroupReadable 1
95 | ```
96 |
97 | * Inicieu Tor i afegiu el servei al nivell d'execució
98 |
99 | ```sh copy
100 | $SU rc-service tor start
101 | $SU rc-update add tor default
102 | ```
103 |
104 | * Assegureu-vos que el servei Tor funciona i escolta als ports predeterminats
105 | `9050` i `9051`
106 |
107 | ```sh copy
108 | $SU netstat -lntup | grep LISTEN | grep tor
109 | ```
110 |
111 | ```output filename="output"
112 | tcp 0 0 127.0.0.1:9051 0.0.0.0:* LISTEN 3359/tor
113 | tcp 0 0 127.0.0.1:9050 0.0.0.0:* LISTEN 3359/tor
114 | ```
115 |
116 | * Comproveu els registres per veure els registres de sortida de les
117 | actualitzacions de Tor en temps real. Sortiu amb `Ctrl-C`
118 |
119 | ```sh copy
120 | $SU tail -f /var/log/tor/notices.log
121 | ```
122 |
123 | No tot el trànsit de xarxa s'encamina a través de la xarxa Tor. Però ara tenim
124 | la base per configurar aplicacions sensibles per utilitzar-la.
125 |
126 |
127 | Si voleu iniciar sessió al vostre Microbolt amb SSH quan no sou a casa, podeu
128 | fer-ho fàcilment afegint un servei ocult Tor. Això fa que "trucar a casa" sigui
129 | molt fàcil, sense necessitat de configurar res al vostre encaminador d'Internet.
130 |
131 | {
Servidor
}
132 |
133 | * Afegiu les línies següents a la secció "serveis d'ubicació ocults", a sota de
134 | "`## This section is just for location-hidden services ##`" al fitxer torrc
135 |
136 |
137 | És interessant posar el mateix port que es fa a `dropbear`/`openssh`, per
138 | defecte `22`
139 |
140 |
141 | ```sh copy
142 | $SU $EDITOR /etc/tor/torrc
143 | ```
144 |
145 | ```conf copy filename="/etc/tor/torrc" {5}
146 | # Hidden Service SSH server
147 | HiddenServiceDir /var/lib/tor/ssh/
148 | HiddenServiceVersion 3
149 | HiddenServicePoWDefensesEnabled 1
150 | HiddenServicePort 2222 127.0.0.1:2222
151 | ```
152 |
153 | * Torneu a carregar la configuració de Tor per aplicar la configuració
154 |
155 | ```sh copy
156 | $SU rc-service tor reload
157 | ```
158 |
159 | * Obteniu l'adreça SSH Onion
160 |
161 | ```sh copy
162 | $SU cat /var/lib/tor/ssh/hostname
163 | ```
164 |
165 | ```output filename="output"
166 | abcdefg..............xyz.onion
167 | ```
168 |
169 | * Deseu l'adreça Tor en una ubicació segura, p.ex. el vostre gestor de
170 | contrasenyes
171 |
172 | {
Client
}
173 |
174 | També heu de tenir Tor instal·lat al vostre ordinador habitual on inicieu la
175 | connexió SSH. L'ús de SSH a Tor difereix segons el client i el sistema operatiu.
176 |
177 |
178 |
179 | Les eines populars com `torify` o `torsocks` no estan disponibles a Windows i
180 | `torifier` esta abandonat.
181 |
182 | Per solucionar-ho, primer, assegureu-vos que Tor estigui instal·lat i funcionant
183 | al vostre Windows. Executeu com a administrador:
184 |
185 |
186 | Primer heu d'instal·lar [chocolatey](https://chocolatey.org/install)
187 |
188 |
189 | ```sh copy
190 | choco install tor
191 | choco install nmap --version=7.92.0.20220321
192 | tor --service start
193 | ```
194 |
195 | Comproveu que el servei funcioni
196 |
197 | ```sh copy
198 | netstat -aon | findstr ":9050"
199 | ```
200 |
201 | ```output filename="output"
202 | TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 23656
203 | ```
204 |
205 | Podeu fer SSH al vostre ordinador "out of the box" amb la següent comanda de
206 | proxy:
207 |
208 | ```sh copy
209 | ssh `
210 | -o "ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p" `
211 | satoshi@abcdefg..............xyz.onion -p 2222
212 | ```
213 |
214 | * Per obtenir una solució més permanent, afegiu aquestes sis línies a
215 | continuació al fitxer de configuració SSH local. Trieu qualsevol HOSTNICKNAME
216 | que vulgueu, deseu i sortiu
217 |
218 | ```sh copy
219 | notepad .ssh/config
220 | ```
221 |
222 | ```conf filename="~/.ssh/config"
223 | Host HOSTNICKNAME
224 | Hostname abcdefg..............xyz.onion
225 | User satoshi
226 | Port 2222
227 | CheckHostIP no
228 | ProxyCommand ncat --proxy-type socks5 --proxy 127.0.0.1:9050 %h %p
229 | ```
230 |
231 | * Reinicieu Tor
232 |
233 | ```sh copy
234 | tor --service stop
235 | tor --service start
236 | ```
237 |
238 | * Ara hauríeu de poder fer SSH al vostre PC amb
239 |
240 | ```sh copy
241 | ssh HOSTNICKNAME
242 | ```
243 |
244 |
245 | L'ús de `torify` o `torsocks` pot no funcionar a causa de la
246 | _Protecció d'integritat del sistema (SIP)_ d'Apple que denegarà l'accés a
247 | `/usr/bin/ssh`.
248 |
249 | Per solucionar-ho, primer, assegureu-vos que Tor estigui instal·lat i en
250 | funcionament al vostre Mac:
251 |
252 |
253 | Primer heu d'instal·lar [homebrew](https://brew.sh/)
254 |
255 |
256 | ```sh copy
257 | brew install tor && brew services start tor
258 | ```
259 |
260 | Podeu fer SSH al vostre ordinador "out of the box" amb la següent comanda de
261 | proxy:
262 |
263 | ```sh
264 | ssh \
265 | -o "ProxyCommand nc -X 5 -x 127.0.0.1:9050 %h %p" \
266 | satoshi@abcdefg..............xyz.onion -p 2222
267 | ```
268 |
269 | * Per obtenir una solució més permanent, afegiu aquestes sis línies a
270 | continuació al fitxer de configuració SSH local. Trieu qualsevol HOSTNICKNAME
271 | que vulgueu, deseu i sortiu
272 |
273 | ```sh copy
274 | vi .ssh/config
275 | ```
276 |
277 | ```conf filename="~/.ssh/config"
278 | Host HOSTNICKNAME
279 | Hostname abcdefg..............xyz.onion
280 | User satoshi
281 | Port 2222
282 | CheckHostIP no
283 | ProxyCommand /usr/bin/nc -x localhost:9050 %h %p
284 | ```
285 |
286 | * Reinicieu Tor
287 |
288 | ```sh copy
289 | brew services restart tor
290 | ```
291 |
292 | * Ara hauríeu de poder fer SSH al vostre PC amb
293 |
294 | ```sh copy
295 | ssh HOSTNICKNAME
296 | ```
297 |
298 |
299 | * Utilitzeu `torify` o `torsocks`, tots dos funcionen de la mateixa manera;
300 | només utilitzeu el que tingueu disponible
301 |
302 | ```sh
303 | torify ssh admin@abcdefg..............xyz.onion -p 2222
304 | ```
305 |
306 | ```sh
307 | torsocks ssh admin@abcdefg..............xyz.onion -p 2222
308 | ```
309 |
310 |
311 |
312 |
313 | ## Projecte I2P
314 |
315 | [I2P](https://geti2p.net) és una capa de xarxa anònima universal. Totes les
316 | comunicacions a través d'I2P són anònimes i xifrades d'extrem a extrem, els
317 | participants no revelen les seves adreces IP reals. I2P permet a persones de tot
318 | el món comunicar-se i compartir informació sense restriccions.
319 |
320 | El client I2P és un programari utilitzat per construir i utilitzar xarxes I2P
321 | anònimes. Aquestes xarxes s'utilitzen habitualment per a aplicacions
322 | peer-to-peer anònimes (compartició de fitxers, criptomonedes) i aplicacions
323 | client-servidor anònimes (llocs web, missatgeria instantània, servidors de xat).
324 |
325 | Hem d'utilitzar [i2pd](https://i2pd.readthedocs.io/en/latest/) (I2P Daemon), una
326 | implementació C++ amb totes les funcions del client I2P, com a complement de
327 | xarxa Tor.
328 |
329 | ### Instal·lació d'I2P
330 |
331 | ```sh copy
332 | $SU apk add i2pd
333 | ```
334 |
335 | * Inicieu el servei i2p i afegiu-lo al nivell d'execució
336 |
337 | ```sh copy
338 | $SU rc-service i2pd start
339 | $SU rc-update add i2pd default
340 | ```
341 | * Assegureu-vos que el servei i2pd funciona i escolta als ports predeterminats
342 |
343 | ```sh copy
344 | $SU netstat -lntup | grep LISTEN | grep i2pd
345 | ```
346 |
347 | ```output filename="output"
348 | tcp 0 0 127.0.0.1:4447 0.0.0.0:* LISTEN 3571/i2pd
349 | tcp 0 0 127.0.0.1:4444 0.0.0.0:* LISTEN 3571/i2pd
350 | tcp 0 0 127.0.0.1:7656 0.0.0.0:* LISTEN 3571/i2pd
351 | tcp 0 0 0.0.0.0:26697 0.0.0.0:* LISTEN 3571/i2pd
352 | tcp 0 0 127.0.0.1:6668 0.0.0.0:* LISTEN 3571/i2pd
353 | tcp 0 0 127.0.0.1:7070 0.0.0.0:* LISTEN 3571/i2pd
354 | ```
355 |
356 | * Vegeu `i2p` en acció supervisant el seu fitxer de registre. Sortiu amb
357 | `Ctrl-C`
358 |
359 | ```sh copy
360 | $SU tail -f /var/log/i2pd/i2pd.log
361 | ```
--------------------------------------------------------------------------------
/pages/index.module.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap');
2 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100..900&display=swap');
3 |
4 | .homeContent {
5 | display: flex;
6 | flex-direction: column;
7 | align-items: center;
8 | justify-content: center;
9 | min-height: calc(100vh - 236px);
10 | padding: 3rem 1rem;
11 | width: 100%;
12 | max-width: 90rem;
13 | margin: 0 auto;
14 | }
15 |
16 | /* hero */
17 | .hero {
18 | display: flex;
19 | flex-direction: column;
20 | align-items: flex-start;
21 | gap: 1rem;
22 | margin-bottom: 5rem;
23 | width: 100%;
24 | max-width: 500px;
25 | }
26 |
27 | .title {
28 | font-size: 3.125rem;
29 | font-size: min(4.375rem, max(8vw, 2.5rem));
30 | font-weight: 700;
31 | font-feature-settings: initial;
32 | letter-spacing: -.12rem;
33 | margin-left: -0.2rem;
34 | line-height: 1.1;
35 | background-image: linear-gradient(146deg, #181818, #757a7d 85%, #eee);
36 | color: transparent;
37 | background-clip: text;
38 | }
39 |
40 | :is(html[class~="dark"] .title) {
41 | background-image: linear-gradient(146deg, #eee, #757a7d 85%, #181818);
42 | }
43 |
44 | .subtitle {
45 | font-size: 1.3rem;
46 | font-size: min(1.3rem, max(3.5vw, 1.2rem));
47 | font-feature-settings: initial;
48 | line-height: 1.6;
49 | }
50 |
51 | .button {
52 | display: inline-block;
53 | padding: 0.75rem 1.5rem;
54 | margin-top: 1rem;
55 | font-size: 1rem;
56 | font-weight: bold;
57 | color: #fff;
58 | background-color: hsl(var(--nextra-primary-hue), var(--nextra-primary-saturation), 25%);
59 | border: none;
60 | border-radius: 0.5rem;
61 | text-align: center;
62 | text-decoration: none;
63 | transition: background-color 0.3s ease;
64 | }
65 |
66 | .button:hover {
67 | background-color: hsl(var(--nextra-primary-hue), var(--nextra-primary-saturation), 40%);
68 | }
69 |
70 | /* testimonials */
71 | .endorsements {
72 | display: flex;
73 | flex-direction: column;
74 | align-items: center;
75 | gap: 1rem;
76 | margin-top: 2rem;
77 | width: 100%;
78 | max-width: 500px;
79 | }
80 |
81 | .endorsements h1 {
82 | font-family: 'Open Sans', sans-serif;
83 | font-size: 3em;
84 | font-size: min(3rem, max(5vw, 1.5rem));
85 | font-weight: 800;
86 | margin: 0;
87 | align-self: flex-start;
88 | }
89 |
90 | .endorsement {
91 | background: #f9f9f9;
92 | color: #333;
93 | padding: 1rem;
94 | border-radius: 0.5rem;
95 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
96 | position: relative;
97 | width: 100%;
98 | text-align: center;
99 | }
100 |
101 | .endorsement::before {
102 | content: '“';
103 | font-size: 3rem;
104 | color: #ccc;
105 | position: absolute;
106 | top: -1.5rem;
107 | left: 0rem;
108 | }
109 |
110 | :is(html[class~="dark"] .endorsement) {
111 | background: #333;
112 | color: #f9f9f9;
113 | box-shadow: 0 2px 4px rgba(61, 61, 61, 0.1);
114 | }
115 |
116 | .endorsement p {
117 | font-family: 'Open Sans', sans-serif;
118 | font-size: 1.3rem;
119 | font-size: min(1.3rem, max(3.5vw, 1.2rem));
120 | line-height: 1.5;
121 | }
122 |
123 | /* bento */
124 | .grid {
125 | display: grid;
126 | grid-gap: 0.5rem;
127 |
128 | align-self: center;
129 |
130 | width: 100%;
131 | max-width: 500px;
132 |
133 | grid-template-columns: repeat(4, 1fr);
134 | grid-template-rows: repeat(12, 2fr);
135 |
136 | grid-template-areas:
137 | "com com com com"
138 | "com com com com"
139 | "btc btc btc btc"
140 | "ord ord ord ord"
141 | "exp exp exp exp"
142 | "prx prx prx prx"
143 | "lnd lnd lnd lnd"
144 | "nos nos nos nos"
145 | "cld cld cld cld"
146 | "fwd fwd fwd fwd"
147 | "elc elc elc elc"
148 | "bil bil alp alp";
149 | }
150 |
151 | .item {
152 | display: flex;
153 | flex-direction: column;
154 | justify-content: center;
155 | align-items: center;
156 | background: #eeeeee;
157 | color: #181818;
158 | border-radius: 1.5rem;
159 | outline: 1px solid #dddddd10;
160 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
161 | }
162 |
163 | :is(html[class~="dark"] .item) {
164 | background: #181818;
165 | color: #eeeeee;
166 | box-shadow: 0 4px 8px rgba(61, 61, 61, 0.1);
167 | }
168 |
169 | .item img {
170 | width: 80%;
171 | height: auto;
172 | }
173 |
174 | .item h1,
175 | .item h2,
176 | .item h3,
177 | .item h4,
178 | .item .btcrpc {
179 | font-family: 'Open Sans', sans-serif;
180 | font-weight: bold;
181 | align-self: center;
182 | text-align: center;
183 | margin: 0;
184 | }
185 |
186 | .item h1 {
187 | font-size: clamp(3rem, 10vw, 3rem);
188 | }
189 |
190 | .item h2 {
191 | font-size: 5rem;
192 | }
193 |
194 | .item h3 {
195 | font-size: 1rem;
196 | }
197 |
198 | .item h4 {
199 | font-size: 1.5rem;
200 | }
201 |
202 | /* i18n */
203 | .grid .item:nth-child(1) {
204 | grid-area: bil;
205 | background: linear-gradient(75deg, #428ecc 50%, #cfd8dc 50%);
206 | display: flex;
207 | flex-direction: row;
208 | justify-content: space-around;
209 | }
210 |
211 | .grid .item:nth-child(1) h1 {
212 | font-size: clamp(5.5rem, 10vw, 7.5rem);
213 | color: #eeeeee;
214 | }
215 |
216 | .grid .item:nth-child(1) .jp {
217 | font-family: 'Noto Sans JP', sans-serif;
218 | font-weight: 800;
219 | font-size: 4rem;
220 | color: #556f7b;
221 | }
222 |
223 | /* Bitcoin */
224 | .grid .item:nth-child(2) {
225 | grid-area: btc;
226 | background-image:
227 | url("/assets/logos/bitcoin.svg"),
228 | url("/assets/logos/knots.png");
229 | background-size: 200px;
230 | background-repeat: no-repeat;
231 | background-position:
232 | bottom -5em left -5em,
233 | top -5em right -5em;
234 | }
235 |
236 | /* ordinals */
237 | .grid .item:nth-child(3) {
238 | grid-area: ord;
239 | }
240 |
241 | /* explorers */
242 | .grid .item:nth-child(4) {
243 | grid-area: exp;
244 | background: linear-gradient(to top, #3cc9e2 25%, #9857ff 50%, #181818 50%);
245 | color: #eeeeee;
246 | position: relative;
247 | background-size: 100% 200%;
248 | background-position: center;
249 | }
250 |
251 | .grid .item:nth-child(4) h1,
252 | .grid .item:nth-child(4) .btcrpc {
253 | margin: auto;
254 | }
255 |
256 | @keyframes moveBackground {
257 | 0% {
258 | background-position: top;
259 | }
260 |
261 | 100% {
262 | background-position: center;
263 | }
264 | }
265 |
266 | .grid .item:nth-child(4):hover {
267 | animation: moveBackground 1s ease-in-out both;
268 | }
269 |
270 | .grid .item:nth-child(4)::after {
271 | content: '';
272 | position: absolute;
273 | top: 10%;
274 | right: 1.5rem;
275 | width: 2rem;
276 | height: 80%;
277 | background-color: white;
278 | border-radius: 0.4rem;
279 | opacity: 0.4;
280 | }
281 |
282 | .grid .item:nth-child(4) .btcrpc img {
283 | width: 3rem;
284 | margin-right: 0.5rem;
285 | }
286 |
287 | .grid .item:nth-child(4) .btcrpc {
288 | display: flex;
289 | }
290 |
291 | .grid .item:nth-child(4) .mem {
292 | color: #181818;
293 | }
294 |
295 | /* reverse proxy */
296 | .grid .item:nth-child(5) {
297 | grid-area: prx;
298 | }
299 |
300 | .grid .item:nth-child(5) img {
301 | flex-grow: 1;
302 | }
303 |
304 | :is(html[class~="dark"] .item img[src*="caddy-light.svg"]) {
305 | content: url("/assets/logos/caddy-dark.svg");
306 | }
307 |
308 | /* comparision */
309 | .grid .item:nth-child(6) {
310 | grid-area: com;
311 | line-height: 1;
312 | }
313 |
314 | .grid .item:nth-child(6) h1 {
315 | font-size: 12rem;
316 | background: linear-gradient(15deg, #ffb61a, #f7931a, #aa6511);
317 | background-clip: text;
318 | color: transparent;
319 | }
320 |
321 | /* lightning */
322 | .grid .item:nth-child(7) {
323 | grid-area: lnd;
324 | }
325 |
326 | /* nostr */
327 | .grid .item:nth-child(8) {
328 | grid-area: nos;
329 | }
330 |
331 | /* ansible */
332 | .grid .item:nth-child(9) {
333 | grid-area: cld;
334 | }
335 |
336 | :is(html[class~="dark"] .item img[src*="ansible-light.png"]) {
337 | content: url("/assets/logos/ansible-dark.png");
338 | }
339 |
340 | /* firewall */
341 | .grid .item:nth-child(10) {
342 | grid-area: fwd;
343 | background-image: url("/assets/logos/wall.jpg");
344 | background-size: 840px;
345 | background-repeat: no-repeat;
346 | background-position: center;
347 | }
348 |
349 | .grid .item:nth-child(10) h1 {
350 | font-size: clamp(5em, 10vw, 6rem);
351 | color: #eeeeee;
352 | }
353 |
354 | :is(html[class~="dark"] .grid .item:nth-child(10) h1) {
355 | color: #181818;
356 | }
357 |
358 | /* electrum */
359 | .grid .item:nth-child(11) {
360 | grid-area: elc;
361 | background-image:
362 | url("/assets/logos/electrs.svg"),
363 | url("/assets/logos/fulcrum.png");
364 | background-size: 200px;
365 | background-repeat: no-repeat;
366 | background-position:
367 | bottom -5em right -5em,
368 | top -5em left -5em;
369 | }
370 |
371 | .grid .item:nth-child(11) h1 {
372 | width: 90%;
373 | }
374 |
375 | /* alpine */
376 | .grid .item:nth-child(12) {
377 | grid-area: alp;
378 | }
379 |
380 | .grid .item:nth-child(12) h1 {
381 | background: linear-gradient(15deg, #078ecc, #055980, #022333);
382 | background-clip: text;
383 | color: transparent;
384 | width: 90%;
385 | }
386 |
387 | /* responsive */
388 | @media (width >=800px) {
389 |
390 | /* testimonials */
391 | .hero,
392 | .endorsements {
393 | max-width: 800px;
394 | }
395 |
396 | /* bento */
397 | .grid {
398 | grid-template-columns: repeat(5, 1fr);
399 | grid-template-rows: repeat(8, 1fr);
400 |
401 | grid-template-areas:
402 | "com com com com com"
403 | "com com com com com"
404 | "bil bil btc btc btc"
405 | "exp exp exp fwd fwd"
406 | "nos nos nos fwd fwd"
407 | "lnd lnd cld cld cld"
408 | "elc elc elc prx prx"
409 | "alp alp ord ord ord";
410 |
411 | max-width: 800px;
412 | }
413 |
414 | /* i18n */
415 | .grid .item:nth-child(1) h1 {
416 | font-size: 7.5rem;
417 | }
418 |
419 | .grid .item:nth-child(1) .jp {
420 | font-size: 5.5rem;
421 | }
422 |
423 | /* comparision */
424 | .grid .item:nth-child(6) h1 {
425 | font-size: 17rem;
426 | }
427 |
428 | /* lightning & nostr */
429 | .grid .item:nth-child(7) img,
430 | .grid .item:nth-child(8) img {
431 | width: 100%;
432 | height: auto;
433 | }
434 | }
435 |
436 | @media (width >=1400px) {
437 |
438 | /* testimonials */
439 | .hero,
440 | .endorsements {
441 | max-width: 1400px;
442 | }
443 |
444 | .endorsement {
445 | max-width: 800px;
446 | }
447 |
448 | /* bento */
449 | .grid {
450 | grid-template-columns: repeat(7, 1fr);
451 | grid-template-rows: repeat(9, 1fr);
452 |
453 | grid-template-areas:
454 | "bil btc btc ord ord exp exp"
455 | "bil btc btc ord ord exp exp"
456 | "prx prx com com com lnd lnd"
457 | "prx prx com com com lnd lnd"
458 | "prx prx com com com nos nos"
459 | "cld cld com com com nos nos"
460 | "cld cld com com com fwd fwd"
461 | "elc elc com com com fwd fwd"
462 | "elc elc alp alp alp fwd fwd";
463 |
464 | max-height: 900px;
465 | max-width: 1400px;
466 | }
467 |
468 | /* i18n */
469 | .grid .item:nth-child(1) h1 {
470 | font-size: 4.5rem;
471 | }
472 |
473 | .grid .item:nth-child(1) .jp {
474 | font-size: 3.5rem;
475 | }
476 |
477 | /* ordinals */
478 | .grid .item:nth-child(3) img {
479 | width: 65%;
480 | height: auto;
481 | }
482 |
483 | /* explorers */
484 | .grid .item:nth-child(4)::after {
485 | width: 1.5rem;
486 | }
487 |
488 | /* comparision */
489 | .grid .item:nth-child(6) h1 {
490 | font-size: 17rem;
491 | }
492 |
493 | /* lightning & nostr */
494 | .grid .item:nth-child(7) img,
495 | .grid .item:nth-child(8) img {
496 | width: 90%;
497 | height: auto;
498 | }
499 | }
--------------------------------------------------------------------------------
/pages/en/docs/bitcoin/electrum_server/electrs.mdx:
--------------------------------------------------------------------------------
1 | import { Steps, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Electrs
5 |
6 | We set up [Electrs](https://github.com/romanz/electrs) to serve as a full
7 | Electrum server for use with your Bitcoin software or hardware signing device.
8 |
9 | 
10 |
11 | ## Preparations
12 |
13 |
14 | ### Install dependencies
15 |
16 | These are build dependencies (safe to remove after installation, if you want)
17 |
18 | ```sh copy
19 | $SU apk add --virtual .build-deps cargo cargo-auditable clang-dev cmake git \
20 | gnupg rocksdb-dev
21 | ```
22 |
23 | These are runtime dependencies
24 |
25 | ```sh copy
26 | $SU apk add rocksdb
27 | ```
28 |
29 | ### Create the `electrs` user/group
30 |
31 | ```sh copy
32 | $SU addgroup -S electrs
33 | ```
34 |
35 | ```sh copy
36 | $SU adduser \
37 | -S \
38 | -D \
39 | -H \
40 | -h /dev/null \
41 | -s /sbin/nologin \
42 | -G electrs \
43 | -g electrs \
44 | electrs
45 | ```
46 |
47 | ### Add `electrs` user to the `bitcoin` group
48 |
49 | ```sh copy
50 | $SU adduser electrs bitcoin
51 | ```
52 |
53 | ### Add the user `satoshi` to the group `electrs` as well
54 |
55 | ```sh copy
56 | $SU adduser satoshi electrs && exec su -l satoshi
57 | ```
58 |
59 | ### Reverse proxy
60 |
61 | In the [Security section](../../system/security#reverse-proxy), we already set
62 | up a reverse proxy. Now we can add the Electrum server configuration.
63 |
64 | * Enable the reverse proxy to add SSL/TLS encryption to the Electrum server
65 | communication. Create the configuration file and paste the following content
66 |
67 |
68 |
69 | ```sh copy
70 | $SU $EDITOR /etc/caddy/streams/electrum.caddy
71 | ```
72 |
73 | ```nginx copy filename="/etc/caddy/streams/electrum.caddy"
74 | :50002 {
75 | route {
76 | tls
77 | proxy {
78 | upstream 127.0.0.1:50001
79 | }
80 | }
81 | }
82 | ```
83 |
84 | * Reload Caddy
85 |
86 | ```sh copy
87 | $SU rc-service caddy reload
88 | ```
89 |
90 |
91 | ```sh copy
92 | $SU $EDITOR /etc/nginx/streams-available/electrum-reverse-proxy.conf
93 | ```
94 |
95 | ```nginx copy filename="/etc/nginx/streams-available/electrum-reverse-proxy.conf"
96 | upstream electrum {
97 | server 127.0.0.1:50001;
98 | }
99 |
100 | server {
101 | listen 50002 ssl;
102 | proxy_pass electrum;
103 | }
104 | ```
105 |
106 | ```sh copy
107 | $SU ln \
108 | -s \
109 | ../streams-available/electrum-reverse-proxy.conf \
110 | /etc/nginx/streams-enabled/electrum-reverse-proxy.conf
111 | ```
112 |
113 | * Test and reload NGINX configuration
114 |
115 | ```sh copy
116 | $SU nginx -t
117 | $SU rc-service nginx restart
118 | ```
119 |
120 |
121 |
122 | ### Firewall
123 |
124 | * Configure the firewall to allow incoming requests
125 |
126 |
127 |
128 | ```sh copy
129 | $SU $EDITOR /etc/awall/optional/electrum.json
130 | ```
131 |
132 | ```json copy filename="/etc/awall/optional/electrum.json"
133 | {
134 | "description": "Allow Electrum SSL",
135 |
136 | "filter": [
137 | {
138 | "in": "internet",
139 | "out": "_fw",
140 | "service": { "proto": "tcp", "port": 50002 },
141 | "action": "accept",
142 | "conn-limit": { "count": 10, "interval": 60 }
143 | }
144 | ]
145 | }
146 | ```
147 |
148 | * Enable it
149 |
150 | ```sh copy
151 | $SU awall enable electrum
152 | $SU awall activate
153 | ```
154 |
155 |
156 | ```sh copy
157 | $SU ufw limit 50002/tcp comment 'Allow Electrum SSL'
158 | ```
159 |
160 |
161 |
162 |
163 | ## Installation
164 |
165 | An easy and performant way to run an Electrum server is to use
166 | [Electrs](https://github.com/romanz/electrs), the Electrum Server in Rust. There
167 | are no binaries available, so we will compile the application ourselves.
168 |
169 |
170 | ### Download source code
171 |
172 | We get the latest release of the Electrs source code, verify it, compile it to
173 | an executable binary and install it.
174 |
175 | * Download the source code for the latest Electrs release. You can check the
176 | [release page](https://github.com/romanz/electrs/releases) to see if a newer
177 | release is available. Other releases might not have been properly tested with
178 | the rest of the Microbolt configuration, though.
179 |
180 | ```sh copy
181 | cd /tmp
182 | ```
183 |
184 | ```sh copy
185 | VERSION=0.10.6
186 | ```
187 |
188 | ```sh copy
189 | git clone --branch v$VERSION https://github.com/romanz/electrs.git && cd electrs
190 | ```
191 |
192 | ### Signature check
193 |
194 | * To avoid using bad source code, verify that the release has been properly
195 | signed by the main developer [Roman Zeyde](https://github.com/romanz).
196 |
197 | ```sh copy
198 | wget -qO- https://romanzey.de/pgp.txt | gpg --import
199 | ```
200 |
201 | ```sh copy
202 | git verify-tag v$VERSION
203 | ```
204 |
205 | ### Configure, compile and install
206 |
207 | * Now compile the source code into an executable binary and install it. The
208 | compilation process can take up to one hour.
209 |
210 | ```sh copy
211 | cargo auditable build \
212 | --bin electrs \
213 | --features "metrics_process" \
214 | --release \
215 | --locked \
216 | --jobs "$(nproc)"
217 | ```
218 |
219 | ```sh copy
220 | $SU install -m 0755 -o root -g root -t /usr/bin ./target/release/electrs
221 | ```
222 |
223 | ```sh copy
224 | $SU install -D -m 0660 -o electrs -g electrs ./doc/config_example.toml /etc/electrs/config.toml
225 | ```
226 |
227 | ### Strip installed binaries
228 |
229 | ```sh copy
230 | $SU strip -v /usr/bin/electrs
231 | ```
232 |
233 | ### Cleanup
234 |
235 | ```sh copy
236 | cd
237 | $SU rm -rf /tmp/electrs
238 | $SU apk del .build-deps
239 | ```
240 |
241 |
242 | ## Configuration
243 |
244 | * Modify the config file with the following content
245 |
246 | ```sh copy
247 | $SU $EDITOR /etc/electrs/config.toml
248 | ```
249 |
250 | ```toml filename="/etc/electrs/config.toml" {2,4,6,7}
251 | [...]
252 | cookie_file = "/var/lib/bitcoind/.cookie"
253 | [...]
254 | #db_dir = "/some/fast/storage/with/big/size"
255 | [...]
256 | daemon_dir = "/var/lib/bitcoind"
257 | ```
258 |
259 |
260 | To use your Electrum server when you're on the go, you can easily create a Tor
261 | hidden service. This way, you can connect the BitBoxApp or Electrum wallet also
262 | remotely, or even share the connection details with friends and family. Note
263 | that the remote device needs to have Tor installed as well.
264 |
265 | * Add the following lines in the section for "location-hidden services" in the
266 | `torrc` file.
267 |
268 | ```sh copy
269 | $SU $EDITOR /etc/tor/torrc
270 | ```
271 |
272 | ```sh copy filename="/etc/tor/torrc"
273 | # Hidden Service Electrum
274 | HiddenServiceDir /var/lib/tor/electrum/
275 | HiddenServiceVersion 3
276 | HiddenServicePoWDefensesEnabled 1
277 | HiddenServicePort 50002 127.0.0.1:50002
278 | ```
279 |
280 | * Reload Tor configuration and get your connection address.
281 |
282 | ```sh copy
283 | $SU rc-service tor reload
284 | $SU cat /var/lib/tor/electrum/hostname
285 | ```
286 |
287 | ```output filename="output"
288 | abcdefg..............xyz.onion
289 | ```
290 |
291 | * You should now be able to connect to your Electrum server remotely via Tor
292 | using your hostname and port `50002`
293 |
294 |
295 | ### Autostart on boot
296 |
297 | Electrs needs to start automatically on system boot.
298 |
299 | * Create the Electrs init.d unit and copy/paste the following configuration.
300 | Save and exit.
301 |
302 | ```sh copy
303 | $SU $EDITOR /etc/init.d/electrs
304 | ```
305 |
306 | ```sh copy filename="/etc/init.d/electrs"
307 | #!/sbin/openrc-run
308 |
309 | : ${ELECTRS_CONFIGFILE:=/etc/electrs/config.toml}
310 | : ${ELECTRS_DATADIR:=/var/lib/electrs}
311 | : ${ELECTRS_LOGDIR:=/var/log/electrs}
312 | : ${ELECTRS_USER:=electrs}
313 | : ${ELECTRS_GROUP:=electrs}
314 | : ${ELECTRS_BIN:=/usr/bin/electrs}
315 | : ${ELECTRS_OPTS=${ELECTRS_OPTS}}
316 | : ${ELECTRS_SIGTERM_TIMEOUT:=600}
317 |
318 | ELECTRS_PIDDIR="/run/electrs"
319 |
320 | required_files="${ELECTRS_CONFIGFILE}"
321 | pidfile="${ELECTRS_PIDDIR}/${SVCNAME}.pid"
322 | retry="${ELECTRS_SIGTERM_TIMEOUT}"
323 |
324 | name="Electrs"
325 | description="Efficient re-implementation of Electrum Server in Rust"
326 |
327 | command="${ELECTRS_BIN}"
328 | command_args="--conf ${ELECTRS_CONFIGFILE}
329 | --skip-default-conf-files
330 | --db-dir ${ELECTRS_DATADIR}
331 | --timestamp
332 | --skip-block-download-wait
333 | ${ELECTRS_OPTS}"
334 | command_user="${ELECTRS_USER}:${ELECTRS_GROUP}"
335 | command_background="true"
336 |
337 | start_stop_daemon_args="--stdout ${ELECTRS_LOGDIR}/debug.log
338 | --stderr ${ELECTRS_LOGDIR}/debug.log"
339 |
340 | depend() {
341 | use bitcoind
342 | after bitcoind
343 | }
344 |
345 | start_pre() {
346 | checkpath --file --mode 0660 --owner "${command_user}" "${ELECTRS_CONFIGFILE}"
347 | checkpath --directory --mode 0750 --owner "${command_user}" "${ELECTRS_DATADIR}"
348 | checkpath --directory --mode 0755 --owner "${command_user}" "${ELECTRS_LOGDIR}"
349 | checkpath --directory --mode 0755 --owner "${command_user}" "${ELECTRS_PIDDIR}"
350 | checkconfig
351 | }
352 |
353 | start_post() {
354 | checkpath --file --owner "${command_user}" "${pidfile}"
355 | }
356 |
357 | checkconfig() {
358 | if ! grep -qs '^cookie_file = ' "${ELECTRS_CONFIGFILE}"
359 | then
360 | eerror ""
361 | eerror "ERROR: You must set a cookie_file path to run Electrs."
362 | eerror "The setting must appear in ${ELECTRS_CONFIGFILE}"
363 | eerror ""
364 | return 1
365 | fi
366 | }
367 | ```
368 |
369 | * Enable execution permission
370 |
371 | ```sh copy
372 | $SU chmod +x /etc/init.d/electrs
373 | ```
374 |
375 | ### Enable logrotate
376 |
377 | * Enter the complete next configuration. Save and exit
378 |
379 | ```sh copy
380 | $SU $EDITOR /etc/logrotate.d/electrs
381 | ```
382 |
383 | ```sh copy filename="/etc/logrotate.d/electrs"
384 | /var/log/electrs/*.log {
385 | weekly
386 | missingok
387 | rotate 104
388 | compress
389 | delaycompress
390 | notifempty
391 | create 0640 electrs electrs
392 | sharedscripts
393 | postrotate
394 | kill -HUP `cat /run/electrs/electrs.pid`
395 | endscript
396 | }
397 | ```
398 |
399 | * Test
400 |
401 | ```sh copy
402 | $SU logrotate /etc/logrotate.d/electrs --debug
403 | ```
404 |
405 | ## Enable and start Electrs
406 |
407 | ```sh copy
408 | $SU rc-update add electrs
409 | ```
410 |
411 | ```sh copy
412 | $SU rc-service electrs start
413 | ```
414 |
415 | * Check the log to see Electrs output. Exit with `Ctrl-C`
416 |
417 | ```sh copy
418 | tail -f /var/log/electrs/debug.log
419 | ```
420 |
421 | Electrs will now index the whole Bitcoin blockchain so that it can provide all
422 | necessary information to signing devices. With this, the signing devices you use
423 | no longer need to connect to any third-party server to communicate with the
424 | Bitcoin peer-to-peer network.
425 |
426 | ## For the future: Electrs upgrade
427 |
428 | Follow again [Electrs](./electrs) page replacing the environment variable
429 | `VERSION=x.xx` value for the latest if it has not been already changed in this
430 | guide.
431 |
432 | * Update the Electrs configuration if necessary (see release notes)
433 |
434 | ```sh copy
435 | $SU $EDITOR /etc/electrs/electrs.toml
436 | ```
437 |
438 | * Restart the service to apply the changes
439 |
440 | ```sh copy
441 | $SU rc-service electrs restart
442 | ```
--------------------------------------------------------------------------------
/pages/en/docs/bitcoin/desktop_signing_app.mdx:
--------------------------------------------------------------------------------
1 | import { Callout, Tabs } from 'nextra/components'
2 | import { FAQBox } from '@components'
3 |
4 | # Desktop signing app
5 |
6 | We install [Sparrow Wallet](https://github.com/sparrowwallet/sparrow) on a
7 | computer and connect it to your Electrum server on your node for private bitcoin
8 | on-chain transactions.
9 |
10 | 
11 |
12 | ## Introduction
13 |
14 | Sparrow Wallet is an excellent software signing device to use with your
15 | Microbolt: it's reliable and transparently shows what it's doing under the hood.
16 |
17 | You can also use the following alternatives instead of Sparrow Wallet, according
18 | to your preferences and needs:
19 |
20 | * **Electrum Wallet Desktop**: a well-established poweruser wallet
21 | * **Specter Desktop**: a multisig-focused wallet (this wallet connects
22 | directly to Bitcoin Core)
23 | * **BitBoxApp**: wallet for users of BitBox hardware signing devices
24 |
25 | We will connect Sparrow Wallet to our own Electrum server as it is the most
26 | private option. For more information about the privacy and security trade-offs
27 | of the various server connection options, read the following
28 | [article](https://www.sparrowwallet.com/docs/best-practices.html) by Craig Raw,
29 | the author of the software.
30 |
31 | 
32 |
33 | We will set up Sparrow to connect to the Electum server within your local
34 | network. There is also an optional section that explains how to connect Sparrow
35 | to the Electrum server using Tor for when you're on the move.
36 |
37 | Sparrow also connects to a couple of external services to get the Bitcoin price
38 | and communicate with the Whirlpool server during CoinJoin operations. By
39 | default, it uses clearnet which leaks your computer IP address to these services
40 | and degrade your privacy. However, Sparrow can also connect to them using a Tor
41 | proxy. There is an optional section that explains how to set this proxy up.
42 |
43 | ## Installation
44 |
45 | On your local computer, download, verify and install Sparrow Wallet.
46 |
47 | * Using the instructions on [this page](https://www.sparrowwallet.com/download):
48 | * Download the required version for your OS
49 | * Download the manifest and manifest signature files
50 | * Verify the release
51 | * Install Sparrow Wallet
52 |
53 | ## Connection
54 |
55 | We now configure Sparrow to connect to your node within your local network.
56 |
57 | ### Launch Sparrow
58 |
59 | * Launch Sparrow
60 | * Read carefully the introductory messages and click on "Next" several times
61 | * When you reach the "Connecting to a Private Electrum Server" message, click on
62 | "Configure Server"
63 |
64 | ### Connect to Electrum server
65 |
66 | * Click on the "Private Electrum" tab
67 | * On the "URL" line, paste `nakamoto01`, `nakamoto01.local` or your node IP
68 | (e.g., `192.168.X.Y`) in the first box and `50002` in the second box
69 | * Enable SSL by clicking on the slider
70 | * Click on "Test Connection". A green tick should appear on the button and you
71 | should see something similar to the following output:
72 |
73 | ```output filename="output"
74 | Connected to [...] on protocol version 1.4
75 | [...]
76 | ```
77 |
78 | 
79 |
80 | If there is a connection error message, try the following troubleshooting:
81 |
82 | * Make sure that your computer is not connected to any "guest" WiFi network at
83 | home. A "guest" WiFi network prevents the computer to connect to any other
84 | devices on the local network, such as your node.
85 | * If you have used Sparrow Wallet before on this computer, try to connect again
86 | after deleting the existing certificates that are stored within the `certs`
87 | folder:
88 |
89 |
90 |
91 | `%AppData%\Sparrow\certs`
92 |
93 |
94 | `~/.sparrow/certs`
95 |
96 |
97 |
98 | Let's go back to the signing app and check that it is connected to our own
99 | Electrum server.
100 |
101 | * Close the server configuration window
102 | * Check the icon in the bottom right corner of the window status icon
103 | * The icon should be a blue slider button and a mouse over should display
104 |
105 | `Connected to ssl://nakamoto01:50002 at height [...]`
106 |
107 | 🎉 You're set! Sparrow is now configured to connect to your Electrum server from
108 | within your local network.
109 |
110 |
111 | For maximal privacy, we highly recommend that you set up the Tor proxy when
112 | using Sparrow within your local network over clearnet.
113 |
114 |
115 |
116 | If you want to use Sparrow outside your home network, when you're on the go, you
117 | can use a connection over Tor.
118 |
119 | {
Server Tor address
}
120 |
121 | To connect via Tor to Electrum, the server must have a Tor hidden service
122 | connection address. Make sure you have set up a Tor hidden service as explained
123 | in the "Electrum server" guide.
124 |
125 | If you've already set up the hidden service but lost the connection address,
126 | you can obtain it again by running the following command on your node:
127 |
128 | ```sh copy
129 | $SU cat /var/lib/tor/electrum/hostname
130 | ```
131 |
132 | ```output filename="output"
133 | abcd...1234.onion
134 | ```
135 |
136 | {
Sparrow configuration
}
137 |
138 | * Open Sparrow
139 | * Navigate to the server configuration page by hitting `
` or `<,>`
140 | on macOS, then click on "Server"
141 | * Click on the "Private Electrum" tab. If you've already have an existing
142 | clearnet connection, click on "Edit Existing Connection".
143 | * On the "URL" line, paste your Tor hidden service connection address (e.g.
144 | "abcd...1234.onion") in the first box and `50002` in the second box
145 | * Enable SSL by clicking on the slider
146 | * Click on "Test Connection". A green tick should appear on the button and you
147 | should see something similar to the following output:
148 |
149 | ```output filename="output"
150 | Connected to [...] on protocol version 1.4
151 | [...]
152 | ```
153 |
154 | 
155 |
156 | 🎉 You're set! Sparrow is now configured to connect to your node over Tor and
157 | you can use it wherever you are.
158 |
159 |
160 |
161 | If a Tor proxy is configured in Sparrow, all external connections use Tor. This
162 | includes rate fetching, coinjoin etc - even transaction broadcasting is then
163 | done via external service (like blockstream.info) over Tor for additional
164 | privacy. Where-ever possible, the onion URLs of these services are used.
165 |
166 | Sparrow can be configured to use an internal (bundled) or external Tor proxy. To
167 | use the internal proxy, an onion Electrum server URL must be specified, and the
168 | 'Use Proxy' toggle must be off. Therefore, the following section only applies if
169 | you connect to your Electrum server using the local IP address within your local
170 | network (e.g., `nakamoto01`, `nakamoto01.local` or `192.168.X.Y`). If you're
171 | using a Tor onion address to connect to your node, then Sparrow is already using
172 | the internal proxy and there is nothing else to be done!
173 |
174 | If you're using a local connection, we recommend that you set up this external
175 | Tor proxy as described below for maximal privacy.
176 |
177 | {
Preparations on your computer
}
178 |
179 | For Sparrow Wallet to connect to the external services via Tor, Tor has to be
180 | running on your computer. You can run the Tor Browser and use port 9150 on
181 | localhost or else run Tor as a background service and use port 9050.
182 |
183 | Here, we'll use the Tor as a background service and port 9050 as it is easier
184 | and simpler to set up.
185 |
186 |
187 |
188 | To work around this, first, make sure Tor is installed and running on your
189 | Windows. Run as admin:
190 |
191 |
192 | First you need to install [chocolatey](https://chocolatey.org/install)
193 |
194 |
195 | ```sh copy
196 | choco install tor
197 | tor --service start
198 | ```
199 |
200 | Check tor service are working
201 |
202 | ```sh copy
203 | netstat -aon | findstr ":9050"
204 | ```
205 |
206 | ```output filename="output"
207 | TCP 127.0.0.1:9050 0.0.0.0:0 LISTENING 23656
208 | ```
209 |
210 |
211 | To work around this, first, make sure Tor is installed and running on your Mac:
212 |
213 |
214 | First you need to install [homebrew](https://brew.sh/)
215 |
216 |
217 | ```sh copy
218 | brew install tor && brew services start tor
219 | ```
220 |
221 |
222 | There are countless Linux distributions, but the instructions for some of the
223 | most notable Linux families are:
224 |
225 | * Alpine-based OS: `apk add tor` and `rc-service tor start`
226 | * Gentoo-based OS: `emerge net-vpn/tor` and `rc-service tor start`
227 | * openSUSE-based OS: `zypper install tor` and `systemctl start tor`
228 | * RedHat-based OS: `yum install tor` and `systemctl start tor`
229 | * Debian-based OS: `apt install tor` and `systemctl start tor`
230 |
231 | Done
232 |
233 |
234 |
235 | {
Signing app configuration
}
236 |
237 | * Open Sparrow
238 | * Navigate to the server configuration page by hitting `
` or `<,>`
239 | on macOS, then click on "Server"
240 | * Click on the "Private Electrum" tab. If you've already have an existing
241 | clearnet connection, click on "Edit Existing Connection".
242 | * Enable the Tor proxy by clicking on the "Use proxy" slider
243 | * On the "Proxy URL" line, paste `127.0.0.1` in the first box and either `9050`
244 | in the second box.
245 | * Click on "Test Connection". A green tick should appear on the button and you
246 | should see something similar to the following output:
247 |
248 | ```output filename="output"
249 | Connected to [...] on protocol version 1.4
250 | [...]
251 | ```
252 |
253 | 
254 |
255 | Now, let's go back to the signing app and check that the proxy is working
256 | properly.
257 |
258 | * Close the server configuration window
259 | * Check the two icons in the bottom right corner of the signing app window
260 | status icons
261 | * The first icon should be grey, not red; and a mouse hover should display
262 | "External Tor proxy enabled"
263 |
264 | 🎉 You're set! Sparrow Wallet is now configured to use the Tor proxy when
265 | fetching the Bitcoin price and when communicating with the Whirlpool server
266 | during CoinJoins.
267 |
268 |
269 | ## Sparrow in action
270 |
271 | Congratulations, you have now a Bitcoin desktop signing app, capable of securing
272 | your bitcoin keys, running with your own trustless Bitcoin full node!
273 |
274 | Sparrow is a powerful signing app that allows you to use the most advanced
275 | features for securing your bitcoin keys and preserve your privacy.
276 |
277 | With Sparrow you can:
278 |
279 | * Connect any hardware signing device
280 | * "Send" and "receive" bitcoins
281 | * Have full control throughout the transaction creation and signing process:
282 | coin control, PSBT, labelling, byte level transaction viewer...
283 | * Create batched transactions to save on miner fees
284 | * Create multisig for improved security
285 | * Coinjoin your coins for improved privacy
286 | * Analyse your tansactions with the built-in blockchain explorer
287 |
288 | For more information, tutorials and support, visit the Sparrow documentation
289 | [webpage](https://sparrowwallet.com/docs) and their Telegram
290 | [group](https://t.me/sparrowwallet).
291 |
292 | ## For the future: Sparrow update
293 |
294 | Sparrow will automatically notify you when an update is available. Simply
295 | install the updates using the usual method for your OS.
--------------------------------------------------------------------------------