Basic build container images with distribution package references (#4893)

* Container based build environments

* Initial commit for support of Arch and Manjaro Linux distros

* Removed openSUSE as shiboken is not supported in 15.3

* Added system updates to container image build

* Removed duplicates and ordered packages for easy reference

* Updated documenation for openSUSE and package installation.

Added documentation on how to install packages outside of conatiners
Removed references to openSUSE due to missing dependancies.

* Matched debian and ubuntu install script for eaiser comparison

* Fixed error of image realease from latest to rolling

Ubuntu's "latest" tag is to their LTS distribution release rather than
their current cutting edge distro release.

* Update debian.sh

Remove unneeded deps and remove libboost-all-dev

* Update ubuntu.sh

Remove unneeded deps and remove libboost-all-dev

Co-authored-by: Christopher West <cwest@thedigitaledge.co.uk>
Co-authored-by: Kurt Kremitzki <kkremitzki@users.noreply.github.com>
This commit is contained in:
Christopher West
2021-08-01 21:23:02 +01:00
committed by GitHub
parent 8acdb30819
commit 236d8a0a11
11 changed files with 256 additions and 0 deletions

View File

@@ -0,0 +1,11 @@
FROM archlinux:base
COPY arch.sh /tmp
RUN pacman --sync --refresh --sysupgrade --noconfirm && \
sh /tmp/arch.sh && \
mkdir /builds
WORKDIR /builds
VOLUME [ "/builds" ]

View File

@@ -0,0 +1,17 @@
FROM debian:bullseye
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
ENV UTC=true
ENV ARC=false
COPY debian.sh /tmp
RUN apt-get update && \
apt-get upgrade --yes && \
sh /tmp/debian.sh && \
mkdir /builds
WORKDIR /builds
VOLUME [ "/builds" ]

View File

@@ -0,0 +1,11 @@
FROM fedora:latest
COPY fedora.sh /tmp
RUN dnf update --assumeyes && \
sh /tmp/fedora.sh && \
mkdir /builds
WORKDIR /builds
VOLUME [ "/builds" ]

View File

@@ -0,0 +1,11 @@
FROM manjarolinux/base
COPY manjaro.sh /tmp
RUN pacman --sync --refresh --sysupgrade --noconfirm && \
sh /tmp/manjaro.sh && \
mkdir /builds
WORKDIR /builds
VOLUME [ "/builds" ]

View File

@@ -0,0 +1,17 @@
FROM ubuntu:rolling
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
ENV UTC=true
ENV ARC=false
COPY ubuntu.sh /tmp
RUN apt-get update && \
apt-get upgrade --yes && \
sh /tmp/ubuntu.sh && \
mkdir /builds
WORKDIR /builds
VOLUME [ "/builds" ]

136
tools/build/README.rst Normal file
View File

@@ -0,0 +1,136 @@
==========================
FreeCAD build dependencies
==========================
Distributions
=============
The following commands are used to install the packages needed to build FreeCAD from source on the following distributions.
Arch Linux
----------
The following command is used to install the required packages used to compile FreeCAD on Arch Linux.
.. code-block:: console
sudo sh tools/build/arch.sh
Debian
------
The following command is used to install the required packages used to compile FreeCAD on Debian.
.. code-block:: console
sudo sh tools/build/debian.sh
Fedora
------
The following command is used to install the required packages used to compile FreeCAD on Fedora.
.. code-block:: console
sudo sh tools/build/fedora.sh
Manjaro
-------
The following command is used to install the required packages used to compile FreeCAD on Manjaro Linux.
.. code-block:: console
sudo sh tools/build/manjaro.sh
Ubuntu
------
The following command is used to install the required packages used to compile FreeCAD on Ubuntu Linux.
.. code-block:: console
sudo sh tools/build/ubuntu.sh
Containers
==========
The following will create containers that have all the required dependencies
pre-installed that are needed to build FreeCAD from source.
Arch Linux
-----------
The following commands are used to create and run a Arch Linux build environment.
.. code-block:: console
docker build --file tools/build/Dockerfile.Arch --tag freecad-arch
docker run --rm --interactive --tty --volume $(pwd):/builds:z freecad-arch
Debian
------
The following commands are used to create and run a Debian build environment.
.. code-block:: console
docker build --file tools/build/Dockerfile.Debian --tag freecad-debian
docker run --rm --interactive --tty --volume $(pwd):/builds:z freecad-debian
Fedora
------
The following commands are used to create and run a Fedora build environment.
.. code-block:: console
docker build --file tools/build/Dockerfile.Fedora --tag freecad-fedora
docker run --rm --interactive --tty --volume $(pwd):/builds:z freecad-fedora
Manjaro
-------
The following commands are used to create and run a Manjaro build environment.
.. code-block:: console
docker build --file tools/build/Dockerfile.Manjaro --tag freecad-manjaro
docker run --rm --interactive --tty --volume $(pwd):/builds:z freecad-manjaro
Ubuntu
------
The following commands are used to create and run a Ubuntu build environment.
.. code-block:: console
docker build --file tools/build/Dockerfile.Ubuntu --tag freecad-ubuntu
docker run --rm --interactive --tty --volume $(pwd):/builds:z freecad-ubuntu
Build Code
==========
To build the FreeCAD code inside one of the running containers the following
commands should be used
.. code-block:: console
mkdir freecad-build
cd freecad-build
cmake ../freecad-source
make -j$(nproc --ignore=2)

7
tools/build/arch.sh Normal file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
pacman --noconfirm --sync boost boost-libs cmake coin curl desktop-file-utils doxygen \
eigen gc gcc-fortran git glew gnu-free-fonts guile hicolor-icon-theme jsoncpp \
libspnav libtool make med opencascade openmpi pyside2 pyside2-tools \
python-matplotlib python-netcdf4 python-pivy qt5-svg qt5-tools qt5-webengine \
qt5-webkit shared-mime-info shiboken2 swig texinfo xerces-c

15
tools/build/debian.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
apt-get install --no-install-recommends --yes build-essential cmake doxygen \
git libboost-date-time-dev libboost-dev libboost-filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev \
libboost-python-dev libboost-regex-dev libboost-serialization-dev \
libboost-thread-dev libcoin-dev libeigen3-dev libgtkglext1-dev libgts-dev \
libkdtree++-dev libkml-dev libmedc-dev libocct-data-exchange-dev \
libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev \
libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev \
libopencv-dev libproj-dev libpyside2-dev libqt5svg5-dev libqt5webkit5-dev \
libqt5xmlpatterns5-dev libshiboken2-dev libvtk9-dev libvtk9-qt-dev \
libvtk-dicom-dev libx11-dev libxerces-c-dev libxmu-dev libxmuu-dev \
libzipios++-dev netgen netgen-headers pyside2-tools python3-dev \
python3-matplotlib python3-pivy python3-pyside2.qtuitools qtchooser \
qttools5-dev shiboken2 swig

9
tools/build/fedora.sh Normal file
View File

@@ -0,0 +1,9 @@
#!/bin/sh
dnf --assumeyes install boost-devel cmake Coin3 Coin3-devel desktop-file-utils doxygen \
eigen3-devel freeimage-devel freetype freetype-devel gcc gettext git libspnav-devel \
libXmu-devel med med-devel mesa-libGLU-devel ode-devel opencascade-devel \
opencv-devel openmpi-devel pcl-devel pyside2-tools python3 python3-devel \
python3-matplotlib python3-pivy python3-pyside2-devel qt5-qtsvg-devel \
qt5-qttools-static qt5-qtxmlpatterns qt5-qtxmlpatterns-devel qt-devel \
qt-webkit-devel smesh-devel SoQt-devel swig tbb-devel vtk xerces-c xerces-c-devel

7
tools/build/manjaro.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/sh
pacman --noconfirm --sync boost boost-libs cmake coin curl desktop-file-utils doxygen \
eigen gc gcc-fortran git glew gnu-free-fonts guile hicolor-icon-theme jsoncpp \
libspnav libtool make med opencascade pyside2 pyside2-tools python-matplotlib \
python-netcdf4 python-pivy qt5-svg qt5-tools qt5-webengine qt5-webkit \
shared-mime-info shiboken2 swig texinfo xerces-c

15
tools/build/ubuntu.sh Normal file
View File

@@ -0,0 +1,15 @@
#!/bin/sh
apt-get install --no-install-recommends --yes build-essential cmake doxygen git \
libboost-date-time-dev libboost-dev libboost-filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev \
libboost-python-dev libboost-regex-dev libboost-serialization-dev \
libboost-thread-dev libcoin-dev libeigen3-dev libgtkglext1-dev \
libgts-dev libkdtree++-dev libkml-dev libmedc-dev libocct-data-exchange-dev \
libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev \
libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev \
libopencv-dev libproj-dev libpyside2-dev libqt5svg5-dev libqt5webkit5-dev \
libqt5xmlpatterns5-dev libshiboken2-dev libvtk9-dev libvtk9-qt-dev \
libvtk-dicom-dev libx11-dev libxerces-c-dev libxmu-dev libxmuu-dev \
libzipios++-dev netgen netgen-headers pyside2-tools python3-dev \
python3-matplotlib python3-pivy python3-pyside2.qtuitools qtchooser \
qttools5-dev shiboken2 swig