summaryrefslogtreecommitdiff
path: root/contrib/build-using-docker/README.md
blob: ec571e0a011d2ab298af45b338575a42334b1316 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

Showcase how to build and install
=================================

Sometimes happy developers (like me) have no choice but using horribly
restricted systems where setting up tools to run even something as simple as
configure/make/install becomes a nightmare. I found it to be easier to have a
Dockerfile to build on a totally unrelated machine (but where I have the needed
privileges) and then just copy-paste the built result over to where I need it.

WARN: Default configuration uses an alpine base image that means build will
      dynamically link to musl libc and so won't run on most other systems.
      This is because for a quick-n-dirty walktrough about what this tool does
      this is ways enough. Consult "Other targets" further down and configure a
      base image that fits your needs.


## Setup basic stuff to reduce annoyance

```sh
mkdir /tmp/some-empty-dir
cd /tmp/some-empty-dir
IMG=bulk-ln-showcase:latest
```

## Make and install dockerimage

```sh
curl -sSL http://git.hiddenalpha.ch/bulk-ln.git/plain/contrib/build-using-docker/Dockerfile | sudo docker build . -f - -t "${IMG:?}"
```

## Grab distribution archive

Most probably we wanna get the distribution archive. We can copy it out the
dockerimage into our working dir on the host using:

```sh
sudo docker run --rm -i "${IMG:?}" sh -c 'true && cd dist && tar c *' | tar x
```


## Play around

Or if we wanna browse the image or play around with the built utility we could
launch a shell. Once in the shell, try `bulk-ln --help`.

```sh
sudo docker run --rm -ti "${IMG:?}" sh
```


## Other targets

The dockerfile is parameterized and should work for other systems too. For
example to compile for debian we could use example command as below.

To build for other systems it should be enough to adjust below command.

```sh
curl -sSL http://git.hiddenalpha.ch/bulk-ln.git/plain/contrib/build-using-docker/Dockerfile | sudo docker build . -f - -t "${IMG:?}" \
    --build-arg PARENT_IMAGE=debian:9-slim \
    --build-arg PKGS_TO_ADD="curl gcc git make libc-dev ca-certificates tar" \
    --build-arg PKGS_TO_DEL="curl gcc git make libc-dev" \
    --build-arg PKGINIT="apt-get update" \
    --build-arg PKGADD="apt-get install -y --no-install-recommends" \
    --build-arg PKGDEL="apt-get purge -y" \
    --build-arg PKGCLEAN="apt-get clean"
```