1. Einführung

Dieses Dokument beschreibt, wie man die ausführbare LinuxCNC Software aus dem Quellcode erstellt. Dies ist vor allem nützlich, wenn Sie ein Entwickler sind, der LinuxCNC modifiziert. Es kann auch nützlich sein, wenn Sie ein Benutzer sind, der Entwickler-Zweige testet, obwohl Sie dann auch die Möglichkeit haben, einfach Debian-Pakete aus dem Buildbot zu installieren (http://buildbot.linuxcnc.org) oder als ein normales Paket aus Ihrer Linux Distribution (https://tracker.debian.org/pkg/linuxcnc). Zugegeben, diese Erleuterungen sollen Sie auch dazu ermutigen, zur Entwicklung von LinuxCNC beizutragen. Das Projekt lebt allein aus den Beiträgen seiner Anwender. * zu einer weiteren Entwicklung von LinuxCNC oder * einer weiteren Entwicklung, die Sie vielleicht zu LinuxCNC beisteuern möchten oder anderen helfen diese zu finalisieren.

Beispielsweise portieren Sie vielleicht LinuxCNC zu einer neuen Linux Distribution oder, und dies geschieht häufig, ein Entwickler reagiert zu einem von Ihnen berichteten Problem und bittet Sie, seinen Fix zu testen. Eine solche Veränderung wird von keinem buildbot gesehen, oder deren Hilfe trifft verzögert eine, nachdem jemand anderes die Änderung durchgesehen hat. Darauf möchten Sie aber nicht warten oder die anderen hat nicht die exakt gleiche Hardware, um den veränderten Code zu testen.

Neben dem Programm zur Steuerung der Maschine, die vom Quellbaum gebaut werden, können Sie auch die gleichen PDFs und/oder HTML Dateien bauen, denen Sie vermutlich bereits online bei https://linuxcnc.org/documents begegnet sind.

Wenn Sie zu LinuxCNC beitragen möchten aber unsicher sind wo Sie anfangen sollen, dann denken Sie bitte einmal allen Ernstes darüber nach, vielleicht bei der Dokumentation anzufangen. Jeder findet dort etwas zu verbessern - und wenn Sie nur ein "FIXME: und noch ein Kommentar dazu" im Text als Referenz für sich selber und andere hinterlassen, um diesen Abschnitt später nochmal anzuschauen. Auch werden die bereits vorgenommenen Übersetzungen zu anderen Sprachen als Englisch sehr Wahrscheinlich von Ihrer Durchsicht profitieren bei https://hosted.weblate.org/projects/linuxcnc/ .

2. Herunterladen des Quellcodes

Das LinuxCNC Projekt git Repository ist zugänglich über https://github.com/LinuxCNC/linuxcnc. GitHub ist ein beliebter git Hosting-Service und Code-Sharing-Website.

Um den Quellcode herunterzuladen haben Sie zwei Optionen:

Herunterladen einer komprimierten .tar-Datei, im Englischen gern "tarball" genannt

Auf der LinuxCNC-Projektseite in GitHub finden Sie einen Verweis auf die "Releases" oder "Tags", folgen Sie auf diesen Hyperlink zur Archivseite und laden Sie die neueste .tar-Datei herunter. Diese Datei wird als .tar.xz oder .tar.gz-Datei komprimiert angeboten. Diese Datei, allgemein als "Tarball" bezeichnet, ist ein Archiv sehr analog zu einer .zip-Datei. Ihr Linux-Desktop wird wissen, wie Sie diese Datei behandeln, wenn Sie auf sie doppelklicken.

Erstellen Sie eine lokale Kopie des LinuxCNC-Repository

Sie würden zunächst das Programm "git" auf Ihrem Rechner installieren, wenn es nicht bereits verfügbar ist (sudo apt install git). Dann bereiten Sie eine lokale Instanz des Quellbaums wie folgt vor: .

$ git clone https://github.com/LinuxCNC/linuxcnc.git linuxcnc-source-dir

. Das erste Argument des git Befehls nimmt es vorweg: Dies wird als "Klon" (engl. clone) des LinuxCNC-Repositorys bezeichnet. Der Vorteil ist, dass dieser lokale Klon die Kommunikation über Änderungen unterstützt, die Sie am Quellbaum vornehmen.

GitHub ist eine eigene Infrastruktur und im Detail anderswo erklärt. Nur um Sie motiviert zu bekommen, wenn Sie es nicht schon wissen, GitHub bietet an einen Klon des LinuxCNC in einem allein Ihnen zugeordneten Bereich anzulegen und diese Instanz öffentlich zugänglich zu machen. GitHub nennt eine solche zusätzliche Instanz eines anderen Repositorys einen "Fork" (engl. für "Abzweigung", wird aber auch im Deutschen genutzt). Sie können leicht (und ohne Kosten) einen solchen Fork des LinuxCNC git Repository bei GitHub erstellen und diesen verwenden, um Ihre Änderungen zu verfolgen und zu veröffentlichen. Nach der Erstellung Ihres eigenen GitHub Fork von LinuxCNC, klonen Sie diesen auf Ihrem Entwicklungs-Rechner und fahren Sie mit Ihrer Entwicklungsarbeit fort wie gewohnt.

Wir vom LinuxCNC-Projekt hoffen, dass Sie Ihre Änderungen mit uns teilen werden, damit die Gemeinschaft von Ihrer Arbeit profitieren kann. GitHub macht dieses Teilen sehr einfach: Nachdem Sie Ihre Änderungen aufpoliert und in Ihren Github-Fork gepusht haben, schicken Sie uns einen Pull Request.

2.1. Schnellstart

Wer ungeduldig ist, kann dies versuchen:

$ git clone https://github.com/LinuxCNC/linuxcnc.git linuxcnc-source-dir
$ cd linuxcnc-source-dir/src
$ ./autogen.sh
$ ./configure --with-realtime=uspace
$ make

Das wird wahrscheinlich schiefgehen! Das macht Sie nicht zu einem schlechten Menschen, es bedeutet nur, dass Sie dieses ganze Dokument lesen sollten, um herauszufinden, wie Sie Ihre Probleme lösen können. Insbesondere den Abschnitt über <Satisfying-Build-Dependencies,Bedienen von Build Abhängigkeiten (engl. dependencies)>>.

Wenn Sie auf einem Echtzeit-fähigen System arbeiten (wie z.B. eine Installation aus dem LinuxCNC Live/Install Image, siehe den Echtzeit Abschnitt unten), ist ein zusätzlicher Build-Schritt zu diesem Zeitpunkt erforderlich:

>$ sudo make setuid

Nachdem Sie erfolgreich LinuxCNC gebaut haben, ist es nun Zeit, die Tests durchzuführen:

>$ source ../scripts/rip-environment
>$ runtests

Auch das kann fehlschlagen! Lesen Sie das gesamte Dokument, insbesondere den Abschnitt Einrichten der Testumgebung.

3. Unterstützte Plattformen

Das LinuxCNC-Projekt orientiert sich an moderne Debian-basierte Distributionen, einschließlich Debian, Ubuntu und Mint. Wir testen ständig auf den unter http://buildbot.linuxcnc.org aufgeführten Plattformen.

LinuxCNC baut auf die meisten anderen Linux-Distributionen, obwohl die Verwaltung von Abhängigkeiten mehr manuell und weniger automatisch sein wird. Patches zur Verbesserung der Portabilität auf neue Plattformen sind immer willkommen.

3.1. Echtzeit

LinuxCNC ist eine Werkzeugmaschinensteuerung, und es erfordert eine Echtzeit-Plattform, um diesen Anforderungen gerechtzuwerden. Diese Version von LinuxCNC unterstützt die folgenden Plattformen. Die ersten drei aufgeführten sind Echtzeit-Plattformen:

RTAI

Von https://www.rtai.org. Ein Linux-Kernel mit dem RTAI-Patch ist aus dem Debian-Archiv unter https://linuxcnc.org erhältlich. Siehe LinuxCNC erhalten für Installationsanweisungen.

Xenomai

Von https://xenomai.org. Sie müssen einen Xenomai-Kernel selbst kompilieren oder beziehen.

Preempt-RT

Von https://rt.wiki.kernel.org. Ein Linux-Kernel mit dem Preempt-RT-Patch ist gelegentlich im Debian-Archiv unter https://www.debian.org und in der Wayback Machine unter https://snapshot.debian.org verfügbar.

Nicht in Echtzeit

LinuxCNC can also be built and run on non-realtime platforms, such as a regular install of Debian or Ubuntu without any special realtime kernel.
In this mode LinuxCNC is not useful for controlling machine tools, but it is useful for simulating the execution of G-code and for testing the non-realtime parts of the system (such as the user interfaces, and some kinds of components and device drivers).
To make use of the realtime capabilities of LinuxCNC, certain parts of LinuxCNC need to run with root privileges. To enable root for these parts, run this extra command after the make that builds LinuxCNC:

>$ sudo make setuid

4. Build-Modi

Es gibt zwei Möglichkeiten, LinuxCNC zu bauen: Den Entwickler-freundlichen "run in place" Modus und den benutzerfreundlichen Debian-Packaging-Modus.

4.1. Kompilieren (bauen) für eine Ausführung ohne Installation ("run-in-place")

In einem Run-In-Place-Build werden die LinuxCNC-Programme aus den Quellen kompiliert und dann direkt aus dem Build-Verzeichnis ausgeführt. Nichts wird außerhalb des Build-Verzeichnisses installiert. Dies ist schnell und einfach und geeignet für eine schnelle Iteration von Änderungen. Die LinuxCNC Testsuite läuft nur in einem Run-In-Place Build. Die meisten LinuxCNC-Entwickler bauen in erster Linie mit diesem Modus.

Das Bauen für Run-In-Place folgt den Schritten im Schneller Einstieg Abschnitt am Anfang dieses Dokuments, möglicherweise mit anderen Argumenten für src/configure und make.

4.1.1. src/configure Argumente

Das Skript src/configure konfiguriert, wie der Quellcode kompiliert werden soll. Es nimmt viele optionale Argumente entgegen. Um alle Argument zu `src/configure`aufzulisten, führe folgendes aus:

$ cd linuxcnc-source-dir/src
$ ./configure --help

Die am häufigsten verwendeten Argumente sind:

--with-realtime=uspace

Bauen für jede Echtzeit-Plattform, oder für Nicht-Echtzeit. Die resultierenden ausführbaren Dateien von LinuxCNC laufen sowohl auf einem Linux-Kernel mit Preempt-RT-Patches (mit Echtzeit-Maschinenkontrolle) als auch auf einem reguälren (ungepatchten) Linux-Kernel (mit G-Code-Simulation, aber ohne Echtzeit-Maschinenkontrolle).

Werden Entwicklungsdateien für Xenomai (typischerweise aus dem Paket libxenomai-dev) oder RTAI (typischerweise aus einem Paket mit einem Namen, der mit "rtai-modules" beginnt) installiert, wird auch die Unterstützung für diese Echtzeit-Kernels aktiviert.
--with-realtime=/usr/realtime-$VERSION

Bauen Sie für die RTAI-Echtzeitplattform unter Verwendung des älteren "Echtzeit-Kernel" Pakets. Dies erfordert, dass Sie einen RTAI-Kernel und die RTAI-Module in /usr/realtime-$VERSION installiert haben. Die resultierenden ausführbare Dateien von LinuxCNC werden nur auf dem angegebenen RTAI-Kernel laufen. Ab LinuxCNC 2.7, produziert dies die beste Echtzeit-Leistung.

--enable-build-documentation

Erzeuge (engl. build) die Dokumentation zusätzlich zu den ausführbaren Dateien. Diese Option erhöht den Zeitaufwand für die Kompilierung erheblich, da die Erstellung der Dokumentation recht zeitaufwendig ist. Wenn Sie nicht aktiv an der Dokumentation arbeiten, sollten Sie diese Option nicht anwählen.

--disable-build-documentation-translation

Deaktivieren Sie die Erstellung der übersetzten Dokumentation für alle verfügbaren Sprachen. Die Erstellung der übersetzten Dokumentation nimmt sehr viel Zeit in Anspruch, daher ist es empfehlenswert, dies zu überspringen, wenn es nicht wirklich benötigt wird.

4.1.2. make Argumente

Der Befehl make akzeptiert zwei nützliche optionale Argumente.

Parallele Kompilierung

make nimmt ein optionales Argument -j N (wobei N eine Zahl ist). Dies ermöglicht die parallele Kompilierung mit N gleichzeitigen Prozessen, was das Bauen erheblich beschleunigen kann.

Ein nützlicher Wert für N ist die Anzahl der CPUs in Ihrem Build-System.

Sie können die Anzahl der CPUs ermitteln, indem Sie nproc ausführen.

Bauen nur eines bestimmten Ziels

Wenn Sie nur einen bestimmten Teil von LinuxCNC bauen wollen, können Sie das, was Sie bauen wollen, in der Kommandozeile make nennen. Wenn Sie zum Beispiel an einer Komponente namens "froboz" arbeiten, können Sie seine ausführbare Datei zu bauen, indem Sie:

$ cd linuxcnc-source-dir/src
$ make ../bin/froboz

4.2. Debian-Pakete erstellen

Beim Erstellen von Debian-Paketen werden die LinuxCNC-Programme anhand des Quellcodes kompiliert und dann in einem Debian-Paket gespeichert, komplett mit Abhängigkeitsinformationen. Dieser Prozess beinhaltet standardmäßig auch das Erstellen der Dokumentation, was aufgrund der ganzen I/O-Vorgänge für die vielen Sprachen seine Zeit dauert, aber das kann übersprungen werden. LinuxCNC wird dann als Teil dieser Pakete auf denselben Rechner oder auf jedem Rechner derselben Architektur installiert, auf welchen die .deb-Dateien kopiert wurden. LinuxCNC kann nicht ausgeführt werden, bis die Debian-Pakete auf dem gewünschen Rechner installiert sind und dann die ausführbaren Dateien in /usr/bin und /usr/lib verfügbar sind, genau wie andere reguläre Software des Systems.

Diese Art des Bauens ist vor allem dann nützlich, wenn die Software für die Auslieferung an Endbenutzer verpackt werden soll und wenn die Software für einen Rechner erstellt werden soll, auf dem die Build-Umgebung nicht installiert ist oder der keinen Internetzugang hat.

Pakete zu Bauens ist vor allem dann nützlich für eine Auslieferung der Software an Endbenutzer. Entwickler unter sich tauschen nur den Quellcode aus, der wahrscheinlich vom unten referierten LinuxCNC GitHub-Repository unterstützt wird. Auch wenn die Software für einen Rechner erstellt werden soll, auf dem die Build-Umgebung nicht installiert ist oder der keinen Internetzugang hat, werden fertig gebaute Pakete gerne akzeptiert.

Die Erstellung von Debian-Paketen wird mit dem dpkg-buildpackage-Tool durchgeführt, das vom dpkg-dev-Paket bereitgestellt wird. Dessen Ausführung geht einher mit einer Reihe von Vorarbeiten, wie nachfolgend weiter beschrieben: * die allgemeine bauinfrastruktur ist zu installieren, d.h. die compiler usw. * Paket-spezifische Abhängigkeiten für das Bauen der Pakete (engl. build dependencies) sind zu installieren, wie beschrieben im Abschnitt Den Build Abhängigkeiten genügen. * Dateien im debian Ordner müssen vollständig sein, die das Paket beschreiben

Build-Tools wurden als virtuelles Paket unter dem Namen build-essential zusammengefasst. Um es zu installieren, führen Sie aus:

$ sudo apt-get install build-essential

Sobald diese Voraussetzungen erfüllt sind, besteht die Erstellung der Debian-Pakete aus zwei Schritten.

Der erste Schritt ist die Generierung der Debian-Paket-Skripte und Metadaten aus dem Git-Repositorium, indem Sie dies ausführen:

$ cd linuxcnc-dev
$ ./debian/configure
Anmerkung

Das Skript debian/configure unterscheidet sich von dem Skript src/configure!

Das debian/configure Skript akzeptiert verschiedene Argumente, abhängig von der Plattform, auf der/für die Sie bauen, siehe den debian/configure Argumente Abschnitt. Ohne weitere Angaben ist er für die Variante von LinuxCNC im user space ("uspace") voreingestellt, einen preempt_rt Kernel erwartend um die Latenzen zu minimieren.

Sobald die Debian-Paket-Skripte und Meta-Daten konfiguriert sind, bauen Sie das Paket, indem Sie dpkg-buildpackage ausführen:

$ dpkg-buildpackage -b -uc
Anmerkung

dpkg-buildpackage muss aus der Wurzel (engl. root) des Verzeichnisses mit dem Quellcode heraus gestartet werden, dass Sie möglicherweise linuxcnc-source-dir genannt haben, nicht aus linuxcnc-source-dir/debian heraus.
dpkg-buildpackage akzeptiert ein optionales Argument ``-j``N (wobei N eine Zahl ist). Dies ermöglicht es, mehrere jobs gleichzeitig auszuführen.

4.2.1. LinuxCNCs Argumente für debian/configure

Der LinuxCNC-Quellbaum hat ein debian-Verzeichnis mit allen Informationen darüber, wie das Debian-Paket gebaut werden soll, aber einige wesentliche Dateien innerhalb werden nur als Vorlagen verteilt. Das debian/configure-Script bereitet die eigentlichen Dateien für die regulären Debian-Verpackungsprogramme vor und muss daher auch vor dpkg-checkbuilddeps oder dpkg-buildpackage ausgeführt worden sein.

Das `debian/configure`Skript erwartet ein einziges Argument, das die Echtzeit- oder Nicht-Echtzeit-Plattform angibt, für die gebaut werden soll. Die normalen Werte für dieses Argument sind:

no-docs

Erstellen der Dokumentation überspringen.

uspace

Konfigurieren Sie das Debian-Paket für Preempt-RT-Echtzeit oder für Nicht-Echtzeit (diese beiden sind kompatibel).

noauto
rtai
xenomai

Normalerweise wird die Liste der RTOS, die uspace Echtzeit unterstützen soll, automatisch erkannt. Wenn Sie möchten, können Sie jedoch eine oder mehrere dieser Optionen nach uspace angeben, um die Unterstützung für diese RTOS zu aktivieren. Um die automatische Erkennung zu deaktivieren, geben Sie noauto an.

Wenn Sie nur die traditionelle RTAI "Kernel-Modul" Echtzeit wollen, verwenden Sie stattdessen -r oder $KERNEL_VERSION.

rtai=<package name>

Wenn das Entwicklungspaket für RTAI, lxrt, nicht mit "rtai-modules" beginnt, oder wenn das erste von apt-cache search aufgelistete Paket nicht das gewünschte ist, geben Sie den Paketnamen explizit an.

-r

Konfigurieren Sie das Debian-Paket für den aktuell laufenden RTAI-Kernel. Sie müssen einen RTAI-Kernel auf Ihrer Build-Maschine laufen haben, damit dies funktioniert!

$KERNEL_VERSION

Konfigurieren Sie das Debian-Paket für die angegebene RTAI-Kernel-Version (zum Beispiel "3.4.9-rtai-686-pae"). Das passende Kernel-Headers-Debian-Paket muss auf Ihrer Build-Maschine installiert sein, zum Beispiel "linux-headers-3.4.9-rtai-686-pae"). Beachten Sie, dass Sie LinuxCNC in dieser Konfiguration erstellen können, aber wenn Ihr Rechner nicht auch mit dem passenden RTAI-Kernel läuft, können Sie LinuxCNC nicht ausführen, auch die Test-Suite nicht.

4.2.2. Erfüllen von Build-Abhängigkeiten

Auf Debian-basierenden Plattformen bieten wir Paketierungs-Metadaten, die wissen, welche externen Softwarepakete installiert werden müssen, um LinuxCNC zu bauen. Dies wird Build-Abhängigkeiten von LinuxCNC genannt, d.h. heißt solche Pakete, die installiert sein müssen, damit * das Bauen wurde erfolgreich beendet und * der Vorgang kann identisch reproduziert werden.

Sie können diese Meta-Daten verwenden, um die benötigten Pakete aufzulisten, die aus Ihrem Build-System fehlt. Gehen Sie zunächst zum Quellbaum von LinuxCNC und starten Sie seine Standard-Selbstkonfiguration, wenn nicht bereits ausgeführt:

$ cd linuxcnc-dev
$ ./debian/configure

Dies bereitet die Datei debian/control vor, die Listen von zu erstellenden Debian-Paketen enthält mit den Angaben von weiteren Paketen, die zur Laufzeit von LinuxCNC benötigt werden und für unseren Zweck auch eine Liste für die Pakete, die für die Kompilierung von LinuxCNC benötigt werden (engl. Build-Dependencies).

Der einfachste Weg, um alle Build-Dependencies zu installieren, ist es sie auszuführen (aus demselben Verzeichnis):

sudo apt-get build-dep .

dies wird all diejenigen erforderlichen Abhängigkeiten installieren, die noch nicht installiert sind, aber verfügbar. Der . ist Teil der Befehlszeile, d.h. eine Anweisung, die Abhängigkeiten für den gegebenen Quellbaum holen, nicht für die Abhängigkeiten eines anderen Pakets. Dies schließt die Installation von für das Bauen benötigter Pakete ab.

Der Rest dieses Abschnitts beschreibt einen halbmanuellen Ansatz. Die Liste der Abhängigkeiten in debian/control ist lang und es ist mühsam, den aktuellen Zustand der Installation mit den bereits installierten Paketen mit dieser Liste zu vergleichen. Debian-Systeme bieten ein Programm namens dpkg-checkbuilddeps, das die Paket-Metadaten analysiert und die als Build-Abhängigkeiten aufgelisteten Pakete mit der Liste der installierten Pakete vergleicht und Ihnen sagt, was fehlt.

Installieren Sie zuerst das Programm dpkg-checkbuilddeps, indem Sie es ausführen:

$ sudo apt-get install dpkg-dev

Dies erzeugt die Datei debian/control in einem benutzerlesbaren yaml-Format, das die Build-Abhängigkeiten nahe dem Dateianfang listet. Sie können diese Metadaten verwenden, um die benötigten Pakete, die von Ihrem Build-System fehlt, leicht aufzulisten. Sie können sich entscheiden, diese Dateien manuell zu überprüfen, wenn Sie ein gutes Verständnis haben, was bereits installiert ist.

Alternativ stellen Debian-Systeme ein Programm namens dpkg-checkbuilddeps zur Verfügung, das die Paket-Metadaten herausliest, die als Build-Abhängigkeiten aufgeführten Pakete gegen die Liste der installierten Pakete vergleicht und Ihnen sagt was fehlt. Auch dpkg-buildpackage würde Sie darüber informieren, was fehlt, und wäre ebenso nutzbar. Es berichtet jedoch fehlende Build-Deps erst nachdem von Patches aus dem Order debian/patches bereits automatisch eingepflegt wurden (falls vorhanden). Wenn Sie neu zu Linux und git Version Management sind, kann ein sauberer Start bevorzugt sein, um Komplikationen zu vermeiden.

Das Helfer-Werkzeug dpkg-checkbuilddeps (auch aus dem dpkg-dev Paket, das installiert wurde als Abhängigkeit des virtuellen Pakets build-essential) kann gebeten werden, seine Arbeit zu tun (beachten Sie, dass es aus dem Verzeichnis linuxcnc-source-dir ausgeführt werden muss, nicht aus linuxcnc-source-dir/debian):

$ dpkg-checkbuilddeps

Es wird eine Liste von Paketen ausgegeben, die erforderlich sind, um LinuxCNC auf Ihrem System zu bauen, die aber noch nicht installiert sind. Sie können nun fehlende build-dependencies installieren

händisch

Installieren Sie sie alle mit sudo apt-get install, gefolgt von den Paketnamen. Sie können dpkg-checkbuilddeps jederzeit wieder ausführen, um fehlende Pakete aufzulisten, was keinen Einfluss auf den Quellbaum hat.

automatisiert

Ausführen von sudo apt build-dep ..

Wenn Sie Zweifel daran haben, was ein bestimmtes Paket einer Build-Dep zur Verfügung stellt, überprüfen Sie die Beschreibung des Pakets mit apt-cache show Paketname.

4.2.3. Optionen für dpkg-buildpackage

Um ein typisches Debian-Paket zu erstellen, würden Sie dpkg-buildpackage ohne Argumente ausführen. Wie oben vorgestellt, bietet der Befehl zwei zusätzliche Optionen an. Wie für alle guten Linux-Tools bietet die "man page" alle Details mit man dpkg-buildpackage.

-uc

Anweisung, die resultierenden Pakete nicht digital zu signieren. Sie möchten Ihre Pakete nur mit einem GPG-Schlüssel von Ihnen unterschreiben, wenn Sie sie an andere verteilen wollten. Ist diese Option nicht gesetzt und scheitert dann der Versuch, das Paket zu unterzeichnen, so würde dies die .deb-Datei jedoch nicht beeinflussen.

-b

Kompiliert nur die architekturabhängigen Pakete (wie die linuxcnc Binaries und GUIs). Dies ist sehr hilfreich, um den Aufwand für hardware-unabhängige Teile zu vermeiden. Für LinuxCNC ist dies die Dokumentation und diese ist eh bereits online verfügbar.

Wenn Sie in Schwierigkeiten bei der Paket-Erstellung kommen sollten, so kann das LinuxCNC Forum möglicherweise online weiterhelfen.

Noch in Entwicklung ist die Unterstützung der DEB_BUILD_OPTIONS-Umgebungsvariable. Setzen Sie diese auf

nodocs

um das Bauen der Dokumentation zu überspringen, verwenden Sie stattdessen vorzugsweise das -B-Flag von dpkg-buildpackage.

nocheck

um Selbsttests des LinuxCNC Build-Prozesses zu überspringen. Dies spart Zeit und senkt die Nachfrage nach einigen Softwarepaketen, die für Ihr System, d.h. insbesondere das Paket xvfb, nicht verfügbar sein müssen. Sie sollten diese Option nicht setzen, um ein zusätzliches Vertrauen darin zu erlangen, dass Ihr Eigenbau so funktioniert wie erwartet, sofern Sie nicht in rein technische Schwierigkeiten mit den für die Tests spezifischen Software-Abhängigkeiten geraten.

Eine Umgebungsvariable kann zusammen mit der Ausführung des Befehls auf der Kommandozeile gesetzt werden, z.B.

DEB_BUILD_OPTIONS=nocheck dpkg-buildpackage -uc -B

würde alle in diesem Abschnitt verwendeten Optionen kombinieren.

4.2.4. Installieren selbst-gebauter Debian-Pakete

Ein Debian-Paket kann durch dessen .deb-Erweiterung im Dateinamen erkannt werden. Das Tool, das es installiert heißt dpkg und ist Teil jeder Debian-Installation. Die .deb-Dateien, die von dpkg-buildpackage erstellt wurden, finden sich im Verzeichnis über dem linuxcnc-source-dir, d.h. in ... Um zu sehen, welche Dateien in einem Paket bereitgestellt werden, führen Sie aus

dpkg -c ../linuxcnc-uspace*.deb

Die Version von LinuxCNC wird Teil des Dateinamens sein an der Stelle des Sternchens. Möglicherweise werde zu viele Dateien aufgelistet, um auf Ihrem Bildschirm passen. Wenn Sie nicht in Ihrem Terminal scrollen können, dann fügen Sie | more zu diesem Befehl hinzu, um die Ausgabe durch einen sogenannten "pager" zu lenken. Der ist zu verlassen mit "q".

Um das Paket zu installieren, führen Sie aus

sudo dpkg -i ../linuxcnc*.deb

5. Einrichten der Umgebung

Dieser Abschnitt beschreibt die speziellen Schritte, die benötigt werden, um eine Maschine einzurichten, um die LinuxCNC-Programme auszuführen, einschließlich der Tests.

5.1. Erhöhen Sie das Limit für den gesperrten Speicher

LinuxCNC versucht, seine Echtzeit-Latenz zu verbessern, indem es den verwendeten Speicher im RAM sperrt. Es tut dies, um zu verhindern, dass das Betriebssystem von den RAM LinuxCNC auf die Festplatte auslagert (slang: swap), was sich sehr stark negativ auf die Latenz auswirken würde. Normalerweise wird das Sperren des Speichers in RAM ungern gesehen, und das Betriebssystem legt eine strenge Grenze fest, wie viel Speicher ein Benutzer gesperrt haben darf.

Bei Verwendung der Preempt-RT-Echtzeitplattform läuft LinuxCNC mit genügend Privilegien, um seine Speichersperrgrenze selbst zu erhöhen. Bei Verwendung der RTAI-Echtzeit-Plattform hat es nicht genug Privilegien, und der Anwender muss die Speichersperre Grenze zu erhöhen.

Wenn LinuxCNC beim Start folgende Meldung zeigt, ist das Problem die für Ihre System konfigurierte Grenze des gesperrten Speichers:

RTAPI: ERROR: failed to map shmem
RTAPI: Locked memory limit is 32KiB, recommended at least 20480KiB.

Um dieses Problem zu beheben, fügen Sie eine Datei namens /etc/security/limits.d/linuxcnc.conf (als root) mit Ihrem bevorzugten Texteditor hinzu (z.B. sudo gedit /etc/security/limits.d/linuxcnc.conf). Die Datei sollte die folgende Zeile enthalten:

* - memlock 20480

Melden Sie sich ab und wieder an, damit die Änderungen wirksam werden. Überprüfen Sie mit dem folgenden Befehl, ob die Speichersperrgrenze angehoben wurde:

$ ulimit -l

6. Kompilieren (bauen) für Gentoo

Bauen auf Gentoo ist möglich, aber nicht unterstützt. Achten Sie darauf, dass Sie ein Desktop-Profil ausführen. Dieses Projekt verwendet das Tk Widget Set, Asciidoc und hat einige andere Abhängigkeiten. Sie sollten als root installiert werden:

~ # euse -E tk imagequant
~ # emerge -uDNa world
~ # emerge -a dev-libs/libmodbus dev-lang/tk dev-tcltk/bwidget dev-tcltk/tclx
~ # emerge -a dev-python/pygobject dev-python/pyopengl dev-python/numpy
~ # emerge -a app-text/asciidoc app-shells/bash-completion

Sie können wieder zurück zu einem normalen Anwenderfür den überwiegenden restlichen Teil der Installation wechseln. Als dieser Anwender erstellen Sie eine virtuelle Umgebung für pip, dann installieren Sie die pip Pakete wie folgt:

~/src $ python -m venv   --system-site-packages ~/src/venv
~/src $ . ~/src/venv/bin/activate
(venv) ~/src $ pip install yapps2
(venv) ~/src $

Dann können Sie regulär weitermachen:

(venv) ~/src $ git clone https://github.com/LinuxCNC/linuxcnc.git
(venv) ~/src $ cd linuxcnc
(venv) ~/src $ cd src
(venv) ~/src $ ./autogen.sh
(venv) ~/src $ ./configure --enable-non-distributable=yes
(venv) ~/src $ make

Es gibt keine Notwendigkeit zur Ausführung von "make suid", nur stellen Sie sicher, dass Ihr UNIX-Account in der "dialout" Gruppe ist. Um linuxcnc zu starten, müssen Sie in der Python Virtual Environment sein und die linuxcnc Umgebung einrichten:

~ $ . ~/src/venv/bin/activate
(venv) ~ $ . ~/src/linuxcnc/scripts/rip-environment
(venv) ~ $ ~/src/linuxcnc $ scripts/linuxcnc

7. Optionen zum Auschecken des Git-Repos

Die Schnellstart Anleitung am Anfang dieses Dokuments klont unser Git-Repository auf https://github.com/LinuxCNC/linuxcnc.git. Dies ist der schnellste und einfachste Weg um loszulegen. Es gibt jedoch auch noch andere Optionen, die Sie in Betracht ziehen sollten.

7.1. Forken Sie uns auf GitHub

Das LinuxCNC Projekt git repo ist auf https://github.com/LinuxCNC/linuxcnc. GitJub ist ein beliebter git Hosting-Service und Code-Sharing-Website. Sie können ganz einfach (und kostenlos) einen Fork (eine zweite Instanz mit einer Kopie, die Sie selber kontrollieren) unseres LinuxCNC Git-Repository’s bei Github erstellen. Diesen Fork können Sie verwenden, um Ihre Änderungen zu verfolgen und zu veröffentlichen, Kommentare zu Ihren Änderungen zu erhalten und Patches von der Community zu empfangen.

Nachdem Sie Ihren eigenen GitHub-Fork von LinuxCNC erstellt haben, klonen Sie ihn auf Ihren Entwicklungsrechner und fahren Sie wie gewohnt mit den von Ihnen gwünschten Änderungen (gerne auch "hacking" genannt) fort.

Wir vom LinuxCNC-Projekt hoffen, dass Sie Ihre Änderungen mit uns teilen werden, damit die Gemeinschaft von Ihrer Arbeit profitieren kann. GitHub macht dieses Teilen sehr einfach: Nachdem Sie Ihre Änderungen aufpoliert und in Ihren GitHub-Fork gepusht haben, schicken Sie uns einen Pull Request.