forked from LBRYCommunity/lbry-sdk
txupnp --> aioupnp
-update INSTALL.md
This commit is contained in:
parent
99ea7a26b0
commit
a1368b05da
4 changed files with 43 additions and 65 deletions
73
INSTALL.md
73
INSTALL.md
|
@ -4,29 +4,37 @@ If only the json-rpc API server is needed the recommended way to install LBRY is
|
|||
|
||||
These instructions are for installing LBRY from source, which is recommended if you are interested in doing development work or LBRY is not available on your operating system (godspeed, TempleOS users).
|
||||
|
||||
Here's a video walkthrough of this setup which is itself hosted by the LBRY network and provided via [spee.ch](https://github.com/lbryio/spee.ch):
|
||||
[![Setup for development](https://spee.ch/2018-10-04-17-13-54-017046806.png)](https://spee.ch/967f99344308f1e90f0620d91b6c93e4dfb240e0/lbrynet-dev-setup.mp4)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before starting, you'll need to install some additional libraries depending on your operating system.
|
||||
Running `lbrynet` from source requires Python 3.6 or higher (3.7 is preferred). Get the installer for your OS [here](https://www.python.org/downloads/release/python-370/)
|
||||
|
||||
### Python
|
||||
After installing python 3 you'll need to install some additional libraries depending on your operating system.
|
||||
|
||||
Running `lbrynet` from source requires [Python 3.7](https://www.python.org/downloads/release/python-370/)
|
||||
### Virtualenv
|
||||
|
||||
Once python 3 is installed run `python3 -m pip install virtualenv` to install virtualenv.
|
||||
|
||||
### Windows
|
||||
|
||||
Windows users will need to install `Visual C++ Build Tools`, which can be installed by [Microsoft Build Tools](Microsoft Build Tools 2015)
|
||||
|
||||
|
||||
### OS X Prerequisites
|
||||
### OS X
|
||||
|
||||
Install [xcode command line tools](https://developer.xamarin.com/guides/testcloud/calabash/configuring/osx/install-xcode-command-line-tools/) and [homebrew](http://brew.sh/).
|
||||
OS X users will need to install [xcode command line tools](https://developer.xamarin.com/guides/testcloud/calabash/configuring/osx/install-xcode-command-line-tools/) and [homebrew](http://brew.sh/).
|
||||
|
||||
Remaining dependencies can then be installed by running:
|
||||
|
||||
```
|
||||
brew install python3 protobuf
|
||||
python3 -m pip install virtualenv
|
||||
```
|
||||
|
||||
### Linux Prerequisites
|
||||
### Linux
|
||||
|
||||
On Ubuntu (we recommend 16.04), install the following:
|
||||
On Ubuntu (we recommend 18.04), install the following:
|
||||
|
||||
```
|
||||
sudo apt-get install build-essential python3.7 python3.7-dev git python-virtualenv libssl-dev python-protobuf
|
||||
|
@ -36,33 +44,6 @@ On Raspbian, you will also need to install `python-pyparsing`.
|
|||
|
||||
If you're running another Linux flavor, install the equivalent of the above packages for your system.
|
||||
|
||||
### Windows Prerequisites
|
||||
|
||||
Install [mingw32](http://www.mingw.org/) base and c++ compiler.
|
||||
|
||||
Add C:\MinGW\bin to the windows PATH.
|
||||
|
||||
Enable distutils to compile with mingw32 by creating a distutils.cfg file in *PYTHONPATH\Lib\distutils* containing:
|
||||
|
||||
```
|
||||
[build]
|
||||
compiler = mingw32
|
||||
```
|
||||
|
||||
If using virtualenv, which is recommended, copy the *PYTHONPATH\Lib\distutils* directory to the virtualenv.
|
||||
|
||||
It's recommended to use [Unofficial Windows Binaries for Python Extension Packages](http://www.lfd.uci.edu/~gohlke/pythonlibs/) for as many of the required packages as possible.
|
||||
Currently, available binaries include:
|
||||
- Twisted
|
||||
- Zope.interface
|
||||
- pywin32
|
||||
|
||||
Install the above binaries with `pip install *.whl`
|
||||
|
||||
Install pywin32 system files by run `python.exe Scripts\pywin32_postinstall.py -install` from an elevated command prompt.
|
||||
|
||||
Finally, you'll need [miniupnpc](https://pypi.python.org/pypi/miniupnpc/1.9). Download the source and compile with MinGW by running `mingw32make.bat`. Then install the module by running `python setupmingw32.py install`.
|
||||
|
||||
## Installation
|
||||
|
||||
To install:
|
||||
|
@ -79,30 +60,18 @@ To install:
|
|||
pip install --editable .[test] # [test] installs extras needed for running the tests
|
||||
```
|
||||
|
||||
To verify your install, `which lbrynet` should return a path inside of the `lbry-venv` folder created by the `virtualenv` command.
|
||||
|
||||
## Run the tests
|
||||
To run the unit tests from the repo directory:
|
||||
```
|
||||
trial --reactor=asyncio tests.unit
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
To start the API server:
|
||||
`lbrynet start`
|
||||
|
||||
To verify your install, `which lbrynet` should return a path inside of the `lbry-venv` folder created by the `virtualenv` command.
|
||||
|
||||
## Making a Change
|
||||
|
||||
If you are not already inside the virtual environment, run:
|
||||
|
||||
```
|
||||
source lbry-venv/bin/activate
|
||||
```
|
||||
|
||||
Then run:
|
||||
|
||||
```
|
||||
pip install --editable .
|
||||
```
|
||||
|
||||
This will install `lbrynet` in such a way that the changes you make to the code will be used as soon as you restart the API server.
|
||||
|
||||
Happy hacking!
|
||||
|
|
|
@ -89,7 +89,7 @@ def disable_third_party_loggers():
|
|||
logging.getLogger('BitcoinRPC').setLevel(logging.INFO)
|
||||
logging.getLogger('lbryum').setLevel(logging.WARNING)
|
||||
logging.getLogger('twisted').setLevel(logging.CRITICAL)
|
||||
logging.getLogger('txupnp').setLevel(logging.WARNING)
|
||||
logging.getLogger('aioupnp').setLevel(logging.WARNING)
|
||||
|
||||
|
||||
@_log_decorator
|
||||
|
|
|
@ -3,12 +3,13 @@ import asyncio
|
|||
import logging
|
||||
import treq
|
||||
import math
|
||||
import asyncio
|
||||
import binascii
|
||||
from hashlib import sha256
|
||||
from types import SimpleNamespace
|
||||
from twisted.internet import defer, threads, reactor, error
|
||||
import lbryschema
|
||||
from txupnp.upnp import UPnP
|
||||
from aioupnp.upnp import UPnP
|
||||
from lbrynet import conf
|
||||
from lbrynet.core.utils import DeferredDict
|
||||
from lbrynet.core.PaymentRateManager import OnlyFreePaymentsManager
|
||||
|
@ -50,6 +51,10 @@ RATE_LIMITER_COMPONENT = "rate_limiter"
|
|||
PAYMENT_RATE_COMPONENT = "payment_rate_manager"
|
||||
|
||||
|
||||
def from_future(coroutine: asyncio.coroutine) -> defer.Deferred:
|
||||
return defer.Deferred.fromFuture(asyncio.ensure_future(coroutine))
|
||||
|
||||
|
||||
def get_wallet_config():
|
||||
wallet_type = GCS('wallet')
|
||||
if wallet_type == conf.LBRYCRD_WALLET:
|
||||
|
@ -688,8 +693,8 @@ class UPnPComponent(Component):
|
|||
@defer.inlineCallbacks
|
||||
def _setup_redirects(self):
|
||||
upnp_redirects = yield DeferredDict({
|
||||
"UDP": self.upnp.get_next_mapping(self._int_dht_node_port, "UDP", "LBRY DHT port"),
|
||||
"TCP": self.upnp.get_next_mapping(self._int_peer_port, "TCP", "LBRY peer port")
|
||||
"UDP": from_future(self.upnp.get_next_mapping(self._int_dht_node_port, "UDP", "LBRY DHT port")),
|
||||
"TCP": from_future(self.upnp.get_next_mapping(self._int_peer_port, "TCP", "LBRY peer port"))
|
||||
})
|
||||
self.upnp_redirects.update(upnp_redirects)
|
||||
|
||||
|
@ -698,20 +703,23 @@ class UPnPComponent(Component):
|
|||
if not self.use_upnp:
|
||||
self.external_ip = CS.get_external_ip()
|
||||
return
|
||||
self.upnp = UPnP(self.component_manager.reactor, try_miniupnpc_fallback=True)
|
||||
try:
|
||||
found = yield self.upnp.discover()
|
||||
self.upnp = yield from_future(UPnP.discover())
|
||||
log.info("found upnp gateway")
|
||||
found = True
|
||||
except Exception as err:
|
||||
log.warning("upnp discovery failed: %s", err)
|
||||
found = False
|
||||
if found and not self.upnp.miniupnpc_runner:
|
||||
log.info("set up redirects using txupnp")
|
||||
elif found and self.upnp.miniupnpc_runner:
|
||||
log.warning("failed to set up redirect with txupnp, miniupnpc fallback was successful")
|
||||
if found:
|
||||
try:
|
||||
self.external_ip = yield self.upnp.get_external_ip()
|
||||
self.external_ip = yield from_future(self.upnp.get_external_ip())
|
||||
if self.external_ip == "0.0.0.0":
|
||||
log.warning("upnp doesn't know the external ip address (returned 0.0.0.0), using fallback")
|
||||
self.external_ip = CS.get_external_ip()
|
||||
else:
|
||||
log.info("got external ip from upnp: %s", self.external_ip)
|
||||
yield self._setup_redirects()
|
||||
log.info("set up upnp port redirects")
|
||||
except Exception as err:
|
||||
log.warning("error trying to set up upnp: %s", err)
|
||||
self.external_ip = CS.get_external_ip()
|
||||
|
@ -720,7 +728,8 @@ class UPnPComponent(Component):
|
|||
|
||||
def stop(self):
|
||||
return defer.DeferredList(
|
||||
[self.upnp.delete_port_mapping(port, protocol) for protocol, port in self.upnp_redirects.items()]
|
||||
[from_future(self.upnp.delete_port_mapping(port, protocol))
|
||||
for protocol, port in self.upnp_redirects.items()]
|
||||
)
|
||||
|
||||
|
||||
|
|
2
setup.py
2
setup.py
|
@ -24,6 +24,7 @@ setup(
|
|||
install_requires=[
|
||||
'asyncio',
|
||||
'aiohttp',
|
||||
'aioupnp',
|
||||
'twisted[tls]==18.7.0',
|
||||
'appdirs',
|
||||
'distro',
|
||||
|
@ -33,7 +34,6 @@ setup(
|
|||
'cryptography',
|
||||
'lbryschema',
|
||||
'torba',
|
||||
'txupnp',
|
||||
'pyyaml',
|
||||
'requests',
|
||||
'txJSON-RPC',
|
||||
|
|
Loading…
Reference in a new issue