repo/client: move shell env prep to install.bash
This commit is contained in:
108
README.md
108
README.md
@@ -243,94 +243,57 @@ Supported blockchains (independent of wallet type):
|
|||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
|
|
||||||
[//]: # (TODO: move step 3 to installation script, add `dfi` aliases, update README)
|
[//]: # (TODO: add `dfi` aliases, update README)
|
||||||
|
|
||||||
`docker-finance` is not your typical Docker image in which you simply pull and containerize, but rather it's an *image-based* accounting system that operates transparently between your client (host) and container; keeping your finances containerized, with all the benefits of containerization.
|
`docker-finance` is not your typical Docker image in which you simply pull and containerize, but rather it's an *image-based* accounting system that operates transparently between your client (host) and container; keeping your finances containerized, with all the benefits of containerization.
|
||||||
|
|
||||||
`docker-finance` *should* work out-of-the-box on any modern Linux system. For example, if your client (host) is Ubuntu, the default installation of `coreutils`, `shells` and `utils` that came with your system will satisfy requirements. However, you'll still need to manually install Docker (see below).
|
`docker-finance` *should* work out-of-the-box on any modern Linux system. For example, if your client (host) is Ubuntu, the default installation of `coreutils`, `shells` and `utils` that came with your system will satisfy requirements. However, you'll still need to manually install Docker (see below).
|
||||||
|
|
||||||
1. **Install dependencies**:
|
1. **Install dependencies**:
|
||||||
|
|
||||||
1. [Docker Engine](https://docs.docker.com/engine/install/#supported-platforms) with [post-install configuration](https://docs.docker.com/engine/install/linux-postinstall/)
|
1. [Docker Engine](https://docs.docker.com/engine/install/#supported-platforms) with [post-install configuration](https://docs.docker.com/engine/install/linux-postinstall/)
|
||||||
- Latest version (or at least `27.1.1`)
|
- Latest version (or at least `27.1.1`)
|
||||||
2. [GNU Bash](https://www.gnu.org/software/bash/)
|
2. [GNU Bash](https://www.gnu.org/software/bash/)
|
||||||
- Latest version (or at least `5.0.17`)
|
- Latest version (or at least `5.0.17`)
|
||||||
- Installed by *default* on most Linux distributions
|
- Installed by *default* on most Linux distributions
|
||||||
|
3. [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git/)
|
||||||
2. **Install recommended**:
|
|
||||||
1. [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git/)
|
|
||||||
- Latest version (or at least `2.25.1`)
|
- Latest version (or at least `2.25.1`)
|
||||||
- Only needed for step 3 but should be kept in order to:
|
- Only needed for step 3 but should be kept in order to:
|
||||||
- Remain up-to-date with future `docker-finance` versions
|
- Remain up-to-date with future `docker-finance` versions
|
||||||
- Safely track your workflow related data (journals, metadata, etc.)
|
- Safely track your workflow related data (journals, metadata, etc.)
|
||||||
2. Consider using a terminal multiplexer like [tmux](https://github.com/tmux/tmux/wiki) or [screen](https://www.gnu.org/software/screen/) for optimal workflow efficiency
|
|
||||||
|
|
||||||
3. **Copy/paste the following into your `bash` shell** (client preparation):
|
2. **Install recommended** (optional):
|
||||||
|
|
||||||
|
Although *not* required, consider the following for workflow efficiency:
|
||||||
|
|
||||||
|
- A terminal multiplexer like [tmux](https://github.com/tmux/tmux/wiki) or [screen](https://www.gnu.org/software/screen/)
|
||||||
|
|
||||||
|
3. **Prepare your repository**:
|
||||||
|
|
||||||
|
Pick a *persistent* path that you're likely to keep; your environment will be aliased/sourced to the path you choose.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
bashrc=~/.bashrc
|
if hash git &>/dev/null; then
|
||||||
aliases=~/.bash_aliases
|
if [ -d docker-finance ]; then
|
||||||
function docker-finance::install()
|
if pushd docker-finance &>/dev/null; then
|
||||||
{
|
if ! git pull --tags; then
|
||||||
# Environment expectations
|
echo "FATAL: docker-finance repo not pulled" >&2
|
||||||
_alias="alias docker-finance="
|
|
||||||
_client="$(pwd)/docker-finance/client"
|
|
||||||
# Remove previous alias
|
|
||||||
if grep "^${_alias}" "$aliases" &>/dev/null; then
|
|
||||||
sed -i "/^${_alias}/d" "$aliases"
|
|
||||||
unalias docker-finance
|
|
||||||
fi
|
|
||||||
# Set new alias
|
|
||||||
echo "${_alias}'${_client}/docker.bash'" >>"$aliases"
|
|
||||||
# Set bash completion
|
|
||||||
_completion="${_client}/src/docker/completion.bash"
|
|
||||||
if [ ! -f "$_completion" ]; then
|
|
||||||
echo "WARNING: bash completion not found" >&2
|
|
||||||
else
|
|
||||||
if ! grep "^source '${_completion}'" "$aliases" &>/dev/null; then
|
|
||||||
echo "source '${_completion}'" >>"$aliases"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# Make it so
|
|
||||||
source "$aliases" && echo "SUCCESS: installation complete"
|
|
||||||
}
|
|
||||||
if ! test -f "$bashrc" || ! hash bash &>/dev/null; then
|
|
||||||
echo "FATAL: unsupported bash installation" >&2
|
|
||||||
else
|
|
||||||
if [[ ! -z "$SHELL" && "$SHELL" =~ bash ]]; then
|
|
||||||
if [ ! -f "$aliases" ]; then
|
|
||||||
if ! grep -E "(\. ~/.bash_aliases|^source ~/.bash_aliases|^source ${aliases})" "$bashrc" &>/dev/null; then
|
|
||||||
aliases="$bashrc"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if hash git &>/dev/null; then
|
|
||||||
if [ -d docker-finance ]; then
|
|
||||||
if pushd docker-finance &>/dev/null; then
|
|
||||||
if ! git pull --tags; then
|
|
||||||
echo "FATAL: docker-finance repo not pulled" >&2
|
|
||||||
else
|
|
||||||
popd &>/dev/null
|
|
||||||
docker-finance::install
|
|
||||||
fi
|
|
||||||
popd &>/dev/null
|
|
||||||
else
|
|
||||||
echo "FATAL: docker-finance repo not found" >&2
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if ! git clone https://gitea.com/EvergreenCrypto/docker-finance; then
|
|
||||||
echo "FATAL: docker-finance repo not cloned" >&2
|
|
||||||
else
|
|
||||||
docker-finance::install
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
popd 1>/dev/null
|
||||||
else
|
else
|
||||||
echo "FATAL: git not found" >&2
|
echo "FATAL: docker-finance repo not found" >&2
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "FATAL: unsupported bash environment" >&2
|
if ! git clone https://gitea.com/EvergreenCrypto/docker-finance; then
|
||||||
|
echo "FATAL: docker-finance repo not cloned" >&2
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo "FATAL: git not found" >&2
|
||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Verify your repository** (recommended):
|
4. **Verify your repository** (optional):
|
||||||
```bash
|
```bash
|
||||||
if pushd docker-finance/ 1>/dev/null; then
|
if pushd docker-finance/ 1>/dev/null; then
|
||||||
gpg --keyserver hkp://keyserver.ubuntu.com --recv-key 518A22F85BEFD32BCC99C48603F90C4F35E0213E \
|
gpg --keyserver hkp://keyserver.ubuntu.com --recv-key 518A22F85BEFD32BCC99C48603F90C4F35E0213E \
|
||||||
@@ -341,24 +304,35 @@ Supported blockchains (independent of wallet type):
|
|||||||
fi
|
fi
|
||||||
```
|
```
|
||||||
|
|
||||||
5. **Generate client/container environment** (see [Environment Generation](#environment-generation) for details):
|
5. **Prepare your shell environment**:
|
||||||
|
|
||||||
|
This will install convenience aliases and command completion to your shell environment (see [install.bash](client/install.bash) for details).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker-finance/client/install.bash && source ~/.bashrc
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Generate client/container environment**:
|
||||||
|
|
||||||
|
This will generate your Docker-related client/container environment (see [Environment Generation](#environment-generation) for details).
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-finance archlinux/${USER}:default gen
|
docker-finance archlinux/${USER}:default gen
|
||||||
```
|
```
|
||||||
|
|
||||||
6. **Build the image**:
|
7. **Build default `docker-finance` image**:
|
||||||
```bash
|
```bash
|
||||||
docker-finance archlinux/${USER}:default build type=default
|
docker-finance archlinux/${USER}:default build type=default
|
||||||
```
|
```
|
||||||
> See `docker-finance archlinux/${USER}:default build help` for build options (such as smaller, faster builds)
|
> See `docker-finance archlinux/${USER}:default build help` for build options (such as smaller, faster builds)
|
||||||
|
|
||||||
7. **Bring up the container**:
|
8. **Bring up container of default `docker-finance` image**:
|
||||||
```bash
|
```bash
|
||||||
docker-finance archlinux/${USER}:default up
|
docker-finance archlinux/${USER}:default up
|
||||||
```
|
```
|
||||||
> You can use tab completion for all commands available to this built image
|
> You can use tab completion for all commands available to this built image
|
||||||
|
|
||||||
8. **You're inside!** See [How do I use it?](#how-do-i-use-it) for next steps.
|
9. **You're inside!** See [How do I use it?](#how-do-i-use-it) for next steps.
|
||||||
|
|
||||||
### Environment Generation
|
### Environment Generation
|
||||||
|
|
||||||
|
|||||||
67
client/install.bash
Executable file
67
client/install.bash
Executable file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# docker-finance | modern accounting for the power-user
|
||||||
|
#
|
||||||
|
# Copyright (C) 2024 Aaron Fiore (Founder, Evergreen Crypto LLC)
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation either version 3 of the License or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
bashrc=~/.bashrc
|
||||||
|
aliases=~/.bash_aliases
|
||||||
|
|
||||||
|
function docker-finance::install()
|
||||||
|
{
|
||||||
|
# Environment expectations
|
||||||
|
local -r _alias="alias docker-finance="
|
||||||
|
local _path # full path to docker-finance repository
|
||||||
|
_path="$(dirname "$(realpath -s $0)" | rev | cut -d'/' -f2- | rev)"
|
||||||
|
|
||||||
|
# Remove previous alias
|
||||||
|
if grep "^${_alias}" "$aliases" &>/dev/null; then
|
||||||
|
sed -i "/^${_alias}/d" "$aliases"
|
||||||
|
unalias docker-finance
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set new alias
|
||||||
|
echo "${_alias}'${_path}/client/docker.bash'" >>"$aliases"
|
||||||
|
|
||||||
|
# Set bash completion
|
||||||
|
_completion="${_path}/client/src/docker/completion.bash"
|
||||||
|
if [ ! -f "$_completion" ]; then
|
||||||
|
echo "WARNING: bash completion not found" >&2
|
||||||
|
else
|
||||||
|
if ! grep "^source '${_completion}'" "$aliases" &>/dev/null; then
|
||||||
|
echo "source '${_completion}'" >>"$aliases"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! test -f "$bashrc" || ! hash bash &>/dev/null; then
|
||||||
|
echo "FATAL: unsupported bash installation" >&2
|
||||||
|
else
|
||||||
|
if [[ ! -z "$SHELL" && "$SHELL" =~ bash ]]; then
|
||||||
|
if [ ! -f "$aliases" ]; then
|
||||||
|
if ! grep -E "(\. ~/.bash_aliases|^source ~/.bash_aliases|^source ${aliases})" "$bashrc" &>/dev/null; then
|
||||||
|
aliases="$bashrc"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
docker-finance::install \
|
||||||
|
&& echo "SUCCESS: installation complete"
|
||||||
|
|| echo "FATAL: could not complete installation"
|
||||||
|
else
|
||||||
|
echo "FATAL: unsupported bash environment" >&2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# vim: sw=2 sts=2 si ai et
|
||||||
Reference in New Issue
Block a user