When running `finance` image's `import` command (but only when
container's hledger-flow coinbase/coinbase-pro accounts are imported),
the following error is given:
```
IsADirectoryError: [Errno 21] Is a directory: '/etc/timezone'
Selector name 'id' does not exist as a named header in the given CSV data.
```
specifically, after enabling verbose printing of `csvjoin` (which is only
used within these accounts), the following error is given:
```
File "/home/user/.local/share/pipx/venvs/csvkit/lib/python3.12/site-packages/babel/localtime/_unix.py", line 57, in _get_localzone
with open(tzpath, 'rb') as tzfile:
^^^^^^^^^^^^^^^^^^
```
where all errors prevent the successful import of applicable accounts.
The python error appears to have been introduced in csvkit 2.0.0 and
appears to be the result of an upstream decision (or bug) to not test
whether /etc/timezone is a directory or a file (Arch Linux treats
/etc/timezone as a directory).
Fortunately, docker-finance's mounting of /etc/localtime appears to
satisfy use-case requirements; so, /etc/timezone is no longer needed.
Removing /etc/timezone resolves all errors.
75 lines
3.3 KiB
Plaintext
75 lines
3.3 KiB
Plaintext
# docker-finance | modern accounting for the power-user
|
|
#
|
|
# Copyright (C) 2021-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/>.
|
|
|
|
services:
|
|
docker-finance:
|
|
image: @DOCKER_FINANCE_IMAGE@
|
|
container_name: @DOCKER_FINANCE_CONTAINER@
|
|
build: .
|
|
# NOTE: env bind mounts are used exclusively because volumes should be
|
|
# reserved for persistant data that the *container* generates/needs.
|
|
# In docker-finance, the container and client (host) are largely transparent
|
|
# and treated as one (and dangling volumes are not desired).
|
|
volumes:
|
|
- ${DOCKER_FINANCE_CLIENT_CONF}/container:${DOCKER_FINANCE_CONTAINER_CONF}
|
|
- ${DOCKER_FINANCE_CLIENT_FLOW}:${DOCKER_FINANCE_CONTAINER_FLOW}
|
|
- ${DOCKER_FINANCE_CLIENT_REPO}/container:${DOCKER_FINANCE_CONTAINER_REPO}:ro
|
|
- ${DOCKER_FINANCE_CLIENT_SHARED}:${DOCKER_FINANCE_CONTAINER_SHARED}
|
|
# Needed for when upstream data is localtime instead of UTC
|
|
# NOTE: although TZ can be used within the container, this *should* be more dynamic
|
|
- /etc/localtime:/etc/localtime:ro
|
|
environment:
|
|
- DOCKER_FINANCE_CONTAINER_CMD=${DOCKER_FINANCE_CONTAINER_CMD}
|
|
- DOCKER_FINANCE_CONTAINER_CONF=${DOCKER_FINANCE_CONTAINER_CONF}
|
|
- DOCKER_FINANCE_CONTAINER_EDITOR=${DOCKER_FINANCE_CONTAINER_EDITOR}
|
|
- DOCKER_FINANCE_CONTAINER_FLOW=${DOCKER_FINANCE_CONTAINER_FLOW}
|
|
- DOCKER_FINANCE_CONTAINER_REPO=${DOCKER_FINANCE_CONTAINER_REPO}
|
|
- DOCKER_FINANCE_CONTAINER_SHARED=${DOCKER_FINANCE_CONTAINER_SHARED}
|
|
- DOCKER_FINANCE_DEBUG=${DOCKER_FINANCE_DEBUG}
|
|
- GID=${DOCKER_FINANCE_GID}
|
|
- UID=${DOCKER_FINANCE_UID}
|
|
# Container's view of client's hledger-flow (for logging purposes)
|
|
- DOCKER_FINANCE_CLIENT_FLOW=${DOCKER_FINANCE_CLIENT_FLOW}
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
cpus: ${DOCKER_FINANCE_CPUS}
|
|
memory: ${DOCKER_FINANCE_MEMORY}
|
|
# TODO: As of `archlinux v20240201.0.210909 (docker image)` (or later) and
|
|
# `hledger 1.32.1` (or later), "get_mempolicy: Operation not permitted"
|
|
# is spammed w/ every hledger command (hledger / hledger-*). I don't know
|
|
# if this is a haskell-build issue or a hledger/hledger dependency issue but
|
|
# the error is only reproducible inside a docker container when issuing
|
|
# hledger commands. Adding SYS_NICE here removes the error spam but it's
|
|
# otherwise not a capability that's needed (so, resolve this upstream).
|
|
cap_add:
|
|
- SYS_NICE
|
|
restart: no
|
|
init: true
|
|
networks:
|
|
docker-finance:
|
|
ports:
|
|
- ${DOCKER_FINANCE_PORT_HLEDGER}:5000
|
|
- ${DOCKER_FINANCE_PORT_ROOT}:8080
|
|
|
|
networks:
|
|
docker-finance:
|
|
external: true
|
|
name: @DOCKER_FINANCE_NETWORK@
|
|
|
|
# vim: sw=2 sts=2 si ai et
|