mirror of
https://github.com/ilyakooo0/urbit.git
synced 2025-01-08 08:08:35 +03:00
Merge cgyarvin fixes into test.
This commit is contained in:
commit
9d40d206e3
@ -117,7 +117,7 @@
|
|||||||
?+ -.kyz ~& [%strange-kiss -.kyz] +>
|
?+ -.kyz ~& [%strange-kiss -.kyz] +>
|
||||||
%flow +>
|
%flow +>
|
||||||
%harm +>
|
%harm +>
|
||||||
%hail +>
|
%hail (send %hey ~)
|
||||||
%belt (send `dill-belt`p.kyz)
|
%belt (send `dill-belt`p.kyz)
|
||||||
%text (from %out (tuba p.kyz))
|
%text (from %out (tuba p.kyz))
|
||||||
%crud :: (send `dill-belt`[%cru p.kyz q.kyz])
|
%crud :: (send `dill-belt`[%cru p.kyz q.kyz])
|
||||||
|
@ -2399,6 +2399,7 @@
|
|||||||
[%cru p=@tas q=(list tank)] :: echo error
|
[%cru p=@tas q=(list tank)] :: echo error
|
||||||
[%ctl p=@] :: control-key
|
[%ctl p=@] :: control-key
|
||||||
[%del ~] :: true delete
|
[%del ~] :: true delete
|
||||||
|
[%hey ~] :: refresh
|
||||||
[%met p=@] :: meta-key
|
[%met p=@] :: meta-key
|
||||||
[%ret ~] :: return
|
[%ret ~] :: return
|
||||||
[%rez p=@ud q=@ud] :: resize, cols, rows
|
[%rez p=@ud q=@ud] :: resize, cols, rows
|
||||||
|
117
lib/drum.hoon
117
lib/drum.hoon
@ -28,7 +28,6 @@
|
|||||||
$: edg=_80 :: terminal columns
|
$: edg=_80 :: terminal columns
|
||||||
off=@ud :: window offset
|
off=@ud :: window offset
|
||||||
kil=(unit (list ,@c)) :: kill buffer
|
kil=(unit (list ,@c)) :: kill buffer
|
||||||
maz=master :: master window
|
|
||||||
inx=@ud :: ring index
|
inx=@ud :: ring index
|
||||||
fug=(map gill (unit target)) :: connections
|
fug=(map gill (unit target)) :: connections
|
||||||
mir=(pair ,@ud (list ,@c)) :: mirrored terminal
|
mir=(pair ,@ud (list ,@c)) :: mirrored terminal
|
||||||
@ -69,7 +68,8 @@
|
|||||||
=+ myr=(clan our)
|
=+ myr=(clan our)
|
||||||
?: =(%pawn myr)
|
?: =(%pawn myr)
|
||||||
[[%base %talk] [%base %dojo] ~]
|
[[%base %talk] [%base %dojo] ~]
|
||||||
?: =(%earl myr) ~
|
?: =(%earl myr)
|
||||||
|
[[%home %dojo] ~]
|
||||||
[[%home %talk] [%home %dojo] ~]
|
[[%home %talk] [%home %dojo] ~]
|
||||||
::
|
::
|
||||||
++ deft-fish :: default connects
|
++ deft-fish :: default connects
|
||||||
@ -77,11 +77,8 @@
|
|||||||
%- ~(gas in *(set gill))
|
%- ~(gas in *(set gill))
|
||||||
^- (list gill)
|
^- (list gill)
|
||||||
=+ myr=(clan our)
|
=+ myr=(clan our)
|
||||||
:: ?: =(%pawn myr)
|
|
||||||
:: [[our %dojo] ~]
|
|
||||||
?: =(%earl myr)
|
?: =(%earl myr)
|
||||||
=+ dad=(sein our)
|
[[(sein our) %talk] [our %dojo] ~]
|
||||||
[[dad %talk] [dad %dojo] ~]
|
|
||||||
[[our %talk] [our %dojo] ~]
|
[[our %talk] [our %dojo] ~]
|
||||||
::
|
::
|
||||||
++ deft-mast :: default master
|
++ deft-mast :: default master
|
||||||
@ -100,7 +97,6 @@
|
|||||||
:* 80 :: edg
|
:* 80 :: edg
|
||||||
0 :: off
|
0 :: off
|
||||||
~ :: kil
|
~ :: kil
|
||||||
(deft-mast our) :: maz
|
|
||||||
0 :: inx
|
0 :: inx
|
||||||
~ :: fug
|
~ :: fug
|
||||||
[0 ~] :: mir
|
[0 ~] :: mir
|
||||||
@ -148,39 +144,6 @@
|
|||||||
[%pass wire note] ::
|
[%pass wire note] ::
|
||||||
== ::
|
== ::
|
||||||
++ move (pair bone card) :: user-level move
|
++ move (pair bone card) :: user-level move
|
||||||
++ sp :: command parser
|
|
||||||
|% ++ sp-ukase
|
|
||||||
%+ knee *ukase |. ~+
|
|
||||||
;~ pose
|
|
||||||
(stag %add ;~(pfix lus sp-gills))
|
|
||||||
(stag %del ;~(pfix hep sp-gills))
|
|
||||||
(stag %new ;~(pfix tar sp-wells))
|
|
||||||
==
|
|
||||||
::
|
|
||||||
++ sp-gills
|
|
||||||
;~ pose
|
|
||||||
(most ;~(plug com ace) sp-gill)
|
|
||||||
%+ cook
|
|
||||||
|= a=ship
|
|
||||||
[[a %talk] [a %dojo] ~]
|
|
||||||
;~(pfix sig fed:ag)
|
|
||||||
==
|
|
||||||
::
|
|
||||||
++ sp-gill
|
|
||||||
;~ pose
|
|
||||||
(stag our sym)
|
|
||||||
;~ plug
|
|
||||||
;~(pfix sig fed:ag)
|
|
||||||
;~(pfix fas sym)
|
|
||||||
==
|
|
||||||
==
|
|
||||||
++ sp-well
|
|
||||||
;~ pose
|
|
||||||
;~(plug sym ;~(pfix fas sym))
|
|
||||||
(stag %home sym)
|
|
||||||
==
|
|
||||||
++ sp-wells (most ;~(plug com ace) sp-well)
|
|
||||||
--
|
|
||||||
--
|
--
|
||||||
|_ [moz=(list move) biz=(list dill-blit)]
|
|_ [moz=(list move) biz=(list dill-blit)]
|
||||||
++ diff-sole-effect-phat ::
|
++ diff-sole-effect-phat ::
|
||||||
@ -335,11 +298,8 @@
|
|||||||
+>
|
+>
|
||||||
=+ gul=se-agon
|
=+ gul=se-agon
|
||||||
=+ tur=`(unit (unit target))`?~(gul ~ (~(get by fug) u.gul))
|
=+ tur=`(unit (unit target))`?~(gul ~ (~(get by fug) u.gul))
|
||||||
?: &(!liv.maz |(=(~ gul) =(~ tur) =([~ ~] tur))) (se-blit %bel ~)
|
?: |(=(~ gul) =(~ tur) =([~ ~] tur)) (se-blit %bel ~)
|
||||||
=+ ^= taz
|
=+ taz=~(. ta [& (need gul)] `target`(need (need tur)))
|
||||||
?: liv.maz
|
|
||||||
~(. ta [& %& `gill`(fall gul [our %none])] `target`tar.maz)
|
|
||||||
~(. ta [& %| (need gul)] `target`(need (need tur)))
|
|
||||||
=< ta-abet
|
=< ta-abet
|
||||||
?- -.bet
|
?- -.bet
|
||||||
%aro (ta-aro:taz p.bet)
|
%aro (ta-aro:taz p.bet)
|
||||||
@ -347,6 +307,7 @@
|
|||||||
%cru (ta-cru:taz p.bet q.bet)
|
%cru (ta-cru:taz p.bet q.bet)
|
||||||
%ctl (ta-ctl:taz p.bet)
|
%ctl (ta-ctl:taz p.bet)
|
||||||
%del ta-del:taz
|
%del ta-del:taz
|
||||||
|
%hey taz(mir [0 ~])
|
||||||
%met (ta-met:taz p.bet)
|
%met (ta-met:taz p.bet)
|
||||||
%ret ta-ret:taz
|
%ret ta-ret:taz
|
||||||
%txt (ta-txt:taz p.bet)
|
%txt (ta-txt:taz p.bet)
|
||||||
@ -372,7 +333,7 @@
|
|||||||
=. +>.$ (se-text "[unlinked from {<gyl>}]")
|
=. +>.$ (se-text "[unlinked from {<gyl>}]")
|
||||||
?: =(gyl [our %dojo]) :: undead dojo
|
?: =(gyl [our %dojo]) :: undead dojo
|
||||||
(se-link gyl)
|
(se-link gyl)
|
||||||
se-prom(liv.maz ?~(fug & liv.maz))
|
+>.$
|
||||||
::
|
::
|
||||||
++ se-dump :: print tanks
|
++ se-dump :: print tanks
|
||||||
|= tac=(list tank)
|
|= tac=(list tank)
|
||||||
@ -396,12 +357,12 @@
|
|||||||
^+ +>
|
^+ +>
|
||||||
=. +> (se-text "[linked to {<gyl>}]")
|
=. +> (se-text "[linked to {<gyl>}]")
|
||||||
?> =(~ (~(got by fug) gyl))
|
?> =(~ (~(got by fug) gyl))
|
||||||
(se-alas:se-prom(liv.maz |, fug (~(put by fug) gyl `*target)) gyl)
|
(se-alas(fug (~(put by fug) gyl `*target)) gyl)
|
||||||
::
|
::
|
||||||
++ se-nuke :: teardown
|
++ se-nuke :: teardown
|
||||||
|= gyl=gill
|
|= gyl=gill
|
||||||
^+ +>
|
^+ +>
|
||||||
(se-drop:(se-pull(liv.maz |) gyl) & gyl)
|
(se-drop:(se-pull gyl) & gyl)
|
||||||
::
|
::
|
||||||
++ se-like :: act in master
|
++ se-like :: act in master
|
||||||
|= kus=ukase
|
|= kus=ukase
|
||||||
@ -446,14 +407,6 @@
|
|||||||
?~ t.yal i.yal
|
?~ t.yal i.yal
|
||||||
:(welp i.yal ", " $(yal t.yal))
|
:(welp i.yal ", " $(yal t.yal))
|
||||||
::
|
::
|
||||||
++ se-prom :: update drum prompt
|
|
||||||
^+ .
|
|
||||||
=+ mux=se-plot
|
|
||||||
%_ +
|
|
||||||
cad.pom.tar.maz
|
|
||||||
(welp (scow %p our) ?~(mux "# " :(welp ":" mux "# ")))
|
|
||||||
==
|
|
||||||
::
|
|
||||||
++ se-link :: connect to app
|
++ se-link :: connect to app
|
||||||
|= gyl=gill
|
|= gyl=gill
|
||||||
+>(eel (~(put in eel) gyl))
|
+>(eel (~(put in eel) gyl))
|
||||||
@ -477,15 +430,13 @@
|
|||||||
(se-show (sub p.lin off) (scag edg (slag off q.lin)))
|
(se-show (sub p.lin off) (scag edg (slag off q.lin)))
|
||||||
::
|
::
|
||||||
++ se-view :: flush buffer
|
++ se-view :: flush buffer
|
||||||
?: liv.maz
|
|
||||||
(se-just ~(ta-vew ta [& & ~zod %$] tar.maz))
|
|
||||||
=+ gul=se-agon
|
=+ gul=se-agon
|
||||||
?~ gul se-view(liv.maz &)
|
?~ gul +
|
||||||
=+ gyr=(~(get by fug) u.gul)
|
=+ gyr=(~(get by fug) u.gul)
|
||||||
?~ gyr se-view(liv.maz &)
|
?~ gyr +>
|
||||||
?~ u.gyr se-view(liv.maz &)
|
?~ u.gyr +>
|
||||||
%- se-just
|
%- se-just
|
||||||
~(ta-vew ta [& | u.gul] u.u.gyr)
|
~(ta-vew ta [& u.gul] u.u.gyr)
|
||||||
::
|
::
|
||||||
++ se-emit :: emit move
|
++ se-emit :: emit move
|
||||||
|= mov=move
|
|= mov=move
|
||||||
@ -517,7 +468,7 @@
|
|||||||
++ se-tame :: switch connection
|
++ se-tame :: switch connection
|
||||||
|= gyl=gill
|
|= gyl=gill
|
||||||
^+ ta
|
^+ ta
|
||||||
~(. ta [& %| gyl] (need (~(got by fug) gyl)))
|
~(. ta [& gyl] (need (~(got by fug) gyl)))
|
||||||
::
|
::
|
||||||
++ se-diff :: receive results
|
++ se-diff :: receive results
|
||||||
|= [gyl=gill fec=sole-effect]
|
|= [gyl=gill fec=sole-effect]
|
||||||
@ -526,44 +477,23 @@
|
|||||||
::
|
::
|
||||||
++ ta :: per target
|
++ ta :: per target
|
||||||
|_ $: $: liv=? :: don't delete
|
|_ $: $: liv=? :: don't delete
|
||||||
mav=? :: showing master
|
|
||||||
gyl=gill :: target app
|
gyl=gill :: target app
|
||||||
== ::
|
== ::
|
||||||
target :: target state
|
target :: target state
|
||||||
== ::
|
== ::
|
||||||
++ ta-abet :: resolve
|
++ ta-abet :: resolve
|
||||||
^+ ..ta
|
^+ ..ta
|
||||||
=. liv.maz mav
|
|
||||||
?: mav
|
|
||||||
?. liv
|
?. liv
|
||||||
(se-blit `dill-blit`[%qit ~])
|
?: (~(has in (deft-fish our)) gyl)
|
||||||
se-prom:+>(tar.maz +<+)
|
(se-blit qit/~)
|
||||||
?. liv
|
(se-nuke gyl)
|
||||||
=. ..ta (se-nuke gyl)
|
|
||||||
..ta(liv.maz =(~ fug))
|
|
||||||
..ta(fug (~(put by fug) gyl ``target`+<+))
|
..ta(fug (~(put by fug) gyl ``target`+<+))
|
||||||
::
|
::
|
||||||
++ ta-poke |=(a=pear +>(..ta (se-poke gyl a))) :: poke gyl
|
++ ta-poke |=(a=pear +>(..ta (se-poke gyl a))) :: poke gyl
|
||||||
++ ta-ant :: toggle master
|
|
||||||
^+ .
|
|
||||||
?: mav
|
|
||||||
?: =(~ fug) ta-bel
|
|
||||||
%_ .
|
|
||||||
mav |
|
|
||||||
+<+ (need (~(got by fug) gyl))
|
|
||||||
tar.maz +<+
|
|
||||||
==
|
|
||||||
%_ .
|
|
||||||
mav &
|
|
||||||
+<+ tar.maz
|
|
||||||
fug (~(put by fug) gyl `+<+)
|
|
||||||
==
|
|
||||||
::
|
::
|
||||||
++ ta-act :: send action
|
++ ta-act :: send action
|
||||||
|= act=sole-action
|
|= act=sole-action
|
||||||
^+ +>
|
^+ +>
|
||||||
?: mav
|
|
||||||
+>.$
|
|
||||||
(ta-poke %sole-action act)
|
(ta-poke %sole-action act)
|
||||||
::
|
::
|
||||||
++ ta-aro :: hear arrow
|
++ ta-aro :: hear arrow
|
||||||
@ -659,7 +589,7 @@
|
|||||||
ta-bel
|
ta-bel
|
||||||
%- ta-hom(pos.inp 0, kil `(scag pos.inp buf.say.inp))
|
%- ta-hom(pos.inp 0, kil `(scag pos.inp buf.say.inp))
|
||||||
(ta-cut 0 pos.inp)
|
(ta-cut 0 pos.inp)
|
||||||
%v ta-ant
|
%v ta-bel
|
||||||
%x +>(+> se-anon)
|
%x +>(+> se-anon)
|
||||||
%y ?~ kil ta-bel
|
%y ?~ kil ta-bel
|
||||||
%- ta-hom(pos.inp (add pos.inp (lent u.kil)))
|
%- ta-hom(pos.inp (add pos.inp (lent u.kil)))
|
||||||
@ -768,18 +698,7 @@
|
|||||||
+>(pom pom(cad :(welp (scow %p p.gyl) ":" (trip q.gyl) cad.pom)))
|
+>(pom pom(cad :(welp (scow %p p.gyl) ":" (trip q.gyl) cad.pom)))
|
||||||
::
|
::
|
||||||
++ ta-ret :: hear return
|
++ ta-ret :: hear return
|
||||||
?. mav
|
|
||||||
(ta-act %ret ~)
|
(ta-act %ret ~)
|
||||||
=+ txt=(tufa buf.say.inp)
|
|
||||||
=+ fey=(rose txt sp-ukase:sp)
|
|
||||||
?- -.fey
|
|
||||||
%| (ta-erl (lent (tuba (scag p.fey txt))))
|
|
||||||
%& ?~ p.fey
|
|
||||||
(ta-erl (lent buf.say.inp))
|
|
||||||
=. +>+> (se-like u.p.fey)
|
|
||||||
=. pom pom.tar.maz
|
|
||||||
(ta-hom:ta-nex %set ~)
|
|
||||||
==
|
|
||||||
::
|
::
|
||||||
++ ta-ser :: reverse search
|
++ ta-ser :: reverse search
|
||||||
|= ext=(list ,@c)
|
|= ext=(list ,@c)
|
||||||
|
32
pub/doc.md
32
pub/doc.md
@ -1,10 +1,38 @@
|
|||||||
Urbit Manual
|
# Urbit documentation homepage
|
||||||
============
|
|
||||||
|
Tutorial
|
||||||
|
README
|
||||||
|
Console
|
||||||
|
Admin commands (|hood)
|
||||||
|
Default appliances
|
||||||
|
:talk
|
||||||
|
:dojo
|
||||||
|
Nock tutorials
|
||||||
|
Hoon tutorials
|
||||||
|
Arvo commentaries
|
||||||
|
Arvo annotated examples
|
||||||
|
generators
|
||||||
|
web fabricators
|
||||||
|
marks
|
||||||
|
%gall appliances
|
||||||
|
|
||||||
|
Inactive
|
||||||
|
(all old doc)
|
||||||
|
|
||||||
|
Speculative
|
||||||
|
Whitepapers, essays, artifacts.
|
||||||
|
|
||||||
|
Videos
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Urbit is a general-purpose computing stack designed to live in the cloud.
|
Urbit is a general-purpose computing stack designed to live in the cloud.
|
||||||
|
|
||||||
<list dataPreview="true"></list>
|
<list dataPreview="true"></list>
|
||||||
|
|
||||||
|
<list dataPreview=
|
||||||
`arvo` is event driven and modular. `arvo` modules are called 'vanes'.
|
`arvo` is event driven and modular. `arvo` modules are called 'vanes'.
|
||||||
|
|
||||||
<list dataPath="/pub/doc/arvo" dataPreview="true"></list>
|
<list dataPath="/pub/doc/arvo" dataPreview="true"></list>
|
||||||
|
43
pub/newdoc.md
Normal file
43
pub/newdoc.md
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# Urbit documentation homepage
|
||||||
|
|
||||||
|
Tutorial
|
||||||
|
README
|
||||||
|
Console
|
||||||
|
Admin commands (|hood)
|
||||||
|
Default appliances
|
||||||
|
:talk
|
||||||
|
:dojo
|
||||||
|
Nock tutorials
|
||||||
|
Hoon tutorials
|
||||||
|
Arvo commentaries
|
||||||
|
Arvo annotated examples
|
||||||
|
generators
|
||||||
|
web fabricators
|
||||||
|
marks
|
||||||
|
%gall appliances
|
||||||
|
Contributing
|
||||||
|
|
||||||
|
Inactive
|
||||||
|
(all old doc)
|
||||||
|
|
||||||
|
Speculative
|
||||||
|
Whitepapers, essays, etc.
|
||||||
|
|
||||||
|
Videos
|
||||||
|
|
||||||
|
|
||||||
|
!= =+ ^= core |% ++ dech |= [a=@ b=@] ?: =(+(b) a) b $(b +(b)) ++ dec |= a=@ ++ add |= [a=@ b=@] ^- @ ?: =(0 a) b $(a (dec a), b +(b)) -- (add.core 10 10)
|
||||||
|
|
||||||
|
|
||||||
|
Urbit is a general-purpose computing stack designed to live in the cloud.
|
||||||
|
|
||||||
|
<list dataPreview="true"></list>
|
||||||
|
|
||||||
|
<list dataPreview=
|
||||||
|
`arvo` is event driven and modular. `arvo` modules are called 'vanes'.
|
||||||
|
|
||||||
|
<list dataPath="/pub/doc/arvo" dataPreview="true"></list>
|
||||||
|
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Come join us on `:talk` in the `/urbit-meta` channel to ask questions and get help.
|
273
pub/newdoc/readme.md
Normal file
273
pub/newdoc/readme.md
Normal file
@ -0,0 +1,273 @@
|
|||||||
|
# Urbit README
|
||||||
|
|
||||||
|
Urbit is a clean-slate system software stack defined as a
|
||||||
|
deterministic computer. An encrypted P2P network, Ames, runs on
|
||||||
|
a functional operating system, Arvo, written in a strict, typed
|
||||||
|
functional language, Hoon, which compiles itself to a combinator
|
||||||
|
interpreter, Nock, whose spec is 340 bytes compressed.
|
||||||
|
|
||||||
|
Urbit's state is a pure, frozen function of its event history.
|
||||||
|
In practice it uses a memory checkpoint and an append-only log.
|
||||||
|
Every event is a transaction; Urbit is an ACID database and a
|
||||||
|
single-level store. Code within Urbit has no direct access to
|
||||||
|
the underlying OS, but the Urbit state function defines I/O:
|
||||||
|
|
||||||
|
|=([system-event this-state] [system-actions next-state])
|
||||||
|
|
||||||
|
Urbit is designed as a personal cloud server for self-hosted web
|
||||||
|
applications. It's also good at using web APIs to manage any
|
||||||
|
data you may have stuck in traditional web applications. And of
|
||||||
|
course it can communicate over its own encrypted P2P network,
|
||||||
|
which it already uses for code update and persistent chat.
|
||||||
|
|
||||||
|
Urbit is patent-free and MIT licensed. Anyone can run the VM, of
|
||||||
|
course, but the Urbit network is officially invitation-only. Not
|
||||||
|
that we're antisocial -- just that we're under construction.
|
||||||
|
|
||||||
|
Right now, Urbit's only practical use is to host and develop
|
||||||
|
itself. Its performance is awful. Its documentation is
|
||||||
|
inadequate. Its keys are test keys. Its servers melt down on a
|
||||||
|
regular basis. We reserve the right to reboot the whole network
|
||||||
|
-- and we will.
|
||||||
|
|
||||||
|
If you're interested in following Urbit, you can:
|
||||||
|
|
||||||
|
- Read more documentation at [urbit.org](http://urbit.org) XX doc
|
||||||
|
- Give us your email address at [urbit.org](http://urbit.org).
|
||||||
|
- Check out the
|
||||||
|
[urbit-dev](https://groups.google.com/forum/#!forum/urbit-dev)
|
||||||
|
mailing list.
|
||||||
|
- Follow [@urbit_](https://twitter.com/urbit\_) on Twitter.
|
||||||
|
- Hit us up by email, <urbit@urbit.org>. We're nice!
|
||||||
|
|
||||||
|
# Code of conduct
|
||||||
|
|
||||||
|
Everyone involved in the Urbit project needs to understand and
|
||||||
|
respect our code of conduct, which is: "don't be rude."
|
||||||
|
|
||||||
|
# Installing Urbit
|
||||||
|
|
||||||
|
Urbit can be installed on most Unix systems. There is no Windows
|
||||||
|
port. Windows is a great OS, we just haven't gotten to it yet.
|
||||||
|
Use a VM.
|
||||||
|
|
||||||
|
## Installing as a package
|
||||||
|
|
||||||
|
### OS X - Homebrew
|
||||||
|
|
||||||
|
brew install --HEAD homebrew/head-only/urbit
|
||||||
|
|
||||||
|
### Ubuntu or Debian
|
||||||
|
|
||||||
|
Third-party packages are available, at:
|
||||||
|
|
||||||
|
https://github.com/yebyen/urbit-deb
|
||||||
|
|
||||||
|
Urbit is only supported on Jessie onward (but outbound HTTPS
|
||||||
|
requests only work on Stretch; I wish we knew why; help us!)
|
||||||
|
|
||||||
|
## Hand-build from source
|
||||||
|
|
||||||
|
First, install all external dependencies. Then, make.
|
||||||
|
|
||||||
|
### Dependencies
|
||||||
|
|
||||||
|
urbit depends on:
|
||||||
|
|
||||||
|
gcc (or clang)
|
||||||
|
gmp
|
||||||
|
libsigsegv
|
||||||
|
openssl
|
||||||
|
automake
|
||||||
|
autoconf
|
||||||
|
ragel
|
||||||
|
cmake
|
||||||
|
re2c
|
||||||
|
libtool
|
||||||
|
libssl-dev (Linux only)
|
||||||
|
ncurses (Linux only)
|
||||||
|
|
||||||
|
#### Ubuntu or Debian
|
||||||
|
|
||||||
|
sudo apt-get install libgmp3-dev libsigsegv-dev openssl libssl-dev libncurses5-dev git make exuberant-ctags automake autoconf libtool g++ ragel cmake re2c
|
||||||
|
|
||||||
|
#### Fedora
|
||||||
|
|
||||||
|
sudo dnf install gcc gcc-c++ git gmp-devel openssl-devel openssl ncurses-devel libsigsegv-devel ctags automake autoconf libtool ragel cmake re2c
|
||||||
|
|
||||||
|
#### AWS
|
||||||
|
|
||||||
|
sudo yum --enablerepo epel install gcc gcc-c++ git gmp-devel openssl-devel ncurses-devel libsigsegv-devel ctags automake autoconf libtool cmake re2c
|
||||||
|
|
||||||
|
#### OS X - Homebrew
|
||||||
|
|
||||||
|
brew install git gmp libsigsegv openssl libtool autoconf automake cmake
|
||||||
|
|
||||||
|
#### OS X - Macports
|
||||||
|
|
||||||
|
sudo port install git gmp libsigsegv openssl autoconf automake cmake
|
||||||
|
|
||||||
|
Although `automake`/`autoconf`/`libtool` are generally installed by
|
||||||
|
default, some have reported needing to uninstall and reinstall those
|
||||||
|
three packages, at least with Homebrew. Your mileage may vary.
|
||||||
|
|
||||||
|
#### FreeBSD
|
||||||
|
|
||||||
|
pkg install git gmake gmp libsigsegv openssl automake autoconf ragel cmake re2c libtool
|
||||||
|
|
||||||
|
### Download and make
|
||||||
|
|
||||||
|
Clone the repo:
|
||||||
|
|
||||||
|
git clone git://github.com/urbit/urbit.git
|
||||||
|
|
||||||
|
`cd` to the directory you just created:
|
||||||
|
|
||||||
|
cd urbit
|
||||||
|
|
||||||
|
Run `make`:
|
||||||
|
|
||||||
|
make
|
||||||
|
|
||||||
|
(On FreeBSD, use `gmake` instead.)
|
||||||
|
|
||||||
|
The executable is `bin/urbit`. Install it somewhere, or just use
|
||||||
|
it where it is. Urbit chroots, so it's more secure if setuid root:
|
||||||
|
|
||||||
|
sudo chmod +s bin/urbit
|
||||||
|
|
||||||
|
## Launch your urbit
|
||||||
|
|
||||||
|
An urbit is a persistent server on a P2P network. An address on
|
||||||
|
this network is a 128-bit number, or "plot." Every server on the
|
||||||
|
Urbit network (we just call them "urbits") has one unique plot.
|
||||||
|
|
||||||
|
Since Urbit is designed as a personal server, an Urbit plot is
|
||||||
|
both a network address and a digital identity. There is no
|
||||||
|
human-meaningful name layer like the DNS. To make urbits as
|
||||||
|
memorable as possible, we type them in a phonemic syntax with one
|
||||||
|
byte per syllable, like `~harlyx-rocsev` for `0x510b.9441`.
|
||||||
|
|
||||||
|
Urbit address space is cryptographic property, like Bitcoin, but
|
||||||
|
Urbit doesn't use a blockchain. Plots are digital land, not
|
||||||
|
digital currency; you own your urbit cryptographically, but you
|
||||||
|
don't get it by mining. In land, transfers are infrequent and
|
||||||
|
not frictionless. (Right now, all keys are test keys, and there
|
||||||
|
are no transfers, only initial invitations.)
|
||||||
|
|
||||||
|
Urbit is semi-decentralized: it overlays a 64-bit hierarchical
|
||||||
|
structure on the low end of a 128-bit fingerprint namespace. If
|
||||||
|
you have an invitation, it's a *ticket* that lets you create a
|
||||||
|
32-bit urbit, aka *planet*. If you don't have an invitation, you
|
||||||
|
have to create a 128-bit urbit, aka *comet*.
|
||||||
|
|
||||||
|
As a comet, you're not necessarily a bad person. But you could
|
||||||
|
be anyone, so you have zero reputation. You have no official
|
||||||
|
access to any Urbit services. Any connectivity you may enjoy
|
||||||
|
could be shut off at any time, and it probably will be. If the
|
||||||
|
Internet has proven one thing, it's that positive default
|
||||||
|
reputation and an infinite identity supply don't mix.
|
||||||
|
|
||||||
|
If you have an invitation, it's a planet like `~fintud-macrep`
|
||||||
|
and a ticket like `~fortyv-tombyt-tabsen-sonres`. Run
|
||||||
|
|
||||||
|
urbit -w fintud-macrep -t fortyv-tombyt-tabsen-sonres
|
||||||
|
|
||||||
|
If you don't have an invitation, pick a nickname for your comet,
|
||||||
|
like `mycomet`. Urbit will randomly generate a 128-bit plot:
|
||||||
|
|
||||||
|
urbit -c mycomet
|
||||||
|
|
||||||
|
Either way, creating your urbit will take some time. Go get
|
||||||
|
a cup of coffee. Some of this time involves creating keys;
|
||||||
|
some of it involves downloading code over Urbit itself.
|
||||||
|
|
||||||
|
Since Urbit is a P2P network that runs over random UDP ports,
|
||||||
|
some firewalls may not like it. Urbit without connectivity isn't
|
||||||
|
useless, but it can't boot without the network.
|
||||||
|
|
||||||
|
If run as `root`, the `urbit` process can only read and write
|
||||||
|
inside the `fintud-macrep` or `mycomet` directory, which we call
|
||||||
|
your *pier*. A pier is portable; any Urbit install on any OS can
|
||||||
|
execute the same pier.
|
||||||
|
|
||||||
|
In the pier directory is a set of user-level mount points. Mount
|
||||||
|
points are synced Dropbox style, with Unix file changes
|
||||||
|
autocommitted to the Urbit revision control system (`%clay`) and
|
||||||
|
vice versa. You edit Urbit code with vim and emacs, or whatever.
|
||||||
|
|
||||||
|
Also within the pier is a system directory, `.urb/`, which
|
||||||
|
contains an event log (`egz.hope`), a checkpoint (`.chk`), and
|
||||||
|
I/O directories for uploads and downloads (`put` and `get`).
|
||||||
|
You can compact the pier by deleting the checkpoint, although
|
||||||
|
that means Urbit needs to re-execute its entire event history.
|
||||||
|
This will take some time. Go have a beer.
|
||||||
|
|
||||||
|
Also in `.urb` is a file like `code.~rosrev-dinnul`. This is
|
||||||
|
your passcode; all data in the pier [XX: not yet the checkpoint]
|
||||||
|
is encrypted with it. For extra security, print out or memorize
|
||||||
|
the contents of this file, then delete it; Urbit will prompt for
|
||||||
|
the passcode on startup.
|
||||||
|
|
||||||
|
When it's created (and before it calls `chroot()`), your urbit
|
||||||
|
creates a passcode file, with a name like `~posluc-darnup`,
|
||||||
|
in `~/.urbit`. If you want to encrypt the checkpoint and log,
|
||||||
|
delete this file; Urbit will prompt you for its contents. Please
|
||||||
|
be warned that Urbit is not at present secure in any way!
|
||||||
|
|
||||||
|
Wait until you see a prompt, either
|
||||||
|
|
||||||
|
~fintud-macrep:talk()
|
||||||
|
or
|
||||||
|
~fintud-macrep:dojo>
|
||||||
|
|
||||||
|
and then press ^D to quit. Your urbit is launched.
|
||||||
|
|
||||||
|
Execute
|
||||||
|
-------
|
||||||
|
|
||||||
|
To restart your urbit, run with the pier name:
|
||||||
|
|
||||||
|
urbit fintud-macrep
|
||||||
|
urbit mycomet
|
||||||
|
|
||||||
|
Your Urbit is a database, at least in theory. You can kill the
|
||||||
|
process however you like, and it won't lose state. In theory.
|
||||||
|
In practice, this works better on OS X than Linux. Also, don't
|
||||||
|
let your filesystem run out of disk!
|
||||||
|
|
||||||
|
Out of the box, your urbit is running two default appliances,
|
||||||
|
`:dojo` (a shell or REPL) and `:talk`. Switch between them with
|
||||||
|
`^X`. Note that all apps share an output log, but `^X` switches
|
||||||
|
the prompt.
|
||||||
|
|
||||||
|
`^D` from any default appliance exits the urbit process.
|
||||||
|
|
||||||
|
To jump straight into the Urbit experience, join the global
|
||||||
|
station `urbit-meta`:
|
||||||
|
|
||||||
|
~fintud-macrep:talk() ;join ~doznec/urbit-meta
|
||||||
|
|
||||||
|
Please remember our code of conduct: "don't be rude." Also,
|
||||||
|
`urbit-meta` is politically correct and safe for work. Please,
|
||||||
|
no rude, un-PC or NSFW content.
|
||||||
|
|
||||||
|
Learn more
|
||||||
|
----------
|
||||||
|
|
||||||
|
Your urbit is a web server, so the best place to read about it
|
||||||
|
is in your browser.
|
||||||
|
|
||||||
|
Urbit prints the HTTP port it's serving when it starts up:
|
||||||
|
|
||||||
|
http: live (insecure) on 8080
|
||||||
|
|
||||||
|
8080 is the default. If you're running on AWS or another cloud
|
||||||
|
service, this port may be firewalled; go to the firewall
|
||||||
|
configuration to open it. In a last resort, you can use our
|
||||||
|
server, `doznec.urbit.org`.
|
||||||
|
|
||||||
|
But assuming it's `localhost:8080`, the docs are at
|
||||||
|
|
||||||
|
http://localhost:8080/pub/fab/tree/doc
|
||||||
|
|
Loading…
Reference in New Issue
Block a user