From 7a33c71cb2493c60d83863191107e1f58733adde Mon Sep 17 00:00:00 2001 From: John Klug Date: Mon, 4 Apr 2022 15:01:00 -0500 Subject: How to build an image from the source tarball --- scripts/docker-build/Dockerfile | 42 ++++++++++++++++++++++++++++++++++++ scripts/docker-build/README | 28 ++++++++++++++++++++++++ scripts/docker-build/build-docker.sh | 11 ++++++++++ scripts/docker-build/build-mlinux.sh | 9 ++++++++ 4 files changed, 90 insertions(+) create mode 100644 scripts/docker-build/Dockerfile create mode 100644 scripts/docker-build/README create mode 100755 scripts/docker-build/build-docker.sh create mode 100755 scripts/docker-build/build-mlinux.sh diff --git a/scripts/docker-build/Dockerfile b/scripts/docker-build/Dockerfile new file mode 100644 index 0000000..4491447 --- /dev/null +++ b/scripts/docker-build/Dockerfile @@ -0,0 +1,42 @@ +# To execut the Docker build: +# ./build-docker.sh +# This should lead to a shell prompt as root. +# Then type: +# # > su -l mlbuilder +# $ > build-mlinux.sh +# +# Created user-id mlbuilder with password mlbuilder +# +# +FROM ubuntu:bionic +ENV APT="apt-get -y" + +USER root +ENV DEBIAN_FRONTEND=noninteractive +RUN cp /etc/apt/sources.list /etc/apt/sources.list~ +RUN sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list +RUN ${APT} update +RUN useradd -G sudo -s /bin/bash -m mlbuilder +RUN echo "export LANG=en_US.UTF-8" >>/home/mlbuilder/.profile +RUN echo "export LANGUAGE=en_US:en" >>/home/mlbuilder/.profile +RUN echo "export LC_ALL=en_US.UTF-8" >>/home/mlbuilder/.profile +RUN ${APT} build-dep qemu +RUN ${APT} remove oss4-dev +RUN ${APT} install apt-utils gawk wget git-core diffstat unzip texinfo gcc-multilib \ + build-essential chrpath socat iputils-ping locales language-pack-en cpio \ + xz-utils cmake lsof strace +RUN ${APT} install openssh-server +RUN sed -i 's/.*PermitEmptyPasswords no.*/PermitEmptyPasswords yes/' /etc/ssh/sshd_config +RUN echo "PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '" >>/home/mlbuilder/.bashrc +COPY mlinux-6.0.0.tar.gz /tmp +RUN mkdir -p /home/mlbuilder/.local/bin +COPY build-mlinux.sh /home/mlbuilder/.local/bin +RUN chmod 775 /home/mlbuilder/.local/bin/build-mlinux.sh +RUN chown -R mlbuilder:mlbuilder /home/mlbuilder +RUN su -l mlbuilder bash -c "tar -C /home/mlbuilder -xf /tmp/mlinux-6.0.0.tar.gz" +RUN rm /tmp/mlinux-6.0.0.tar.gz +RUN mkdir -p /run/sshd +RUN echo "mlbuilder:mlbuilder" >/home/mlbuilder/password.txt +RUN chpasswd < /home/mlbuilder/password.txt +EXPOSE 22/tcp +ENTRYPOINT /usr/sbin/sshd && bash diff --git a/scripts/docker-build/README b/scripts/docker-build/README new file mode 100644 index 0000000..c38fdb9 --- /dev/null +++ b/scripts/docker-build/README @@ -0,0 +1,28 @@ +Docker allows one to build on a specific version of an operating +system without having that version installed on the host. This +example was tested on Debian Bullseye, but the build was actually +done on the Ubuntu Bionic Docker image. + +The following docker related packages were installed: + + ii docker-ce 5:20.10.14~3-0~debian-bullseye amd64 Docker: the open-source application container engine + ii docker-ce-cli 5:20.10.14~3-0~debian-bullseye amd64 Docker CLI: the open-source application container engine + ii docker-ce-rootless-extras 5:20.10.14~3-0~debian-bullseye amd64 Rootless support for Docker. + ii docker-scan-plugin 0.17.0~debian-bullseye amd64 Docker scan cli plugin. + +build-docker.sh was run from the command line to create the docker container called mlinux-build + +The build starts sshd, but is is not needed if you use the docker +exec command to attach to the Docker image as us done in +build-mlinux.sh. + +After the build is complete you should have a login shell. You +could the do: + + su -l mlbuilder + build-mlinux.sh + +After the build completes, the output files can be copied from the host +as follows: + + docker cp mlinux-build:/home/mlbuilder/mlinux-6.0.0/build/tmp/deploy/images/mtcdt/mlinux-base-image-mtcdt-upgrade-withboot.bin . diff --git a/scripts/docker-build/build-docker.sh b/scripts/docker-build/build-docker.sh new file mode 100755 index 0000000..d6b6436 --- /dev/null +++ b/scripts/docker-build/build-docker.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Build a Docker image to build mLinux 6 +docker container stop mlinux-build || true +docker container rm mlinux-build || true +docker build --network=host -t yocto-bionic . +docker run -P -itd --name mlinux-build yocto-bionic:latest bash +echo 'You should be able to ssh to the following address at port 22 (the ssh port):' +docker inspect -f "{{ .NetworkSettings.IPAddress }}" mlinux-build +echo 'Printing out the userid:password for ssh access' +docker exec mlinux-build /bin/cat /home/mlbuilder/password.txt +docker exec -it mlinux-build /bin/bash diff --git a/scripts/docker-build/build-mlinux.sh b/scripts/docker-build/build-mlinux.sh new file mode 100755 index 0000000..a317144 --- /dev/null +++ b/scripts/docker-build/build-mlinux.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Script to do the build of mLinux 6 base image +# First step after getting in: +# su -l mlbuilder +cd mlinux-6.0.0/ +export MACHINE=mtcdt +export MLINUX_PASSWORD=root +. oe-init-build-env +bitbake mlinux-base-image -- cgit v1.2.3