115 lines
3.7 KiB
Markdown
115 lines
3.7 KiB
Markdown
# Dumb Downloader (dudo)
|
|
|
|
# What's it about?
|
|
It's just a tool to make downloading binaries for different platforms easier.
|
|
|
|
## For example
|
|
If you want to build a docker image, but you want to make it available on different platforms. But your tool needs other tools as dependencies, e.g. `helm`.
|
|
To install helm on Alpine you need to use curl, wget, or something. You need to choose a version, an operating system, and an architecture. For me, it was obvious that you must be able to use `uname -m`...
|
|
```BASH
|
|
uname -m
|
|
aarch64
|
|
|
|
uname -m
|
|
x86_64
|
|
|
|
uname -m
|
|
arm64
|
|
```
|
|
|
|
While release naming is also not very consecutive
|
|
|
|
- release_example.amd-macos.zip
|
|
- another-release-for-amd64-macos.zip
|
|
- linux-aarch64-release.zip
|
|
|
|
# How to install?
|
|
## Install
|
|
### Download
|
|
|
|
Get executable from github releases
|
|
|
|
Prebuilt binaries exist for **Linux x86_64** and **MacOS arm64** and **x86_64**
|
|
|
|
Don't forget to add the binary to $PATH
|
|
```
|
|
$ curl https://raw.githubusercontent.com/allanger/dumb-downloader/main/scripts/download_dudo.sh | bash
|
|
$ dudo --help
|
|
```
|
|
### Docker
|
|
|
|
You can use the `latest` or a `tagged` docker image
|
|
```
|
|
$ docker pull ghcr.io/allanger/dumb-downloader:latest
|
|
$ docker run ghcr.io/allanger/dumb-downloader:latest dudo -h
|
|
```
|
|
|
|
### Build from source
|
|
1. Build binary
|
|
```
|
|
$ cargo build --release
|
|
```
|
|
2. Run `dudo --help`
|
|
|
|
# How to use?
|
|
## Custom configurations
|
|
|
|
In case the default config is not doing the trick for you, you can pass a custom configuration, for example, you need to download a package "package-linux-amd64_x86_64_intel_v1.0.3" and this kind of name for an architecture is not supported by the `dudo`, then you can create a config file like
|
|
```yaml
|
|
# config-example.yaml
|
|
---
|
|
---
|
|
os:
|
|
macos:
|
|
- macos
|
|
- darwin
|
|
- mac
|
|
- apple
|
|
linux:
|
|
- linux
|
|
windows:
|
|
- windows
|
|
freebsd:
|
|
- freebsd
|
|
arch:
|
|
x86_64:
|
|
- x86_64
|
|
- amd64
|
|
- amd
|
|
- intel
|
|
- amd64_x86_64_intel
|
|
aarch64:
|
|
- aarch64
|
|
- arm64
|
|
- m1
|
|
|
|
```
|
|
|
|
And execute `dudo -l "package-{{ os }}-{{ arch }}-{{ version}}" -p v1.0.3 -d /tmp/package` and dudo will download the package to the `/tmp/package` then,
|
|
|
|
## Dockerfile
|
|
|
|
The initial intetion for developing this was to use it for writing multi-architecture Dockerfiles for my another projects. I needed to download `helm` and `helmfile` for `arm64` and `amd64`. And I couldn't come up with good simple script for settings environment variables that would point to the the correct url, because `uname -m` wasn't giving me results that I would need. I was thinkg about writing a script to create some kind of map for different architectures, but then I thought that is was already not the first time I was having that problem and I decided to come up with a tool. And here is example, how one could use it in a `Dockerfile`
|
|
|
|
```DOCKERFILE
|
|
ARG BASE_VERSION=latest
|
|
FROM ghcr.io/allanger/dumb-downloader as builder
|
|
RUN apt-get update -y && apt-get install tar -y
|
|
ARG HELM_VERSION=v3.10.3
|
|
ARG HELMFILE_VERSION=0.151.0
|
|
ENV RUST_LOG=info
|
|
RUN dudo -l "https://github.com/helmfile/helmfile/releases/download/v{{ version }}/helmfile_{{ version }}_{{ os }}_{{ arch }}.tar.gz" -i /tmp/helmfile.tar.gz -p $HELMFILE_VERSION
|
|
RUN dudo -l "https://get.helm.sh/helm-{{ version }}-{{ os }}-{{ arch }}.tar.gz" -i /tmp/helm.tar.gz -p $HELM_VERSION
|
|
RUN tar -xf /tmp/helm.tar.gz -C /tmp && rm -f /tmp/helm.tar.gz
|
|
RUN tar -xf /tmp/helmfile.tar.gz -C /tmp && rm -f /tmp/helmfile.tar.gz
|
|
RUN mkdir /out && for bin in `find /tmp | grep helm`; do cp $bin /out/; done
|
|
RUN chmod +x /out/helm
|
|
RUN chmod +x /out/helmfile
|
|
|
|
FROM ghcr.io/allanger/check-da-helm-base:${BASE_VERSION}
|
|
COPY --from=builder /out/ /usr/bin
|
|
RUN apk update --no-cache && apk add --no-cache jq bash
|
|
ENTRYPOINT ["cdh"]
|
|
```
|
|
|
|
In the builder it is downloading dependencies that are needed in my final docker image. |