urbit/README.md

243 lines
6.5 KiB
Markdown
Raw Normal View History

2015-10-20 21:40:29 +03:00
Urbit
2013-09-29 00:21:18 +04:00
=====
2015-10-20 21:40:29 +03:00
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 gzips to 340 bytes.
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
What is this for? Most directly, Urbit is designed as a personal
cloud server for self-hosted web apps. It also uses HTTP APIs to
manage data stuck in traditional web applications.
2015-09-23 00:04:11 +03:00
2015-10-20 21:40:29 +03:00
More broadly, Urbit's network tackles identity and security problems
which the Internet can't easily address. Programming for a
deterministic single-level store is also a different experience from
Unix programming, regardless of language.
2015-06-17 04:27:28 +03:00
2015-10-20 21:40:29 +03:00
Getting involved
----------------
If you're interested in following Urbit, you can:
- Read our documentation at [urbit.org](http://urbit.org/docs)
- Subscribe to our newsletter at [urbit.org](http://urbit.org).
- Check out the
2015-06-17 04:27:28 +03:00
[urbit-dev](https://groups.google.com/forum/#!forum/urbit-dev)
mailing list.
- Follow [@urbit_](https://twitter.com/urbit\_) on Twitter.
2015-10-20 21:40:29 +03:00
- Hit us up by email, `urbit@urbit.org`. We're nice!
2013-09-29 00:21:18 +04:00
2015-10-20 21:40:29 +03:00
Code of conduct
---------------
2014-12-19 22:09:07 +03:00
2015-10-20 21:40:29 +03:00
Everyone involved in the Urbit project needs to understand and
respect our code of conduct, which is: "don't be rude."
2013-09-29 07:16:11 +04:00
2015-10-20 21:40:29 +03:00
Documentation
=============
2015-10-20 21:40:29 +03:00
In-progress documentation can be found at
[urbit.org/docs](http://urbit.org/docs).
2015-10-20 21:40:29 +03:00
These docs ship with your urbit. If you're running one locally you
can access them at
http://localhost:8080/home/docs
Assuming you're running on port 8080. The port is printed on startup.
2015-10-20 21:46:25 +03:00
Install
=======
2015-10-20 21:40:29 +03:00
Urbit can be installed on most Unix systems. There is no Windows
port. Windows is a wonderful OS, we just haven't gotten to it yet.
Use a VM.
2015-11-17 06:29:27 +03:00
Configure swap if needed
------------------------
Urbit wants to map 2GB of memory when it boots up. We won't
necessarily use all this memory, we just want to see it. On a
normal modern PC or Mac, this is not an issue. On some small
cloud virtual machines (Amazon or Digital Ocean), the default
memory configuration is smaller than this, and you need to
manually configure a swapfile.
To add swap to a DO droplet:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04
To add swap on an Amazon instance:
http://stackoverflow.com/questions/17173972/how-do-you-add-swap-to-an-ec2-instance
Don't spend a lot of time tweaking these settings; the simplest
thing is fine.
2015-10-20 21:40:29 +03:00
Install as a package
--------------------
### OS X - Homebrew
brew install --HEAD homebrew/head-only/urbit
2015-10-20 21:40:29 +03:00
### Ubuntu or Debian
Third-party packages are available, at:
https://github.com/yebyen/urbit-deb
2015-10-20 21:44:53 +03:00
Urbit is only supported on Jessie onward (but outbound HTTPS requests only work on Stretch; I wish we knew why; help us!)
2015-10-20 21:40:29 +03:00
Hand-build from source
----------------------
First, install all external dependencies. Then, make.
### Dependencies
2015-10-06 00:01:41 +03:00
2015-06-17 04:27:28 +03:00
urbit depends on:
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
gcc (or clang)
2014-06-10 01:56:56 +04:00
gmp
libsigsegv
openssl
2014-08-26 21:31:38 +04:00
automake
autoconf
2014-12-06 00:55:27 +03:00
ragel
cmake
2014-12-06 00:55:27 +03:00
re2c
2014-08-26 21:31:38 +04:00
libtool
2014-06-10 01:56:56 +04:00
libssl-dev (Linux only)
ncurses (Linux only)
2015-06-17 04:25:32 +03:00
#### Ubuntu or Debian
2014-06-10 01:56:56 +04:00
2014-12-06 00:55:27 +03:00
sudo apt-get install libgmp3-dev libsigsegv-dev openssl libssl-dev libncurses5-dev git make exuberant-ctags automake autoconf libtool g++ ragel cmake re2c
2014-06-10 01:56:56 +04:00
2015-07-14 21:46:58 +03:00
#### Fedora
2014-06-10 01:56:56 +04:00
sudo dnf install gcc gcc-c++ git gmp-devel openssl-devel openssl ncurses-devel libsigsegv-devel ctags automake autoconf libtool ragel cmake re2c
2014-06-10 01:56:56 +04:00
2015-06-17 04:25:32 +03:00
#### AWS
2014-06-10 01:56:56 +04:00
2015-06-17 21:34:25 +03:00
sudo yum --enablerepo epel install gcc gcc-c++ git gmp-devel openssl-devel ncurses-devel libsigsegv-devel ctags automake autoconf libtool cmake re2c
2014-06-10 01:56:56 +04:00
2015-06-17 04:27:28 +03:00
#### OS X - Homebrew
2014-06-10 01:56:56 +04:00
2015-06-17 04:56:58 +03:00
brew install git gmp libsigsegv openssl libtool autoconf automake cmake
2014-06-10 01:56:56 +04:00
2015-06-17 04:27:28 +03:00
#### OS X - Macports
2014-06-10 01:56:56 +04:00
2015-06-17 04:27:28 +03:00
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.
2014-06-10 01:56:56 +04:00
2015-06-19 06:52:38 +03:00
#### FreeBSD
pkg install git gmake gmp libsigsegv openssl automake autoconf ragel cmake re2c libtool
2015-06-19 06:52:38 +03:00
2015-10-20 21:40:29 +03:00
### Download and make
2014-08-26 21:31:38 +04:00
2015-06-17 04:27:28 +03:00
Clone the repo:
2014-06-10 01:56:56 +04:00
git clone git://github.com/urbit/urbit.git
2015-06-17 04:27:28 +03:00
`cd` to the directory you just created:
2014-06-10 01:56:56 +04:00
cd urbit
2015-10-20 21:40:29 +03:00
Run `make`:
2014-06-10 01:56:56 +04:00
2015-06-17 04:27:28 +03:00
make
2014-06-10 01:56:56 +04:00
2015-06-19 06:52:38 +03:00
(On FreeBSD, use `gmake` instead.)
2015-10-20 21:40:29 +03:00
The executable is `bin/urbit`. Install it somewhere, or just use it
where it is.
2014-06-10 01:56:56 +04:00
2015-10-20 21:46:25 +03:00
Launch
======
2015-10-06 00:01:41 +03:00
2015-10-20 21:40:29 +03:00
An urbit is a persistent server on the `%ames` P2P network. You'll
create one of these servers now.
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
If you have an invitation, it's a planet like `~fintud-macrep` and a
ticket like `~fortyv-tombyt-tabsen-sonres`. Run
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
urbit -w fintud-macrep -t fortyv-tombyt-tabsen-sonres
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
(You can leave the `~` on, but it annoys some Unix shells.)
2015-10-06 00:01:41 +03:00
2015-10-20 21:40:29 +03:00
If you don't have an invitation, pick a nickname for your comet, like
`mycomet`. Urbit will randomly generate a 128-bit plot:
2015-09-25 02:34:01 +03:00
2015-10-20 21:40:29 +03:00
urbit -c mycomet
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
Either way, creating your urbit will take some time. Some of this
time involves creating keys; some of it involves downloading code
over Urbit itself. Go get a cup of coffee. Or a beer.
2014-06-10 01:56:56 +04:00
2015-10-20 21:43:56 +03:00
Wait until you see a prompt, something like
2014-06-10 01:56:56 +04:00
~fintud-macrep:talk()
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
or
~fintud-macrep:dojo>
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
Your urbit is launched! Ladies and gentlemen, we are floating in
space.
2015-09-25 02:34:01 +03:00
### Relaunch
To use Urbit normally after creating your planet or comet:
urbit fintud-macrep
or
urbit mycomet
2015-10-20 21:46:25 +03:00
Docs
====
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
Your urbit is your personal web server. The best place to read its
docs is by pointing your browser at it.
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
Urbit prints the HTTP port it's serving when it starts up:
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
http: live (insecure) on 8080
2014-06-10 01:56:56 +04:00
2015-10-20 21:47:43 +03:00
8080 is the default. When it's not available we use 8081. Then 8082, and so on. If you're running on AWS or another cloud
2015-10-20 21:40:29 +03:00
service, this port may be firewalled; go to the firewall
configuration to open it.
2014-06-10 01:56:56 +04:00
2015-10-20 21:44:53 +03:00
(*Always run any urbit HTTP server which is even semi-serious inside a reliable, battle-proven frontline server like nginx.*)
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
Urbit's own official planet `~winsen-pagdel` is also bound to just
plain `urbit.org`, and hosts the public docs
[here](http://urbit.org/docs). (They are, of course, the same as
2015-10-20 21:44:53 +03:00
those that ship with your urbit.)
2014-06-10 01:56:56 +04:00
2015-10-20 21:49:40 +03:00
Assuming your Urbit is on `localhost:8080`, your copy of the docs are at
2014-06-10 01:56:56 +04:00
2015-10-20 21:40:29 +03:00
http://localhost:8080/home/docs
2014-06-10 01:56:56 +04:00
2015-10-20 21:49:40 +03:00
To continue getting setup, start here:
2014-06-10 01:56:56 +04:00
2015-10-20 21:49:40 +03:00
http://localhost:8080/home/docs/user/start
2013-09-29 00:21:18 +04:00
2015-06-17 04:27:28 +03:00
Contributing
2015-10-20 21:40:29 +03:00
============
2013-09-29 00:21:18 +04:00
2015-10-06 00:01:41 +03:00
The first step in contributing to urbit is to come and join us on
`:talk`.
2015-09-02 21:32:15 +03:00
2015-10-06 00:01:41 +03:00
For more detailed instructions check out
[`CONTRIBUTING.md`](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md).