on master help sign in
Merge pull request #1655 from urbit/mp/manual

move /using to operators.urbit.org

commit2ab20304432cc5242ea607423c181963b6ae0de3 authorGordon <gordon.cieplak@urbit.org> dateThu 21 Jul 2022, 10:54 (4 years ago) parent41061ed9d02061
29 files changed+33−4020
components/Header.js+27−22 content/using/_index.md−33 content/using/id/_index.md−59 content/using/id/bridge-troubleshooting.md−37 content/using/id/creating-an-invite-pool.md−106 content/using/id/guide-to-resets.md−93 content/using/id/hd-wallet.md−161 content/using/id/l2-star.md−41 content/using/id/layer-2-for-planets.md−104 content/using/id/overview.md−66 content/using/id/proxies.md−55 content/using/id/using-bridge.md−111 content/using/os/_index.md−32 content/using/os/basics.md−263 content/using/os/dojo-tools.md−417 content/using/os/filesystem.md−379 content/using/os/s3.md−73 content/using/os/shell.md−343 content/using/os/ship-troubleshooting.md−225 content/using/os/stars-and-galaxies.md−38 content/using/running/_index.md−24 content/using/running/hosting.md−202 content/using/running/minio.md−141 content/using/running/port.md−157 content/using/running/vere.md−623 lib/constants.js−4 package.json+1−2 pages/using/[[...slug]].js−159 vercel.json+5−50
components/Header.js+27−22
@@ -66,17 +66,17 @@ export default function Header(props) {
6666 <ActiveLink
6767 currentPath={currentPath}
6868 className="mr-5 type-ui"
69− href="/using"
69+ href="/faq"
7070 >
71− Manual
71+ FAQ
7272 </ActiveLink>
7373
7474 <ActiveLink
7575 currentPath={currentPath}
7676 className="mr-5 type-ui"
77− href="/faq"
77+ href="/grants"
7878 >
79− FAQ
79+ Grants
8080 </ActiveLink>
8181
8282 <ActiveLink
@@ -113,26 +113,30 @@ export default function Header(props) {
113113 <a className="mt-2 mb-4">Developers</a>
114114 </Link>
115115 <hr className="border-wall-200" />
116+
116117 <ActiveLink
117118 currentPath={currentPath}
118− className="mt-4 mr-5 mb-4"
119− href="/overview"
119+ className="mr-5 mb-4 text-green-400"
120+ href="/getting-started"
120121 >
121− Overview
122+ Get Started
122123 </ActiveLink>
124+
125+
123126 <ActiveLink
124127 currentPath={currentPath}
125− className="mr-5 mb-4"
126− href="/using"
128+ className="mt-4 mr-5 mb-4"
129+ href="/overview"
127130 >
128− Manual
131+ Overview
129132 </ActiveLink>
130− <ActiveLink
131− currentPath={currentPath}
132− className="mr-5 mb-4"
133− href="/blog"
134− >
135− Blog
133+
134+ <ActiveLink currentPath={currentPath} className="mr-5 mb-4" href="/faq">
135+ FAQ
136+ </ActiveLink>
137+
138+ <ActiveLink currentPath={currentPath} className="mr-5 mb-4" href="/grants">
139+ Grants
136140 </ActiveLink>
137141 <ActiveLink
138142 currentPath={currentPath}
@@ -141,16 +145,17 @@ export default function Header(props) {
141145 >
142146 Events
143147 </ActiveLink>
148+
144149 <ActiveLink
145150 currentPath={currentPath}
146− className="mr-5 mb-4 text-green-400"
147− href="/getting-started"
151+ className="mr-5 mb-4"
152+ href="/blog"
148153 >
149− Get Started
150− </ActiveLink>
151− <ActiveLink currentPath={currentPath} className="mr-5 mb-4" href="/faq">
152− FAQ
154+ Blog
153155 </ActiveLink>
156+
157+
158+
154159 </MenuTray>
155160 </header>
156161 );
content/using/_index.mddeleted−33
@@ -1,33 +0,0 @@
1−+++
2−title = "User's Manual"
3−sort_by = "weight"
4−template = "sections/docs/chapters.html"
5−+++
6−
7−Welcome to the User's Manual for the Urbit project. This documentation is
8−maintained by [Tlon](https://tlon.io) and the Urbit community in a public
9−[Github repository](https://github.com/urbit/urbit.org). Issues and
10−contributions are welcome.
11−
12−This documentation provides a series of guides and reference material for
13−assisting you in the usage and operations of your ship. If you're looking for
14−documentation on how to _develop_ on Urbit, see our [development docs](/docs/).
15−
16−### [Urbit OS](/using/os/)
17−
18−This section describes how to interact with your running Urbit ship: this
19−includes working with the filesystem, command line (`dojo`), resolving common
20−issues, and more.
21−
22−### [Urbit ID](/using/id/)
23−
24−Urbit ID is our [public-key infrastructure](/using/id/overview), which is
25−what allows you to truly own your identity. Here you'll find guides for
26−interacting with your Urbit ID via our [Bridge](https://bridge.urbit.org)
27−application.
28−
29−### [Running Urbit](/using/running/)
30−
31−Urbit can be run in a variety of contexts. Our [Getting Started
32−Guide](/getting-started/) covers how to run an Urbit locally on your
33−computer; this section covers alternative ways of running Urbit.
content/using/id/_index.mddeleted−59
@@ -1,59 +0,0 @@
1−+++
2−title = "Urbit ID"
3−template = "sections/docs/chapters.html"
4−sort_by = "weight"
5−description = "How to interact with Urbit ID."
6−weight = 20
7−+++
8−
9−Urbit ID is our [public-key infrastructure](/using/id/overview), which is
10−what allows you to truly own your identity.
11−
12−### [Overview](/using/id/overview)
13−
14−This document discusses what Urbit ID is, how it's built, and why it's been
15−built that way at a high level.
16−
17−### [Using Bridge](/using/id/using-bridge)
18−
19−A guide to using [Bridge](https://bridge.urbit.org), our tool for managing your
20−Urbit ID.
21−
22−### [Proxies](/using/id/proxies)
23−
24−You may designate other Ethereum addresses as [proxies](/docs/glossary/proxies)
25−for your Urbit ID, which are capable of a reduced subset of Urbit ID actions.
26−
27−### [HD Wallet](/using/id/hw-wallet)
28−
29−A wallet for your Urbit ID that is accessible with a passphrase called a master
30−ticket.
31−
32−### [Bridge Troubleshooting](/using/id/bridge-troubleshooting)
33−
34−How to resolve common issues in Bridge.
35−
36−### [Creating an Invite Pool](/using/id/creating-an-invite-pool)
37−
38−If you own a star, invite pools allow your friends to invite others onto the
39−network.
40−
41−### [Guide to Resets](/using/id/guide-to-resets)
42−
43−What to do when things go very wrong and you need to start over.
44−
45−## Layer 2
46−
47−In 2021, [naive rollups](/blog/rollups) were introduced to reduce the cost of
48−working with Urbit ID and the friction associated with using Ethereum and
49−cryptocurrency. We have written a series of short guides intended to educate
50−users of how these changes affect them. For more comprehensive documentation
51−aimed at developers, see the [Azimuth documentation](/docs/azimuth).
52−
53−### Layer 2 Bridge Guide
54−
55−A guide to how to utilize Bridge to interact with Layer 2. XX TODO
56−
57−### [Layer 2 Stars](/using/id/l2-star)
58−
59−A summary of the different options available to stars and their proxies on layer 2.
content/using/id/bridge-troubleshooting.mddeleted−37
@@ -1,37 +0,0 @@
1−+++
2−title = "Bridge Troubleshooting"
3−template = "doc.html"
4−description = "Troubleshooting Bridge if you are running into errors"
5−weight = 20
6−+++
7−
8−This page covers common issues encountered with the [Bridge](https://bridge.urbit.org) application.
9−
10−### Canvas Issues
11−
12−Bridge uses an HTML element called canvas to create your wallets. Unfortunately malicious websites can use canvas to identify and track users. As a result, some browsers and anti-tracking extensions can interfere with Bridge's ability to generate wallets.
13−
14−If there are no instructions for your browser, or the instructions don't work, please file a ticket on the [issue tracker](https://github.com/urbit/bridge/issues)
15−
16−#### Brave Users
17−
18−To fix canvas issues on Brave:
19−
20−- Click on the Brave logo on the right edge of your URL bar
21−- Click `Advanced View`
22−- Set the bottom dropdown to `Cross-site device recognition blocked`
23−- Click on Retry in Bridge
24−
25−The warning box should disappear.
26−
27−#### Firefox Users
28−
29−To fix canvas issues on Brave:
30−
31−- Click on the icon of an image in your URL bar, to the left of
32− `https://bridge.urbit.org`
33−- Click `Allow Data access`
34−- Click on Retry in Bridge
35−
36−The warning box should disappear.
37−
content/using/id/creating-an-invite-pool.mddeleted−106
@@ -1,106 +0,0 @@
1−+++
2−title = "Creating an Invite Pool"
3−weight = 30
4−template = "doc.html"
5−+++
6−
7−If you're a star owner, you have the ability to create **invite pools**. These
8−invite pools let you give your friends a piece of the network in the form of a
9−planet. This document will give you an explanation of how to create an invite
10−pool and how to share it with your friends using our tool
11−[Bridge](https://bridge.urbit.org).
12−
13−For more general tips on using your star, check out the [Star and Galaxy
14−Operations page](/using/).
15−
16−## Anatomy of an Invite Pool
17−
18−An invite pool is a set of planet invites that can be distributed via email or
19−URL; each invite is worth one planet when redeemed. An invite pool can be as big
20−as you'd like, providing that you have enough planets left to spawn. All invite
21−pools must be created by a star, but they must be given to a planet. If you're
22−interested in how this works technically, take a look at the
23−[DelegatedSending.sol
24−contract](https://github.com/urbit/azimuth/blob/master/contracts/DelegatedSending.sol).
25−
26−Keep in mind that all planets will have access to the invite pool until the
27−invite pool is exhausted.
28−
29−For example: As `~marzod`, I spawn `~wicdev-wisryt` and give it an invite pool
30−of 100 planets. `~wicdev-wisryt` can now send an invite to a friend at
31−galen@tlon.io. When Galen claims his planet (`~ravmel-ropdyl`), `~ravmel-ropdyl`
32−can now invite his friend — or 99 of them. `~wicdev-wisryt` may also continue to
33−use the invite pool, as can anybody they invite.
34−
35−## How To Create an Invite Pool
36−
37−Giving your friends a piece of Urbit only takes a few minutes: send an invite
38−pool to a planet, and then that planet can email an invite to a friend (or
39−friends)
40−
41−1. Log into Bridge using your ownership address for your star.
42−
43−2. Change the spawn proxy of your star to
44− `0xF7908Ab1F1e352F83c5ebc75051c0565AEaea5FB`. This is a contract address that
45− will handle the spawning of planets for invitees.
46−
47−3. Get the `@p` (like `~poldec-tonteg`) of the planet to whom you'd like to give
48− access to the invite pool. It can be one you control or a friend's. It does
49− not have to be a planet sponsored by your star.
50−
51−3. Click "Manage Invite Pools" to assign an invite pool to the planet. You may
52− receive a notification that you need to assign your spawn proxy to the
53− address of the Delegated Sending contract. This is so that the contract can
54− send invites on your behalf when the recipient claims them. This address is
55− `0xF7908Ab1F1e352F83c5ebc75051c0565AEaea5FB`, which is also displayed in Bridge.
56−
57−![](https://media.urbit.org/docs/invite-pool/browser-point.png)
58−
59−4. Enter the `@p` of the planet and the number of invites you'd like to assign to them.
60−
61−![](https://media.urbit.org/docs/invite-pool/browser-create-pool.png)
62−
63−Once the transaction is complete, the planet will have access to the invite pool.
64−
65−## How to Send an Invite
66−
67−1. Log into Bridge using the planet assigned an invite pool above using the
68− planet's Master Ticket or ownership address.
69−
70−2. Under "Invite Group", click "Add Members" to unroll the invitation UI.
71−
72−3. Select either "Email" or "URL".
73−
74−4. If you selected "Email", enter the email address(es) of those you wish to
75− invite to the dialog box. You may add more than one email address. Click "Add to
76− Invite Group" when finished, and wait for the transaction to complete. Your
77− friend(s) will get an email shortly with your gift of an identity for life!
78−
79− If you selected "URL", click "Generate Invite URL" to create an invitation URL
80− that you can then share.
81−
82−## FAQ
83−
84−Q. What happens if the spawn proxy address is changed away from
85−`0xF7908Ab1F1e352F83c5ebc75051c0565AEaea5FB` after an invite pool has been
86−created? Will outstanding invite pool(s) still function?
87−A. They won't. Existing balances will remain, but Bridge (and `azimuth-js`) won't
88−consider any of the invites from that star usable, and trying to send one of
89−their planets anyway will result in a failed transaction.
90−
91−Q. Can a star create more than one invite pool at a time?
92−A. Yes, a star can allow any given planet to send any number of invites
93−independently from one another.
94−
95−Q. Can an invite pool be revoked?
96−A. Yes, this may be done by assigning zero invites to a planet that had been
97−previously been given access to an invite pool.
98−
99−Q. Can a delegated planet have more than one invite pool assigned to it?
100−A. Yes, as a planet, multiple stars can give you invites to use.
101−
102−Q. What can you do if you send an invite to an email address by mistake?
103−A. Planets that have been sent but not yet claimed live at the
104−ownership address of the star that created the invite pool. Log into Bridge
105−using the ownership address for the star and you will be able to cancel the
106−pending invite. Once an invite has been accepted, nothing can be done!
content/using/id/guide-to-resets.mddeleted−93
@@ -1,93 +0,0 @@
1−+++
2−title = "Guide to Factory Resets"
3−weight = 40
4−template = "doc.html"
5−+++
6−
7−An important concept on the [Ames](/docs/arvo/ames/ames) network is that of
8−continuity. Continuity refers to how ships remember the order of their own
9−network messages and the network messages of others -- these messages are
10−numbered, starting from zero. A _factory reset_ is when ships on the network agree to
11−forget about this sequence and treat one or more ships like they are brand new.
12−
13−## Factory Resets
14−
15−Ships on the Ames network sometimes need to reset their continuity. A factory
16−reset (hereafter just called a _reset_) is
17−when an individual ship announces to the network: "I forgot who I am, let's
18−start over from scratch." That is, it clears its own event log and sends an
19−announcement to the network, asking all ships that have communicated with it to
20−reset its networking information in their state. This makes it as though the
21−ship was just started for the first time again, since everyone on the network
22−has forgotten about it.
23−
24−Resets often fix connectivity issues, but should only be used as a last
25−resort. Before performing a reset, look at alternative fixes in the [Ship
26−Troubleshooting](/using/os/ship-troubleshooting) guide. Also reach out for help
27−in the Help channel in the Urbit Community group
28−`~bitbet-bolbel/urbit-community` to see if there is another option. Connectivity
29−issues are typically related to a bug, and you may be able to help us fix it by
30−emailing us at `support@urbit.org`.
31−
32−There are two separate sequences of actions you need to take in order to reset.
33−One flow is for when you wish to keep Ethereum ownership address of the ship the
34−same, and the other is for when you are transferring the ship to a new Ethereum
35−ownership address. We make the emphasis about the Ethereum _ownership_ address
36−as changing your [proxies](/docs/glossary/proxies) does not require a reset.
37−
38−If you will be keeping your ship at the same Ethereum ownership address and
39−would like to perform a reset, follow the steps below.
40−
41−- Go to [bridge.urbit.org](https://bridge.urbit.org) and log into your identity.
42−- Click on `OS: Urbit OS Settings` at the bottom, then click `Reset Networking Keys`.
43−- Check the `Breach Continuity` box. Click `Reset Networking Keys`, and then
44− click `Send Transaction` and wait for the progress bar to appear.
45−- Download your new keyfile following these instructions: [Generate your
46− keyfile](/using/id/using-bridge#generate-your-keyfile).
47−- Delete or archive your old [pier](/docs/glossary/pier).
48−- Proceed to [boot your ship](/getting-started/cli#boot-your-planet) with the
49− new keyfile.
50−- Delete your keyfile after successfully booting.
51−- Rejoin your favorite chat channels and subscriptions.
52−
53−If you are transferring a ship to a new Ethereum ownership address you will have
54−the choice as to whether or not you want to reset. This is to cover the case
55−when you are transferring to another address you own. The process here is
56−slightly different.
57−
58−- Go to [bridge.urbit.org](https://bridge.urbit.org) and log into your identity.
59−- Click on `ID: Identity and security settings` at the bottom, then click
60− `Transfer this point`.
61−- Enter the new Ethereum address you would like to transfer ownership to. Click
62− `Generate & Sign Transaction`, then click `Send Transaction` and wait for the
63− progress bar to complete.
64−- Logout of your current session in Bridge by clicking `Logout` at the top, and
65− then login to your new ownership address.
66−- From here, following the directions on how to [Accept your
67− transfer](/using/id/using-bridge#accept-your-transfer), [Set your networking
68− keys](/using/id/using-bridge#set-your-networking-keys), and [Generate your
69− keyfile](/using/id/using-bridge#generate-your-keyfile). The option whether or
70− not to reset is in the Accept your Transfer step.
71−- Delete or archive your old [pier](/docs/glossary/pier).
72−- Proceed to [boot your ship](/getting-started/cli#boot-your-planet) with the
73− new keyfile.
74−- Delete your keyfile after successfully booting.
75−- Rejoin your favorite chat channels and subscriptions.
76−
77−## Network Resets
78−
79−Network resets were events where all ships on the network were required to
80−update to a new continuity era. Network resets happened when an Arvo update
81−was released that could not be implemented via an [OTA
82−update](/docs/glossary/ota-updates). The continuity era is given by an integer
83−in Ames that is incremented when the network resets. Only ships with the same
84−such value are able to communicate with one another. The most recent network
85−reset occurred in December 2020, and we expect it to have been the final one.
86−
87−If another network reset does occur, we will provide accompanying documentation
88−on what to do to transfer your ship and all of its data to the new era.
89−
90−## Breaches
91−
92−Factory resets used to be called _breaches_, and you may find this terminology
93−still used in some places. This is an identical concept - only the name differs.
content/using/id/hd-wallet.mddeleted−161
@@ -1,161 +0,0 @@
1−+++
2−title = "HD Wallet (Master Ticket)"
3−weight = 11
4−template = "doc.html"
5−+++
6−
7−This document explains what the [Urbit HD wallet](/docs/glossary/hdwallet) is
8−and how to use it.
9−
10−### What is the Urbit HD Wallet? {% #urbit-hd-wallet %}
11−
12−The [Urbit Hierarchical Deterministic (HD) Wallet](/docs/glossary/hdwallet) is a
13−custom Ethereum wallet based on BIP39 and BIP44 – the same underlying technology
14−used by wallet providers like Ledger, Trezor, Metamask, and MyEtherWallet. You
15−can think of the Urbit HD wallet as a wallet of wallets, which lets you keep a
16−single passphrase for all of your Urbit ID keys. Urbit ID uses multiple keys
17−with different capabilities – a bit like permissions – so that you can keep the
18−more valuable keys in cold storage while keeping less valuable keys, used in
19−day-to-day operation, more easily accessible. If you're only operating a planet,
20−you shouldn't have to worry about this: you can simply think of your "master
21−ticket" as the password to your Urbit ID. If you're operating a star or galaxy,
22−the Urbit HD Wallet allows you to implement a multi-tier key custody scheme.
23−
24−If you're interested, you can read the spec here: [Urbit HD Wallet Spec (UP 8)](https://github.com/urbit/proposals/blob/master/008-urbit-hd-wallet).
25−
26−### What is a master ticket? {% #master-ticket %}
27−
28−The "master ticket" is the cryptographic seed from which your other Urbit ID keys are
29−derived. It should be treated like a master password: **you should never share
30−it with anyone, and you must store it very securely (see our practices below).**
31−This ticket is used to derive the Ethereum wallet that holds your ownership
32−keys, your [Urbit OS](#what-is-arvo) key – used to boot your Urbit – and the
33−other keys associated with your identity. You’ll have a master ticket if you
34−used the Urbit Wallet Generator or claimed a [ship](/docs/glossary/ship) on our
35−hosted version of Bridge.
36−
37−If you're operating a planet, you can use your master ticket to authenticate
38−with Bridge.
39−
40−### What is an ownership address? {% #ownership-address %}
41−
42−An ownership address is an Ethereum address that owns one or more of your Urbit
43−IDs. The Urbit Wallet Generator creates one [Urbit HD
44−Wallet](/docs/glossary/hdwallet) and associated addresses for each of your
45−identities. Using the ownership key associated with your ownership address, you
46−can transfer identities to other people, meaning that it’s very important to
47−store securely.
48−
49−### What are proxies? {% #proxies %}
50−
51−See [Proxies](/using/id/proxies).
52−
53−### What are seeds? {% #seeds %}
54−
55−All Ethereum key-pairs in the Urbit wallet system, including
56−[proxies](/docs/glossary/proxies), are produced by 128-bit cryptographically
57−random values called seeds. These seeds are the equivalent of the BIP39 mnemonic
58−of an Ethereum wallet and are yours alone. An ownership key pair is derived from
59−an ownership seed and, likewise, the various proxy key pairs are generated from
60−their respective proxy seeds.
61−
62−For detailed information see the [Urbit HD Wallet Spec (UP 8)](https://github.com/urbit/proposals/blob/master/008-urbit-hd-wallet).
63−
64−### What does it mean to “set public keys”? {% #set-public-keys %}
65−
66−This means registering the public keys of your identity's encryption and
67−authentication key pairs (together known as "networking keys") with Urbit ID /
68−[Azimuth](/docs/glossary/azimuth), so that others can discover them. The
69−corresponding private keys can then be used to, for example, run a
70−[ship](/docs/glossary/ship) on the [Urbit OS](#what-is-arvo) network.
71−
72−You want to reset these keys if they are compromised, or if your ship has sunk.
73−This is of little practical significance today, but resetting your networking
74−keys resets your relationship with other ships on the network.
75−
76−### What do I do if I want to own multiple identities? {% #multiple-points %}
77−
78−We recommend using a different HD Wallet for each identity. You are able to
79−assign any number of identities to a single Ethereum address, however, since
80−they are just ERC-721 tokens.
81−
82−### How should I take care of my Urbit HD Wallet? {% #custody %}
83−
84−Urbit IDs have accompanying security realities that must be taken seriously. The
85−responsibility for keeping cryptographic assets safe rests fully with the party
86−that owns them.
87−
88−The nature of decentralization is such that there is generally no authority that
89−has the power to restore any lost or stolen wallet. The exception to this is
90−[social recovery wallets](https://vitalik.ca/general/2021/01/11/recovery.html).
91−The HD wallet does not yet support social recovery, but it is possible to
92−utilize it with another wallet such as [Argent](https://www.argent.xyz/).
93−
94−Nobody can force you to follow good security practices. At most, they
95−can give you recommendations. **Remember:** if critical items, such as your
96−ownership key, are lost or compromised, your assets are likely gone forever.
97−
98−Below we list some good practices for storing keys, strictest first.
99−Higher-value assets should be secured with stricter measures.
100−
101−#### Security Tier 1: Cold storage
102−
103−Cold storage refers to any method in which secrets are stored in a way that is
104−not accessible to any network. Cold-stored keys should only ever be generated
105−offline.
106−
107−Cold storage media options:
108−
109−- Printing the secret on a piece of paper. However, paper wallets are vulnerable
110− to various forms of physical damage, such as rot, water damage, smoke, or
111− fire. Laminating the paper can mitigate some of these risks, but the
112− lamination can potentially trap moisture. Make sure that you trust the
113− printer; some have memory and network connections.
114−- Storing the secret on a brand-new USB stick or hard drive that has never been
115− connected to a networked machine.
116−- Storing the secret on a hardware wallet like Ledger or Trezor.
117−- Engraving the secret on a strip of stainless steel. This medium is resistant
118− to both water and fire damage.
119−
120−Places to store your cold-storage media:
121−
122−- A hidden safe in your home
123−- A safe-deposit box at a bank
124−
125−It’s a good idea to store your keys redundantly; for example, on both a USB
126−stick and a piece of paper in the safe, in case one of those methods fails. If
127−you deem a key to be valuable enough, you can **shard** it into thirds (or other
128−splits) and store each third in secure, geographically distributed locations.
129−Urbit HD wallets for galaxies automatically provide a 3-way sharded master
130−ticket.
131−
132−#### Security Tier 2: Hardware wallet or paper wallet
133−
134−A hardware wallet is a digital storage device that’s purpose-built to store
135−cryptographic secrets. They are unaffected by typical key-stealing malware and
136−have built-in security mechanisms that other digital devices lack. Do your
137−research and make sure that you are buying an authentic device manufactured by
138−trustworthy, technically competent security experts with a good reputation.
139−Trezor and Ledger are two popular brands of hardware wallets.
140−
141−A "paper wallet" is a physical medium printed or engraved with a secret. These
142−are resistent to network attacks, but the downside is that the secret must be
143−entered into a computer by hand, exposing the user to attacks from malware and
144−eavesdroppers.
145−
146−#### Security Tier 3: On your computer
147−
148−This tier includes any method where secrets are stored on an everyday computing
149−platform. Some such methods are:
150−
151−- Encrypted PDFs containing a secret on your desktop’s drive
152−- Storing secrets on a cloud account protected by multi-factor authentication
153−- Storing secrets in a password manager
154−
155−This method is risky for a number of reasons. Networked computers can contain
156−malware. Computers that see common use are also prone to crashes and data loss.
157−Storing secrets on cloud accounts mitigates the risk of data destruction, but it
158−exposes a much larger attack surface to malicious actors.
159−
160−For all of these reasons, if you use Tier 3 methods, use them only for the
161−storage of low-value secrets.
content/using/id/l2-star.mddeleted−41
@@ -1,41 +0,0 @@
1−+++
2−title = "Layer 2 for stars"
3−weight = 60
4−template = "doc.html"
5−+++
6−
7−This is a brief summary of the three possible options for star owners with
8−respect to use of [layer 2](/docs/glossary/rollups).
9−
10−## One-way trip
11−
12−Stars have three options with respect to layer 2:
13−
14−- Layer 1
15−- Layer 1 with Layer 2 spawn proxy
16−- Layer 2
17−
18−A layer 1 star can move to layer 1 with layer 2 spawn proxy, or to layer 2. A
19−star on layer 1 with layer 2 spawn proxy can move to layer 2. None of these
20−actions are currently reversible.
21−
22−Moving between layers has no effect on sponsorship status of any of its
23−sponsees, nor its sponsorship status with its galaxy. It also has no effect on
24−planets spawned by the star prior to moving between layers.
25−
26−## Layer 1
27−
28−A star on layer 1 performs all Urbit ID-related actions on layer 1, except for
29−sponsorship actions, which can be performed on either layer.
30−
31−## Layer 1 with Layer 2 spawn proxy
32−
33−A star on layer 1 with layer 2 spawn proxy can spawn planets on layer 2 using
34−either their ownership proxy or spawn proxy. They will no longer be able to
35−spawn planets on layer 1. They may also perform sponsorship actions on either
36−layer, identical to layer 1 stars.
37−
38−## Layer 2
39−
40−A star on layer 2 must perform all Urbit ID related actions on layer 2. All
41−planets spawned by the star will be on layer 2.
content/using/id/layer-2-for-planets.mddeleted−104
@@ -1,104 +0,0 @@
1−+++
2−title = "Layer 2 for planets"
3−weight = 50
4−description = "Getting started with a permanent Urbit identity."
5−+++
6−
7−What does Layer 2 mean for planets? Cheap transaction fees which make it inexpensive to get on the network and stay on the network.
8−
9−Performing transactions directly on the Ethereum blockchain, ‘Layer 1’, has become prohibitively expensive over the past year due to ETH’s value and network congestion. As a result, spawning a planet or performing simple operations in Bridge can be very costly. Urbit’s [Layer 2](https://urbit.org/docs/azimuth/l2/layer2) solution, called [naive rollups](https://urbit.org/blog/rollups), makes performing these transactions cheap or free. Planets can take advantage of this in the form of cheaper planet prices, as well as cheap or free Azimuth transactions.
10−
11−### What to know
12−
13−- Migration is currently **one-way**.<br /><br />You cannot move a Layer 2 ID back to Layer 1. This includes planets that are spawned on Layer 2.
14−- You cannot interact with Layer 2 IDs using Layer 1 tools like OpenSea or Metamask.<br /><br />You will not be able to use your ID with smart contracts, or ‘see’ it using wallets other than Bridge. **Bridge is currently the only software that can see or interact with Layer 2 IDs.**
15−- Layer 2 does not have anything to do with networking between ships.<br /><br />Operating your ship on the network will not be influenced by which layer it is on. You will be fully capable of communicating with ships on either layer.
16−- You can perform Layer 2 transactions for free with Tlon’s roller.<br /><br />A public roller operated by Tlon is connected to Bridge by default, but anyone can operate a roller. Tlon’s roller offers free subsidized transactions up to a weekly limit of 25 operations.
17−- You will need to pay for the migration to L2.<br /><br />Migrating is a one-time process that takes place on Layer 1. You will need to fund it in the same way as a traditional Layer 1 Azimuth transaction.
18−- Your star sponsor can be on either layer.<br /><br />The layer that a star is on has no bearing on who it can sponsor.
19−
20−If you already had a planet before the launch of L2, you don’t have to do anything. Your ship will continue to function normally and you will still be able to communicate with the entire network without any additional intervention. However, you have the option of migrating your planet to Layer 2 in order to take advantage of the reduced costs and subsidized transactions available through Tlon’s roller.
21−
22−### Should I move?
23−
24−If you have a planet on Layer 1, migrating is entirely optional. The **benefits** of migrating a planet to Layer 2 are free or cheap Azimuth transactions. Ships on Layer 2 can use Tlon’s roller to perform operations in Bridge for free up to a weekly limit. These operations might be resetting networking keys, or changing sponsors.
25−
26−The **trade-offs** for migrating a planet to Layer 2 include:
27−
28−- The migration process is currently irreversible. If you migrate to Layer 2, you cannot go back to Layer 1.
29−- Ships on Layer 2 are not visible to Layer 1 tools like wallets or chain explorers; Bridge is currently the only software that can ‘see’ Layer 2 IDs.
30−
31−### Which Layer am I on?
32−
33−You can tell at a glance which layer your asset occupies in Bridge:
34−
35−1. Log into Bridge.
36−2. Click the ownership address modal at the top left of the main menu.
37−3. A square icon with ‘L1’ or ‘L2’ will show up next to each asset that belongs to your address.
38−
39−A single ownership address can own ships on both Layer 1 and Layer 2.
40−
41−### Migrating
42−
43−![](/images/planet-l2-migration.gif)
44−
45−To migrate:
46−
47−1. Log into Bridge.
48−2. Click the ownership address modal menu at the top left corner.
49−3. Select ‘Migrate’, and ‘Proceed’ after reading the information presented.
50−4. You will need to pay a one-time fee to fund the transaction; make sure your L1 address has funds available.
51−
52−Migrating to Layer 2 does not change the address that owns a point. **You will still use the same wallet or key to log into Bridge after migration**. A single ownership address might have ships on both Layer 1 and Layer 2.
53−
54−The migration itself does not need to be submitted to a roller – it should complete within a few minutes. Once it has, you can submit planets and transactions to the roller’s queue immediately.
55−
56−### Activating a Layer 2 planet
57−
58−![](/images/planet-l2-claim.gif)
59−
60−**Planet codes** are one-time passphrases used to claim a master ticket through Bridge. These can be standalone text phrases, or embedded in a URL that begins with `bridge.urbit.org`. **Master tickets** are passphrases used to log into Bridge to manage an ID that has already been claimed.
61−
62−If you’ve been given a planet code invitation URL to claim a planet:
63−
64−1. Open the link.
65−2. Click ‘Claim’.
66−3. Reveal the master ticket code. Write this down somewhere safe.
67−4. Confirm you’ve written the code down by typing it back into the prompt.
68−5. Click to download your passport, which contains the keyfile you will use for your ship’s first boot.
69−
70−If you’ve been given a four-word text activation code, go to [Bridge](https://bridge.urbit.org/) and click ‘Activate a planet’ at the bottom. Enter your planet code, and follow the instructions above.
71−
72−In the future, you can log into Bridge using the master ticket you wrote down in order to manage your ship’s keys. Knowing the master ticket is equivalent to owning the ID, so keep it somewhere secure.
73−
74−An important consideration for new users with regard to Layer 2 planets: your ownership key is technically exposed to the star that issued your planet for up to 24 hours, until the next batch is processed by your roller. During this window, it's technically possible for the issuer to take back the planet or decrypt packets meant for it. This is the reason that the keyfile you use to boot your ship actually has two halves – one for your initial boot, and a second one that belongs solely to you.
75−
76−The first time you boot, the key from the first half of the keyfile is used; but when the next roll batch is processed, the ID will be modified with a second key. This key is kept secret from the star that spawned you, and once this transaction clears, your planet is definitively and cryptographically yours. All of this is **taken care of in the background and requires no intervention**. You don’t even need to restart your planet after the ownership transfer has been finalized.
77−
78−### Running your planet
79−
80−Once you’ve activated your planet and downloaded your keyfile, you can use it to boot your ship immediately.
81−
82−If you’re running your planet on a local PC:
83−
84−1. Extract the zipped file you downloaded from Bridge.
85−2. Download [Port](https://urbit.org/getting-started#port) and run the installer.
86−3. Click ‘Boot menu’, and select ‘Planet’.
87−4. Enter a friendly name, the `@p` of your planet, and click ‘Browse’ to navigate to the keyfile you downloaded.
88−5. Click ‘Continue’ to boot your planet.
89−
90−Treat your planet like the precious object it is. Do not share your landscape login code or master key with anybody. Never run it in two places at the same time. This will knock it out of sequence with the network, and cause it to become ‘brain damaged’, unable to communicate with the outside world. Don’t delete the directory that contains your asset’s data. If you are shutting down your ship for a while, keep the data folder somewhere safe, and you can pick up where you left off in the future.
91−
92−You may also opt to [host your planet](https://urbit.org/getting-started#hosting-providers) with a provider. Ships hosted by providers are always-on and come with support. After you’ve activated your planet code, but before you’ve booted with your keyfile, you can create an account with a hosting provider like [UrbitHost](https://urbithost.com/) and use your keyfile to boot your ship with their service – known as ‘bring your own planet’.
93−
94−In addition to importing a fresh planet, UrbitHost allows you to migrate an existing pier to your hosted account. If you’ve booted a planet on your PC but want to make the switch to hosting, you can upload it and hit the ground running without having to reset your networking keys.
95−
96−### Transaction history
97−
98−![](/images/planet-l2-transactions.png)
99−
100−A new feature in Bridge is the ability to see the transaction history of your asset. This is particularly important because with Layer 2, much of the Azimuth state is no longer visible on the Ethereum blockchain, but is maintained by the Urbit network. This means you might not be able to directly observe “who owns what” by looking at the Azimuth contracts with something like a [blockchain explorer](https://etherscan.io/address/azimuth.eth). Activities like setting networking keys, issuing planets, or moving your proxy keys will show up in this log. Note that the transaction history menu in Bridge is currently the only way to examine Azimuth operations that take place on Layer 2.
101−
102−If you submit an operation to your roller, you’ll see a timer counting down to the next batch and a history of completed operations. Bridge does not currently allow you to cancel a transaction once it has been submitted.
103−
104−Incoming transfers of new assets will also show up in your transaction history. If your ownership address owns more than one asset, you can use the modal to select from among them.
content/using/id/overview.mddeleted−66
@@ -1,66 +0,0 @@
1−+++
2−title = "Overview"
3−description = "A public key infrastructure (PKI) is a system for binding a set of keys to a name. Sometimes a small amount of metadata is included."
4−weight = 1
5−template = "doc.html"
6−+++
7−
8−![](https://media.urbit.org/site/posts/essays/pki-maze.png)
9−
10−A public key infrastructure (PKI) is a system for binding a set of keys to a name. Sometimes a small amount of metadata is included.
11−
12−Existing PKIs include PGP-style ["web of trust"](https://en.wikipedia.org/wiki/Web_of_trust), [SSL certificates](https://en.wikipedia.org/wiki/Certificate_authority), [ZeroTier](https://www.zerotier.com/lf-announcement/), [Keybase](https://keybase.io/), [OpenID](https://openid.net/what-is-openid/), [Mozilla Persona](https://developer.mozilla.org/en-US/docs/Archive/Mozilla/Persona), and [Login with Google](https://developers.google.com/identity). These take unique approaches to the problem and have achieved some degree of success, but none provide globally consistent, permanent, and completely self-owned identities. Exhaustive exploration and categorization is unfortunately out of scope for this post, so we'll just describe Urbit's approach to achieving these properties in our PKI.
13−
14−In Urbit, a "name" is often called a "ship" or an "address" because we use the metadata in the PKI to make names routable. The total data is two 256-bit asymmetric keys, a cryptographic suite number (to allow changing crypto algorithms), the revision number of the key, and the name of a ship that will route for it. This sums to less than 128 bytes of data.
15−
16−Each PKI trades off various properties. We chose a tripartite system so that appropriate choices can be made for different use cases. Here, we explore the various properties we chose by following a series of binary choices -- the idea maze.
17−
18−There are two sorts of PKI: either you can change your keys or not. If you cannot, then your name is impermanent, for no one can keep a set of keys secure forever. Even if your opsec never fails, eventually your crypto algorithms may be compromised.
19−
20−However, if you sacrifice the ability to change your keys, you can have a very nice property: self-attesting keys. If your name is a hash of your public key information, then no other source of information is required to verify you are who you say you are. This is a useful property since it requires no coordination at all. Many things are impermanent, especially during development. It also provides a way to try out the network without obtaining a permanent address.
21−
22−This is our first stop in the idea maze. We call this sort of name a "comet". A comet's name is the 128-bit hash of its public keys.
23−
24−However, Urbit is yours and it's forever. You shouldn't have to change your name every time you change your keys. So, we go back and take the other choice: you must be able to change your keys.
25−
26−To change keys, you must sign a message with the old keys revoking them and supplying the new ones[^0]. The question is what happens if the old keys also sign a second set of new keys. This could happen if an attacker obtained your old keys after the fact. This is important because one of the reasons to be able to change your keys is to invalidate the old ones so that they have no power.
27−
28−We have two options again: the PKI may be globally consistent or not. To be globally consistent means that if you believe a name is bound to a set of keys, then nobody on the network will disagree.
29−
30−If you don't require global consistency, you may sign this message and send it to all your neighbors, and they pass it on, and hopefully it gets to most of the network quickly. However, if one of those ships receives two contradictory versions of this message, the only thing it can do is trust the first one it heard, which may be different than what someone else heard. Thus, this is pairwise consistent but globally inconsistent. This is essentially how the pre-blockchain Ames network worked, though key changes were not actually implemented. Because global consistency is a valuable property, we looked at other options.
31−
32−For a globally consistent PKI that allows you to revoke keys, you need to be able to distinguish between two cryptographically valid messages to determine which was signed first. The dual problem could be solved easily — you can prove a message is signed after another by including the signature of the first in the second. This is equivalent to reading out a newspaper headline to prove a message was recorded after a given day.
33−
34−However, the problem of proving one message was sent before any later ones inverts the problem. You can solve this with newspapers by placing the message in the text of the newspaper. However, while reading a newspaper requires no central party, writing one does. For a long time, this sort of message was always handled by a central party. SSL revocations are managed by a few central parties. When you buy property, it's not sufficient to have the previous owner sign the title — this must be entered into a central land registry. Otherwise, the owner may sell their property to multiple people and there would be no way to determine who is the new owner. With the land registry, all you need to do is ask the registry which sale happened first, and that's the one that counts.
35−
36−However, Urbit is yours and it's forever. Trusting central registries jeopardizes both. The keen reader will notice that the problem of determining which key rotation happened first is exactly the double-spend problem that Satoshi solved with his proof of work algorithm for Bitcoin. His first block famously includes a newspaper headline to prove he didn't mine the block before that date. In a beautiful duality, his own algorithm proves that he didn't mine it after that date.[^1]
37−
38−Some argue that blockchain is only good for money. This is myopic and is generally based on the experience that its most valuable application so far has been money. However, blockchain is a cryptographic primitive to do what was previously impossible: prove that one message was signed before another without a central party. Blockchain was discovered by someone trying to create digital money, and he needed that primitive, but that doesn't mean that's all it's good for.
39−
40−Thus, we store our PKI data on a blockchain for our second kind of name: planets. A planet is a 32-bit address which has key information stored on the blockchain.[^2] The owner of a planet may broadcast new PKI data by adding it to the blockchain. Any later messages by the old keys will be rejected, and everyone on the network will listen to the blockchain for key data. Thus, we have global consistency, permanence, and self sovereignty. We know of no other solution that can provide these properties.
41−
42−However, while small individually, the aggregate PKI data for all nodes on the network may become very large. This is not an issue for comets because nobody needs to store comet keys except for those which they're talking with, and even those can be garbage-collected and re-requested and verified. For planets, there is a canonical set of keys, and somebody must store that. There are about 2^32^, or 4 billion planets. If the PKI data is about 100 bytes for each planet, this is about 400 GB of data. This may be more than most users wish to store, but it's small enough that it would be very cheap for someone to host this data for many users[^3].
43−
44−This information is currently stored directly on the Ethereum 1.0 blockchain, but as is well understood in blockchain circles this approach will not scale beyond a certain point. Many chains are pursing designs that allow the users of the smart contracts to store locally the data associated with the contracts they care about and only commit hashes to the chain. We expect there to be several viable options for this by the time our scaling needs exceed what's provided by Ethereum 1.0. This will free us from the cost of hosting the PKI data on all Ethereum nodes, but the data must still be stored somewhere. Any service that could handle such a large amount of data would inherently centralize the network.
45−
46−However, 4 billion is not enough addresses for every device on the planet today, much less in a few decades. So, we apply our maxim of re-examining our choices at each level for each use case. Examining the idea maze above, we cannot use the blockchain option for everything since the data is too big. However, it's not actually necessary for each of your devices to have its own self-sovereign identity separate from your planet. So we choose the option of using a central registry: your own planet.
47−
48−We allocate 4 billion "moons" to each of those planets. A moon is a 64-bit address whose 32-bit suffix is its planet. Your planet can easily store the keys for its own moons, and anyone who needs to talk to your moons can ask you for the keys.
49−
50−This is the sense in which moons are true ships: they're permanent names and you own them completely, as long as you own the planet. However, they're not independent ships — their keys can always be revoked by their planet.
51−
52−To create a sane network, we require global consistency for all our names. There are three other properties; pick any two:
53−
54−- Comets are impermanent, self sovereign, and plentiful.
55−
56−- Planets are permanent, self sovereign, and not plentiful.
57−
58−- Moons are permanent, not self sovereign, and plentiful.
59−
60−Fancifully, comets are wayward celestial bodies that are great for testing and miscellaneous low-value things that won't last for long. Planets are where you can build a home and shape it into anything you want it to be. People can always find your planet; it's not going anywhere. Moons are useful for special purposes, like storage, heavy industry, and anything else you might want to do off-planet.[^4]
61−
62−[^0]: Or the equivalent with a hierarchical key structure. In practice, you want to have a master key which signs a junior key for everyday use. You use the master key to rotate the junior key.
63−[^1]: More strictly: it proves that he didn't mine it after the other blocks currently on the Bitcoin blockchain. It only gives an ordering within the chain, not a literal timestamp.
64−[^2]: In addition to planets, there are stars and galaxies. From a PKI perspective they're treated exactly like planets, but on the network they provide infrastructure services like routing.
65−[^3]: In practice, this will likely be an included service by your sponsoring star. It could be a separate service, but it will be very cheap because it's a commodity and the "cost of production" is very cheap. At any rate, it should never rise above the capital cost of a 400GB hard drive.
66−[^4]: To extend the metaphor, stars are a neighborhood to live in -- they're easier for other planets to see, so when they want to send you a message they look for your star first. If they don't even know where your star is, they can certainly find your star's galaxy, and that will be enough to locate the star. Of course, if your star is not providing satisfactory service, you can take your planet and move to another star.
content/using/id/proxies.mddeleted−55
@@ -1,55 +0,0 @@
1−+++
2−title = "Proxies"
3−weight = 8
4−template = "doc.html"
5−+++
6−
7−Proxy addresses allow you to execute non-ownership related actions like spawning
8−child identities, voting, and setting networking keys without jeopardizing the
9−keys you've designated with ownership rights. Setting proxy rights is optional,
10−but it is recommended for on-chain actions you will execute more frequently.
11−
12−Setting proxies is a good security practice. For instance, you might keep your
13−ownership address in cold storage, while your management proxy is kept in Metamask.
14−
15−The [Urbit HD Wallet](/docs/glossary/hdwallet) automatically sets proxies for
16−your Urbit ID.
17−
18−### Types of proxies
19−
20−There are three main types of proxy: management, spawn, and voting. Their
21−capabilities are detailed in the following. In addition, each proxy is able to
22−transfer itself to another address - e.g. the management proxy can set a new
23−address to be the management proxy.
24−
25−- **Management proxy**
26−
27− Can configure or set Arvo networking keys,
28− [factory reset](/docs/using/id/guide-to-resets), and conduct sponsorship related
29− operations. Planets, stars, and galaxies may all set a management proxy.
30−
31−- **Spawn proxy**
32−
33− For stars and galaxies only. Can create new child identities.
34−
35−- **Voting proxy**
36−
37− Galaxies only. Galaxies are the part of the [Galactic
38− Senate](/docs/glossary/senate), and this means they can cast votes on new
39− proposals including changes to Ecliptic.
40−
41−### Transfer proxy
42−
43−There is also a fourth proxy called the transfer proxy which is considered to be
44−of a different sort than the other three, since it generally only set on a
45−temporary basis to make ownership transfer less mistake-prone, and cleared once
46−ownership has finished.
47−
48−The address holding the transfer proxy may transfer ownership of the ID to the
49−address of the transfer proxy. This is used to make transferring a two-step
50−process: using the ownership address to set the transfer proxy, and then using
51−the transfer proxy to complete the transaction. It is possible to transfer
52−ownership as a one-step process, but this is risky and not recommended. Bridge
53−does not natively support one-step transfers, you must use an advanced tool like
54−[`%claz`](/docs/azimuth/advanced-azimuth-tools) to manually generate such a
55−transaction.
content/using/id/using-bridge.mddeleted−111
@@ -1,111 +0,0 @@
1−+++
2−title = "Using Bridge"
3−template = "doc.html"
4−description = "How to use Bridge to interact with Azimuth and manage your Urbit ID."
5−weight = 7
6−aliases = ["/docs/getting-started/using-bridge/"]
7−+++
8−
9−[Bridge](https://github.com/urbit/bridge) is the application we built for interacting with [Azimuth](https://azimuth.network), the Urbit PKI, and managing your Urbit ID. Importantly, Bridge also allows you to generate a keyfile that you will need to boot your ship so that it can use the Arvo network.
10−
11−This guide assumes that you have an Urbit ID, or that you have found someone to send an Urbit ID to your Ethereum address and are looking to claim it.
12−
13−### Hosted Bridge
14−
15−To connect to Bridge, go to [https://bridge.urbit.org](https://bridge.urbit.org) into your browser, and enter your identity's credentials in the appropriate fields. If you were invited to claim an Urbit ID, it's very likely that you received an email that would direct you to Bridge, and you can simply follow the hyperlink in that email.
16−
17−You'll arrive at a page and see two major choices: `ID` and `OS`. `OS` is the only option that you're interested in right now; click on it. On the `OS` page, click the `Download Arvo Keyfile` button. Once you have downloaded the keyfile, you can exit Bridge and proceed to [install the Urbit binary](/getting-started/).
18−
19−### Local Bridge
20−
21−Alternatively, Bridge can be run locally. It's more complicated, but we recommend this option for managing sufficiently valuable assets, such as several stars or more. To install local Bridge, navigate to the [release page on GitHub](https://github.com/urbit/bridge/releases/). Download the `.zip` file of the latest version. After you download it, follow the instructions below.
22−
23−To use Bridge:
24−
25−- Unzip the .zip file that you downloaded (bridge-$version.zip).
26−- Open up your command line interface (Terminal on
27− X, Command Prompt on Windows).
28−- Navigate to the bridge-$version directory, where $version is the appropriate version number.
29−- Run this command: `python3 -m http.server 5000 --bind 127.0.0.1.`
30−
31−You can then use the Bridge app by navigating to `http://localhost:5000` in your internet browser.
32−
33−### Log in
34−
35−Once the program is running in your browser, go through the steps presented according to the type of wallet you have. You’ll be presented with a few login options. A notable option is Urbit Master Ticket. This is for those who used our Wallet Generator software. If you bought points from an Urbit sale and then used the Wallet Generator, your networking keys will be set for you. All other login options will require you to set your own networking keys.
36−
37−Note: Bridge allows you to both make reads and writes to the Ethereum blockchain. Writing to the blockchain, such as changing your networking keys, will incur a transaction cost that will require you to have some ETH in the address you log in with.
38−
39−### Accept your transfer
40−
41−If you were given points by Tlon you likely already fully own them. But if someone else sent you a point, then you will first need to use Bridge to accept that transfer.
42−
43−After you access your Ethereum address, if a point was sent to that address, you'll come to a page that has an `Incoming Transfers` header, under which is a graphic. Click the `Details ->` link under that graphic.
44−
45−Now you'll be on the management page of your point. The transfer isn't completed
46−yet, so click `Accept incoming transfer`. If you are transferring to yourself
47−and do not wish to [factory reset](/docs/glossary/resets), check the box labeled
48−`Retain proxies and key configuration, in case of transferring to self`.
49−Otherwise leave the box unchecked, ensuring that your ship will be factory reset upon
50−transfer and thus no Azimuth data from the previous owner (namely proxies and
51−networking keys) will be retained. Then press the `Generate and Sign Transaction` button, followed by the `Send Transaction` button.
52−
53−If you already own a point, click on the `Details ->` under your sigil in the `Your Points` section.
54−
55−### Set your networking keys
56−
57−If you just accepted a point, you'll be returned to your point screen. Notice that that links and buttons are now clickable. You now own this point!
58−
59−Click the link that says `Set network keys`. The field presented in the resulting page expects a 32-byte hexadecimal string. If it's filled already, no action is required. If it is empty, you will need to generate such a string. You can generate this data any way you please, but in the terminal on MacOS or Linux, you can write
60−
61−```sh
62−hexdump -n 32 -e '4/4 "%08X"' /dev/random
63−```
64−
65−and use the result.
66−
67−It should be noted that setting your network keys is an event on the Ethereum network and will therefore cost a trivial, but non-zero, amount of [gas](https://eth.wiki/en/fundamentals/design-rationale#gas-and-fees) to complete.
68−
69−### Generate your keyfile
70−
71−From the detail page associated with your point, click the `Generate Arvo Keyfile` link and you'll be taken to a page with a field titled `Network seed`. This field should already be filled in, and should match the hexadecimal string that you entered in the previous step. If it's not filled in or does not match, fill it in with the correct string.
72−Click `Generate ->`, which will download a keyfile onto your machine.
73−
74−With that keyfile in hand, you can now exit Bridge and continue to the guide to [install the Urbit binary](/getting-started/).
75−
76−### Escaping your sponsor {% #escaping-your-sponsor %}
77−
78−As a planet or star, it behooves you to be sponsored by an active star or galaxy,
79−respectively. If your sponsor isn't suiting your needs, you can escape to a
80−different one.
81−
82−#### Prerequisites
83−
84−- A little bit of ETH in your management proxy address to pay for the
85− transaction.
86−- The `@p` of the sponsor you want to escape to. You should negotiate the
87− transfer with the sponsor ahead of time, as they will need to accept it on
88− their end. If you cannot find one, contact Tlon at support@urbit.org and we
89− will assist you in escaping to one of our stars/galaxies.
90−
91−#### Instructions
92−
93−1. Login to [Bridge](https://bridge.urbit.org) with the management proxy address
94− for the ship that will be escaping their sponsor. The ownership address will
95− also do, as will the master ticket if you have that.
96−2. Click on the "OS" button at the bottom of the screen.
97−3. Below Network, you will find the `@p` of your current sponsor. Click "Change"
98− to the right of that.
99−4. Enter the `@p` of your new sponsor.
100−5. Click the "Request" button and then complete the transaction.
101−
102−This action will consume a small amount of ETH. Your sponsor will then need to
103−accept you via a similar process in Bridge, which will require ETH on their end.
104−After the transaction is completed on Ethereum, it will still take some time for
105−the information to propagate to the Urbit network. After 30 minutes or so, you
106−may check that your sponsor has successfully been altered by running
107−`(sein:title our now our)` in dojo and confirming that the `@p` matches that of
108−your new sponsor.
109−
110−Once you change your sponsor, you will likely want to change your source of
111−[OTAs](/docs/glossary/ota-updates) to them as well. To accomplish this, enter `|ota ~sponsor %kids` in dojo, where `~sponsor` is the `@p` of your new sponsor.
content/using/os/_index.mddeleted−32
@@ -1,32 +0,0 @@
1−+++
2−title = "Urbit OS"
3−sort_by = "weight"
4−description = "How to use Urbit OS"
5−template = "sections/docs/chapters.html"
6−weight = 10
7−+++
8−
9−This section describes how to interact with your running Urbit ship: this
10−includes working with the filesystem, command line (`dojo`), resolving common
11−issues, and more.
12−
13−### [Basics](/using/os/basics)
14−
15−An overview of common commands and useful general knowledge for operating your
16−ship.
17−
18−### [Configuring S3 Storage](/using/os/s3)
19−
20−How to set up S3 storage so you can share files in Landscape.
21−
22−### [Shell](/using/os/shell)
23−
24−A comprehensive overview of `dojo` commands.
25−
26−### [Star and Galaxy Operations](/using/os/stars-and-galaxies)
27−
28−How to run an infrastructure node.
29−
30−### [Ship Troubleshooting](/using/os/ship-troubleshooting)
31−
32−How to resolve common problems.
content/using/os/basics.mddeleted−263
@@ -1,263 +0,0 @@
1−+++
2−title = "Basics"
3−description = "How to operate your ship, including using your ship's filesystem and messaging applications, starting a moon, or requesting a DNS entry."
4−template = "doc.html"
5−weight = 1
6−aliases = ["docs/using/messaging/", "docs/using/admin/"]
7−[extra]
8−hidetitle = "true"
9−+++
10−
11−This document deals with:
12−
13−- Running an Urbit ship with the ordinary runtime [from the command line](/getting-started/cli).
14−- Basic setup, configuration and usage in Urbit's shell called the `dojo`.
15−
16−If you're looking for information on using the GUI application [Port](/getting-started#port), see the [Port guide](/using/running/port) instead.
17−
18−## Shutdown
19−
20−You can turn your urbit off with `Ctrl-d` from the Chat or Dojo prompts.
21−
22−You can force-quit your urbit with `Ctrl-z` from anywhere.
23−
24−## Restart
25−
26−To restart your urbit simply pass the name of your pier:
27−
28−```sh
29−$ ./urbit some-planet
30−```
31−
32−or
33−
34−```sh
35−$ ./urbit comet
36−```
37−
38−## Logging
39−
40−To log an urbit's command line output to a file, use `script`:
41−
42−```sh
43−$ script urbit.log ./urbit your-urbit
44−```
45−
46−## Moving your pier
47−
48−Piers are designed to be portable, but it _must_ be done while the urbit
49−is not running. Urbit networking is stateful, so you can't run two copies
50−of the same urbit in two places.
51−
52−To move a pier, simply move the contents of the directory it lives in.
53−To keep these files as small as possible we usually use the `--sparse`
54−option in `tar`. With a pier `your-urbit/`, something like this should work:
55−
56−```sh
57−tar -Scvzf ~/your-urbit.tar.gz ~/your-urbit/
58−scp your-old-server:~/your-urbit.tar.gz your-new-server:~
59−```
60−
61−Then to unzip it, on your other Unix server, run:
62−
63−```sh
64−tar xfvz your-urbit.tar.gz
65−```
66−
67−Delete the tar file, and, after installing Urbit on your new server, start your urbit back up with:
68−
69−```sh
70−./urbit your-urbit
71−```
72−
73−## Hardware requirements
74−
75−Urbit can run on any x86 computer (unofficial, unsupported [ARM binaries](https://botter-nidnul.github.io/AArch64_Urbit_Static_Binaries.html) are also available), ideally with at least 2GB of RAM.
76−
77−Urbit maintains a persistent log of the history of your ship. Eventually this log will be automatically trimmed when necessary, but for now it only increases in size. An actively used planet will consume 5-50 GB of storage space per year of operation.
78−
79−## Console
80−
81−Your Urbit terminal is separated into two parts: the prompt (the bottom line) and the record (everything above that). The record is shared; all the output from all the apps in your command set appears in it. The prompt is multiplexed.
82−
83−In the CLI, Urbit apps can process your input before you hit return. To see this in action try entering `)` as the first character at the Dojo prompt. Since there is no Dojo command or Hoon expression that starts with ')', the Dojo rejects it.
84−
85−`Ctrl-x` - Switches the prompt between running console apps
86−
87−`Ctrl-c` - Crash current event. Processed at the Unix layer and prints a stack
88−trace.
89−
90−`Ctrl-d` - From Chat or Dojo, stops your Urbit process.
91−
92−`Ctrl-z` - Stops the Urbit process from _anywhere_.
93−
94−`↑` / `↓` - History navigation
95−
96−The following emacs-style key bindings are available:
97−
98−```
99−Ctrl-a Cursor to beginning of the line (Home)
100−Ctrl-b Cursor one character backward (left-arrow)
101−Ctrl-e Cursor to the end of the line (End)
102−Ctrl-f Cursor one character forward (right-arrow)
103−Ctrl-g Beep; cancel reverse-search
104−Ctrl-k Kill to end of line
105−Ctrl-l Clear the screen
106−Ctrl-n Next line in history (down-arrow)
107−Ctrl-p Previous line in history (up-arrow)
108−Ctrl-r Reverse-search
109−Ctrl-t Transpose characters
110−Ctrl-u Kill to beginning of line
111−Ctrl-y Yank from kill buffer
112−```
113−
114−## Updates
115−
116−By default, your `%base` [desk](/docs/glossary/desk) (which contains the [Arvo](/docs/glossary/arvo) kernel and core apps) receives updates ([OTAs](/docs/glossary/ota-updates)) from your sponsor. Other desks will receive updates from their respective publishers. To check the OTA source for each desk, run `+vats` in the [dojo](/docs/glossary/dojo). It will print out details for each desk - the `source` field shows which ship the desk gets updates from and the `updates` field shows `tracking` if automatic updates are enabled.
117−
118−If for some reason updates are not enabled or the current source is not online or up to date, you can enable updates or change source with the `|install` command.
119−
120−`|install (sein:title our now our) %landscape` will enable updates to the `%landscape` desk from your sponsor. `|install ~some-ship %landscape` will enable updates to the landscape desk from whatever ship is specified in place of `~some-ship`. For third party apps, make sure to correctly specify the publisher's ship. Each desk's updates are managed separately, so you'll need to run this for each desk separately. For the `%base` desk specifically, you sync from `%kids` rather than `%base` on the remote ship, so must specify it like `|install (sein:title our now our) %kids, =local %base`.
121−
122−#### Additional OTA Troubleshooting
123−
124−Please check the Support Wiki for additional OTA troubleshooting, such as:
125−[OTA 1.0.71 failed](https://github.com/urbit/support/wiki/OTA-1.0.71-failed),
126−[Missing OTA](https://github.com/urbit/support/wiki/Missing-OTA),
127−[Stuck flow preventing planets from receiving
128−OTAs](https://github.com/urbit/support/wiki/Stuck-flow-preventing-planets-from-receiving-OTAs),
129−and [No content shows in Links page after OTA](https://github.com/urbit/support/wiki/No-content-shows-in-Links-page-after-OTA).
130−
131−## Web interface
132−
133−On startup, urbit tries to bind to `localhost:80`. If you're already running something on port `80`, or your host OS will not allow urbit to bind port `80`, urbit will try `8080`, then `8081`, `8082`, and so on. For planets only, we also provide subdomains of `arvo.network` for free. Any planet `~your-urbit` is also at `your-urbit.arvo.network`, but only after you [set up DNS](#dns-setup).
134−
135−Once running, you can sign into your ship’s web interface from `http://localhost` (if bound to port `80`), `http://localhost:8080` (if bound to port `8080`), or `https://your-urbit.arvo.network` if you've set up DNS.
136−
137−## Moons {% #moons %}
138−
139−Planets can spawn moons, which are conceptually meant for connected devices: phones, smart TVs, digital thermostats. The basic idea is that your planet runs permanently in a data center somewhere, while moons run on all your devices. Each planet can issue ~4 billion (`2^32`) moons.
140−
141−To generate a random moon from your planet, run:
142−
143−```
144−~sampel-palnet:dojo> |moon
145−moon: ~faswep-navred-sampel-palnet
146−0w5cT5t.wCO6i.~e1xg.Oz0qb.QNO6I.3Kt2T.h9M9F.U3vU~.X3Qu0.gtb19.IYTkY.80kWZ.SIEUE.DXa8i.TiDof.o3-1C.RHLKS.k81M0.ecz5o.ic0Bg.600g1
147−```
148−
149−The `moon:` part is the name of the moon, in this case `~faswep-navred-sampel-palnet`. The next line starting with `0w5...` is the private key necessary to boot it.
150−
151−You can just copy the key (which in this case would be the `0w5[...]600g1` part) to the clipboard, or save it in a `.key` file, for example `faswep-navred-sampel-palnet.key`.
152−
153−You can use the key and moon name in the same installation flow from the [Command line installation](/getting-started/cli) guide, following the same scheme as for booting a planet. That scheme is:
154−
155−```sh
156−$ ./urbit -w <moon-name> -G <key> -c <pier-name>
157−```
158−
159−or
160−
161−```sh
162−$ ./urbit -w <moon-name> -k <key-file> -c <pier-name>
163−```
164−
165−Note the `<moon-name>` excludes the leading `~`. The `-c <piername>` argument is not required, but it is recommended; otherwise, the resulting directory is a rather unwieldy moon name. Moons are automatically synced to their parent `%kids` desk, and can control applications on their parent planet using `|link`.
166−
167−To factory reset a moon -- that is, to reset its presence on the network so that it's treated as a freshly spawned ship by others -- run from the parent ship:
168−
169−```
170−|moon-breach ~faswep-navred-sampel-palnet
171−```
172−
173−To cycle the keys of a moon without a factory reset, run:
174−
175−```
176−|moon-cycle-keys ~faswep-navred-sampel-palnet
177−```
178−
179−You can then run `|rekey` on the moon with the key given by the above command as the argument.
180−
181−### Maintaining Moons Through A Breach {% #restoring-moons %}
182−
183−Moons are [always subordinate to the ship that issued them](/docs/glossary/moon). Their PKI is sent around the network by their parent planet/star/galaxy. As such, if the sponsor planet/star/galaxy of a moon breaches, other urbits on the network who were not aware of the moon prior to the breach (knew its PKI information) will not be able to reach the old moon. Moons can, however, be preserved over the breach of their sponsor and re-added to `jael`. The following guide assumes you are on `[life=n rift=1]` where `n` can be any life #. If you've previously breached your moon and want to preserve it, you'll need to modify the instructions to include setting the appropriate rift using `|moon-breach` from `hood`.
184−
185−To add an existing moon to `jael` on a breached planet, you'll need the following:
186−
187−- Your moon's current life # `+keys ~sampel-monler-dozzod-dozzod` (run on the moon) _and_;
188−- Your moon's sponsor's understanding of your moon's current life (same command, run on the sponsor).
189−- Your moon's existing keyfile or key-string (`@uw`) _or_ the result of `pub:ex:(nol:nu:crub:crypto .^(@uv %j /=vein=/<life # of moon, per moon, here>))` _and_;
190−- Your moon's sponsor's understanding of your moon's existing public key `pass:.^([@ud pass=@uw ~] %j /=deed=/~sampel-monler-dozzod-dozzod/<life # of moon per sponsor here>)`.
191−
192−If you only have they keyfile or key-string from your moon's last boot, you'll need to derive the `pass` value from that using
193−
194−```
195−pub:ex:(nol:nu:crub:crypto key:(seed:jael:l (cue <your @uw keyfile contents or key-string contents here>)))
196−```
197−
198−This should produce a long `@ud`.
199−
200−Once you have all of the requisite elements, you can perform the following on the moon's sponsor:
201−
202−```
203−|moon-cycle-keys ~sampel-monler-dozzod-dozzod, =life <life # of moon, per moon, here>, =public-key <result of the existing keyfile conversion to pass or the result of scrying jael on your moon, found above>
204−```
205−
206−Eventually, the PKI will populate through the network w/ the correct life #, reconnecting your previously orphaned moon. You can speed this up by `|hi ~zod` and `|hi ~sampel-monler-dozzod-dozzod`-ing from the moon and sponsor, respectively (replace with the appropriate ship names).
207−
208−## Escaping A Sponsor {% #escape %}
209−
210−To use the network as a planet or star, you must be sponsored by an active star
211−or galaxy, respectively. If your sponsor isn't suiting your needs, you can
212−escape to a different one. This can be done with
213−[Bridge](https://bridge.urbit.org/) following the instructions
214−[here](/using/id/using-bridge#escaping-your-sponsor).
215−
216−## Life and rift number
217−
218−You can check your ship's _life_ and _rift_ number by running `+keys our` in
219−dojo. You can inspect another ship's life and rift number by running `+keys ~sampel-palnet`. For information on what life and rift are, see [Life and Rift](/docs/azimuth/life-and-rift).
220−
221−## DNS setup {% #dns-setup %}
222−
223−We have a system that lets you request a domain name for your ship in the form of `ship.arvo.network`, where `ship` is your ship's name minus the `~`. This allows users to access their ships remotely using Landscape, our graphical web interface. Stars and planets follow the same DNS request process, and galaxies have their own requirements. Moons and comets are not supported.
224−
225−For a planet or star's DNS request to be made and fulfilled, they must be hosting their ship someplace with a public IP address, and its HTTP server must be listening on port 80.
226−
227−To initiate a DNS request, run the following thread in your ship's dojo, passing the IP address as an argument with .0.0.0.0 (`@if`) syntax. For example:
228−
229−```
230−-dns-address [%if .1.2.3.4]
231−```
232−
233−The `%dns-address` thread, running locally, will make an HTTP request to that IP address on port 80 to confirm that it is itself available at that IP and port. If that fails, you'll receive a `couldn't access ship on port 80` message in the terminal; this request will retry a few times. If the self-check is successful, the request is relayed to `~zod`, and you'll receive a message saying, `request for DNS sent to ~zod`. Once `~zod` has acknowledged receipt of the request, the `%dns-address` thread will print a terminal message saying `awaiting response from ~zod`.
234−
235−The request will make take a little time to be fulfilled, but eventually the `ship.arvo.network` DNS record will be set to the given IP address. Once that's set up, `~zod` will be notified and `~zod` will, in turn, notify your ship. That ship will now try to verify that it can reach itself on `ship.arvo.network` over port 80. If it can't, it'll send a message saying, `unable to access via ship.arvo.network`. If it can, it will configure itself with that domain and say `confirmed access via ship.arvo.network`.
236−
237−Great! You're set up now. Try accessing your `ship.arvo.network` in your browser to use Landscape; we recommend Chrome or Brave.
238−
239−### Configuring SSL
240−
241−To enable SSL on your ship, you must poke the `%acme` agent with the domain encoded in a path and it will request a certificate. The path format is `/tld/your_domain/your_subdomain`, so if your domain is `sampel-palnet.arvo.network`, you'd use it like so:
242−
243−```
244−:acme &path /network/arvo/sampel-palnet
245−```
246−
247−### Galaxies
248−
249−Galaxies are already required to have separate DNS entry at galaxy.urbit.org. There's no automated process for getting that binding, so if you're a galaxy-holder, get in touch with us at support@urbit.org.
250−
251−There is a command for galaxies that will try to re-use their already-necessary Ames DNS entry for HTTPS:
252−
253−```
254−> -dns-auto
255−```
256−
257−This will make HTTP-requests to self-check availability over `galaxy.$AMES-DOMAIN` (currently galaxy.urbit.org), where `galaxy` is the galaxy's name minus the `~`.
258−
259−Otherwise, `-dns-auto` works the same as `-dns-address` does with stars and planets: if it's available or unavailable, terminal messages, and so on.
260−
261−### Ports
262−
263−The built-in logic for listening on port 80 is to try to bind to port 80; if it cannot, it tries 8080, then increments until it can bind a port. Port 80 is available to unprivileged process on recent versions of macOS. Otherwise, the process needs to either be run as root, or be given special permission (`sudo setcap 'cap_net_bind_service=+ep' /path/to/urbit/binary` on Linux).
content/using/os/dojo-tools.mddeleted−417
@@ -1,417 +0,0 @@
1−+++
2−title = "Dojo Tools"
3−weight = 9
4−template = "doc.html"
5−+++
6−
7−## Desks, apps and updates
8−
9−### `+agents`
10−
11−Print out the status of Gall agents on a desk.
12−
13−Agents may either be `archived` or `running`. Nuked or unstarted agents which
14−are not on the manifest are omitted.
15−
16−#### Arguments
17−
18−```
19−desk
20−```
21−
22−#### Example
23−
24−```
25−> +agents %garden
26−status: running %hark-system-hook
27−status: running %treaty
28−status: running %docket
29−status: running %settings-store
30−status: running %hark-store
31−```
32−
33−---
34−
35−### `|bump`
36−
37−Try to apply a kernel update.
38−
39−If `%zuse`'s kelvin version has decreased, try to apply the update. If any desks
40−are incompatible with the new `%zuse` version, the update will fail. The update
41−can be forced with the optional `force` argument, in which case incompatible
42−desks will be `|suspend`ed. The `set` of desks to omit (and therefore suspend)
43−can also be explicitly specified with the optional `except` argument.
44−
45−#### Arguments
46−
47−All optional:
48−
49−```
50−, =force ?, =except (set desk)
51−```
52−
53−#### Examples
54−
55−Try to apply update, failing if blocked by any desks:
56−
57−```
58−|bump
59−```
60−
61−Force the update, suspending incompatible desks:
62−
63−```
64−|bump, =force &
65−```
66−
67−Apply kernel update, omitting and suspending the specified desks:
68−
69−```
70−|bump, =except (silt ~[%bitcoin %webterm])
71−```
72−
73−---
74−
75−### `|install`
76−
77−Install a desk, starting its agents and listening for updates.
78−
79−If it's a remote desk we don't already have, it will be fetched. The agents
80−started will be those specified in the `desk.bill` manifest. If it has a docket
81−file, its tile will be added to the homescreen and its glob fetched. If we
82−already have the desk, the source for updates will be switched to the ship
83−specified.
84−
85−It takes a `ship` and `desk` as its mandatory arguments. The desk may be
86−installed with a different name specified in the optional `local` argument.
87−
88−#### Arguments
89−
90−```
91−ship desk, =local desk
92−```
93−
94−#### Examples
95−
96−```
97−|install ~zod %bitcoin
98−```
99−
100−```
101−|install our %webterm
102−```
103−
104−```
105−|install ~zod %bitcoin, =local %foo
106−```
107−
108−---
109−
110−### `|nuke`
111−
112−Shut down an agent and permanently delete its state.
113−
114−The default behaviour is to shut down the specified Gall agent and discard its
115−state, similar to the now-deprecated `|fade` generator. **Note this irreversibly
116−wipes the app's state**. Additionally, if the optional `desk` argument is `%.y`,
117−it takes a desk rather than an agent name and nukes every agent on the specified
118−desk.
119−
120−#### Arguments
121−
122−```
123−@tas, =desk ?
124−```
125−
126−#### Examples
127−
128−Nuke a single agent:
129−
130−```
131−|nuke %btc-wallet
132−```
133−
134−Nuke every agent on a desk:
135−
136−```
137−|nuke %bitcoin, =desk &
138−```
139−
140−---
141−
142−### `|ota`
143−
144−Set the source of updates for the `%base` desk (the kernel and core apps) to the
145−specified ship. Automatic updates will be enabled, and any new updates available
146−will be fetched and installed.
147−
148−#### Arguments
149−
150−```
151−ship
152−```
153−
154−#### Examples
155−
156−`|ota ~marzod` is equivalent to `|install ~marzod %kids, =local %base`.
157−
158−---
159−
160−### `|pause`
161−
162−Pause updates on a desk.
163−
164−The specified desk will stop tracking updates from its upstream source.
165−
166−#### Arguments
167−
168−```
169−desk
170−```
171−
172−#### Examples
173−
174−```
175−|pause %bitcoin
176−```
177−
178−---
179−
180−### `|rein`
181−
182−Adjust the state of a desk.
183−
184−This allows you to stop and start agents on a desk, regardless of whether
185−they're on the manifest. Stopped agents have their states archived. It can also
186−suspend and revive the whole desk with the optional `liv` argument.
187−
188−#### Arguments
189−
190−```
191−desk (list [? dude:gall]), =liv ?
192−```
193−
194−#### Examples
195−
196−Start an agent:
197−
198−```
199−|rein %bitcoin [& %btc-provider]
200−```
201−
202−Stop an agent, archiving its state:
203−
204−```
205−|rein %bitcoin [| %btc-wallet]
206−```
207−
208−Stop one agent, start another:
209−
210−```
211−|rein %bitcoin [| %btc-wallet] [& %btc-provider]
212−```
213−
214−Suspend a desk:
215−
216−```
217−|rein %bitcoin, =liv |
218−```
219−
220−Revive a desk:
221−
222−```
223−|rein %bitcoin
224−```
225−
226−---
227−
228−### `|resume`
229−
230−Resume updates on a desk.
231−
232−Start tracking previously [`|pause`](#pause)d updates from a desk's upstream
233−source.
234−
235−#### Arguments
236−
237−```
238−desk
239−```
240−
241−#### Examples
242−
243−```
244−|resume %bitcoin
245−```
246−
247−---
248−
249−### `|revive`
250−
251−Revive all agents on a desk, migrating archived states.
252−
253−All agents specified in `desk.bill` which are suspended will be restarted. If
254−updates to the agents have occurred since their states were archived, they'll be
255−migrated with the state transition functions in the agent. This generator does
256−the same thing as selecting "Resume App" from the app tile's hamburger menu.
257−
258−#### Arguments
259−
260−```
261−desk
262−```
263−
264−#### Examples
265−
266−```
267−|revive %bitcoin
268−```
269−
270−---
271−
272−### `|suspend`
273−
274−Shut down all agents on a desk, archiving their states.
275−
276−The tile in the homescreen (if it has one) will turn gray and say "Suspended" in
277−the top-left corner. This generator does the same thing as selecting "Suspend"
278−from an app tile's hamburger menu.
279−
280−#### Arguments
281−
282−```
283−desk
284−```
285−
286−#### Examples
287−
288−```
289−|suspend %bitcoin
290−```
291−
292−---
293−
294−### `|uninstall`
295−
296−Uninstall a desk, suspending its agents and ignoring updates.
297−
298−The specified desk will be retained in Clay, but its agents will all be stopped
299−and have their states archived like [`|suspend`](#suspend). This is the reverse
300−of [`|install`](#install).
301−
302−Note that this will not remove the tile or glob from the homescreen, so if the
303−desk has a tile it should be uninstalled with the "Remove App" button in the
304−tile's hamburger menu.
305−
306−#### Arguments
307−
308−```
309−desk
310−```
311−
312−#### Examples
313−
314−```
315−|uninstall %bitcoin
316−```
317−
318−---
319−
320−### `+vat`
321−
322−Print out the status of a single installed desk.
323−
324−Desks in Clay which aren't installed will be omitted. See the related
325−[`+vats`](#vats) command for details of the individual status fields.
326−
327−#### Arguments
328−
329−`desk`
330−
331−#### Examples
332−
333−```
334−> +vat %base
335−%base
336− /sys/kelvin: [%zuse 418]
337− base hash: ~
338− %cz hash: 0v2.r1lbp.i9jr2.hosbi.rvg16.pqe7u.i3hnp.j7k27.9jsgv.8k7rp.oi98q
339− app status: running
340− force on: ~
341− force off: ~
342− publishing ship: ~
343− updates: local
344− source ship: ~
345− source desk: ~
346− source aeon: ~
347− pending updates: ~
348−::
349−```
350−
351−---
352−
353−### `+vats`
354−
355−Print out the status of each installed desk.
356−
357−Desks in Clay which aren't installed will be omitted. Also see the related
358−[`+vat`](#vat) command, which prints the status of a single desk rather than all
359−desks.
360−
361−Fields:
362−
363−- `/sys/kelvin` - The version of `%zuse` the desk is compatible with.
364−- `base hash` - The merge base (common ancestor) between the desk and its upstream source.
365−- `%cz hash` - The hash of the desk.
366−- `app status` - May be `suspended` or `running`.
367−- `force on` - The set of agents on the desk which have been manually started
368− despite not being on the `desk.bill` manifest.
369−- `force off` - The set of agents on the desk which have been manually stopped
370− despite being on the `desk.bill` manifest.
371−- `publishing ship` - The original publisher if the source ship is republishing
372− the desk.
373−- `updates` - May be `local`, `tracking` or `paused`. Local means it will
374− receive updates via commits on the local ship. Tracking means it will receive
375− updates from the `source ship`. Paused means it will not receive updates.
376−- `source desk` - The desk on the `source ship`.
377−- `source aeon` - The revision number of the desk on the `source ship`.
378−- `pending updates` - Updates waiting to be applied due to incompatibility.
379−
380−#### Arguments
381−
382−None.
383−
384−#### Examples
385−
386−```
387−> +vats
388−%base
389− /sys/kelvin: [%zuse 418]
390− base hash: ~
391− %cz hash: 0v6.2nqmu.oqm24.ighl6.n0gp9.s8res.feql1.dl8ap.isli3.jk0hu.acrd2
392− app status: running
393− force on: ~
394− force off: ~
395− publishing ship: ~
396− updates: tracking
397− source ship: ~zod
398− source desk: %base
399− source aeon: 3
400− pending updates: ~
401−::
402−%garden
403− /sys/kelvin: [%zuse 418]
404− base hash: ~
405− %cz hash: 0v1e.2h7hs.elq3g.1sdt7.qfga6.ganga.7p95j.aog44.8p5fe.kpr6v.7ai82
406− app status: running
407− force on: ~
408− force off: ~
409− publishing ship: ~
410− updates: tracking
411− source ship: ~zod
412− source desk: %garden
413− source aeon: 3
414− pending updates: ~
415−```
416−
417−---
content/using/os/filesystem.mddeleted−379
@@ -1,379 +0,0 @@
1−+++
2−title = "Filesystem"
3−template = "doc.html"
4−weight = 3
5−+++
6−
7−Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
8−referentially transparent namespace. An easy way to think about it is like typed
9−`git`.
10−
11−The most common way to use Clay is to mount a Clay node in a Unix directory. The
12−mounted directory is always at the root of your pier directory.
13−
14−For more information on Clay, see the [Overview](/docs/arvo/clay/clay), and
15−additional usage information at [Using Clay](/docs/arvo/clay/using).
16−
17−### Quickstart
18−
19−This quick-start guide will walk you through some common commands. Follow along
20−using your Dojo. When you get a `>=` message after entering a command, this means
21−that the command was successful.
22−
23−A [`desk`](/docs/glossary/desk) is something like an independently
24−revision-controlled branch of your urbit's file-system. Your urbit's system
25−files live in the `%base` desk.
26−
27−It's important to note that whenever you want to sync changes from your Unix
28−directory to your ship, you must use the `|commit %desk` command, where `%desk`
29−is the `desk` that you'd like to sync to.
30−
31−When developing it's a good idea to use a separate `desk`. Create a `%sandbox`
32−`desk` based on the `%base` `desk` (`our` produces your ship name):
33−
34−```
35−~zod:dojo> |merge %sandbox our %base
36−```
37−
38−Most of the time we want to use Clay from Unix. Mount the entire contents of
39−your `%sandbox` desk to Unix:
40−
41−```
42−~zod:dojo> |mount %sandbox
43−```
44−
45−To explore the filesystem from inside Urbit `+ls` and `+cat` are useful. `+ls`
46−displays files in the current directory, and `+cat` displays the contents of
47−a file.
48−
49−We use `%` to mean "current directory." The result of the command below
50−is just like using `ls` in a Unix terminal.
51−
52−```
53−~zod:dojo> +ls %
54−```
55−
56−Notice how `+cat %` does the same thing. That's because everything in Clay,
57−including directories, is a file.
58−
59−Sync from your friend `~bus`'s `%experiment` desk to your `%sandbox` desk:
60−
61−```
62−~zod:dojo> |sync %sandbox ~bus %experiment
63−```
64−
65−If and when your sync is successful, you will receive a message:
66−
67−```
68−kiln: sync succeeded from %experiment on ~bus to %sandbox
69−```
70−
71−The ship that you sync from will get their own message indicating that you're
72−both connected as peers:
73−
74−```
75−; ~zod is your neighbor.
76−```
77−
78−---
79−
80−### Clay manual
81−
82−The following constitutes an explanation of handy commands that most Urbit
83−pilots will want to know at some point. Reading this section will get you to the
84−point that you can navigate the file system, sync with Unix, merge your desk,
85−and other basic tasks familiar to novice users of the Unix terminal.
86−
87−#### Paths
88−
89−A path in Clay is a list of URL-safe text, restricted to the characters `[a z]`,`[0 9]`, `.`, `-`, `_`, and `~`. This path is a list of strings each
90−prepended by `/`. In other words, paths are expressed as `/foo/bar/baz`. File
91−extensions are separated from file names with `/`, not `.`. Extensions are
92−syntactically identical to subdirectories, except that they must terminate the
93−path.
94−
95−Paths begin with three strings indicating the ship, desk, and revision, and
96−might look like `/~dozbud-namsep/base/11`.
97−
98−The first component is `ship`, which is, as you might guess, the name of
99−an Urbit ship. The second component is `desk`, which is a workspace meant to
100−contain other directories; the default `desk` is `%base`. The third component is
101−the revision, which represents version information in various ways: date and time;
102−a version sequence, which is a value incremented by one whenever a file on the
103−given `desk` is modified; or an arbitrary plaintext label.
104−
105−You can find what your current ship, desk, and revision is at any given moment by
106−typing `%` in the Dojo and looking at the first three results. This will display
107−as a cell rather than a path, like
108−
109−```
110−[~.~zod ~.base ~.~2021.3.19..16.11.20..0c60]
111−```
112−
113−Here we see that the revision consists of the date, time, and a short hash.
114−
115−We use this format because, unlike the current internet, the Urbit network uses a
116−global namespace. That means that a file named `example.hoon` in the `/gen`
117−directory on the `%base` desk of your ship `~lodleb-ritrul` would have a
118−universal address to anyone else on the network:
119−`/~lodleb-ritrul/base/186/gen/example/hoon`. That, of
120−course, doesn't mean that everyone on the network has privileges to access that
121−path. But given the revision-controlled and immutable nature of Urbit, this
122−means that if the file requested is available, it will always be the same. This
123−means that if an Urbit is serving a webpage, that exact version will always be
124−retrievable (assuming you have access to it).
125−
126−#### Relative paths
127−
128−The `%` command, which we gestured at in the above section, represents the
129−**relative path**, which is the path where you are currently working.
130−
131−`%`s can be stacked to indicate one level further up in the hierarchy for each
132−additional `%`. Try the following command:
133−
134−```
135−~zod:dojo> %%%
136−```
137−
138−You'll notice that it only has your ship name and the empty list. The
139−two additional `%`s abandoned the revision and the `desk` information by moving
140−up twice the hierarchy.
141−
142−There are no local relative paths. `/foo/bar` must be written as
143−`%/foo/bar`.
144−
145−#### Substitution
146−
147−You don't need to write out the explicit path every time you want to reference
148−somewhere outside of your working directory. You can substitute `=` for the
149−segments of a path.
150−
151−Recall that a full address in the the Urbit namespace is of the form
152−`/ship/desk/case/path`. To switch to the `%sandbox` `desk`, you would enter
153−
154−```
155−~sampel-palnet:dojo> =dir /=sandbox=
156−```
157−
158−`=dir` is used to change the working directory - we will see more on it
159−[below](#changing-directories.)
160−
161−The above command uses substitution to use your current `ship` and
162−revision; only the `desk` argument, which is located between the other two, is
163−given something new. Without substitution, you would need to write:
164−
165−```
166−~sampel-palnet:dojo> =dir /~sampel-palnet/sandbox/85
167−```
168−
169−Substitutions work the same way in the `ship/desk/case` and
170−paths. For example, if you are in the `/gen` directory, you can reference a file
171−in the `/app` directory like below. (`+cat` displays the contents of a file).
172−
173−```
174−~sampel-palnet:dojo> =dir %/gen
175−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen> +cat /===/app/curl/hoon
176−```
177−
178−Note what was substituted out, and note that we don't need to separate `=` with
179−`/`.
180−
181−If we changed our working directory to something called `/gen/gmail`, we could
182−access a file called
183−
184−```
185−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen> =dir %/gmail
186−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen/gmail> +cat /===/app/=/split/hoon
187−```
188−
189−Because both paths share a directory named `/gmail` at the same position in the
190−address hierarchy – which, if you recall, is just a `list` – the above command
191−works!
192−
193−We can do the same thing between desks. If `%sandbox` has been merged with
194−`%base`, the following command will produce the same results as the above
195−command.
196−
197−```
198−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen/gmail> +cat /=sandbox=/app/=/split/hoon
199−```
200−
201−Most commonly this is used to avoid having to know the current revision
202−number in the `dojo`: `/~lodleb-ritrul/base/~2021.3.19..16.11.20..0c60/gen/example/hoon`
203−
204−#### Changing directories
205−
206−Change the working directory with `=dir`. It's our equivalent of the Unix `cd`.
207−
208−For example, the syntax to navigate to `/base/gen/ask` is:
209−
210−```
211−~sampel-palnet:dojo> =dir /=base=/gen/ask
212−```
213−
214−This command will turn your prompt into something like this:
215−
216−```
217−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen/ask>
218−```
219−
220−Using `=dir` without anything else uses the null path, which returns you to
221−your base desk.
222−
223−```
224−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen/ask> =dir
225−```
226−
227−Your dojo prompt will turn back into `~sampel-palnet:dojo>`.
228−
229−To go up levels in the path hierarchy, recall the relative path expression
230−`%`. Stacking them represents another level higher in the hierarchy than
231−the current working directory for each `%` beyond the initial. The command below
232−brings you one level up:
233−
234−```
235−~sampel-palnet:dojo> =dir %/gen
236−~sampel-palnet:dojo/=/=/~2021.3.19..16.11.20..0c60/gen> =dir %%
237−```
238−
239−### Revision-control
240−
241−#### Mount
242−
243−Syntax: `|mount %/clay/path %mount-point`
244−
245−Mount the `/clay/path` at the Unix mount point `mount-point` with your pier as
246−root directory.
247−
248−**Examples:**
249−
250−```
251−|mount %/gen %generators
252−```
253−
254−Mounts `%/gen` to `/generators` inside your pier directory.
255−
256−#### Unmount
257−
258−```
259−|unmount %mount-point
260−```
261−
262−Unmount the the mount point from Unix.
263−
264−**Examples:**
265−
266−```
267−|unmount %foo
268−```
269−
270−Unmounts the Unix path `/foo`.
271−
272−#### Merge
273−
274−```
275−|merge %target-desk ~source-ship %source-desk
276−```
277−
278−Merges a source `desk` into a target `desk`.
279−
280−This can optionally include a [merge
281−strategy](/docs/arvo/clay/using#strategies):
282−
283−```
284−|merge %target-desk ~source-ship %source-desk, =gem %strategy
285−```
286−
287−You may also merge a Clay path on your own ship to a `desk`, along with an
288−optional strategy.
289−
290−```
291−|merge %target-get %/clay/path, =gem %strategy
292−```
293−
294−**Examples:**
295−
296−```
297−|merge %examples ~wacbex-ribmex %examples
298−```
299−
300−Merge the `%examples` `desk` from `~waxbex-ribmex`
301−
302−```
303−|merge %work /=base=, =gem %fine
304−```
305−
306−Merge `/=base=` into `%work` using merge strategy `%fine`.
307−
308−#### Sync
309−
310−```
311−|sync %target-desk ~source-ship %target-desk
312−```
313−
314−Subscribe to continuous updates from remote `desk` on local `desk`.
315−
316−**Examples:**
317−
318−```
319−|sync %foo ~dozbud %kids
320−```
321−
322−#### Unsync
323−
324−```
325−|unsync %target-desk ~source-ship %source-desk
326−```
327−
328−Unsubscribe from updates from remote `desk` on local `desk`. Arguments must
329−match original `|sync` command.
330−
331−Example:
332−
333−```
334−|unsync %foo ~dozbud %kids
335−```
336−
337−### Manipulation
338−
339−#### `+cat`
340−
341−Syntax: `+cat path [path ...]`
342−
343−Similar to Unix `cat`. `+cat` takes one or more `path`s, and prints their
344−contents. If that `path` is a file, the contents of the file is printed. If the
345−`path` terminates in a directory, the list of names at that path is produced.
346−
347−#### `+ls`
348−
349−Syntax: `+ls path`
350−
351−Similar to Unix `ls`. `+ls` takes a single `path`.
352−
353−Produces a list of names at the `path`.
354−
355−```
356−~sampel-palnet:dojo> +cat %/our/base/gen/curl/hoon
357−```
358−
359−#### `|rm`
360−
361−Syntax: `|rm path`
362−
363−Remove the data at `path`. `Path` must be a path to the actual node, not a
364−'directory'.
365−
366−#### `|cp`
367−
368−Syntax: `|cp to from`
369−
370−Copy the file at `from` into the path `to`.
371−
372−#### `|mv`
373−
374−Syntax: `|mv to from`
375−
376−Move the file at `from` into the path `to`.
377−
378−In Clay, `|mv` is just a shorthand for `|cp` then `|rm`. The `|rm`
379−doesn't happen unless the `|cp` succeeds.
content/using/os/s3.mddeleted−73
@@ -1,73 +0,0 @@
1−+++
2−title = "Configuring S3 Storage"
3−template = "doc.html"
4−weight = 2
5−+++
6−
7−Amazon S3, which stands for Amazon Simple Storage Service, is a technology that was introduced by Amazon Web Services for cloud storage that has since been extended more broadly into a [standard programming interface](https://en.wikipedia.org/wiki/Amazon_S3#S3_API_and_competing_services).
8−
9−Our S3 support lets you store credentials for your S3 object storage buckets on your Urbit ship; once you have done so, you will get additional functionality for uploading your own media within Chat and Groups (for avatars).
10−
11−To enable S3 support on your ship you'll need to first set up a bucket, and then add its credentials to Landscape using _either_ Landscape or the Dojo.
12−
13−### Bucket Setup
14−
15−We recommend DigitalOcean's Spaces, but any s3 provider that supports signature v2 should work.
16−
17−The bucket has to be publicly readable, allow CORS from `*` origins, allow GET and PUT methods, and allow `*` headers. Specific instructions for DigitalOcean are below.
18−
19−In DigitalOcean you'll want to log into your existing account or create a new one if you don't already have one. You can use DigitalOcean for your S3 host even if your Urbit planet is hosted elsewhere.
20−
21−Click the green Create button at the top of the project page, then click Spaces.
22−
23−Make the following selections:
24−- Select the datacenter region closest to you
25−- Restrict File Listing (leave this as the default)
26−- Choose a unique name (this is your bucket name)
27−- Select a project (or leave the default if you don't have multiple)
28−
29−Once you've created your space you'll want to navigate to its settings in DigitalOcean.
30−
31−Then you'll want to set the CORS Configurations as specified above, this should look like the following image (your endpoint will vary depending upon region).
32−![digital-ocean-settings](https://media.urbit.org/site/using/os/digital-ocean-settings.png)
33−![digital-ocean-cors-settings](https://media.urbit.org/site/using/os/digital-ocean-cors-settings.png)
34−Finally you'll need to create an API key so you can configure your ship to have access to your newly created s3 bucket.
35−
36−Click API in the bottom left of the DigitalOcean navigation bar on the left side of the webpage.
37−
38−Generate a new token, you'll need to copy the access key and secret. Don't navigate away from this page as the secret will only be shown when it is initially created.
39−
40−Now that we have your S3 ready, we can update the information on your ship.
41−
42−### Add your credentials: Landscape
43−
44−Navigate to your `https://<your-ship-url>/~settings#s3`, or click your sigil in the upper-right corner of the window and navigate to System Preferences -> Remote Storage.
45−
46−The Endpoint depends on the region you selected, but can be found in the settings for your space shown in the image above (in that image we're using the San Francisco region).
47−
48−The Access Key ID and Secret Access Key is the API key we generated. Put each one in the correct field and save.
49−
50−The S3 Bucket is the name of your digital ocean space. Once you've added that you'll also need to click "Make Active" from the drop down menu.
51−
52−Once all of that's complete you should be good to go! Test that things are working by attempting to attach or send and image via chat. It should work. You can manage your images by logging into Digital Ocean and looking at the folder in your newly created space. You can use your same space for multiple urbit IDs by creating new API keys. Each ID will create a new directory within that space using its name by default.
53−
54−To manage your S3 inventory on your urbit, install Silo: web+urbitgraph://~dister-nocsyx-lassul/silo
55−
56−### Add your credentials: Dojo
57−
58−Alternatively to the instructions above, you can run these dojo commands instead of updating system preferences. If you followed the instructions above you should *not* do this.
59−
60−```
61−:s3-store|set-endpoint 'endpoint.mys3provider.com'
62−:: AWS endpoint example: s3-us-west-2.amazonaws.com
63−:: Digital Ocean endpoint example: sfo2.digitaloceanspaces.com
64−:s3-store|set-access-key-id 'MYACCESSKEYID'
65−:s3-store|set-secret-access-key 'MYSECRETACCESSKEY'
66−:s3-store|set-current-bucket 'yourbucketname'
67−```
68−
69−Done! If you need to peek at s3-store’s state, you can always run :s3-store +dbug (inside Dojo, not web Dojo, unfortunately). You’ll see the additional functionality appear in Groups and Chat.
70−
71−### Hosting your own S3 solution (Advanced)
72−
73−If you'd prefer to host your own S3-compatible storage solution locally, have a look at [Self-hosting S3 Storage with MinIO](/using/running/minio).
content/using/os/shell.mddeleted−343
@@ -1,343 +0,0 @@
1−+++
2−title = "Shell"
3−template = "doc.html"
4−weight = 2
5−+++
6−
7−The Dojo is our shell; it processes system commands and returns output. It's a
8−good place to quickly experiment with Urbit. On the surface the Dojo is just a
9−Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
10−data in Urbit.
11−
12−### Quickstart
13−
14−You can use the Dojo to run arbitrary Hoon code, as well as non-Hoon system
15−commands.
16−
17−#### Math
18−
19−Evaluate a Hoon expression (whitespace matters):
20−
21−```
22−~your-urbit:dojo> (add 2 2)
23−~your-urbit:dojo> %+ add 2 2
24−```
25−
26−Tall-form Hoon may require multiple lines:
27−
28−```
29−~your-urbit:dojo> %+ add
30−~your-urbit:dojo< 2
31−~your-urbit:dojo< 2
32−```
33−
34−Hoon uses something called [the subject](/docs/hoon/hoon-school/the-subject-and-its-legs).
35−The Dojo has its own subject and that's where Hoon's equivalent of variables,
36−called faces, are stored.
37−
38−Use `=var` to save faces to the Dojo subject.
39−
40−```
41−~your-urbit:dojo> =foo (add 2 2)
42−```
43−
44−Note, however, that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
45−face in a `.hoon` file in this way.
46−
47−#### System commands
48−
49−Use `=dir` to set the current working directory:
50−
51−```
52−~your-urbit:dojo> =dir %/gen
53−```
54−
55−(`%` represents your current directory. For a complete explanation on urbit
56−paths, see the [filesystem section](#filesystem).)
57−
58−Generators (files in `/gen`) are run with `+`:
59−
60−```
61−~your-urbit:dojo> +hello 'world'
62−```
63−
64−Save output to a file in `%clay` with `*`:
65−
66−```
67−~your-urbit:dojo> *some/file/path/hoon 'hello world'
68−```
69−
70−Run system commands from `:hood`, like `reload`, using `|`:
71−
72−```
73−~your-urbit:dojo> |reload %eyre
74−```
75−
76−### Generators
77−
78−Generators are short Hoon scripts, saved as `.hoon` files in the `/gen`
79−directory. Many Dojo commands exist in the form of generators. The syntax for
80−running a generator is `+genname` for a generator saved as `genname.hoon` in the
81−`%base` desk. For generators on other desks, you can use the syntax
82−`+desk!genname`.
83−
84−#### `+cat`
85−
86−Accepts a path and displays the file. Similar to Unix `cat`.
87−
88−```
89−~your-urbit:dojo> +cat %/gen/curl/hoon
90−```
91−
92−#### `+code`
93−
94−Generates a code that is used to remotely log into your ship. No
95−arguments.
96−
97−```
98−~your-urbit:dojo> +code
99−```
100−
101−You can change your code to a new randomly generated one by entering `|code %reset`. Please note that this will prevent [Bridge](/docs/glossary/bridge)
102−from being able to derive your code in the future.
103−
104−#### `+ls`
105−
106−Similar to Unix `ls`. Accepts a path.
107−
108−```
109−~your-urbit:dojo> +ls %/gen
110−~your-urbit:dojo> +ls /~talsur-todres/base/2/gen/program
111−```
112−
113−#### `+solid`
114−
115−Compile the current state of the kernel and output a noun. Usually downloaded to
116−a file in unix. This generator takes a series of desks to include as its
117−argument. The first desk must be the base desk that contains the Arvo kernel,
118−standard library and related files - typically `%base`.
119−
120−```
121−~your-urbit:dojo> .urbit/pill +solid %base %garden %landscape %webterm %bitcoin
122−```
123−
124−#### `+tree`
125−
126−Generate a recursive directory listing. Takes a path.
127−
128−```
129−~your-urbit:dojo> +tree %/sys
130−```
131−
132−### Hood
133−
134−The hood is the system daemon. See `gen/hood` and `app/hood`.
135−
136−`|hi` - Sends a direct message. Sort of like Unix `write`. Accepts
137−an urbit name (`@p`) and a string (`tape`, which is text wrapped with double-quotes).
138−
139−```
140−~your-urbit:dojo> |hi ~binzod "you there?"
141−```
142−
143−`|link` / `|unlink` - Link / unlink a CLI app - may or may not be remote.
144−Accepts an optional ship name and a mandatory app name.
145−
146−```
147−~your-urbit:dojo> |link ~talsur-todres %octo
148−
149−~your-urbit:dojo> |link %chat-cli
150−```
151−
152−`|mass` - Prints the current memory usage of all the kernel modules.
153−No arguments.
154−
155−```
156−~your-urbit:dojo> |mass
157−```
158−
159−`|breload` - Reloads a kernel module (vane) from source. Accepts any
160−number of vane names.
161−
162−```
163−~your-urbit:dojo> |breload %clay %eyre
164−```
165−
166−---
167−
168−### Dojo manual
169−
170−#### Sources and sinks
171−
172−A Dojo command is either a **source** or a **sink**. A source is just something
173−that can be printed to your console or the result of some computation. A
174−sink is an **effect**: a change to the filesystem, a network message, a
175−change to your environment, or a typed message to an app.
176−
177−Sources can be chained together, but we can only produce one effect per
178−command.
179−
180−#### Sinks
181−
182−#### `=` - Set variable
183−
184−Set any environment variable:
185−
186−```
187−~your-urbit:dojo> =foo 42
188−~your-urbit:dojo> (add 2 foo)
189−
190−44
191−```
192−
193−Make sure to note that `=var` is Dojo syntax, not Hoon syntax. You cannot bind a
194−variable in a `.hoon` file in this way.
195−
196−#### Special variables
197−
198−There are a few special variables that the Dojo maintains.
199−
200−#### `:` - Send to app
201−
202−`:app` goes to a local `app`, `:~ship/app` goes to the `app` on `~ship`.
203−
204−Send a `helm-hi` message to `hood`:
205−
206−```
207−~your-urbit:dojo> :hood &helm-hi 'hi'
208−```
209−
210−Apps usually expect marked data, so `&` is often used here.
211−
212−#### `*` - Save in `%clay`
213−
214−Save a new `.hoon` file in `gen`:
215−
216−```
217−~your-urbit:dojo> *%/gen/foo/hoon '# hello'
218−```
219−
220−The last component of the path is expected to be the mark (or mime
221−type).
222−
223−#### `.` - Export to Unix
224−
225−Export a noun to Unix with `.`:
226−
227−```
228−~your-urbit:dojo> .foo/bar/baz (add 2 2)
229−```
230−
231−Which creates a file at `pier/.urb/put/foo/bar.baz`.
232−
233−This is very often used with `+solid`:
234−
235−```
236−~your-urbit:dojo> .urbit/pill +solid
237−```
238−
239−Which outputs a new `urbit.pill` to `pier/.urb/put/urbit.pill`
240−
241−### Sources
242−
243−#### `_` - Run a function
244−
245−Use `_` to run a gate (or function):
246−
247−Write an arbitrary function and pass data to it:
248−
249−```
250−~your-urbit:dojo> _|=([a=@] (mul a 3)) 3
251−9
252−```
253−
254−Use a function to get the status code from an http request:
255−
256−```
257−~your-urbit:dojo> _|=([p=@ud q=* r=*] p) +http://google.com
258−301
259−```
260−
261−#### `+` `-` - HTTP requests
262−
263−`+http[s]://example.com` - sends a GET request
264−
265−`+http[s]://example.com &json [%s 'hi']` - sends a POST request with the
266−JSON `"hi"` in the body.
267−
268−`-http[s]://example.com &json [%s 'hi']` - sends a PUT request with the
269−JSON `"hi"` in the body.
270−
271−Note that the first of these is a source while the last two are sinks.
272−
273−#### `+` - Generators
274−
275−Generators are simple Hoon scripts loaded from the filesystem. They live
276−in `gen/`.
277−
278−An example of a generator that is built into your urbit is `+code`. It produces
279−the code needed to log into your ship remotely.
280−
281−```
282−~your-urbit:dojo> +code
283−fintyr-haldet-fassev-solhex
284−```
285−
286−Generators on desks other than `%base` can be run with the syntax
287−`+desk!generator`.
288−
289−### Variables
290−
291−You can use `=` to set an environment variable in Dojo, but there are
292−a few reserved names that have special uses.
293−
294−#### `dir`
295−
296−Current working `%clay` desk and revision. Read / write.
297−
298−**Examples:**
299−
300−```
301−~your-urbit:dojo> =dir %/gen
302−~your-urbit:dojo> +ls %
303−404/hoon docs/ dojo/hoon lib/ listen/hoon md static/udon talk/ testing/udon tree/main/ unmark/ womb/
304−```
305−
306−#### `now`
307−
308−The current (128-bit `@da`) time. Read-only.
309−
310−**Example:**
311−
312−```
313−~your-urbit:dojo> now
314−~2016.3.21..21.10.57..429a
315−```
316−
317−#### `our`
318−
319−The current urbit ship. Read-only.
320−
321−**Example:**
322−
323−```
324−~your-urbit:dojo> our
325−~your-urbit
326−```
327−
328−#### `eny`
329−
330−512 bits of entropy. Read-only.
331−
332−**Example:**
333−
334−```
335−~your-urbit:dojo> eny
336−0v27k.n4atp.fovm6.f7ggm.jdkn5.elct5.11tna.4qtid.g4so7.a1h6g.grp7u.qml4i.0ed1v.sl0r0.97d4b.6aepr.6v6qm.ls5ve.60kgb.j6521.2fqcb
337−```
338−
339−### Troubleshooting
340−
341−If you encounter `%dy-edit-busy` while entering commands, it is
342−because your Dojo is blocked on a timer or an HTTP request. Type backspace
343−and your Dojo will end the blocked command.
content/using/os/ship-troubleshooting.mddeleted−225
@@ -1,225 +0,0 @@
1−+++
2−title = "Ship Troubleshooting"
3−weight = 8
4−template = "doc.html"
5−aliases = ["docs/using/ship-troubleshooting/"]
6−+++
7−
8−Urbit is still in the development stage, so there's a chance that your ship won't start properly, or will stop working properly when you're running it. That's ok! This document is intended to help you in such an event.
9−
10−This page contains resolutions to many of the most commonly encountered issues.
11−If your issue is not covered here, please check out our [Troubleshooting Knowledgebase](https://github.com/urbit/support/wiki).
12−
13−## Table of Contents
14−
15−- [Best practices](#best-practices)
16−- [Operation issues](#operation-issues)
17−- [Connectivity issues](#connectivity-issues)
18−- [Booting issues](#booting-issues)
19−- [Crashing issues](#crashing-issues)
20−
21−## Best Practices {% #best-practices %}
22−
23−An ounce of prevention is worth a pound of cure, so let's first go over some best practices to keep your ship in working order.
24−
25−### Only initialize your ship once
26−
27−Once your ship has been initialized (with the `-w` variation of the `./urbit` command), you should never do so a second time. If you do initialize it anew without special measures, you will experience trouble communicating with ships on the network you had talked to before.
28−
29−If you accidentally did this a second time, or want to intentionally start
30−fresh, you need to perform a [factory reset](#factory-reset), which is explained in the next section.
31−
32−### Do not delete your pier
33−
34−Urbit is stateful, meaning that it needs to hold onto all your data. If you
35−delete your pier and start your ship again, you won't be able to talk to any
36−ship you've talked to before. The only solution to this is performing a [factory
37−reset](#factory-reset).
38−
39−### Keep track of the directory that you put your ship in
40−
41−When you first start your ship, you should make sure you put it a place where you can find it again and where it won't get accidentally deleted.
42−
43−### Keep up-to-date builds
44−
45−Check for latest Urbit version at https://github.com/urbit/urbit/releases. If you're behind, update using [this guide](/getting-started/cli#updating).
46−
47−### `|hi` your star to see if you're connected
48−
49−Find out who your star is by running `(sein:title our now our)` in the Dojo. Then, run `|hi ~star`, where `~star` is the star's name, and if things are working properly, you should get the message `hi ~star successful`. It could also be helpful to use `|hi` to check connectivity with `~zod` or another planet that you're in a Chat channel with.
50−
51−### Turn your ship off and on again
52−
53−Use `ctrl-d` to gracefully exit your ship, and then start it again. This can solve many issues.
54−
55−### Use the `|knob` command to customize your error messages
56−
57−Error messages can be by overwhelming, so the `|knob` command is intended to remedy this. It's used to silence errors that aren't important.
58−
59−The command takes two arguments, and comes in the form of `|knob %error-tag %level`.
60−
61−`%error-tag` is the name of the error in question. It's usually printed at the top of the stack trace, such as in `crud: %hole event failed` -- `%hole` here is an example of an error tag.
62−
63−`%level` determines how much you will see of errors with your chosen `%error-tag`. There are three levels:
64−
65−- `%hush`: no output.
66−- `%soft`: one line of output, just containing the error tag.
67−- `%loud`: full output.
68−
69−So for example, to silence all Ames packet-related errors, try `|knob %hole %hush`.
70−
71−### Perform a factory reset. {% #factory-reset %}
72−
73−A factory reset is when a ship tells the rest of the network to treat it as though the ship was just started for the first time again. Any ongoing or outstanding communication is forgotten and connections are reestablished from scratch.
74−
75−Factory resets often fix connectivity issues, but should only be used as a
76−last resort. To find out how to perform a factory reset, check out our [Guide
77−to Factory Resets](/using/id/guide-to-resets). Before taking such a drastic measure, try
78−other methods in this guide. You can also ask for help on
79−in the Help channel in the Urbit Community group at `~bitbet-bolbel/urbit-community`.
80−
81−### Reset `+code`
82−
83−**WARNING:** Do not reset your +code if you are using a hosted ship. You will be locked out. Please contact your hosting provider for more information.
84−
85−You login to Landscape using the camel-case phrase obtained from dojo by
86−entering `+code`. For security reasons you may wish to change this code
87−regularly. You may do so by entering `|code %reset` into dojo. Doing this
88−will prevent [Bridge](/docs/glossary/bridge) from being able to derive your code,
89−meaning you will only be able to check it from dojo in the future.
90−
91−## Operation Issues {% #operation-issues %}
92−
93−### My urbit is frozen
94−
95−Sometimes this happens if you're processing a very large event, or if you're in an infinite loop, or for a variety of other reasons.
96−
97−Before doing anything, try waiting for a minute: an event might finish processing. If it doesn't clear up, then use the Unix kill-command, `ctrl-z`, to end your ship's process. Then restart your ship.
98−
99−### When I try to type into the Dojo, it prints `%dy-edit-busy` or `%dy-no-prompt`
100−
101−This happens when your Dojo is waiting on a request, such as an HTTP request. You can fix it simply by typing `backspace` or (`delete` on Mac).
102−
103−### My ship doesn't recognize file changes that I make in my pier
104−
105−Since version `0.8.0`, changes no longer automatically sync between the Unix side (your pier) and your ship. To sync your file changes, you must run `|commit %desk` in your Dojo, where `%desk` is the desk you'd like to sync.
106−
107−## Connectivity Issues {% #connectivity-issues %}
108−
109−### I can't communicate with anyone
110−
111−Maybe you booted your ship twice, or ran it using old files. If this is the
112−case, you must perform a [factory reset](#factory-reset).
113−
114−### I don't have the latest OTA
115−
116−You can check what build your ship is on by entering `+trouble` into dojo and
117−reading the `%base` hash. If this does not match the latest hash published in
118−the `urbit-dev` mailing list, you are behind.
119−
120−Your sponsor may just be lagging behind, so sometimes this will resolve on its
121−own with patience. Otherwise, try the procedure outlined [here](https://github.com/urbit/support/wiki/Missing-OTA).
122−
123−### I keep getting an `ames` error stack-trace
124−
125−You may see a message like this one: `/~zod/base/~2019.7.22..18.55.46..83a3/sys/vane/ames:<[line column].[line column]>`. This is a clay path to a Hoon file, pointing to the line and column where an expression crashed. This kind of error might be accompanied by a `crud` message.
126−
127−This means that another ship is sending invalid packets to you. This could be
128−because one of the ships has not updated the other ship's "rift number", which
129−is the number that starts at one and increments every time that ship performs a
130−factory reset.
131−
132−This can happen if they have the wrong keys of yours, or if you have the wrong keys of theirs. You can figure out who has the wrong keys by running this scry command in your dojo: `.^(* %j /=life=/shipname)`, where shipname is the other ship's name. Save that information. Then, go to the [Azimuth contract on Etherscan](https://etherscan.io/address/0x223c067f8cf28ae173ee5cafea60ca44c335fecb#readContract), scroll down to `32. points`, and put in the hexadecimal representation of the other ship's `@p`. You can find the hexadecimal representation by running ...
133−
134−```
135−`@ux`~sampel-palnet
136−```
137−
138−... in the Dojo, where `~sampel-palnet` is the other ship's name. Then, compare it to the scry information that you saved. If that information matches up, it means that the other ship is the problem. If it **doesn't** match up, your ship has wrong information about the other ship. If you have such wrong information, you can fix this by running:
139−
140−```
141−:azimuth-tracker|listen ~ %app %azimuth-tracker
142−```
143−
144−The last line above syncs from an Ethereum node for _all_ ships on the network. If you only wanted to sync with certain ships, run:
145−
146−```
147−:azimuth-tracker|listen ~[~sampel-palnet ~zod ~marzod] %app %azimuth-tracker
148−```
149−
150−`~sampel-palnet ~zod ~marzod` are example ship-names; replace these with any number of desired ship-names.
151−
152−The above commands work if you have the wrong keys of other ships. If other ships have wrong keys of _yours_, you need to somehow ask them to to run such a command.
153−
154−### I can talk to some ships, but I can't talk to my sponsor and some other ships
155−
156−This is usually the result of deleting your pier and starting your ship again. To fix
157−this, you must perform a [factory reset](#factory-reset).
158−
159−## Booting Issues {% #booting-issues %}
160−
161−### My ship booted for the first time, but it turned into a comet instead of my planet or star
162−
163−You may have used the wrong arguments when booting your ship for the first time. Delete this comet and try again.
164−
165−### My development ship ("fakezod") gets a `boot: malformed` failure
166−
167−This means that you gave your development ship an invalid `@p`. So, you will get this error if you write, for example, `urbit -F zodzod` instead of `urbit -F zod`.
168−
169−## Crashing Issues {% #crashing-issues %}
170−
171−### I got a `bail` error and my ship crashed
172−
173−Try bringing it back up; it will often start working just fine again.
174−
175−However, if you get a `bail` error again, this is a serious issue and should be
176−reported (see below). It's advised to keep the old files around to assist issue
177−research. If you want to get back on the network immediately, you might want to
178−perform a [factory reset](#factory-reset).
179−
180−#### Making a GitHub issue out of your `bail`
181−
182−You can get help with you problem by creating an issue at [github.com/urbit/urbit](https://github.com/urbit/urbit/issues). But to make a good issue, you need to include some information.
183−
184−When your urbit crashes with a `bail`, you'll probably get a core dump, which is a file that contains the program state of your urbit when it crashed. On Mac, core dumps can be found in `/cores`. On Linux, cores can often be found in `/var/crash`, or the home directory.
185−
186−Navigate to the folder containing your core dumps. Find the most recent core dump by looking at the dates after you run `ls -l`. Then `lldb -c <corename>`. Once that loads, you'll be at an `(lldb)` prompt; type `bt` at this prompt. This will create a stack trace that looks like this:
187−
188−```
189−(lldb) bt
190−* thread #1, stop reason = signal SIGSTOP
191− * frame #0: 0x000000010583d871 urbit`_box_free + 17
192− frame #1: 0x0000000105845ee6 urbit`u3j_boot + 182
193− frame #2: 0x000000010584d1f9 urbit`u3m_boot + 89
194− frame #3: 0x000000010583d15d urbit`main + 2765
195− frame #4: 0x00007fff75cb83d5 libdyld.dylib`start + 1
196−(lldb)
197−```
198−
199−Copy this stack trace and include it in your GitHub issue.
200−
201−### My ship crashed with a `bail: meme` error.
202−
203−This means that your ship ran out of memory.
204−
205−1. Make sure you are running the latest binary if you are not already on it.
206−
207−2. Restart your ship. If you don't crash again, everything may be fine.
208−
209−3. If you **do** crash again, try running the following after your ship has shut down:
210− `./urbit-worker meld your-ship` (Replacing `your-ship` with the name/directory of your ship.)
211− This will attempt to compact the memory of your ship. Note that this may use large amounts of memory on the machine you are running it on, and will be very slow if the machine has little memory available.
212−
213−4. If the above succeeds, but you still get `bail: meme` immediately, or after running for a little while, please [file an issue](https://github.com/urbit/urbit/issues). If you can, run `|mass` and share its output.
214−
215−5. As a last resort, you may perform a [factory reset](#factory-reset).
216−
217−### My ship crashed with a `bail: oops` error
218−
219−Restart your ship. These issues often just go away on their own. If this error repeats after restart two or more times, post the messages in an issue at [github.com/urbit/urbit](https://github.com/urbit/urbit/issues).
220−
221−This same error might also appear with a message like `Assertion '0'`.
222−
223−### My ship crashed with an `pier: work error` error
224−
225−This means that the Urbit worker process has shut down for one reason or another. Just restart your ship; this is not a notable or reportable error.
content/using/os/stars-and-galaxies.mddeleted−38
@@ -1,38 +0,0 @@
1−+++
2−title = "Star and Galaxy Operations"
3−description = "Additional information and suggested ettiquette for Star and Galaxy owners."
4−weight = 4
5−aliases = ["/docs/using/operating-a-star/"]
6−template = "doc.html"
7−+++
8−
9−To boot your galaxy or star, follow our [installation instructions](/getting-started/).
10−
11−### Hosting your star
12−
13−If you plan to distribute planets in any capacity, we ask that you keep your star
14−running. If you fail to do so, those planets will become orphans that are unable
15−to communicate with the network unless they transfer to a new star.
16−
17−See our [cloud hosting instructions](/using/running/hosting) for
18−instructions on settings up a Digital Ocean droplet.
19−
20−### Distributing planets
21−
22−You can distribute planets from your star via [Bridge](https://bridge.urbit.org/). As a reminder if you do distribute planets, please boot and run your star on the Arvo network, otherwise those planets won't be able to connect, which has a negative effect on the network as a whole, as orphan planets are left with very limited functionality.
23−
24−### Software updates
25−
26−By default, your star accepts software updates from its galaxy and routes them to its planets. You can use this mechanism to push custom software to your planets. Keep in mind that planets expect functional, non-breaking software updates, and generally want to be able to communicate with planets that are sponsored by other stars.
27−
28−### Star-owner etiquette
29−
30−- If you distribute planets, boot and run your star on the Arvo network, or the
31− planets won't be able to boot for the first time or connect unless they
32− transfer to a different star.
33−- A star is networking infrastructure. For that reason, the machine running your star or galaxy must have sufficient bandwidth, storage, and processing power for your dependent planets. Until event log pruning is implemented, expect ships to consume more disk space every year; stars looking to serve around 100 planets will want to ensure around 50GB of space per year of operation.
34−- When messaging others, communicate using your star only when speaking in an official/infrastructural capacity. Otherwise, use your personal planet.
35−
36−### Taxes
37−
38−Urbit address space has value, which means the distribution of address space has tax implications. You should speak with your tax advisor about these implications.
content/using/running/_index.mddeleted−24
@@ -1,24 +0,0 @@
1−+++
2−title = "Running Urbit"
3−sort_by = "weight"
4−description = "How to run Urbit in various environments."
5−template = "sections/docs/chapters.html"
6−weight = 30
7−+++
8−
9−Urbit can be run in a variety of contexts. Our [Getting Started
10−Guide](/getting-started/) covers how to run an Urbit locally on your
11−computer; this section covers alternative ways of running Urbit.
12−
13−### [Port](/using/running/port)
14−
15−This document covers the basic features of the Urbit GUI application Port.
16−
17−### [Cloud Hosting](/using/running/hosting)
18−
19−This guide covers the provisioning and setup of a cloud server in Digital Ocean
20−running your Urbit. This enables your Urbit to be accessed from anywhere.
21−
22−### [Self-hosting S3 Storage](/using/running/minio)
23−
24−This guide walks you through the process of setting up a self-hosted S3-compatible MinIO instance for use with your ship.
content/using/running/hosting.mddeleted−202
@@ -1,202 +0,0 @@
1−+++
2−title = "Cloud Hosting"
3−description = "How to host your ship in the cloud so you can access it from any device."
4−template = "doc.html"
5−weight = 2
6−[extra]
7−hidetitle = "true"
8−+++
9−
10−The goal of this guide is to have clear and easy to follow best practices for deploying an Urbit node to a server you control in the cloud. Deploying in the cloud allows you to access your Urbit from any device.
11−
12−Most Urbit users start out running their ship locally on one machine in order to play with it, but this means when your machine is offline your Urbit node is offline too (and can't get updates). You can also only access your Urbit from that one machine.
13−
14−This guide uses Digital Ocean as the cloud provider, but others can be used.
15−
16−## Create a Digital Ocean droplet
17−
18−- Create an account on [Digital Ocean][digital ocean].
19−- Create a droplet with the following settings:
20−- **Image**: Ubuntu 20.04 x64
21−- **Plan**: 4GB RAM
22−- **Add block storage**: Skip
23−- **Datacenter Region**: Choose the region closest to you.
24−- **VPC Network**: No VPC
25−- **Additional Options**: None
26−- **Authentication**: SSH keys, add a New SSH Key following the instructions DO gives you.
27−- **How many Droplets**: 1
28−- **Choose a hostname**: This will be the hostname of the box you ssh into (can be whatever you want, I used my Urbit planet name).
29−- **Add tags**: None
30−- **Project**: It'll select your default.
31−- **Backups**: Optional (it costs a little extra, but I have it enabled for peace of mind).
32−
33−## Getting your own domain
34−
35−Your own domain will make accessing your Urbit a lot easier (it'll also allow you to secure things with a Let's Encrypt cert). Domains are relatively inexpensive and since this guide is about best practices it's a required step.
36−
37−There are a lot of domain name registrars you can use, this guide suggests [gandi.net][gandi]. From there you can search for and register a domain that you like.
38−
39−## Configuring your domain for your Digital Ocean droplet
40−
41−Once you've registered your domain you'll need to configure it to use Digital Ocean for DNS. The following steps are done on the Gandi website.
42−
43−- Click Domain on the left panel
44−- Click the domain you're going to use for Urbit
45−- Click "Gandi's LiveDNS" under Nameservers in the Domain configuration section of the overview page
46−- Click Change
47−- Click External
48−- Add the Digital Ocean nameservers:
49− - `ns1.digitalocean.com`
50− - `ns2.digitalocean.com`
51− - `ns3.digitalocean.com`
52−- Save the change.
53−- - It can take 12-24 hours for this change to propagate.
54−- Now that you've updated the DNS records you can add the domain to your droplet.
55−- - Back on the DO site, click Networking from the left panel and then enter the domain you registered.
56−- Click on that domain and add an A record that directs to the IP of your droplet (found on your droplet's page).
57−
58−## Creating your non-root user
59−
60−With our domain in place we're now ready to actually log into the box and start to configure the server itself.
61−
62−- Since we don't yet have a user we'll need to log in as root:
63− ```
64− $ ssh root@your_server_ip
65− ```
66−- If you set a passphrase on your ssh key, you'll be asked for it. If not, you should automatically be logged in.
67−- Create a new user, in our example we'll use _sammy_ (to match the DO docs), but you should use your own username:
68− ```
69− # adduser sammy
70− ```
71−- Enter a strong password for your user. The questions `adduser` asks you don't matter, hit enter to skip them.
72−- Give your new user sudo access:
73− ```
74− # usermod -aG sudo sammy
75− ```
76−- Next we need to enable external access to our new user by moving the ssh key over from root (and setting proper permissions on it).
77−- Be careful to note the **lack of trailing slash** in the command below after `/.ssh`:
78− ```
79− # rsync --archive --chown=sammy:sammy ~/.ssh /home/sammy
80− ```
81−- Test this connection with `ssh sammy@your_server_ip` from your local machine in a new terminal window.
82−- To test that your domain is working try `ssh sammy@your_domain` from a new terminal on your local machine.
83−- You should now be able to use this user going forward with `sudo` when necessary.
84−
85−## Setting up a basic firewall
86−
87−Continuing to follow the DO docs we're going to configure the ufw firewall.
88−
89−- The below command shows us the applications available to be easily configured with firewall rules by ufw.
90−
91− ```
92− $ sudo ufw app list
93− ```
94−
95−- Next we'll configure ufw to allow connections via ssh and to allow Urbit to use the standard web port when the firewall is enabled,
96− as well as opening a port that we'll later specify for your urbit to use to communicate directly with other ships.
97−
98− ```
99− $ sudo ufw allow OpenSSH
100− $ sudo ufw allow www
101− $ sudo ufw allow https
102− $ sudo ufw allow 34543/udp
103− ```
104−
105− Note that you can choose any port in place of 34543 for Ames. Just be sure to pass the same port via the `-p` option when starting your ship.
106−
107−- Next we'll turn on the firewall.
108− ```
109− $ sudo ufw enable
110− ```
111−- To see the current firewall status use the following.
112− ```
113− $ sudo ufw status
114− ```
115−
116−## Installing Urbit
117−
118−Finally we're ready to install Urbit on your very own server. This part is actually pretty easy, if you haven't installed Urbit locally then the instructions are the exact same as the ones in the Urbit [install doc](/getting-started/). If you have a local ship already, we're going to install Urbit on the server and then send your local ship up.
119−
120−- **WARNING**: Since Urbit is p2p you don't want to ever run two copies of your
121− ship simultaneously. This is because other nodes that interact with each of
122− your copies will be confused by which one is the most up to date. If you end
123− up accidentally doing this you'll have to do a 'factory reset' described in the [guide to resets](/using/id/guide-to-resets) to fix things.
124−- The first thing you're going to want to do is shut down your local ship, either with control-d or `|exit` in dojo.
125−- Next we're going to install Urbit on the server and permit it to bind to the web ports:
126− ```
127− $ ssh your_user@your_domain
128− $ mkdir urbit
129− $ cd urbit
130− $ wget --content-disposition https://urbit.org/install/linux64/latest
131− $ tar zxf ./linux64.tgz --strip=1
132− $ sudo setcap 'cap_net_bind_service=+ep' urbit
133− ```
134−- Now we're going to tar up your local ship and send it to your server, from your local machine's urbit directory:
135− ```
136− $ tar -zcvf <ship_dir_name>.tar.gz <ship_dir_name>
137− $ scp <ship_dir_name>.tar.gz your_user@your_domain:urbit
138− ```
139−- Back on your server let's untar your ship and start it up with the Ames port we allowed through the firewall:
140− ```
141− $ ssh your_user@your_domain
142− $ cd urbit
143− $ tar -zxvf <ship_dir_name>.tar.gz
144− $ ./urbit -p 34543 <ship_dir_name>
145− ```
146−- Now we run a few commands in Dojo to request a Let’s Encrypt cert for your
147− domain. Replace `tld` with whatever your top-level domain is e.g. `com` in
148− `example.com`. `your_subdomain` is optional and that part of the command
149− should be omitted if you are not using it):
150− ```
151− ~sampel-palnet:dojo> |start %acme
152− ~sampel-palnet:dojo> :acme &path /tld/your_domain/your_subdomain
153− ```
154−- Your ship should now be sailing on the digital ocean. Check `https://your_subdomain.your_domain.tld`, if everything is working properly you should see a login page.
155−- Log in with the code from `+code` in dojo like normal and you should see all of your applications.
156−
157−## Leaving your Urbit running in a Screen session
158−
159−Finally, to leave your Urbit running after you disconnect we can leave it in a Screen session. This is just a way to leave applications running in the background and then reconnect to them later. Alternatively, the same can be done with tmux.
160−
161−- First start with your ship stopped, then run the following:
162− ```
163− $ screen -S urbit
164− ```
165−- This will start a screen session, we can now start up the Urbit ship from the `urbit` directory in this session:
166− ```
167− $ ./urbit <ship_dir_name>
168− ```
169−- Then we can disconnect from the screen session and leave the ship running with `control-a d`
170−- To get back into the screen session:
171− ```
172− $ screen -r
173− ```
174−- There are more screen commands for interacting with sessions that are easy to find on the internet.
175−
176−## Links and Misc.
177−
178−A lot of the above documentation comes from combining existing resources.
179−
180−On iOS you can save a website to your homescreen as an icon. If you do this for your Urbit domain it's a little like having it as an app.
181−
182−- For the docs that made up this guide see the following links.
183− - [Digital Ocean Initial Setup][do initial setup]
184− - [Digital Ocean DNS][do dns]
185− - [Digital Ocean Nginx Installation][do nginx install]
186− - [Digital Ocean Nginx Config][do nginx config]
187− - [Digital Ocean SSL Cert Setup][do ssl config]
188− - [Urbit Install Docs](/getting-started/)
189− - [Urbit Basic Cloud Install][urbit basic cloud install]
190−
191−[gandi]: https://www.gandi.net/
192−[digital ocean]: https://www.digitalocean.com/
193−[do dns]: https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars
194−[do nginx install]: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04
195−[do nginx config]: https://www.digitalocean.com/community/tutorials/how-to-deploy-a-go-web-application-using-nginx-on-ubuntu-18-04
196−[do ssl config]: https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04
197−[urbit basic cloud install]: https://medium.com/@urbitlive/hello-world-urbit-edition-install-boot-and-run-your-urbit-planet-on-a-10-cloud-server-b9579745b9a8
198−[do initial setup]: https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04
199−[blog github]: https://github.com/zalberico/zalberico.github.io
200−
201−If you plan to use Nginx as a reverse proxy for your Urbit, it is important that you include the following settings in your configuration in order to allow the Landscape web client to properly communicate with your Urbit:
202−` chunked_transfer_encoding off; proxy_buffering off; proxy_cache off; `
content/using/running/minio.mddeleted−141
@@ -1,141 +0,0 @@
1−+++
2−title = "Self-hosting S3 Storage with MinIO"
3−description = "How to set up and self-host MinIO S3 storage"
4−template = "doc.html"
5−weight = 2
6−[extra]
7−hidetitle = "true"
8−+++
9−
10−Adding [S3](https://aws.amazon.com/s3/) storage to Urbit unlocks some great new features, such as the ability to upload & post your own media to chats straight from your own machine, and upload custom avatars. This is a guide to self-hosting [MinIO](https://min.io), an S3 compatible block storage solution.
11−
12−You can read more about S3 in [Configuring S3 Storage](/using/os/s3).
13−
14−Cloud providers offer off-the-shelf S3 solutions that you can get started with almost immediately. However, if you do not wish to trust them with your uploaded files, you can self-host an S3 solution.
15−
16−This process requires a working knowledge of the Linux command line and web technologies such as DNS and TLS.
17−
18−The self-hosting process is almost exactly the same whether you are hosting on your own hardware, or if you are renting a VPS from a cloud provider like DigitalOcean or AWS. Either way, all that you need is a machine running Linux and a domain - for the sake of this guide, `example.com` will be used in place of your custom domain. You should substitute your own domain everywhere the example domain is used in this guide; for example:
19−
20−- `example.com` should become `yourdomain.tld`,
21−- `s3.example.com` should become `s3.yourdomain.tld`,
22−
23−and so on.
24−
25−Ideally, MinIO would be installed on the same machine that your Urbit planet is hosted on, and run alongside at no extra cost - although it can just as easily be hosted on a separate machine.
26−
27−## Steps
28−
29−### (optional) Install Docker
30−
31−Hosting MinIO via Docker is the simplest option. To install Docker server, follow the relevant guide [here](https://docs.docker.com/engine/install/#server).
32−
33−If you don't want to install Docker, MinIO does offer independent binaries. The process for running these should be similar, but the next step assumes you are using Docker.
34−
35−### Install MinIO
36−
37−Once Docker is installed, we can install and run MinIO by following the steps [here](https://docs.min.io/docs/minio-docker-quickstart-guide.html).
38−
39−You should only need to run a single command, along the lines of:
40−
41−```
42−docker run -d \
43− -p 9000:9000 \
44− -p 9001:9001 \
45− --name minio-urbit \
46− -v /mnt/data:/data \
47− -e "MINIO_ROOT_USER=<username>" \
48− -e "MINIO_ROOT_PASSWORD=<password>" \
49− -e "MINIO_DOMAIN=s3.example.com" \
50− -e "MINIO_SERVER_URL=https://s3.example.com" \
51− minio/minio server /data --console-address ":9001"
52−```
53−
54−Ports 9000 and 9001 are exposed to give access to the MinIO S3 interface and MinIO web admin respectively. `/mnt/data` is the path where your uploaded data will be stored on your host machine — you can change this as necessary.
55−
56−Be sure to add the `MINIO_DOMAIN` environment variable; this tells MinIO to accept virtual host style URLs (`BUCKET.s3.example.com` rather than `s3.example.com/BUCKET`), which are required for compatibility with Urbit.
57−
58−Your username and password can be anything of your choosing — make sure they're secure! Your username must be at least 4 characters long and your password at least 8 characters long.
59−
60−### Create DNS records
61−
62−Now, you'll need to point your own domain at your MinIO installation. Via your domain's DNS settings (usually configured on the registrar you bought your domain through), create three `A` records:
63−
64−- `s3.example.com`,
65−- `console.s3.example.com`, and
66−- `BUCKET.s3.example.com` where BUCKET is a bucket name of your choosing — 'media' or 'uploads' are good examples
67−
68−All 3 should point at the IP address of your host machine. If you are hosting on your own hardware, this could require port-forwarding via your router so that your host machine is reachable from outside of your home network, and possibly using a dynamic DNS service to update your DNS records if your home IP is not static.
69−
70−DNS records can take a little while to propagate, so don't worry if you type your new URL into your browser and don't see anything yet.
71−
72−_Note: if you plan to create multiple buckets, you will need a DNS record for each. Alternatively you can use a wildcard domain record, but for use with Urbit only one bucket is needed._
73−
74−### Set up the reverse proxy
75−
76−Setting up a reverse proxy in front of MinIO allows us to configure domain names and TLS. In this guide we use caddy, an incredibly simple web server. If you have experience with other web servers, you are also able to use those in place of caddy.
77−
78−To install caddy, follow the instructions [here](https://caddyserver.com/docs/install).
79−
80−Caddy handles TLS automatically, so we don't need to worry about setting that up. All we need to do is create a Caddyfile that looks something like this:
81−
82−```
83−console.s3.example.com {
84− reverse_proxy localhost:9001
85−}
86−s3.example.com BUCKET.s3.example.com {
87− reverse_proxy localhost:9000
88−}
89−```
90−
91−Remember to replace BUCKET with your chosen bucket name, and then run `caddy start` in the same directory as the Caddyfile.
92−
93−### Create an S3 bucket
94−
95−Navigate to your MinIO admin endpoint (`https://console.s3.example.com`) in a browser and sign in using the username and password you entered in step 1.
96−
97−Choose 'buckets' from the left-hand menu, and then 'create bucket' at the top of the page. Enter your bucket name (this MUST match the name in your DNS record, e.g. 'media').
98−
99−Then, you need to ensure your bucket is readable to the public, so that others can see your uploaded media. To do this, click 'manage' on your newly created bucket, and then navigate to 'access rules'. Click 'add access rule', enter `*` as the prefix and set access to `readonly`.
100−
101−### Configure your ship
102−
103−Head over to Landscape and navigate to the S3 storage setup page at System preferences > Remote Storage, and enter your domain (with protocol) under endpoint, e.g. `https://s3.example.com`. Enter your username and password from step 1 under access key and secret, and then enter the name of the bucket. When the bucket name is combined with the endpoint, you get your bucket URL e.g. `https://media.s3.example.com`.
104−
105−You can also configure these settings through dojo as shown [here](/using/os/s3).
106−
107−### That's it!
108−
109−You should now be able to upload content using your self-hosted MinIO installation.
110−
111−Once your S3 config is added, you should see a paperclip icon next to the message input in your chats. Media can be uploaded and posted by clicking here.
112−
113−## Troubleshooting
114−
115−Landscape chat will fail silently if it cannot connect to your S3 endpoint to upload media. To get an idea of what's going wrong, open the network tab of your browser dev tools, and observe the request when you try and upload media. You should see a failed request, hopefully with an error code or reason for failure.
116−
117−- If you see a `mixed-content` error, this means that not every part of the set up is using TLS. Most browsers will refuse to load non-HTTPS content from a secure page.
118−- If you see a `502 Bad Gateway` error, caddy is unable to reach your MinIO installation. Check MinIO is running and your `reverse_proxy` URLs are correct.
119−- If you get a `Permission denied` error, it's likely that your bucket endpoint is incorrect. Ensure that you passed the `MINIO_DOMAIN` variable when running MinIO - otherwise it will default to using the path URL format, which Urbit does not support.
120−
121−A good way to test your setup is to `curl` your S3 bucket endpoint (not your root S3 endpoint) and see what response you get. For example, if we have a bucket named 'media':
122−
123−```
124−curl https://media.s3.example.com
125−```
126−
127−You should get an XML response listing the contents of your bucket.
128−
129−## Running MinIO and Urbit on the same machine
130−
131−You may wonder how it's possible to run Urbit alongside our MinIO set up if they both need ports 80/443. The answer is to proxy Urbit through caddy, exactly the same way as MinIO. You can create as many directives in your Caddyfile as needed, each pointing to a different port.
132−
133−For example, you could have 3 domains:
134−
135−- `ship-name.example.com` - proxy to port 8080 where Urbit is running,
136−- `console.s3.example.com` - proxy to port 9001 where your MinIO admin is running, and
137−- `media.s3.example.com` - proxy to port 9000 where your MinIO bucket is accessible
138−
139−Currently, there is no way to specify the HTTP port Landscape runs on (unless you are running the `urbit-king` binary), but if 80 is not available at start-up it will try 8080 next. So start caddy first, and when you boot your ship it should detect that port 80 is in use and use 8080 instead.
140−
141−If you are running the `urbit-king` binary, then you can specify the HTTP port with the `--http-port` option.
content/using/running/port.mddeleted−157
@@ -1,157 +0,0 @@
1−+++
2−title = "Port"
3−template = "doc.html"
4−weight = 1
5−+++
6−
7−Port is a desktop GUI application that allows you to spin up, access, and manage
8−your Urbit ships without any knowledge of the command line or Urbit binary.
9−
10−## Features
11−
12−- Boot a new comet, planet, moon or star.
13−- Import an existing pier
14−- Use a ship via its web interface.
15−- Manage and run multiple ships.
16−- Connect to the web interface of a remote ship.
17−- Start/stop a ship.
18−- Export a pier in a zip file.
19−
20−## Install
21−
22−Port is available for Linux, MacOS and Windows. See the [Getting
23−Started](/getting-started#port) for installation instructions.
24−
25−## Boot a comet
26−
27−With Port freshly installed, you can select `Start without an ID` on its home
28−screen. If Port already has other ships installed, you can navigate to `Home`,
29−drop down the `Boot Menu` and select `Comet`. You'll be presented with the
30−following screen:
31−
32−![port: boot comet image](https://media.urbit.org/docs/port/port-boot-comet.png)
33−
34−Give your comet a name in the `Name` field. This name is just displayed locally
35−in Port for convenience. Next, hit `Continue`. It'll take a few minutes to spin
36−up the new Comet, then you can click on `Launch Ship into Urbit` and it'll take
37−you to the login screen. Click on `Copy Access Key` at the bottom-left, paste it
38−into the `Access Key` field, and hit `Continue`. You'll now be at your ship's
39−home screen and ready to explore Urbit.
40−
41−## Boot another ship
42−
43−**Important: This is for booting a ship for the first time, or for booting a
44−ship which has just undergone a [factory reset](/docs/glossary/resets). A ship should
45−only be booted from its keyfile in its current
46−[rift](/docs/azimuth/life-and-rift#rift) once. If your ship has already been
47−booted elsewhere, see the [Import pier](#import-pier) section instead.**
48−
49−With Port freshly installed, you can select `Boot a fresh ID` on its home
50−screen. If Port already has other ships installed, you can navigate to `Home`,
51−drop down the `Boot Menu` and select either `Planet`, `Moon` or `Star` depending
52−on the kind of ship you're booting. You'll be presented with a screen that looks
53−something like this:
54−
55−![port: boot ship image](https://media.urbit.org/docs/port/port-boot-ship.png)
56−
57−Enter a name for your ship in the `Name` field. This name is just displayed
58−locally in Port for convenience. Next, enter your ship's name (e.g.
59−`~sampel-palnet`) in the `Shipname` field. For `Key File`, select `Choose Key File` and browse to its location on your computer. If you don't have your
60−keyfile yet, see _step one_ of the [Setting up your
61−urbit](/getting-started/planet#keyfile) guide. Once you've selected the keyfile,
62−hit `Continue`.
63−
64−It'll take a few minutes to spin up the ship, then you can click `Launch Ship into Urbit` and it'll take you to the login screen. Click `Copy Access Key` at
65−the bottom-left, paste it into the `Access Key` field, and hit `Continue`.
66−You'll now be at your ship's home screen and ready to explore Urbit.
67−
68−## Import pier
69−
70−Port can import existing [piers](/docs/glossary/pier). For example, if you've
71−been running your ship with the Urbit binary from the command line, and would
72−now like to run it with Port instead, you can do so.
73−
74−With Port freshly installed, you can hit `See More Options` on the home screen
75−and then `Boot an existing ship`. It should bring up this screen:
76−
77−![port: import pier image](https://media.urbit.org/docs/port/port-import-pier.png)
78−
79−In the `Name` field, give your ship a name. This name is just displayed locally
80−in Port for convenience. Next, select the type of the ship you're importing from
81−the `Ship Type` drop-down menu. Under `Upload Pier`, click `Choose Directory`,
82−then browse to your pier in the file system.
83−
84−**Important: Make sure you have shut down your pier before trying to import it.**
85−
86−By default, Port will move it into its own directory for piers it manages. If
87−you want to keep it in its current location instead, check the `Keep pier in current directory` checkbox. Finally, hit `Continue` and then `Launch Ship into Urbit` and it'll take you to the login screen. Click `Copy Access Key` at the
88−bottom-left, paste it into the `Access Key` field, and hit `Continue`. You'll
89−now be at your ship's home screen.
90−
91−## Connect to remote
92−
93−Rather than running ships locally, Port can also connect to remote ships, for
94−example those running on cloud servers. This simply connects to the web
95−interface of the remote ship, it doesn't move its pier.
96−
97−With Port freshly installed, you can hit `See More Options` on the home screen
98−and then `Access remote ship`. It should bring up this screen:
99−
100−![port: connect to remote ship image](https://media.urbit.org/docs/port/port-remote-ship.png)
101−
102−In the `Name` field, give your ship a name. This name is just displayed locally
103−in Port for convenience. Next, enter the full URL (including the `http[s]://`
104−part) of the remote ship's web interface and hit `Continue`. You'll now be at
105−your ship's login screen. Enter your web code and login, you'll now be able to
106−use it from Port.
107−
108−If you want to remove the ship from Port you can go `Home`, hit the `Manage`
109−button for the ship, and select `Remove` under `Ship Migration`. This will
110−remove it from Port and disconnect it from the web interface, but the ship will
111−keep running as usual on the remote host.
112−
113−## Navigation
114−
115−From the home screen of Port, you can hit `Open` on a ship to access its web
116−interface. When you're in a ship's web interface, you can hit `Home` in the
117−bottom-left to return to the Port home screen.
118−
119−To manage a ship in Port and see details about it, you can hit the `Manage`
120−button for the ship in question on the home screen.
121−
122−## Start/stop a ship
123−
124−To stop a ship in Port, hit the `Manage` button for the ship on the home screen.
125−Then, hit the `Stop` button, and the ship will be shut down. Its status will
126−have changed from `Running` to `Stopped`.
127−
128−To start a ship again, just hit the `Launch` button on the ship's `Manage`
129−screen. It'll automatically open the ship's web interface, and the ship's status
130−will be back to `Running` again.
131−
132−## Eject pier
133−
134−If don't want Port to manage a particular ship any longer, for example if you
135−want to move it to a cloud server, you can export it from Port.
136−
137−From Port's home screen, hit the `Manage` button for the ship in question. Then,
138−under `Ship Migration`, hit the `Eject` button. Port will shut down the ship,
139−remove it from Port and compress its pier into a `.zip` file. It will also open
140−a file browser so you can copy it somewhere else. The location of the `.zip`
141−file will be the path to the pier shown on its `Manage` screen.
142−
143−Once you've moved the `.zip` file to its new location, it can simply be unzipped
144−and started again. If it's being moved to another machine which also runs Port,
145−see the [Import pier](#import-pier) section for details of importing it.
146−
147−## Delete pier
148−
149−**Warning: Deleting a pier is irreversible, and all data will be lost. If the
150−ship is a comet, the comet name will be unusable again. If the ship is a planet
151−or star, you will need to perform a [factory reset](/docs/glossary/reset) via Bridge
152−to be able to use it again (and all of its data will still be lost).**
153−
154−To completely delete the pier of a ship managed by Port, go to the home screen
155−and click `Manage` for the ship in question. Then, under `Ship Migration`, hit
156−`Delete Permanently` and accept any warnings. The ship's pier will be deleted
157−and it will be removed from Port.
content/using/running/vere.mddeleted−623
@@ -1,623 +0,0 @@
1−+++
2−title = "Runtime Reference"
3−template = "doc.html"
4−weight = 0
5−+++
6−
7−Note: This guide is about the CLI-based runtime executable. If you're running
8−the desktop client Port, see the [separate guide for
9−that](/using/running/port).
10−
11−The Urbit runtime is named Vere. It's the binary executable you use to run your
12−ship (`urbit` on Linux and MacOS, `urbit.exe` on Windows). Vere manages your
13−ship's [pier](https://urbit.org/docs/glossary/pier), handles events, and runs
14−the Nock virtual machine that performs your ship's computations.
15−
16−Before version 1.9, Vere was split into two separate binaries: The `urbit`
17−"king" responsible for I/O and event persistence, and the `urbit-worker` "serf"
18−responsible for computations and state persistence. As of version 1.9, these
19−have been merged into a single `urbit` (or `urbit.exe`) binary, though under the
20−hood there's still two separate processes. The alternative king written in
21−Haskell, `urbit-king`, has also been deprecated, so there's now only one binary.
22−
23−Version 1.9 has introduced a couple of new features. The first is the concept of
24−"docking". When a new ship is booted, Vere will automatically copy itself into
25−the pier, at `[pier]/.bin/[pace]/vere-v[version]-[architecture]`. It will also
26−create a link to this file at `[pier]/.run`. This means that after the initial
27−boot, the pier is self-contained and can be run with `[pier]/.run`, making the
28−separate binary unnecessary. For older ships that were booted by a previous
29−binary, v1.9 or later will not automatically perform this step, so it must be
30−done with the `dock` utility ([see below](#dock)).
31−
32−The `pace` mentioned in the path above is a new feature, and represents a
33−release channel. At the time of writing, the default `pace` is `live`, which is
34−for standard, stable releases. Alternative release channels will be introduced
35−in the future, for things such as pre-release testing, nightly builds, etc. The
36−`pace` is specified in a text file at `[pier]/.bin/pace`.
37−
38−Along with docking, a binary upgrade feature has also been introduced. If you
39−run the `next` utility ([described below](#next)), Vere will check if there is a
40−newer binary version available for the current `pace`. if there is, it will
41−automatically be downloaded and installed. This means it's no longer necessary
42−to go and manually download new binaries and swap them out, it's all managed
43−inside the pier by Vere.
44−
45−## Common Usage
46−
47−### Boot comet
48−
49−A comet is a kind of ship which may be quickly generated by anyone and which are
50−virtually unlimited. They're useful as free identities for people to quickly try
51−out Urbit.
52−
53−To boot a comet, you just need to use the `-c` argument and specify the name for
54−the pier (the pier is folder containing the ship's state and event log):
55−
56−```
57−urbit -c some-pier-name
58−```
59−
60−It will take a few minutes to bootstrap. Once complete, you'll be able to
61−interact with the Dojo prompt and access the web interface in a browser.
62−
63−When you eventually shut down the ship, the binary will copy itself into the
64−pier, so in future you can run it by doing `/path/to/pier/.run`.
65−
66−### Boot ship
67−
68−To boot a moon, planet, star or galaxy, you must use two arguments:
69−
70−- `-w` - the name of the ship (without the leading `~`).
71−- `-k` - the path to the key file which you downloaded from Bridge (or got from
72− the parent planet and pasted into a file in the case of a moon).
73−
74−```
75−urbit -w sampel-palnet -k /path/to/my.key
76−```
77−
78−It will take a few minutes to bootstrap. Once complete, you'll be able to
79−interact with the Dojo prompt and access the web interface in a browser.
80−
81−If you want, you can use and additional `-c` option to specify a name for the
82−pier. Without `-c`, the pier will be named the same as your ship. Note it's
83−possible to use `-G` in lieu of `-k` and paste the private key directly in as an
84−argument. This might be more convenient in the case of a moon.
85−
86−When you eventually shut down the ship, the binary will copy itself into the
87−pier, so in future you can run it by doing `/path/to/pier/.run`.
88−
89−### Run ship
90−
91−If a ship has already been boostrapped, you can run it by simply specifying the
92−pier:
93−
94−```
95−urbit /path/to/pier
96−```
97−
98−Alternatively, if the pier was booted by version 1.9 or later of the binary, or
99−if you've previously run `dock` on the pier, you don't need a separate urbit
100−binary and can just do `/path/to/pier/.run` to start the ship.
101−
102−### Boot fake ship
103−
104−Development is often done on a "fake" ship rather than a real one. A fake ship
105−has no connection to the real network, and uses fake keys so you don't actually
106−need to own it. A fake ship can only talk to other fake ships on the same local
107−machine.
108−
109−To create one, you just use the `-F` option and specify the name of a ship
110−(commonly a galaxy):
111−
112−```
113−urbit -F zod
114−```
115−
116−### Compact State
117−
118−**Note the ship should be shut down before using either of the utilities described below.**
119−
120−Ships currently have a hard 2GB limit on the size of their state. Sometimes the
121−state of long-running, heavily-used ships can exceed the 2GB limit and crash
122−with a `bail: meme` error. To fix this, there are a couple of ways to reduce the
123−size of the ship's state.
124−
125−The first is the `pack` utility, which defragments the ship's snapshot. This
126−usually only mildly compacts the state, but it is fast and uses little memory.
127−
128−To run `pack`, you can do either `urbit pack /path/to/pier` or
129−`/path/to/pier/.run pack` if it's been docked.
130−
131−The second option is `meld`, which deduplicates the ship's snapshot. This can
132−reduce the size much more significantly, sometimes by as much as half. This can
133−use a lot of memory to complete, sometimes as much as 8GB, so if you don't have
134−ample memory on your machine you might need to map some swap space.
135−
136−To run `meld`, you can either do `urbit meld /path/to/pier` or
137−`/path/to/pier/.run meld` if it's been docked.
138−
139−If the meld succeeds, it'll print a memory report and exit. If it exits with
140−`KILLED`, it means it ran out of memory and the meld was aborted.
141−
142−### Dock binary
143−
144−From binary version 1.9 onwards, newly booted ships will have the binary
145−automatically copied into their piers, so they can be run by doing
146−`/path/to/pier/.run`. The means a separate binary is unnecessary, it's all
147−contained in the pier. For existing ships booted before v1.9, you need to
148−manually run the following command if you want this feature:
149−
150−```
151−urbit dock /path/to/pier
152−```
153−
154−Afterwards, you'll be able to just do `/path/to/pier/.run` and can delete the
155−separate `urbit` binary.
156−
157−### Update binary
158−
159−From binary version 1.9 onwards, there is a mechanism to update the binary
160−without having to go and download it yourself. Simply run `urbit next /path/to/pier` or `/path/to/pier/.run next` if docked. It will check if any
161−newer binaries are available for your release channel and if there are, it'll
162−automatically download the new one and install it in the pier.
163−
164−## Utilities
165−
166−These utilities are not used to run ships, but perform operations on piers,
167−print information about piers, or otherwise do useful things. Note the ship must
168−be stopped to run any of these utilities on a pier. Some of these are utilities
169−of the previously separate `urbit-worker`.
170−
171−### `cram`
172−
173−Jam the state of a ship. The jamfile will be saved in
174−`[pier]/.urb/roc/[current-event-number].jam`. This creates a portable
175−snapshot backup.
176−
177−- Undocked: `urbit cram [pier]`
178−- Docked: `[pier]/.run cram`
179−
180−### `dock`
181−
182−Copies the urbit binary into the target pier. The binary itself will be copied
183−to `[pier]/.bin/[pace]/vere-v[version]-[architecture]`. The `pace` is a
184−release channel. The default `pace` is `live`, for ordinary stable releases. The
185−pace will also be recorded in a text file at `[pier]/.bin/pace`.
186−Additionally, a link to the current binary will be created at
187−`[pier]/.run`, which allows you to start a ship by calling
188−`[pier]/.run`.
189−
190−When a ship is newly booted by a runtime from `v1.9` onwards, it will be
191−automatically docked. For existing ships, it must be done explicitly with this
192−command.
193−
194−- Undocked: `urbit dock [pier]`
195−- Docked: `[pier]/.run dock`
196−
197−Note the auto-dock behavior when booting new ships can be disabled with the
198−`--no-dock` option.
199−
200−### `grab`
201−
202−Measure memory usage analysis of a ship. The result will be printed to the
203−terminal. This is the same output produced by running `|mass` in the Dojo.
204−
205−- Undocked: `urbit grab [pier]`
206−- Docked: `[pier]/.run grab`
207−
208−### `info`
209−
210−Print pier information.
211−
212−- Undocked: `urbit info [pier]`
213−- Docked: `[pier]/.run info`
214−
215−```
216−> urbit info zod
217−loom: mapped 2048MB
218−boot: protected loom
219−live: loaded: MB/268.173.312
220−boot: installed 351 jets
221−
222−urbit: zod at event 256133
223− disk: live=&, event=256133
224−
225−lmdb info:
226− map size: 1099511627776
227− page size: 4096
228− max pages: 268435456
229− number of pages used: 1506786
230− last transaction ID: 255733
231− max readers: 126
232− number of readers used: 0
233− file size (page): 6171795456
234− file size (stat): 6171795456
235−```
236−
237−### `meld`
238−
239−Deduplicate ship state. This can significantly reduce memory usage for ships
240−with large states. This is a common solution when ships use up all available
241−mapped memory (currently 2GB) and crash with `bail: meme`.
242−
243−Note this command may use a large amount of memory during execution, up to
244−around 8GB or so, depending on the size of the ship's state and other factors.
245−If you do not have enough memory to run it, you may need to allocate some swap.
246−
247−If the meld succeeds, it will print out a memory usage report. If it exits
248−saying `KILLED`, it means it ran out of memory and the operation was aborted.
249−
250−- Undocked: `urbit meld [pier]`
251−- Docked: `[pier]/.run meld`
252−
253−### `pack`
254−
255−Defragment a ship's state. This will reduce the size of a ship's state much less
256−than `meld`, but it is much faster and requires much less memory to complete.
257−
258−- Undocked: `urbit pack [pier]`
259−- Docked: `[pier]/.run pack`
260−
261−### `prep`
262−
263−Prepare a pier for upgrade. This utility is designed to be a general-purpose
264−forward-compatibility mechanism. What action (if any) is taken depends on the
265−old version and new version. Currently, it just makes sure the snapshot is fully
266−up-to-date.
267−
268−- Undocked: `urbit prep [pier]`
269−- Docked: `[pier]/.run prep`
270−
271−### `next`
272−
273−Request a runtime upgrade. If your binary is already the latest version, no
274−action will be taken. If a new binary is available, it will be upgraded.
275−
276−- Undocked: `urbit next [pier]`
277−- Docked: `[pier]/.run next`
278−
279−### `queu AT-EVENT`
280−
281−Load a snapshot jamfile. `AT-EVENT` is an event number. There must be
282−corresponding snapshot in `[pier]/.urb/roc/[AT-EVENT].jam` created
283−previously with `cram` or `-n`.
284−
285−- Undocked: `urbit queu [pier] 10000`
286−- Docked: `[pier]/.run queu 10000`
287−
288−### `vere ARGS DIR`
289−
290−Download a binary. `DIR` is an output directory (it must already exist) and `ARGS` are:
291−
292−- `-a, --arch ARCH` - architecture, `ARCH` may be one of `x86_64-linux`,
293− `x86_64-darwin`, and `x86_64-windows`, though more may be added in the future.
294−- `-v, --version VER` - version number, `VER` is e.g. `1.9`.
295−- `-p, --pace` - release channel, e.g. `live`.
296−
297−Example usage:
298−
299−- Undocked: `urbit vere -a x86_64-linux -v 1.9 -p live .`
300−
301−### `serf ARGS`
302−
303−Run as a 'serf' (as though it were the previously separate `urbit-worker`).
304−
305−Note this utility is for kernel development purposes and has a programmatic
306−interface, it does not have a user interface.
307−
308−- Undocked: `urbit serf [pier] [key] [flags] [cache-size] [at-event]`
309−
310−## Options
311−
312−Below are all the options/flags/arguments that can be given to the urbit
313−runtime.
314−
315−### `-A, --arvo DIR`
316−
317−When booting a new ship, use directory `DIR` for the initial `%base` desk sync,
318−rather than the one in the pill.
319−
320−```
321−urbit -w sampel-palnet -k /path/to/my.key -A /path/to/arvo
322−```
323−
324−### `-b, --http-ip IP`
325−
326−Bind the HTTP server to IP address `IP`.
327−
328−- Undocked: `urbit -b 192.168.1.10 [pier]`
329−- Docked: `[pier]/.run -b 192.168.1.10`
330−
331−```
332−> ss -tlnp | grep urbit
333−LISTEN 0 16 127.0.0.1:12321 0.0.0.0:* users:(("urbit",pid=15689,fd=29))
334−LISTEN 0 16 192.168.1.10:8080 0.0.0.0:* users:(("urbit",pid=15689,fd=28))
335−```
336−
337−### `-B, --bootstrap PILL`
338−
339−When booting a new ship, use file `PILL` for the pill, rather than the default
340−one fetched from `https://bootstrap.urbit.org`.
341−
342−```
343−urbit -w sampel-palnet -k /path/to/my.key -B /path/to/the.pill
344−```
345−
346−### `-c, --pier PIER`
347−
348−When booting a ship, name its pier as `PIER` rather than the usual `@p`.
349−
350−- Undocked: `urbit -w sampel-palnet -k /path/to/my.key -c foobar`
351−
352−The pier folder will be named `foobar` as a result of the above command.
353−
354−### `-C, --memo-cache-limit LIMIT`
355−
356−This sets the maximum number of entries for the memoization cache (used by the
357−`~+` rune and a few other things). Zero means uncapped, otherwise the specified
358−number of entries.
359−
360−- Undocked: `urbit -C 50000 [pier]`
361−- Docked: `[pier]/.run -C 50000`
362−
363−### `-d, --daemon`
364−
365−Run the ship in daemon mode. The process will be detached from the terminal
366−(this implies `-t`).
367−
368−- Undocked: `urbit -d [pier]`
369−- Docked: `[pier]/.run -d`
370−
371−### `-e, --ethereum URL`
372−
373−Use the Ethereum gateway at `URL` rather than the default.
374−
375−- Undocked: `urbit -e https://the.url [pier]`
376−- Docked: `[pier]/.run -e https://the.url`
377−
378−### `-F, --fake SHIP`
379−
380−Boot a new fake development ship. Real networking is disabled, and instead the
381−fake ship can only communicate with other fake ships on the local machine. This
382−works for all ship classes except comets.
383−
384−```
385−urbit -F zod
386−```
387−
388−### `-g, --gc`
389−
390−Set GC flag, dumping garbage collector logs to stdout. This runs a GC pass at
391−the end of every virtualized computation. This is intended as a runtime
392−developer/QA tool for verifying refcounts. This currently only works if the
393−binary was built with `MEMORY_DEBUG` (which changes allocation structures and
394−produces incompatible snapshots).
395−
396−- Undocked: `urbit -g [pier]`
397−- Docked: `[pier]/.run -g`
398−
399−### `-G --key-string STRING`
400−
401−Boot a new ship with private key `STRING`.The private key is `@uw` format. See
402−`-k` for an alternative.
403−
404−- Undocked: `urbit -w sampel-palnet -G 0w50w.642KA.glYh8.RvaRp.6TA35.3XRYN.ULCI6.UmcsZ.5rGvG.3dvFt.E6rMF.mZnd~.3O6QB.7LZ1f.-ukYN.z2fcY.Ecviv.LiZEg.8w0sp`
405−
406−### `--http-port PORT`
407−
408−Set the HTTP port to `PORT`. This is the port you'd insecurely access Landscape
409−on. Note this is for insecure HTTP only, see `--https-port` for HTTPS.
410−
411−- Undocked: `urbit --http-port 8085 [pier]`
412−- Docked: `[pier]/.run --http-port 8085`
413−
414−### `--https-port PORT`
415−
416−Set the HTTPS port to `PORT`. This is the port you'd securely access Landscape
417−on. Note that this requires an SSL certificate to be configured, see the
418−[Configuring SSL guide](https://urbit.org/using/os/basics#configuring-ssl) for
419−details. Note that if your ship is behind a reverse proxy (nginx, Caddy, etc)
420−and an SSL certificate is configured _there_, you'd not usually enable HTTPS on
421−the ship itself.
422−
423−Note this is for secure HTTPS only, see `--http-port` for insecure HTTP.
424−
425−- Undocked: `urbit --https-port 8443 [pier]`
426−- Docked: `[pier]/.run --https-port 8443`
427−
428−### `-I, --inject FILE`
429−
430−Inject the event stored in `FILE` jamfile.
431−
432−Note this has "full privileges" and can do anything to your ship. `-I` is for
433−customization in hosting environments, and emergency recovery for sinking ships.
434−Only run from trusted sources.
435−
436−- Undocked: `urbit -I /path/to/file.jam [pier]`
437−- Docked: `[pier]/.run -I /path/to/file.jam`
438−
439−### `-j, --json-trace`
440−
441−Create JSON trace files in `[pier]/.urb/put/trace`.
442−
443−This runs a tracing profiler, and produces JSON output compatible with
444−`chrome://tracing`.
445−
446−- Undocked: `urbit -j [pier]`
447−- Docked: `[pier]/.run urbit -j`
448−
449−### `-J, --ivory-pill PILL`
450−
451−This specifies an alternative Ivory pill to use. An Ivory pill is a pill
452−compiled into the binary and used for runtime support code. You would not
453−typically use this unless you're doing runtime or kernel development.
454−
455−- Undocked: `urbit -J /path/to/ivory.pill [pier]`
456−- Docked: `[pier]/.run -J /path/to/ivory.pill`
457−
458−### `-k, --key-file KEYS`
459−
460−Boot a new ship with the private key file `KEY`. See `-G` for an alternative.
461−
462−- Undocked: `urbit -w sampel-palnet -k /path/to/my.key`
463−
464−### `-L, --local`
465−
466−Run a ship with local networking only. This will disable Ames networking, so the
467−ship will not be able to communicate with other ships. HTTP(S) will continue to
468−work as normal.
469−
470−- Undocked: `urbit -L [pier]`
471−- Docked: `[pier]/.run -L`
472−
473−### `-n, --replay-to NUMBER`
474−
475−Replay up to the specified event `NUMBER`.
476−
477−- Undocked: `urbit -n 10000 [pier]`
478−- Docked: `[pier]/.run -n 10000`
479−
480−A snapshot will be saved in a jamfile at `[pier]/.urb/roc/[NUMBER].jam`.
481−
482−### `--no-conn`
483−
484−Disable the control pane unix socket.
485−
486−- Undocked: `urbit --no-conn [pier]`
487−- Docked: `[pier]/.run --no-conn`
488−
489−### `--no-dock`
490−
491−From v1.9 onwards, when a new ship is booted, the urbit binary will copy itself
492−into the newly created pier by default (see the [`dock`](#dock) section for
493−details). To prevent this from happening, the `--no-dock` option can be used.
494−
495−- Undocked: `urbit --no-dock -w sampel-palnet -k /path/to/my.key`
496−
497−### `-p, --ames-port PORT`
498−
499−Set the Ames UDP port to `PORT`. This is the port used for inter-ship
500−communications.
501−
502−- Undocked: `urbit -p 33333 [pier]`
503−- Docked: `[pier]/.run -p 33333`
504−
505−### `-P, --profile`
506−
507−Enable profiling. Profiles will be saved to `[pier]/.urb/put/profile/[now].txt`.
508−This is useful for debugging and development. Profiling hit counters in Hoon
509−code specified with the `~$` rune will be recorded here.
510−
511−This runs a sampling profiler and produces custom output. Runtime cost metrics
512−are only calculated if the binary was built with `CPU_DEBUG`.
513−
514−- Undocked `urbit -P [pier]`
515−- Docked `[pier]/.run -P`
516−
517−### `-q, --quiet`
518−
519−Run a ship without verbosity. This disables the output that the `|verb` command
520−toggles. This is the opposite of `-v`. Verbosity can be enabled again by running
521−`|verb`.
522−
523−- Undocked: `urbit -q [pier]`
524−- Docked: `[pier]/.run -q`
525−
526−### `-r, --replay-from NUMBER`
527−
528−Load snapshot at event `NUMBER`, only replay after that event. This lets you
529−resume a partially completed replay. For the given `NUMBER`, there must be
530−a corresponding snapshot in `[pier]/.urb/roc/[NUMBER].jam`, created by
531−`cram` or `-n`.
532−
533−- Undocked: `urbit -r 10000 [pier]`
534−- Docked: `[pier]/.run -r 10000`
535−
536−### `-R, --versions`
537−
538−Report Vere build info.
539−
540−```
541−> urbit -R
542−urbit 1.9
543−gmp: 6.2.1
544−sigsegv: 2.14
545−openssl: OpenSSL 1.1.1n 15 Mar 2022
546−libuv: 1.43.0
547−libh2o: 0.13.6
548−lmdb: 0.9.29
549−curl: 7.81.0
550−```
551−
552−- Undocked: `urbit -R [pier]`
553−- Docked: `[pier]/.run -R`
554−
555−### `-t, --no-tty`
556−
557−Disable terminal/TTY assumptions. With this set, there will be no Dojo prompt,
558−and you'll only see debug messages from the runtime. This is similar to daemon
559−mode (see `-d`), but the process will remain attached to the terminal in which
560−it was run.
561−
562−- Undocked: `urbit -t [pier]`
563−- Docked: `[pier]/.run -t`
564−
565−### `-u, --bootstrap-url URL`
566−
567−Boot a new ship, using the pill fetched from `URL` rather than the default one.
568−
569−- Undocked: `urbit -w sampel-palnet -k /path/to/my.key -u http://example.com/the.pill`
570−
571−### `-v, --verbose`
572−
573−Run a ship with verbose output. This is the same as what you get when you run
574−`|verb`, and can be disabled by running `|verb`. This is the opposite of `-q`.
575−
576−- Undocked: `urbit -v [pier]`
577−- Docked: `[pier]/.run -v`
578−
579−### `-w, --name NAME`
580−
581−Boot a new ship with an Urbit ID of `NAME`. The `NAME` is the ordinary `@p`
582−format but without the leading `~`, so `~sampel-palnet` is specified as
583−`sampel-palnet`. This is typically used in conjunction with `-k` when booting a
584−new ship.
585−
586−- Undocked: `urbit -w sampel-palnet -k /path/to/my.key`
587−
588−### `-x, --exit`
589−
590−Run a ship but exist immediately after it starts.
591−
592−- Undocked: `urbit -x [pier]`
593−- Docked: `[pier]/.run -x`
594−
595−### `-X, --scry PATH`
596−
597−Read a ship's state on scry path `PATH`, jamming the result and saving it to
598−`[pier]/.urb/put/[PATH].jam`. The scry path is in the format
599−`/[care]/[path]`, omitting the ship and case elements. For example,
600−`/cx/~zod/base/~2022.6.2..11.27.40..8f56/gen/code/hoon` would be
601−`/cx/base/gen/code/hoon`.
602−
603−- Undocked: `urbit -X /cx/base/gen/code/hoon [pier]`
604−- Docked: `[pier]/.run -X /cx/base/gen/code/hoon`
605−
606−### `-Y, --scry-info FILE`
607−
608−Optional name for the file produced by a scry performed with `-X`, rather than the scry path.
609−
610−- Undocked: `urbit -X /cx/base/gen/code/hoon -Y foobar [pier]`
611−- Docked: `[pier]/.run -X /cx/base/gen/code/hoon -Y foobar`
612−
613−### `-Z, --scry-format FORMAT`
614−
615−Optionally specify the output format for the file produced by a `-X` scry. The
616−format may either be `jam` to produce a jam file, or else an aura. If it's an
617−aura, the leading `@` is omitted, so `@ud` is specified as `ud`. If an aura is
618−specified, the resulting atom is encoded in a text file with that aura's
619−formatting. If an aura is specified, the scry endpoint must produce an atom, not
620−a cell.
621−
622−- Undocked: `urbit -X /cx/base/gen/code/hoon -Z ud [pier]`
623−- Docked: `[pier]/.run -X /cx/base/gen/code/hoon -Z ud`
lib/constants.js−4
@@ -74,10 +74,6 @@ export const footerData = [
7474 href: "/",
7575 },
7676 { title: "Get Started", href: "/getting-started" },
77− {
78− title: "Manual",
79− href: "/using",
80− },
8177 {
8278 title: "FAQ",
8379 href: "/faq",
package.json+1−2
@@ -7,11 +7,10 @@
77 "build": "next build",
88 "export": "npm run prebuild && next build && next export",
99 "start": "next start",
10− "prebuild": "npm run cache-posts && npm run rss && npm run community-tree && npm run getting-started-tree && npm run overview-tree && npm run using-tree",
10+ "prebuild": "npm run cache-posts && npm run rss && npm run community-tree && npm run getting-started-tree && npm run overview-tree",
1111 "community-tree": "node lib/buildPageTree community weight",
1212 "getting-started-tree": "node lib/buildPageTree getting-started weight",
1313 "overview-tree": "node lib/buildPageTree overview weight",
14− "using-tree": "node lib/buildPageTree using weight",
1514 "cache-posts": "node lib/cache.js",
1615 "rss": "node lib/rss.js"
1716 },
pages/using/[[...slug]].jsdeleted−159
@@ -1,159 +0,0 @@
1−import Head from "next/head";
2−import Meta from "../../components/Meta";
3−import Link from "next/link";
4−import { useRouter } from "next/router";
5−import { useState } from "react";
6−import classnames from "classnames";
7−import { join } from "path";
8−import { getPage } from "../../lib/lib";
9−import { Markdown } from "foundation-design-system";
10−import ContentArea from "../../components/ContentArea";
11−import Sidebar from "../../components/DocsSidebar";
12−import UsingTree from "../../cache/using.json";
13−
14−const breadcrumbs = (posts, paths) => {
15− const results = [
16− <Link href="/">Urbit</Link>,
17− <span className="px-1">/</span>,
18− <Link href="/using">User's Manual</Link>,
19− ];
20− let thisLink = "/using";
21− for (const path of paths) {
22− posts = posts.children[path];
23− thisLink = join(thisLink, path);
24− results.push(
25− <span className="px-1">/</span>,
26− <Link href={thisLink}>{posts.title}</Link>
27− );
28− }
29− return results;
30−};
31−
32−const childPages = (thisLink, children, level = 0) => (
33− <ul className="pl-1">
34− {Object.entries(children).map(([childSlug, child]) => (
35− <li>{pageTree(join(thisLink, childSlug), child, level)}</li>
36− ))}
37− </ul>
38−);
39−
40−const pageTree = (thisLink, tree, level = 0) => {
41− const router = useRouter();
42− const firstCrumb = "/" + router.asPath.split("/").slice(1, -1).join("/");
43−
44− const includesThisPage = firstCrumb.includes(thisLink);
45− const isThisPage = router.asPath === thisLink;
46− const [isOpen, toggleTree] = useState(includesThisPage);
47−
48− const activeClasses = classnames({
49− hidden: !isOpen,
50− });
51−
52− const headingItemClasses = classnames({
53− "pl-0 text-wall-500 text-base font-semibold hover:text-green-400 leading-relaxed":
54− level === 0,
55− "pl-4 text-wall-500 text-base font-semibold hover:text-green-400":
56− level === 1,
57− "pl-8 text-wall-500 text-base hover:text-green-400": level === 2,
58− });
59−
60− const pageItemClasses = classnames({
61− "pl-4 text-base hover:text-green-400": level === 0,
62− "pl-8 text-base hover:text-green-400": level === 1,
63− "pl-12 text-base hover:text-green-400": level === 2,
64− });
65−
66− return (
67− <>
68− <span onClick={() => toggleTree(!isOpen)}>
69− <p className={`${headingItemClasses} cursor-pointer`}>{tree.title}</p>
70− </span>
71− <div className={activeClasses}>
72− <ul className={"pl-1"}>
73− {tree.pages.map(({ title, slug }) => {
74− const href = join(thisLink, slug);
75− const isSelected = router.asPath === href;
76− const selectedClasses = classnames({
77− dot: isSelected,
78− "text-green-400": isSelected,
79− });
80− return (
81− <li>
82− <Link href={href} passHref>
83− <a
84− className={`relative ${pageItemClasses} ${selectedClasses}`}
85− >
86− {title}
87− </a>
88− </Link>
89− </li>
90− );
91− })}
92− </ul>
93− {childPages(thisLink, tree.children, level + 1)}
94− </div>
95− </>
96− );
97−};
98−
99−export default function UsingLayout({ posts, data, params, search, markdown }) {
100− return (
101− <>
102− <Head>
103− <title>{data.title} • User's Manual • urbit.org</title>
104− {Meta(data)}
105− </Head>
106− <div className="flex h-screen min-h-screen w-screen sidebar">
107− <Sidebar search={search}>
108− {childPages("/using", posts.children)}
109− </Sidebar>
110− <ContentArea
111− breadcrumbs={breadcrumbs(posts, params.slug?.slice(0, -1) || "")}
112− title={data.title}
113− search={search}
114− section={"User's Manual"}
115− params={params}
116− >
117− <div className="markdown">
118− <Markdown.render content={JSON.parse(markdown)} />
119− </div>
120− </ContentArea>
121− </div>
122− </>
123− );
124−}
125−
126−export async function getStaticProps({ params }) {
127− const posts = UsingTree;
128−
129− const { data, content } = getPage(
130− join(process.cwd(), "content/using", params.slug?.join("/") || "/")
131− );
132−
133− const markdown = JSON.stringify(Markdown.parse({ post: { content } }));
134−
135− return { props: { posts, data, markdown, params } };
136−}
137−
138−export async function getStaticPaths() {
139− const posts = UsingTree;
140− const slugs = [];
141−
142− const allHrefs = (thisLink, tree) => {
143− slugs.push(thisLink, ...tree.pages.map((e) => join(thisLink, e.slug)));
144− allHrefsChildren(thisLink, tree.children);
145− };
146−
147− const allHrefsChildren = (thisLink, children) => {
148− Object.entries(children).map(([childSlug, child]) => {
149− allHrefs(join(thisLink, childSlug), child);
150− });
151− };
152−
153− allHrefs("/using", posts);
154−
155− return {
156− paths: slugs,
157− fallback: false,
158− };
159−}
vercel.json+5−50
@@ -46,11 +46,6 @@
4646 "destination": "/grants/proposals",
4747 "permanent": true
4848 },
49− {
50− "source": "/using/os/getting-started",
51− "destination": "/using/os/basics",
52− "permanent": true
53− },
5449 {
5550 "source": "/grants/(apprenticeships|proposals|bounties)/:page",
5651 "destination": "/grants/:page",
@@ -71,6 +66,11 @@
7166 "destination": "/getting-started",
7267 "permanent": true
7368 },
69+ {
70+ "source": "/using/:path*",
71+ "destination": "https://operators.urbit.org/manual/:path",
72+ "permanent": true
73+ },
7474 {
7575 "source": "/install/mac/latest",
7676 "destination": "https://github.com/urbit/urbit/releases/latest/download/darwin.tgz",
@@ -86,51 +86,6 @@
8686 "destination": "http://github.com/urbit/urbit/releases/latest/download/windows.tgz",
8787 "permanent": true
8888 },
89− {
90− "source": "/using/install",
91− "destination": "/getting-started",
92− "permanent": true
93− },
94− {
95− "source": "/using/planet",
96− "destination": "/getting-started/planet",
97− "permanent": true
98− },
99− {
100− "source": "/using/integrating-api",
101− "destination": "/docs/arvo/eyre/using-eyre",
102− "permanent": true
103− },
104− {
105− "source": "/using/operations",
106− "destination": "/using",
107− "permanent": true
108− },
109− {
110− "source": "/using/operations/bridge",
111− "destination": "/using/id/using-bridge",
112− "permanent": true
113− },
114− {
115− "source": "/using/operations/hosting",
116− "destination": "/using/running/hosting",
117− "permanent": true
118− },
119− {
120− "source": "/using/operations/using-your-ship",
121− "destination": "/using/os/getting-started",
122− "permanent": true
123− },
124− {
125− "source": "/using/operations/stars-and-galaxies",
126− "destination": "/using/os/stars-and-galaxies",
127− "permanent": true
128− },
129− {
130− "source": "/using/operations/bridge-troubleshooting",
131− "destination": "/using/id/bridge-troubleshooting",
132− "permanent": true
133− },
13489 {
13590 "source": "/docs/getting-started/using-a-star",
13691 "destination": "/using/os/stars-and-galaxies/",