diff mbox series

[4/5] support/docker: add an Arch image

Message ID b909713a26b89db6eae65efffa7e05a8136fd9df.1531463897.git.yann.morin.1998@free.fr
State Changes Requested
Headers show
Series None | expand

Commit Message

Yann E. MORIN July 13, 2018, 6:38 a.m. UTC
Hopefully, this image is reproducible, since we are using a tagged
base image, plus a pinned repository mirror.

As for the Debian-stretch Dockerfile, we refresh the repository and
install packages in two different layers (see commit c4f844ff321
(support/docker: run apt-get update and apt-get install in two RUNs)
for in-depth explanations.

Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
 support/docker/Dockerfile.arch-2018.07.01 | 40 +++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
 create mode 100644 support/docker/Dockerfile.arch-2018.07.01

Comments

Martin Bark July 14, 2018, 11:19 a.m. UTC | #1
Yann,

On 13 July 2018 at 07:38, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Hopefully, this image is reproducible, since we are using a tagged
> base image, plus a pinned repository mirror.
>
> As for the Debian-stretch Dockerfile, we refresh the repository and
> install packages in two different layers (see commit c4f844ff321
> (support/docker: run apt-get update and apt-get install in two RUNs)
> for in-depth explanations.
>
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> ---
>  support/docker/Dockerfile.arch-2018.07.01 | 40 +++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
>  create mode 100644 support/docker/Dockerfile.arch-2018.07.01
>
> diff --git a/support/docker/Dockerfile.arch-2018.07.01 b/support/docker/Dockerfile.arch-2018.07.01
> new file mode 100644
> index 0000000000..65e74d0fdb
> --- /dev/null
> +++ b/support/docker/Dockerfile.arch-2018.07.01
> @@ -0,0 +1,40 @@
> +# vi: ft=dockerfile
> +
> +# When updating this version, please also update it below.
> +FROM base/devel:2018.07.01
> +
> +LABEL maintainer="Buildroot mailing list <buildroot@buildroot.org>" \
> +      vendor="Buildroot" \
> +      description="Container based on Arch 2018.07.01, with everything needed to run Buildroot already installed"
> +

It's best practice to combine the update and install from a package
manger in one line.  So this should be

RUN echo 'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
\
        > /etc/pacman.d/mirrorlist && \
    pacman -Sy --noconfirm \

> +# Pin the repository to a known version
> +RUN echo 'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch' \
> +        > /etc/pacman.d/mirrorlist && \
> +    pacman -Sy
> +RUN pacman --noconfirm -S \
> +        bc \
> +        bzr \
> +        cvs \
> +        cpio \
> +        flake8 \
> +        git \
> +        mercurial \
> +        python \
> +        python-nose2 \
> +        python-pexpect \
> +        qemu \
> +        qemu-arch-extra \

If you change to using qemu-headless and qemu-headless-arch-extra
packages it saves about 500MB on the image size

Thanks

Martin

> +        rsync \
> +        subversion \
> +        unzip \
> +        wget
> +
> +RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
> +    && /usr/sbin/locale-gen
> +
> +RUN useradd -ms /bin/bash br-user
> +
> +USER br-user
> +WORKDIR /home/br-user
> +ENV HOME /home/br-user
> +ENV LC_ALL en_US.UTF-8
> --
> 2.14.1
>
> _______________________________________________
> buildroot mailing list
> buildroot@busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot
Yann E. MORIN July 14, 2018, 12:01 p.m. UTC | #2
On July 14, 2018 11:19:10 AM UTC, Martin Bark <martin@barkynet.com> wrote:
>Yann,
>
>On 13 July 2018 at 07:38, Yann E. MORIN <yann.morin.1998@free.fr>
>wrote:
>> Hopefully, this image is reproducible, since we are using a tagged
>> base image, plus a pinned repository mirror.
>>
>> As for the Debian-stretch Dockerfile, we refresh the repository and
>> install packages in two different layers (see commit c4f844ff321
>> (support/docker: run apt-get update and apt-get install in two RUNs)
>> for in-depth explanations.
>>
>> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
>> Cc: Ricardo Martincoski <ricardo.martincoski@gmail.com>
>> Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
>> ---
>>  support/docker/Dockerfile.arch-2018.07.01 | 40
>+++++++++++++++++++++++++++++++
>>  1 file changed, 40 insertions(+)
>>  create mode 100644 support/docker/Dockerfile.arch-2018.07.01
>>
>> diff --git a/support/docker/Dockerfile.arch-2018.07.01
>b/support/docker/Dockerfile.arch-2018.07.01
>> new file mode 100644
>> index 0000000000..65e74d0fdb
>> --- /dev/null
>> +++ b/support/docker/Dockerfile.arch-2018.07.01
>> @@ -0,0 +1,40 @@
>> +# vi: ft=dockerfile
>> +
>> +# When updating this version, please also update it below.
>> +FROM base/devel:2018.07.01
>> +
>> +LABEL maintainer="Buildroot mailing list <buildroot@buildroot.org>"
>\
>> +      vendor="Buildroot" \
>> +      description="Container based on Arch 2018.07.01, with
>everything needed to run Buildroot already installed"
>> +
>
>It's best practice to combine the update and install from a package
>manger in one line.  So this should be

Please see:

https://git.busybox.net/buildroot/commit/support/docker/Dockerfile?id=c4f844ff3212266f845ea812da2a8647a9f1e13

Rgd.

>RUN echo
>'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
>\
>        > /etc/pacman.d/mirrorlist && \
>    pacman -Sy --noconfirm \
>
>> +# Pin the repository to a known version
>> +RUN echo
>'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
>\
>> +        > /etc/pacman.d/mirrorlist && \
>> +    pacman -Sy
>> +RUN pacman --noconfirm -S \
>> +        bc \
>> +        bzr \
>> +        cvs \
>> +        cpio \
>> +        flake8 \
>> +        git \
>> +        mercurial \
>> +        python \
>> +        python-nose2 \
>> +        python-pexpect \
>> +        qemu \
>> +        qemu-arch-extra \
>
>If you change to using qemu-headless and qemu-headless-arch-extra
>packages it saves about 500MB on the image size
>
>Thanks
>
>Martin
>
>> +        rsync \
>> +        subversion \
>> +        unzip \
>> +        wget
>> +
>> +RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
>> +    && /usr/sbin/locale-gen
>> +
>> +RUN useradd -ms /bin/bash br-user
>> +
>> +USER br-user
>> +WORKDIR /home/br-user
>> +ENV HOME /home/br-user
>> +ENV LC_ALL en_US.UTF-8
>> --
>> 2.14.1
>>
>> _______________________________________________
>> buildroot mailing list
>> buildroot@busybox.net
>> http://lists.busybox.net/mailman/listinfo/buildroot

Martin, All,
Yann E. MORIN July 15, 2018, 9:05 a.m. UTC | #3
Martin, All,

So, I see that K9mail put the saultations at the end of the mail, which
is quite odd... Anyway, let me expand further on my previous reply...

On 2018-07-14 12:01 +0000, Yann E. MORIN spake thusly:
> On July 14, 2018 11:19:10 AM UTC, Martin Bark <martin@barkynet.com> wrote:
> >On 13 July 2018 at 07:38, Yann E. MORIN <yann.morin.1998@free.fr>
> >wrote:
> >> Hopefully, this image is reproducible", since we are using a tagged
> >> base image, plus a pinned repository mirror.
[--SNIP--]
> >It's best practice to combine the update and install from a package
> >manger in one line.  So this should be
> 
> Please see:
> 
> https://git.busybox.net/buildroot/commit/support/docker/Dockerfile?id=c4f844ff3212266f845ea812da2a8647a9f1e13

So, the reasoning is that, since we use a pinned version of the
repository, running "pacman -Sy --noconfirm" will always yield the same
state of the distribution.

Now, it happens that we need to add a new package to the image, e.g. for
local testing. We can thus re-use the intermediate, locally-cached image
that has the local repository updated.

It kinda speeds up things a bit.

> >RUN echo
> >'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
> >\
> >        > /etc/pacman.d/mirrorlist && \
> >    pacman -Sy --noconfirm \
> >
> >> +# Pin the repository to a known version
> >> +RUN echo
> >'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
> >\
> >> +        > /etc/pacman.d/mirrorlist && \
> >> +    pacman -Sy
> >> +RUN pacman --noconfirm -S \
> >> +        bc \
> >> +        bzr \
> >> +        cvs \
> >> +        cpio \
> >> +        flake8 \
> >> +        git \
> >> +        mercurial \
> >> +        python \
> >> +        python-nose2 \
> >> +        python-pexpect \
> >> +        qemu \
> >> +        qemu-arch-extra \
> >
> >If you change to using qemu-headless and qemu-headless-arch-extra
> >packages it saves about 500MB on the image size

Ah, that one is interesting to know! :-)

However, are we sure that we don;t need the headed version of qemu?

And why do we even have to have qemu in the image to start with, in the
end?

Regards,
Yann E. MORIN.

> >Thanks
> >
> >Martin
> >
> >> +        rsync \
> >> +        subversion \
> >> +        unzip \
> >> +        wget
> >> +
> >> +RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
> >> +    && /usr/sbin/locale-gen
> >> +
> >> +RUN useradd -ms /bin/bash br-user
> >> +
> >> +USER br-user
> >> +WORKDIR /home/br-user
> >> +ENV HOME /home/br-user
> >> +ENV LC_ALL en_US.UTF-8
> >> --
> >> 2.14.1
> >>
> >> _______________________________________________
> >> buildroot mailing list
> >> buildroot@busybox.net
> >> http://lists.busybox.net/mailman/listinfo/buildroot
> 
> Martin, All,
> -- 
> Sent from my phone. Please excuse my brevity.
Martin Bark July 15, 2018, 7:30 p.m. UTC | #4
Yann,

On 15 July 2018 at 10:05, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Martin, All,
>
> So, I see that K9mail put the saultations at the end of the mail, which
> is quite odd... Anyway, let me expand further on my previous reply...
>
> On 2018-07-14 12:01 +0000, Yann E. MORIN spake thusly:
>> On July 14, 2018 11:19:10 AM UTC, Martin Bark <martin@barkynet.com> wrote:
>> >On 13 July 2018 at 07:38, Yann E. MORIN <yann.morin.1998@free.fr>
>> >wrote:
>> >> Hopefully, this image is reproducible", since we are using a tagged
>> >> base image, plus a pinned repository mirror.
> [--SNIP--]
>> >It's best practice to combine the update and install from a package
>> >manger in one line.  So this should be
>>
>> Please see:
>>
>> https://git.busybox.net/buildroot/commit/support/docker/Dockerfile?id=c4f844ff3212266f845ea812da2a8647a9f1e13
>
> So, the reasoning is that, since we use a pinned version of the
> repository, running "pacman -Sy --noconfirm" will always yield the same
> state of the distribution.
>
> Now, it happens that we need to add a new package to the image, e.g. for
> local testing. We can thus re-use the intermediate, locally-cached image
> that has the local repository updated.
>
> It kinda speeds up things a bit.

Yes where you have a pinned package repo i agree splitting the update
and install is ok.  So for debian and archlinux this is true but for
alpine you do need the update and install in one RUN

>
>> >RUN echo
>> >'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
>> >\
>> >        > /etc/pacman.d/mirrorlist && \
>> >    pacman -Sy --noconfirm \
>> >
>> >> +# Pin the repository to a known version
>> >> +RUN echo
>> >'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch'
>> >\
>> >> +        > /etc/pacman.d/mirrorlist && \
>> >> +    pacman -Sy
>> >> +RUN pacman --noconfirm -S \
>> >> +        bc \
>> >> +        bzr \
>> >> +        cvs \
>> >> +        cpio \
>> >> +        flake8 \
>> >> +        git \
>> >> +        mercurial \
>> >> +        python \
>> >> +        python-nose2 \
>> >> +        python-pexpect \
>> >> +        qemu \
>> >> +        qemu-arch-extra \
>> >
>> >If you change to using qemu-headless and qemu-headless-arch-extra
>> >packages it saves about 500MB on the image size
>
> Ah, that one is interesting to know! :-)
>
> However, are we sure that we don;t need the headed version of qemu?
>
> And why do we even have to have qemu in the image to start with, in the
> end?

Good questions i don't know the answer to.  I assume it's something to
do with automated testing.

Thanks

Martin

>
> Regards,
> Yann E. MORIN.
>
>> >Thanks
>> >
>> >Martin
>> >
>> >> +        rsync \
>> >> +        subversion \
>> >> +        unzip \
>> >> +        wget
>> >> +
>> >> +RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
>> >> +    && /usr/sbin/locale-gen
>> >> +
>> >> +RUN useradd -ms /bin/bash br-user
>> >> +
>> >> +USER br-user
>> >> +WORKDIR /home/br-user
>> >> +ENV HOME /home/br-user
>> >> +ENV LC_ALL en_US.UTF-8
>> >> --
>> >> 2.14.1
>> >>
>> >> _______________________________________________
>> >> buildroot mailing list
>> >> buildroot@busybox.net
>> >> http://lists.busybox.net/mailman/listinfo/buildroot
>>
>> Martin, All,
>> --
>> Sent from my phone. Please excuse my brevity.
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
Yann E. MORIN July 15, 2018, 7:45 p.m. UTC | #5
Martin, All,

On 2018-07-15 20:30 +0100, Martin Bark spake thusly:
> On 15 July 2018 at 10:05, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
[--SNIP--]
> > So, the reasoning is that, since we use a pinned version of the
> > repository, running "pacman -Sy --noconfirm" will always yield the same
> > state of the distribution.
> >
> > Now, it happens that we need to add a new package to the image, e.g. for
> > local testing. We can thus re-use the intermediate, locally-cached image
> > that has the local repository updated.
> >
> > It kinda speeds up things a bit.
> 
> Yes where you have a pinned package repo i agree splitting the update
> and install is ok.  So for debian and archlinux this is true but for
> alpine you do need the update and install in one RUN

Agreed on principle.

However, I'd like we use the same constructs in all our dockerfiles, for
consistency sake.

And even if I did not expend too much time at making the Alpine image
reproducible, I expect that we can ultimately make it so, if it is not
already.

In fact, I even expected people to show up and say "hey! what you did
makes ofr a reproducible image," or "hey! here's how you can make it
reproducible." ;-)

Regards,
Yann E. MORIN.

[--SNIP--]
> >> >> +        qemu \
> >> >> +        qemu-arch-extra \
> >> >
> >> >If you change to using qemu-headless and qemu-headless-arch-extra
> >> >packages it saves about 500MB on the image size
> >
> > Ah, that one is interesting to know! :-)
> >
> > However, are we sure that we don;t need the headed version of qemu?
> >
> > And why do we even have to have qemu in the image to start with, in the
> > end?
> 
> Good questions i don't know the answer to.  I assume it's something to
> do with automated testing.
> 
> Thanks
> 
> Martin
> 
> >
> > Regards,
> > Yann E. MORIN.
> >
> >> >Thanks
> >> >
> >> >Martin
> >> >
> >> >> +        rsync \
> >> >> +        subversion \
> >> >> +        unzip \
> >> >> +        wget
> >> >> +
> >> >> +RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
> >> >> +    && /usr/sbin/locale-gen
> >> >> +
> >> >> +RUN useradd -ms /bin/bash br-user
> >> >> +
> >> >> +USER br-user
> >> >> +WORKDIR /home/br-user
> >> >> +ENV HOME /home/br-user
> >> >> +ENV LC_ALL en_US.UTF-8
> >> >> --
> >> >> 2.14.1
> >> >>
> >> >> _______________________________________________
> >> >> buildroot mailing list
> >> >> buildroot@busybox.net
> >> >> http://lists.busybox.net/mailman/listinfo/buildroot
> >>
> >> Martin, All,
> >> --
> >> Sent from my phone. Please excuse my brevity.
> >
> > --
> > .-----------------.--------------------.------------------.--------------------.
> > |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> > | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> > | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> > '------------------------------^-------^------------------^--------------------'
Martin Bark July 16, 2018, 12:13 a.m. UTC | #6
Yann,

On 15 July 2018 at 20:45, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> Martin, All,
>
> On 2018-07-15 20:30 +0100, Martin Bark spake thusly:
>> On 15 July 2018 at 10:05, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> [--SNIP--]
>> > So, the reasoning is that, since we use a pinned version of the
>> > repository, running "pacman -Sy --noconfirm" will always yield the same
>> > state of the distribution.
>> >
>> > Now, it happens that we need to add a new package to the image, e.g. for
>> > local testing. We can thus re-use the intermediate, locally-cached image
>> > that has the local repository updated.
>> >
>> > It kinda speeds up things a bit.
>>
>> Yes where you have a pinned package repo i agree splitting the update
>> and install is ok.  So for debian and archlinux this is true but for
>> alpine you do need the update and install in one RUN
>
> Agreed on principle.
>
> However, I'd like we use the same constructs in all our dockerfiles, for
> consistency sake.
>
> And even if I did not expend too much time at making the Alpine image
> reproducible, I expect that we can ultimately make it so, if it is not
> already.
>
> In fact, I even expected people to show up and say "hey! what you did
> makes ofr a reproducible image," or "hey! here's how you can make it
> reproducible." ;-)
>

hey! here's how you can make it reproducible

1) build the alpine docker image.
2) mkdir -p support/docker/alpine_snapshot
3) docker run -it --rm -v
$PWD/support/docker/alpine_snapshot:/snapshot -u root
buildroot/alpine-3.7:$BR2_DOCKER_VERSION bash
4) inside the container run

mkdir -p /var/cache/apk
ln -s /var/cache/apk /etc/apk/cache
apk cache sync
cp -a /etc/apk/cache/*.apk /snapshot
exit

7) sudo chown -R $(id -u):$(id -g) support/docker/alpine_snapshot
6) edit the Dockerfile so it looks like this

COPY ./alpine_snapshot /snapshot
RUN apk add /snapshot/*.apk

7) build the alpine docker image again.  it will build using the apk
files from /snapshot directory we just created

This is not ideal but it's a proof of concept.  To improve you could
copy the apk to a website, setup it up as a proper signed package
repository and then edit /etc/apk/repositories to use this snapshot

Thanks

Martin


> Regards,
> Yann E. MORIN.
>
> [--SNIP--]
>> >> >> +        qemu \
>> >> >> +        qemu-arch-extra \
>> >> >
>> >> >If you change to using qemu-headless and qemu-headless-arch-extra
>> >> >packages it saves about 500MB on the image size
>> >
>> > Ah, that one is interesting to know! :-)
>> >
>> > However, are we sure that we don;t need the headed version of qemu?
>> >
>> > And why do we even have to have qemu in the image to start with, in the
>> > end?
>>
>> Good questions i don't know the answer to.  I assume it's something to
>> do with automated testing.
>>
>> Thanks
>>
>> Martin
>>
>> >
>> > Regards,
>> > Yann E. MORIN.
>> >
>> >> >Thanks
>> >> >
>> >> >Martin
>> >> >
>> >> >> +        rsync \
>> >> >> +        subversion \
>> >> >> +        unzip \
>> >> >> +        wget
>> >> >> +
>> >> >> +RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
>> >> >> +    && /usr/sbin/locale-gen
>> >> >> +
>> >> >> +RUN useradd -ms /bin/bash br-user
>> >> >> +
>> >> >> +USER br-user
>> >> >> +WORKDIR /home/br-user
>> >> >> +ENV HOME /home/br-user
>> >> >> +ENV LC_ALL en_US.UTF-8
>> >> >> --
>> >> >> 2.14.1
>> >> >>
>> >> >> _______________________________________________
>> >> >> buildroot mailing list
>> >> >> buildroot@busybox.net
>> >> >> http://lists.busybox.net/mailman/listinfo/buildroot
>> >>
>> >> Martin, All,
>> >> --
>> >> Sent from my phone. Please excuse my brevity.
>> >
>> > --
>> > .-----------------.--------------------.------------------.--------------------.
>> > |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
>> > | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
>> > | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
>> > | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
>> > '------------------------------^-------^------------------^--------------------'
>
> --
> .-----------------.--------------------.------------------.--------------------.
> |  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
> | +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
> | +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
> | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
> '------------------------------^-------^------------------^--------------------'
Yann E. MORIN July 16, 2018, 4:15 p.m. UTC | #7
Martin, All,

On 2018-07-16 01:13 +0100, Martin Bark spake thusly:
> On 15 July 2018 at 20:45, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> > On 2018-07-15 20:30 +0100, Martin Bark spake thusly:
> >> On 15 July 2018 at 10:05, Yann E. MORIN <yann.morin.1998@free.fr> wrote:
> > [--SNIP--]
> >> > So, the reasoning is that, since we use a pinned version of the
> >> > repository, running "pacman -Sy --noconfirm" will always yield the same
> >> > state of the distribution.
> >> >
> >> > Now, it happens that we need to add a new package to the image, e.g. for
> >> > local testing. We can thus re-use the intermediate, locally-cached image
> >> > that has the local repository updated.
> >> >
> >> > It kinda speeds up things a bit.
[--SNIP--]
> hey! here's how you can make it reproducible

Wee! :-)

> 1) build the alpine docker image.
> 2) mkdir -p support/docker/alpine_snapshot
> 3) docker run -it --rm -v
> $PWD/support/docker/alpine_snapshot:/snapshot -u root
> buildroot/alpine-3.7:$BR2_DOCKER_VERSION bash
> 4) inside the container run
> 
> mkdir -p /var/cache/apk
> ln -s /var/cache/apk /etc/apk/cache
> apk cache sync
> cp -a /etc/apk/cache/*.apk /snapshot
> exit
> 
> 7) sudo chown -R $(id -u):$(id -g) support/docker/alpine_snapshot
> 6) edit the Dockerfile so it looks like this
> 
> COPY ./alpine_snapshot /snapshot
> RUN apk add /snapshot/*.apk
> 
> 7) build the alpine docker image again.  it will build using the apk
> files from /snapshot directory we just created
> 
> This is not ideal but it's a proof of concept.  To improve you could
> copy the apk to a website, setup it up as a proper signed package
> repository and then edit /etc/apk/repositories to use this snapshot

Wooo... Scary...

OK, I'll give it a try.

Thanks you for the feedback! :-)

Regards,
Yann E. MORIN.
diff mbox series

Patch

diff --git a/support/docker/Dockerfile.arch-2018.07.01 b/support/docker/Dockerfile.arch-2018.07.01
new file mode 100644
index 0000000000..65e74d0fdb
--- /dev/null
+++ b/support/docker/Dockerfile.arch-2018.07.01
@@ -0,0 +1,40 @@ 
+# vi: ft=dockerfile
+
+# When updating this version, please also update it below.
+FROM base/devel:2018.07.01
+
+LABEL maintainer="Buildroot mailing list <buildroot@buildroot.org>" \
+      vendor="Buildroot" \
+      description="Container based on Arch 2018.07.01, with everything needed to run Buildroot already installed"
+
+# Pin the repository to a known version
+RUN echo 'Server=https://archive.archlinux.org/repos/2018/07/01/$repo/os/$arch' \
+        > /etc/pacman.d/mirrorlist && \
+    pacman -Sy
+RUN pacman --noconfirm -S \
+        bc \
+        bzr \
+        cvs \
+        cpio \
+        flake8 \
+        git \
+        mercurial \
+        python \
+        python-nose2 \
+        python-pexpect \
+        qemu \
+        qemu-arch-extra \
+        rsync \
+        subversion \
+        unzip \
+        wget
+
+RUN sed -i 's/# *\(en_US.UTF-8\)/\1/' /etc/locale.gen \
+    && /usr/sbin/locale-gen
+
+RUN useradd -ms /bin/bash br-user
+
+USER br-user
+WORKDIR /home/br-user
+ENV HOME /home/br-user
+ENV LC_ALL en_US.UTF-8