Lbrynet containers for compiling and running armhf and x86_64 #53

Merged
Leopere merged 26 commits from lbrynet into master 2019-04-24 05:05:44 +02:00
16 changed files with 272 additions and 0 deletions

1
lbrynet/.dockerignore Normal file
View file

@ -0,0 +1 @@
data/

1
lbrynet/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
data/

44
lbrynet/Dockerfile Normal file
View file

@ -0,0 +1,44 @@
## This base image is for running the latest lbrynet-daemon release.
FROM ubuntu:18.04
LABEL MAINTAINER="leopere [at] nixc [dot] us"
RUN apt-get update && apt-get -y install unzip
RUN adduser lbrynet --gecos GECOS --shell /bin/bash --disabled-password --home /lbrynet/
## Add lbrynet
ADD https://lbry.io/get/lbrynet.linux.zip /lbrynet/lbrynet.linux.zip
RUN unzip /lbrynet/lbrynet.linux.zip -d /lbrynet/ && \
rm /lbrynet/lbrynet.linux.zip && \
chown -Rv lbrynet:lbrynet /lbrynet && \
mv /lbrynet/lbrynet /bin/
# COPY stuff/debugpaste-it.sh /usr/local/bin/debugpaste-it
COPY stuff/start.sh /usr/local/bin/start
COPY stuff/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
COPY stuff/healthcheck.sh /usr/local/bin/healthcheck
## Daemon port [Intended for internal use]
## LBRYNET talks to peers on port 3333 [Intended for external use] this port is used to discover other lbrynet daemons with blobs.
## Expose 5566 Reflector port to listen on
## Expose 5279 Port the daemon API will listen on
## the lbryumx aka Wallet port [Intended for internal use]
EXPOSE 4444 3333 5566 5279 50001
## TODO: Have wallets stored on their own volume/subdirectory for security, and backups.
## Volumize the wallets in a separate location for backup purposes may be unnecessary.
# VOLUME /lbrynet/.local/share/lbry/lbryum/wallets
# VOLUME /lbrynet/.local/
## Example daemon_settings.yml is at https://github.com/lbryio/lbry/blob/master/example_daemon_settings.yml
ADD https://raw.githubusercontent.com/lbryio/lbry/master/example_daemon_settings.yml /etc/lbrynet/example_daemon_settings.yml
## TODO: In start.sh detect and merge changes.
# VOLUME /etc/lbry/daemon_settings.yml
## TODO: Downloaded blobs will be in their own separate volume for keeping backups of critical secrets and data separate from backups of potentially massive blob files.
# VOLUME /lbrynet/Downloads/
ENTRYPOINT ["/bin/bash"]
CMD ["start"]

24
lbrynet/README.md Normal file
View file

@ -0,0 +1,24 @@
## lbrynet-As-A-Container
More documentation to come however the Invocation section should include enough to get you going. You're going to need at least docker docker-compose and git installed on whatever host OS you wish to use.
#### Invocation
This will get you a running copy of the lbrynet-daemon running inside of a docker container with default settings.
```
git clone https://github.com/chamunks/lbry-docker.git
cd ./lbry-docker/lbrynet/
docker-compose up -d
```
#### Executing commands
To list containers on the host execute `docker ps -a` then run `docker exec CONTAINERNAME lbrynet-cli commands`
#### Docker Directory
This directory is in case we need to expand the functionality of this container at some point in the future.
#### Configuration
There's really no configuration required to launch this just launch it. However your blockchain data and other things are currently located in the applications home Directory here's a link to the [Documentation](https://lbry.io/faq/lbry-directories) for useful directories with lbrynet-daemon
*daemon_settings.yml* is on its way and it will be configurable soon via env-vars with *docker-compose.yml*

View file

@ -0,0 +1,3 @@
## Planned container [WIP/Planned]
This will eventually be a container for compiling the lbrynet-daemon from source.
Anyone who wants to replicate the build process in case they feel like wearing a tin foil hat or contributing to the project could use this.

View file

@ -0,0 +1,27 @@
version: '3.4'
networks:
lbry-network:
external: true
services:
#############
## Lbrynet ##
#############
lbrynet:
build: .
restart: always
## TODO: Does this container ever need a static network address or is it better to be dynamic?
networks:
# lbrynet:
# ipv4_address: 10.6.1.4
- lbry-network
labels:
- "traefik.expose=false"
## TODO: Verify the need for the following port binds on host networking.
ports:
- 4444:4444
- 50001:50001
## host volumes for persistent data such as wallet private keys.
volumes:
- ./data:/lbrynet

View file

@ -0,0 +1,52 @@
FROM multiarch/ubuntu-core:armhf-bionic as dependencies
RUN apt-get update && \
apt-get install -y \
python3-pip \
python3.7 \
python3.7-dev \
build-essential \
libssl-dev \
libacl1-dev \
liblz4-dev \
libfuse-dev \
fuse \
pkg-config \
fakeroot \
git \
zlib1g-dev \
libbz2-dev \
libncurses5-dev \
libreadline-dev \
liblzma-dev \
libsqlite3-dev \
zip \
libffi-dev \
libleveldb-dev && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.7 10 && \
update-alternatives --config python && \
python --version && \
pip3 --version
FROM dependencies as compile
RUN python3.7 -m pip install -U pyinstaller && \
git clone https://github.com/lbryio/lbry.git --depth 1 /lbry && \
cd /lbry && \
git clone https://github.com/lbryio/torba.git --depth 1 /lbry/torba && \
cd /lbry/torba && python3.7 -m pip install -e . && \
cd /lbry/ && python3.7 scripts/set_build.py && \
python3.7 -m pip install -e . && \
pyinstaller -F -n lbrynet lbrynet/extras/cli.py && \
chmod +x /lbry/dist/lbrynet && \
zip -j /lbry/dist/lbrynet-armhf.zip /lbry/dist/lbrynet && \
mkdir /target && \
/lbry/dist/lbrynet --version
FROM multiarch/ubuntu-core:armhf-bionic as app
RUN adduser lbrynet --gecos GECOS --shell /bin/bash --disabled-password --home /home/lbrynet
COPY start.sh /usr/local/bin/start
COPY --from=compile /lbry/dist/lbrynet /usr/local/bin/
EXPOSE 5279
USER lbrynet
CMD ["start"]

View file

@ -0,0 +1,28 @@
# armhf-compiler
This container's goal is to make CI/CD easier for everyone, Travis CI, GitlabCI, Jenkins... Your desktop's docker equipped development environment.
## Example Usage
#### binfmt_misc register
This step sets up your docker daemon to support more container architectures.
Register `quemu-*-static` for all supported processors except the current one.
* `docker run --rm --privileged multiarch/qemu-user-static:register`
#### build the armhf bin
<!-- TODO: Process could be greatly sped up but keeping it simple for first release. -->
* `docker build --tag lbryio/lbrynet:armhf-compiler .`
#### export compiled bin to local /target
This containers sole purpose is to build and spit out the bin.
<!-- TODO: Fork this container base to begin work on LbryTV compiler to reduce build time on rpi -->
* `docker run --rm -ti -v $(pwd)/target:/target lbryio/lbrynet:armhf-compiler`
## Cleanup
If you're doing this on a machine you care to have restored to defaults this is the only host change we imposed so to revert the change you must execute the following docker command.
Same as above, but remove all registered `binfmt_misc` before
* `docker run --rm --privileged multiarch/qemu-user-static:register --reset`

View file

@ -0,0 +1,2 @@
#!/bin/bash
echo "TODO"

View file

@ -0,0 +1,52 @@
FROM ubuntu:18.04 as dependencies
RUN apt-get update && \
apt-get install -y \
python3-pip \
python3.7 \
python3.7-dev \
build-essential \
libssl-dev \
libacl1-dev \
liblz4-dev \
libfuse-dev \
fuse \
pkg-config \
fakeroot \
git \
zlib1g-dev \
libbz2-dev \
libncurses5-dev \
libreadline-dev \
liblzma-dev \
libsqlite3-dev \
zip \
libffi-dev \
libleveldb-dev && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.7 10 && \
update-alternatives --config python && \
python --version && \
pip3 --version
FROM dependencies as compile
RUN python3.7 -m pip install -U pyinstaller && \
git clone https://github.com/lbryio/lbry.git --depth 1 /lbry && \
cd /lbry && \
git clone https://github.com/lbryio/torba.git --depth 1 /lbry/torba && \
cd /lbry/torba && python3.7 -m pip install -e . && \
cd /lbry/ && python3.7 scripts/set_build.py && \
python3.7 -m pip install -e . && \
pyinstaller -F -n lbrynet lbrynet/extras/cli.py && \
chmod +x /lbry/dist/lbrynet && \
zip -j /lbry/dist/lbrynet-armhf.zip /lbry/dist/lbrynet && \
mkdir /target && \
/lbry/dist/lbrynet --version
FROM ubuntu:18.04 as app
RUN adduser lbrynet --gecos GECOS --shell /bin/bash --disabled-password --home /home/lbrynet
COPY start.sh /usr/local/bin/start
COPY --from=compile /lbry/dist/lbrynet /usr/local/bin/
EXPOSE 5279
USER lbrynet
CMD ["start"]

View file

@ -0,0 +1,12 @@
# x86_64-compiler
This container's goal is to make CI/CD easier for everyone, Travis CI, GitlabCI, Jenkins... Your desktop's docker equipped development environment.
## Example Usage
#### build the x86_64 bin
* `docker build --tag lbryio/lbrynet:x86_64-compiler .`
#### export compiled bin to local /target
This containers sole purpose is to build and spit out the x86_64 binary.
* `docker run --rm -ti -v $(pwd)/target:/target lbryio/lbrynet:x86_64-compiler`

View file

@ -0,0 +1,2 @@
#!/bin/bash
echo "TODO"

2
lbrynet/stuff/debugpaste-it.sh Executable file
View file

@ -0,0 +1,2 @@
#!/usr/bin/env bash
echo "For now we're going to go with a tune in next time for a debugpaste."

View file

@ -0,0 +1,3 @@
#!/usr/bin/env bash
## TODO: Start work for the docker-entrypoint.sh for lbrynet daemon

2
lbrynet/stuff/healthcheck.sh Executable file
View file

@ -0,0 +1,2 @@
#!/usr/bin/env bash
## TODO: write a healthcheck script.

17
lbrynet/stuff/start.sh Executable file
View file

@ -0,0 +1,17 @@
#!/usr/bin/env bash
## Scope: This start.sh script will asssert container filesystem permissions and
## then execute the desired run mode for lbrynet with reduced permissions.
## The other thing this should do is simply create, configure or simply establish
## a fresh config with envvars passed to the container.
## Ensure perms are correct prior to running main binary
mkdir -p /lbrynet
chown -R lbrynet:lbrynet /lbrynet
chmod -R 755 /lbrynet
## TODO: Consider a config directory for future magic.
# chown -R 1000:1000 /etc/lbrynet
# chmod -R 755 /etc/lbrynet
# rm -f /var/run/lbrynet.pid
su -c "lbrynet start" lbrynet